Import fplll_5.3.1.orig.tar.gz
authorJulien Puydt <jpuydt@debian.org>
Mon, 23 Dec 2019 11:00:48 +0000 (11:00 +0000)
committerJulien Puydt <jpuydt@debian.org>
Mon, 23 Dec 2019 11:00:48 +0000 (11:00 +0000)
[dgit import orig fplll_5.3.1.orig.tar.gz]

179 files changed:
.check-m4.sh [new file with mode: 0644]
.clang-format [new file with mode: 0644]
.gitignore [new file with mode: 0644]
.travis-check-style.sh [new file with mode: 0755]
.travis.yml [new file with mode: 0644]
CONTRIBUTING.md [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
Doxyfile [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
NEWS [new file with mode: 0644]
README.md [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
codecov.yml [new file with mode: 0644]
configure.ac [new file with mode: 0644]
doc/templates/customdoxygen.css [new file with mode: 0644]
doc/templates/doxy-boot.js [new file with mode: 0644]
doc/templates/footer.html [new file with mode: 0644]
doc/templates/header.html [new file with mode: 0644]
doc/templates/jquery.smartmenus.js [new file with mode: 0755]
fplll.pc.in [new file with mode: 0644]
fplll/Makefile.am [new file with mode: 0755]
fplll/ballvol.const [new file with mode: 0644]
fplll/bkz.cpp [new file with mode: 0644]
fplll/bkz.h [new file with mode: 0644]
fplll/bkz_param.cpp [new file with mode: 0644]
fplll/bkz_param.h [new file with mode: 0644]
fplll/defs.h [new file with mode: 0644]
fplll/enum-parallel/enumeration.h [new file with mode: 0644]
fplll/enum-parallel/enumlib.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib.h [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.100.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.110.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.120.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.130.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.140.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.150.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.160.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.20.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.30.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.40.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.50.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.60.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.70.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.80.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.90.cpp [new file with mode: 0644]
fplll/enum-parallel/enumlib_dim.cpp [new file with mode: 0644]
fplll/enum-parallel/fplll_types.h [new file with mode: 0644]
fplll/enum/enumerate.cpp [new file with mode: 0644]
fplll/enum/enumerate.h [new file with mode: 0644]
fplll/enum/enumerate_base.cpp [new file with mode: 0644]
fplll/enum/enumerate_base.h [new file with mode: 0644]
fplll/enum/enumerate_ext.cpp [new file with mode: 0644]
fplll/enum/enumerate_ext.h [new file with mode: 0644]
fplll/enum/evaluator.cpp [new file with mode: 0644]
fplll/enum/evaluator.h [new file with mode: 0644]
fplll/enum/topenum.cpp [new file with mode: 0644]
fplll/enum/topenum.h [new file with mode: 0644]
fplll/factorial.const [new file with mode: 0644]
fplll/fplll.cpp [new file with mode: 0644]
fplll/fplll.h [new file with mode: 0644]
fplll/fplll_config.h.in [new file with mode: 0644]
fplll/gso.cpp [new file with mode: 0644]
fplll/gso.h [new file with mode: 0644]
fplll/gso_gram.cpp [new file with mode: 0644]
fplll/gso_gram.h [new file with mode: 0644]
fplll/gso_interface.cpp [new file with mode: 0644]
fplll/gso_interface.h [new file with mode: 0644]
fplll/hlll.cpp [new file with mode: 0644]
fplll/hlll.h [new file with mode: 0644]
fplll/householder.cpp [new file with mode: 0644]
fplll/householder.h [new file with mode: 0644]
fplll/io/json.hpp [new file with mode: 0644]
fplll/io/thread_pool.hpp [new file with mode: 0644]
fplll/latticegen.cpp [new file with mode: 0644]
fplll/lll.cpp [new file with mode: 0644]
fplll/lll.h [new file with mode: 0644]
fplll/llldiff.cpp [new file with mode: 0644]
fplll/main.cpp [new file with mode: 0644]
fplll/main.h [new file with mode: 0644]
fplll/nr/dpe.h [new file with mode: 0644]
fplll/nr/matrix.cpp [new file with mode: 0644]
fplll/nr/matrix.h [new file with mode: 0644]
fplll/nr/nr.h [new file with mode: 0644]
fplll/nr/nr_FP.inl [new file with mode: 0644]
fplll/nr/nr_FP_d.inl [new file with mode: 0644]
fplll/nr/nr_FP_dd.inl [new file with mode: 0644]
fplll/nr/nr_FP_dpe.inl [new file with mode: 0644]
fplll/nr/nr_FP_ld.inl [new file with mode: 0644]
fplll/nr/nr_FP_misc.inl [new file with mode: 0644]
fplll/nr/nr_FP_mpfr.inl [new file with mode: 0644]
fplll/nr/nr_FP_qd.inl [new file with mode: 0644]
fplll/nr/nr_Z.inl [new file with mode: 0644]
fplll/nr/nr_Z_d.inl [new file with mode: 0644]
fplll/nr/nr_Z_l.inl [new file with mode: 0644]
fplll/nr/nr_Z_misc.inl [new file with mode: 0644]
fplll/nr/nr_Z_mpz.inl [new file with mode: 0644]
fplll/nr/nr_rand.inl [new file with mode: 0644]
fplll/nr/numvect.h [new file with mode: 0644]
fplll/pruner/pruner.cpp [new file with mode: 0644]
fplll/pruner/pruner.h [new file with mode: 0644]
fplll/pruner/pruner_cost.cpp [new file with mode: 0644]
fplll/pruner/pruner_optimize.cpp [new file with mode: 0644]
fplll/pruner/pruner_optimize_tc.cpp [new file with mode: 0644]
fplll/pruner/pruner_optimize_tp.cpp [new file with mode: 0644]
fplll/pruner/pruner_prob.cpp [new file with mode: 0644]
fplll/pruner/pruner_simplex.h [new file with mode: 0644]
fplll/pruner/pruner_util.cpp [new file with mode: 0644]
fplll/sieve/sampler_basic.cpp [new file with mode: 0644]
fplll/sieve/sampler_basic.h [new file with mode: 0644]
fplll/sieve/sampler_main.cpp [new file with mode: 0644]
fplll/sieve/sieve_common.h [new file with mode: 0644]
fplll/sieve/sieve_gauss.cpp [new file with mode: 0644]
fplll/sieve/sieve_gauss.h [new file with mode: 0644]
fplll/sieve/sieve_gauss_2sieve.cpp [new file with mode: 0644]
fplll/sieve/sieve_gauss_3sieve.cpp [new file with mode: 0644]
fplll/sieve/sieve_gauss_4sieve.cpp [new file with mode: 0644]
fplll/sieve/sieve_gauss_str.h [new file with mode: 0644]
fplll/sieve/sieve_main.cpp [new file with mode: 0644]
fplll/sieve/sieve_main.h [new file with mode: 0644]
fplll/svpcvp.cpp [new file with mode: 0644]
fplll/svpcvp.h [new file with mode: 0644]
fplll/threadpool.cpp [new file with mode: 0644]
fplll/threadpool.h [new file with mode: 0644]
fplll/util.cpp [new file with mode: 0644]
fplll/util.h [new file with mode: 0644]
fplll/wrapper.cpp [new file with mode: 0644]
fplll/wrapper.h [new file with mode: 0644]
m4/ax_cxx_compile_stdcxx.m4 [new file with mode: 0644]
m4/ax_pthread.m4 [new file with mode: 0644]
strategies/default.json [new file with mode: 0644]
tests/Makefile.am [new file with mode: 0755]
tests/lattices/dim55_in [new file with mode: 0644]
tests/lattices/example2_in [new file with mode: 0755]
tests/lattices/example3_in [new file with mode: 0644]
tests/lattices/example_cvp_in_lattice [new file with mode: 0644]
tests/lattices/example_cvp_in_lattice2 [new file with mode: 0644]
tests/lattices/example_cvp_in_lattice3 [new file with mode: 0644]
tests/lattices/example_cvp_in_lattice4 [new file with mode: 0644]
tests/lattices/example_cvp_in_lattice5 [new file with mode: 0644]
tests/lattices/example_cvp_in_target [new file with mode: 0644]
tests/lattices/example_cvp_in_target2 [new file with mode: 0644]
tests/lattices/example_cvp_in_target3 [new file with mode: 0644]
tests/lattices/example_cvp_in_target4 [new file with mode: 0644]
tests/lattices/example_cvp_in_target5 [new file with mode: 0644]
tests/lattices/example_cvp_out [new file with mode: 0644]
tests/lattices/example_cvp_out2 [new file with mode: 0644]
tests/lattices/example_cvp_out3 [new file with mode: 0644]
tests/lattices/example_cvp_out4 [new file with mode: 0644]
tests/lattices/example_cvp_out5 [new file with mode: 0644]
tests/lattices/example_dsvp_in [new file with mode: 0644]
tests/lattices/example_dsvp_out [new file with mode: 0644]
tests/lattices/example_in [new file with mode: 0644]
tests/lattices/example_out [new file with mode: 0644]
tests/lattices/example_svp_in [new file with mode: 0644]
tests/lattices/example_svp_out [new file with mode: 0644]
tests/lattices/grammatrix_dimension4 [new file with mode: 0644]
tests/lattices/grammatrix_dimension4_out [new file with mode: 0644]
tests/lattices/grammatrix_dimension7 [new file with mode: 0644]
tests/lattices/grammatrix_dimension7_out [new file with mode: 0644]
tests/lattices/stalling_93_53.txt [new file with mode: 0644]
tests/test_bkz.cpp [new file with mode: 0644]
tests/test_bkz_gram.cpp [new file with mode: 0644]
tests/test_cvp.cpp [new file with mode: 0644]
tests/test_enum.cpp [new file with mode: 0644]
tests/test_gso.cpp [new file with mode: 0644]
tests/test_hlll.cpp [new file with mode: 0644]
tests/test_lll.cpp [new file with mode: 0644]
tests/test_lll_gram.cpp [new file with mode: 0644]
tests/test_nr.cpp [new file with mode: 0644]
tests/test_pruner.cpp [new file with mode: 0644]
tests/test_sieve.cpp [new file with mode: 0644]
tests/test_svp.cpp [new file with mode: 0644]
tests/test_svp_gram.cpp [new file with mode: 0644]
tests/test_utils.h [new file with mode: 0644]
tools/plot_gso_dump.py [new file with mode: 0755]
tools/reformat.pl [new file with mode: 0755]
tools/reformat_magma.pl [new file with mode: 0755]

diff --git a/.check-m4.sh b/.check-m4.sh
new file mode 100644 (file)
index 0000000..ccead18
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+for f in m4/*.m4 ; do
+       oldserial=$(grep "^#serial" $f | grep -o "[0-9]*" | head -n1)
+       if [ -z $oldserial ]; then
+               continue
+       fi
+
+       echo "Checking for newer version of: $f"
+       if wget -t 1 -T 0.5 -O $f.tmp "https://raw.githubusercontent.com/autoconf-archive/autoconf-archive/master/$f" >/dev/null 2>/dev/null ; then
+               newserial=$(grep "^#serial" $f.tmp | grep -o "[0-9]*" | head -n1)
+               rm $f.tmp
+       else
+               echo "WGET error"
+               rm $f.tmp
+               continue
+       fi
+       if [ -z $newserial ]; then
+               echo "Error checking newer version"
+               continue
+       fi
+
+       if [ $oldserial -eq $newserial ]; then
+               echo "Current version is latest version"
+       else
+               echo "*** UPDATE AVAILABLE for $f: version $oldserial (current) => $newserial (latest) ***"
+       fi
+done
diff --git a/.clang-format b/.clang-format
new file mode 100644 (file)
index 0000000..b513b31
--- /dev/null
@@ -0,0 +1,65 @@
+---
+Language:        Cpp
+# BasedOnStyle:  LLVM
+AccessModifierOffset: -2
+AlignAfterOpenBracket: true
+AlignConsecutiveAssignments: true
+AlignEscapedNewlinesLeft: false
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AlwaysBreakAfterDefinitionReturnType: false
+AlwaysBreakTemplateDeclarations: false
+AlwaysBreakBeforeMultilineStrings: false
+BreakBeforeBinaryOperators: None
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BinPackParameters: true
+BinPackArguments: true
+ColumnLimit:     100
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+DerivePointerAlignment: false
+ExperimentalAutoDetectBinPacking: false
+IndentCaseLabels: false
+IndentWrappedFunctionNames: false
+IndentFunctionDeclarationAfterType: false
+MaxEmptyLinesToKeep: 1
+KeepEmptyLinesAtTheStartOfBlocks: true
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakString: 1000
+PenaltyBreakFirstLessLess: 120
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Right
+SpacesBeforeTrailingComments: 2
+Standard:        Cpp11
+IndentWidth:     2
+TabWidth:        8
+UseTab:          Never
+BreakBeforeBraces: Allman
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+SpacesInAngles:  false
+SpaceInEmptyParentheses: false
+SpacesInCStyleCastParentheses: false
+SpaceAfterCStyleCast: false
+SpacesInContainerLiterals: true
+SpaceBeforeAssignmentOperators: true
+ContinuationIndentWidth: 4
+CommentPragmas:  '^ IWYU pragma:'
+ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+SpaceBeforeParens: ControlStatements
+DisableFormat:   false
+...
+
diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..2626243
--- /dev/null
@@ -0,0 +1,76 @@
+*.la
+*.lo
+*.trs
+.deps
+.libs
+Makefile
+Makefile.in
+.dirstamp
+.gitignore
+.clang-format
+config.log
+/.vagrant/
+/GPATH
+/GRTAGS
+/GSYMS
+/GTAGS
+/Vagrantfile
+config.h.in
+config.h.in~
+/fplll.pc
+/libfplll-*/
+/fplll/foo
+/fplll/fplll_config.h
+/fplll/llldiff
+/fplll/stamp-h2
+/fplll/*.o
+/fplll/enum/*.o
+/test-driver
+/tests/test_bkz
+/tests/test_lll
+/tests/test_svp
+/tests/*.o
+Makefile
+Makefile.in
+TAGS
+aclocal.m4
+autom4te.cache/
+compile
+config.guess
+config.h
+config.status
+config.sub
+configure
+depcomp
+install-sh
+libtool
+ltmain.sh
+missing
+python/cython_debug
+fplll/fplll
+fplll/fplll_dbg
+fplll/latticegen
+stamp-h1
+/m4/libtool.m4
+/m4/ltoptions.m4
+/m4/ltsugar.m4
+/m4/ltversion.m4
+/m4/lt~obsolete.m4
+/tests/test_nr
+/tests/test_pruner
+/compile_commands.json
+/.clang-tidy
+doc/html/
+/fplll/sieve/*.o
+/fplll/latsieve
+/tests/test_sieve
+/fplll-?.?.?/
+/tests/test_cvp
+/tests/test_gso
+/tests/test_lll_gram
+/tests/test_hlll
+/fplll/pruner/*.o
+/fplll/enum-parallel/*.o
+/tests/test_enum
+/tests/test_bkz_gram
+/tests/test_svp_gram
diff --git a/.travis-check-style.sh b/.travis-check-style.sh
new file mode 100755 (executable)
index 0000000..dbfa3a2
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+if [ "$CI" = "true" ] && [ "$TRAVIS_OS_NAME" = "osx" ]; then
+   echo "Skipping style check on OSX due to being unreliable.";
+   exit 0;
+fi
+
+if [ "$CI" = "true" ] && [ "$CLANGFORMAT" = "clang-format-3.9" ]; then
+   echo "Skipping style check when using clang-format-3.9.";
+   exit 0;
+fi
+
+
+make check-style
+if [[ $(git status -s) ]]; 
+then
+       git --no-pager diff
+       tput setaf 1;
+       echo "Code does not adhere to the project standards. Run \"make check-style\".";
+       exit 1;
+else 
+       tput setaf 2;
+       echo "Code adheres to the project standards.";
+       exit 0;
+fi;
diff --git a/.travis.yml b/.travis.yml
new file mode 100644 (file)
index 0000000..85c1212
--- /dev/null
@@ -0,0 +1,157 @@
+sudo: required
+dist: trusty
+language: cpp
+cache: ccache
+env:
+  global:
+  - MAKEFLAGS="-j 4"
+matrix:
+  include:
+  - stage: checkstyle
+    name: checkstyle
+    os: linux
+    env: COMPILER=g++-6 CLANGFORMAT=clang-format-6.0
+    addons:
+      apt:
+        sources:
+        - ubuntu-toolchain-r-test
+        packages:
+        - g++-6
+        - libgmp-dev
+        - libmpfr-dev
+        - libqd-dev
+    before_install:
+    - sudo add-apt-repository 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-6.0
+      main'
+    - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
+    - sudo apt-get update -qq
+    - sudo apt-get install -qq -y clang-format-6.0
+    script:
+    - echo "make check-style done"
+  - stage: compile
+    os: linux
+    compiler: gcc
+    env: COMPILER=g++-4.8 CLANGFORMAT=clang-format-3.9
+    addons:
+      apt:
+        packages:
+        - g++-4.8
+        - libgmp-dev
+        - libmpfr-dev
+        - libqd-dev
+    before_install:
+    - sudo add-apt-repository 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-3.9
+      main'
+    - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
+    - sudo apt-get update -qq
+    - sudo apt-get install -qq -y clang-format-3.9
+  - os: linux
+    compiler: gcc
+    env: COMPILER=g++-4.9 CLANGFORMAT=clang-format-6.0 CPPFLAGS="-DDEBUG"
+    addons:
+      apt:
+        sources:
+        - ubuntu-toolchain-r-test
+        packages:
+        - g++-4.9
+        - libgmp-dev
+        - libmpfr-dev
+        - libqd-dev
+    before_install:
+    - sudo add-apt-repository 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-6.0
+      main'
+    - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
+    - sudo apt-get update -qq
+    - sudo apt-get install -qq -y clang-format-6.0
+  - os: linux
+    compiler: gcc
+    env: COMPILER=g++-5 CLANGFORMAT=clang-format-6.0
+    addons:
+      apt:
+        sources:
+        - ubuntu-toolchain-r-test
+        packages:
+        - g++-5
+        - libgmp-dev
+        - libmpfr-dev
+        - libqd-dev
+    before_install:
+    - sudo add-apt-repository 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-6.0
+      main'
+    - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
+    - sudo apt-get update -qq
+    - sudo apt-get install -qq -y clang-format-6.0
+  - os: linux
+    compiler: gcc
+    env: COMPILER=g++-6 CLANGFORMAT=clang-format-6.0 CXXFLAGS="-O3 -ggdb -fprofile-arcs
+      -ftest-coverage"
+    addons:
+      apt:
+        sources:
+        - ubuntu-toolchain-r-test
+        packages:
+        - g++-6
+        - libgmp-dev
+        - libmpfr-dev
+        - libqd-dev
+    before_install:
+    - sudo add-apt-repository 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-6.0
+      main'
+    - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
+    - sudo apt-get update -qq
+    - sudo apt-get install -qq -y clang-format-6.0
+    script:
+    - make
+    - make check
+    - cd fplll && gcov --object-directory .libs *.cpp && cd ..
+    - make distcheck
+    after_success:
+    - bash <(curl -s https://codecov.io/bash)
+  - os: linux
+    compiler: clang
+    env: COMPILER=clang++ CLANGFORMAT=clang-format-3.9
+    addons:
+      apt:
+        packages:
+        - libgmp-dev
+        - libmpfr-dev
+        - libqd-dev
+    before_install:
+    - sudo add-apt-repository 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-3.9
+      main'
+    - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
+    - sudo apt-get update -qq
+    - sudo apt-get install -qq -y clang-format-3.9
+  - os: osx
+    compiler: clang
+    env: COMPILER=clang++ CLANGFORMAT=clang-format
+    before_install:
+    - brew update
+    - brew reinstall gmp
+    - brew install autoconf libtool clang-format ccache
+    - export PATH="/usr/local/opt/ccache/libexec:$PATH"
+install:
+- export CXX="$COMPILER"
+- "$CXX --version"
+before_script:
+- "./autogen.sh"
+- "./configure --disable-static --with-max-enumeration-dimension=64 --with-max-parallel-enum-dim=20"
+- bash .travis-check-style.sh
+script:
+- make
+- make check
+- make distcheck
+notifications:
+  on_success: change
+  on_failure: always
+deploy:
+  provider: releases
+  file_glob: true
+  skip_cleanup: true
+  api_key:
+    secure: fKFa3ALGSIWZMOerK2ruJpbaFcITuWAWVYSL1Tn9LphUvOiTJIrUztaQw19372U8Der+dVhgVtmwBSWuwxYPmHUFKfsRPuLnizxwD7sRDUkZ6RgHhybRJQcl/y9e93kqxkcwzxHGvx3GmZfL24acLxl4elDHWe84YbfXvkI6N+I=
+  file: fplll-*.tar.gz
+  on:
+    repo: fplll/fplll
+    tags: true
+    all_branches: true
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644 (file)
index 0000000..14caa3e
--- /dev/null
@@ -0,0 +1,243 @@
+# Contributing to fplll #
+
+fplll welcomes contributions. We encourage users to fix bugs, improve the documentation, write tests and to enhance the code. We encourage researchers to contribute implementations of their algorithms to fplll. In the following we are trying to give some guidance on how to contribute effectively.
+
+## Communication ##
+
+Communication in the fplll project happens mainly on [GitHub](https://github.com/fplll/fplll/issues) and on our [mailing list](https://groups.google.com/forum/#!forum/fplll-devel).
+
+## Setup ##
+
+### Fork on GitHub ##
+
+Login/signup on GitHub and fork fplll from [https://github.com/fplll/fplll](https://github.com/fplll/fplll).
+
+### Clone your fork locally
+
+Now clone your git repo where my-github-name is your account name on GitHub:
+
+    $ git clone git@github.com:my-github-name/fplll.git
+
+Then run
+
+    $ ./autogen.sh
+    $ ./configure
+    $ make
+    $ make check
+
+as usual.
+
+Note that the verbosity of ``make`` is set to low by default. To enable verbose output by default, use ``./configure --disable-silent-rules``. The verbosity can also be overridden at run time: ``make V=1`` will produce verbose output.
+
+## Reporting Bugs ##
+
+Bug should be filed at [https://github.com/fplll/fplll/issues](https://github.com/fplll/fplll/issues). Alternatively, feel free to contact  [https://groups.google.com/forum/#!forum/fplll-devel](https://groups.google.com/forum/#!forum/fplll-devel). The former method is definitely preferred though.
+
+## Setting up topic branches and generating pull requests
+
+While it's handy to provide useful code snippets in an issue, it is better for to submit pull requests.
+
+In Git it is best to isolate each topic or feature into a "topic branch". While individual commits allow you control over how small individual changes are made to the code, branches are a great way to group a set of commits all related to one feature together, or to isolate different efforts when you might be working on multiple topics at the same time.
+
+While it takes some experience to get the right feel about how to break up commits, a topic branch should be limited in scope to a single ``issue`` as submitted to an issue tracker.
+
+Also since GitHub pegs and syncs a pull request to a specific branch, it is the **only** way that you can submit more than one fix at a time. If you submit a pull from your ``master`` branch, you can't make any more commits to your ``master`` branch without those getting added to the pull.
+
+To create a topic branch, its easiest to use the convenient ``-b`` argument to ``git checkout``
+
+    $ git checkout -b fix-broken-thing
+    Switched to a new branch 'fix-broken-thing'
+
+You should use a verbose enough name for your branch so it is clear what it is about. Now you can commit your changes and regularly merge in the upstream develop as described below.
+
+When you are ready to generate a pull request, either for preliminary review, or for consideration of merging into the project you must first push your local topic branch back up to GitHub
+
+    git push origin fix-broken-thing
+
+Now when you go to your fork on GitHub, you will see this branch listed under the "Source" tab where it says "Switch Branches". Go ahead and select your topic branch from this list, and then click the "Pull request" button.
+
+Here you can add a comment about your branch. If this in response to a submitted issue, it is good to put a link to that issue in this initial comment. The maintainers will be notified of your pull request and it will be reviewed (see below for best practices). Note that you can continue to add commits to your topic branch (and push them up to GitHub) either if you see something that needs changing, or in response to a reviewer's comments. If a reviewer asks for changes, you do not need to close the pull and reissue it after making changes. Just make the changes locally, push them to GitHub, then add a comment to the discussion section of the pull request.
+
+## Pull upstream changes into your fork regularly
+
+It is important that you pull upstream changes from master into your fork on a regular basis. Nothing is worse than putting in a days of hard work into a pull request only to have it rejected because it has diverged too far from master. 
+
+To pull in upstream changes::
+
+    $ git remote add upstream https://github.com/fplll/fplll.git
+    $ git fetch upstream master
+
+Check the log to be sure that you actually want the changes, before merging::
+
+    $ git log upstream/master
+
+Then merge the changes that you fetched::
+
+    $ git merge upstream/master
+
+For more info, see http://help.github.com/fork-a-repo/
+
+## How to get your pull request accepted
+
+We want your submission. But we also want to provide a stable experience for our users. In the following, we give some guidelines for contributing.
+
+### Run the tests!
+
+Before you submit a pull request, please run tests:
+
+    $ make check
+
+These checks are also run on [Travis-CI](https://travis-ci.org/fplll/fplll) automatically for every pull request. Nothing failing tests will be accepted.
+
+### If you add code please add tests
+
+Code that isn’t tested is broken.
+
+Also, keep your tests simple. Complex tests end up requiring their own tests. We would rather see duplicated assertions across test methods then cunning utility methods that magically determine which assertions are needed at a particular stage. Remember: Explicit is better than implicit.
+
+Finally, the nature of fplll means that sometimes it is hard to properly test the behaviour of a change quickly. Running BKZ for several minutes takes way too long for a test. In this case, we should at least test that a particular piece of code compiles and runs.
+
+### Keep your pull requests limited to a single issue
+
+Pull requests should be as small/atomic as possible.
+
+### Coding Conventions
+
+fplll is written in [C++11](https://en.wikipedia.org/wiki/C%2B%2B11) and we try to make use of its modern features to make the library readable.
+
+Please keep your code as clean and straightforward as possible. Code is written for the consumption by compilers and for the consumption by human beings. By making code clear and easy to understand, others can build on it and fix issues should they arise.
+
+Our naming convention is close to Python's [naming convention](https://www.python.org/dev/peps/pep-0008/). Classes are in ``CamelCase``. Functions, methods, parameters and local variables in ``lower_case`` . Curly braces go on the next line and we [prefer explicit curly braces](https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-bug-explained-plus-an-unofficial-patch/), e.g.
+
+```c++
+if (foo)
+{
+  do_something_good();
+}
+```
+    
+instead of:
+
+```c++
+if (foo)
+  do_something_bad();
+```
+
+Furthermore, the pixel shortage is over. We want to see:
+
+- `package` instead of `pkg`
+- `grid` instead of `g`
+- `my_function_that_does_things` instead of `mftdt`
+
+The following [clang-format](http://clang.llvm.org/docs/ClangFormat.html) configuration file describes our coding convention. Clang-format is both a library and a stand-alone tool aiming at automatically reformatting C++ sources files. 
+
+```yaml
+---
+Language:        Cpp
+# BasedOnStyle:  LLVM
+AccessModifierOffset: -2
+AlignAfterOpenBracket: true
+AlignConsecutiveAssignments: true
+AlignEscapedNewlinesLeft: false
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AlwaysBreakAfterDefinitionReturnType: false
+AlwaysBreakTemplateDeclarations: false
+AlwaysBreakBeforeMultilineStrings: false
+BreakBeforeBinaryOperators: None
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BinPackParameters: true
+BinPackArguments: true
+ColumnLimit:     100
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+DerivePointerAlignment: false
+ExperimentalAutoDetectBinPacking: false
+IndentCaseLabels: false
+IndentWrappedFunctionNames: false
+IndentFunctionDeclarationAfterType: false
+MaxEmptyLinesToKeep: 1
+KeepEmptyLinesAtTheStartOfBlocks: true
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakString: 1000
+PenaltyBreakFirstLessLess: 120
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Right
+SpacesBeforeTrailingComments: 2
+Standard:        Cpp11
+IndentWidth:     2
+TabWidth:        8
+UseTab:          Never
+BreakBeforeBraces: Allman
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+SpacesInAngles:  false
+SpaceInEmptyParentheses: false
+SpacesInCStyleCastParentheses: false
+SpaceAfterCStyleCast: false
+SpacesInContainerLiterals: true
+SpaceBeforeAssignmentOperators: true
+ContinuationIndentWidth: 4
+CommentPragmas:  '^ IWYU pragma:'
+ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+SpaceBeforeParens: ControlStatements
+DisableFormat:   false
+...
+```
+
+### Enforcement of the coding convention
+
+Starting from fplll 5.1.0, the coding convention is [enforced](https://github.com/fplll/fplll/pull/215) throughout the whole project. In particular, the code of every pull request has to strictly adhere to the coding convention, and the Travis build will error when it is not the case. Automatic formatting can (and should) be performed by the command
+
+```
+make check-style
+```
+
+and require clang-format to be installed.
+
+In order to improve readability, some situations might require manual formatting. Clang-format [includes a comment trigger](http://llvm.org/releases/6.0.0/tools/clang/docs/https://releases.llvm.org/6.0.0/tools/clang/docs/ClangFormatStyleOptions.html#disabling-formatting-on-a-piece-of-code) to _locally_ disable the formatting. The code between a comment `// clang-format off` or `/* clang-format off */` up to a comment `// clang-format on` or `/* clang-format on */` will not be formatted. 
+
+```
+int formatted_code;
+// clang-format off
+    void    unformatted_code  ;
+// clang-format on
+void formatted_code_again;
+```
+
+### Faster compilation
+
+By default, libtool builds everything twice, one for the static and one for the dynamic library, cf. https://stackoverflow.com/questions/572760/libtool-slowness-double-building. If you want to avoid this double compiling time you can run ./configure --disable-static which disables building the static library.
+
+### Attribution
+
+Please do not forget to add yourself as a contributor in [README.md](README.md) if you make a non-trivial contribution. Furthermore, you may want to claim copyright in the copyright headers of each file.
+
+## Documentation
+
+fplll uses [doxygen](http://www.stack.nl/~dimitri/doxygen/) with a [bootstrap theme](https://github.com/Velron/doxygen-bootstrapped) to generate API documentation. To produce API documentation run
+
+    $ doxygen Doxyfile
+
+Our documentation is served at [https://fplll.github.io/fplll/](https://fplll.github.io/fplll/) using [GitHub pages](https://pages.github.com). To update the documentation, check out the ``gh-pages`` branch and update the html files in there. Doxygen writes its outputs to ``doc/html``, you can arrange it that this directory holds the ``gh-pages`` branch of the fplll repository:
+
+    $ cd doc
+    $ git clone -b gh-pages git@github.com:<my-github-name>/fplll.git html
+    $ cd ..
+    
+Now, whenever you run ``doxygen`` it will write its outputs to a directory which holds the right branch. If you push it to your remote, you can then check it at [http://my-github-name.github.io/fplll](http://my-github-name.github.io/fplll).
+
+Before generating documentation with Doxygen to push to [https://fplll.github.io/fplll/](https://fplll.github.io/fplll/) please run ``make maintainer-clean`` in the fplll root directory. This removes ``config.h`` and ``fplll_config.h``, i.e. it prevents your local, machine-specific configuration to be pushed as part of the official API documentation. In any case, it is recommended to review the changes in the `gh-pages` branch before committing and pushing.
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..5ab7695
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..afc65f1
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1 @@
+See NEWS
\ No newline at end of file
diff --git a/Doxyfile b/Doxyfile
new file mode 100644 (file)
index 0000000..2256202
--- /dev/null
+++ b/Doxyfile
@@ -0,0 +1,2352 @@
+# Doxyfile 1.8.8
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "fplll"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         = 5.2.1
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "Lattice algorithms using floating-point arithmetic"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= NO
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            = doc/templates/DoxygenLayout.xml
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                = doc/templates fplll/nr/dpe.h fplll/io/json.hpp tools
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE = README.md
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# compiled with the --with-libclang option.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            = doc/templates/header.html
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            = doc/templates/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra stylesheet files is of importance (e.g. the last
+# stylesheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  = doc/templates/customdoxygen.css
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       = doc/templates/doxy-boot.js doc/templates/jquery.smartmenus.js
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = YES
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
+# for the replacement values of the other commands the user is refered to
+# HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+# Definitions (see http://autogen.sf.net) file that captures the structure of
+# the code including all documentation. Note that this feature is still
+# experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+# in the source code. If set to NO only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+# class index. If set to NO only the inherited external classes will be listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+# the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: YES.
+
+HAVE_DOT               = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = NO
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = NO
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = NO
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = NO
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = svg
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+PLANTUML_JAR_PATH      =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..7d1c323
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,365 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..631676d
--- /dev/null
@@ -0,0 +1,18 @@
+SUBDIRS            = fplll tests
+include_fpllldir   = $(includedir)/fplll
+EXTRA_DIST         = README.md tools/reformat.pl tools/reformat_magma.pl tools/plot_gso_dump.py strategies/default.json
+ACLOCAL_AMFLAGS    = -I m4
+
+CLEANFILES = *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
+
+pkgconfigdir       = $(libdir)/pkgconfig
+pkgconfig_DATA     = fplll.pc
+
+strategydir        = $(pkgdatadir)/strategies
+dist_strategy_DATA = strategies/default.json
+
+CLANGFORMAT       ?= clang-format
+.PHONY: check-style
+check-style:
+       -bash .check-m4.sh
+       $(CLANGFORMAT) -i --style=file fplll/*.{cpp,h} fplll/*/*.{cpp,h,inl} tests/*.cpp
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..6e07a4a
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,117 @@
+Changes in fplll-5.0:
+
+- switched to C++11
+- switched to more open development model on GitHub, cf. CONTRIBUTING.md
+- support for computing optimal pruning parameters for a given lattice
+  dimension/shape/radius
+- BKZ 2.0: recursive BKZ preprocessing, extreme pruning, gaussian
+  heuristic bound
+- precomputed BKZ (2.0) reduction strategies up to block size 90, cf.
+  https://github.com/fplll/strategizer
+- Self-Dual BKZ and Slide reduction
+- faster, recursive enumeration implementation
+- Gaussian lattice sieving
+- Python interface at https://github.com/fplll/fpylll
+- optional dumping Gram-Schmidt vectors during execution of algorithm
+- q-ary lattice generator
+- instructions on how to cite
+- optional support for doubledouble and quaddouble
+- pkg-config support
+- API documentation at https://fplll.github.io/fplll/
+- revised build system supporting parallel build
+- copyright headers
+- dropped fplllv3 compatibility layer
+- greatly increased test coverage, tests are run on every commit or
+  pull request
+- coding/naming convention
+- FP API improved to allow for more readable/natural code
+
+
+Changes in fplll-4.0.4:
+- compatibility for packages that still expect to build against 
+libfplll version 3.
+- updates of config.sub and config.guess 
+- better check that MPFR and GMP are installed
+- compilation issue with NaN's
+
+Changes in fplll-4.0.3:
+- Compiler issues with Cygwin
+
+Changes in fplll-4.0.2:
+- Changed formulation for the license, in README.html
+
+Main changes in fplll-4.0.1:
+- Compiler warnings about unused parameters fixed
+
+Main changes in fplll-4.0.0:
+- BKZ reduction, available with 'fplll -a bkz -b block_size'
+
+*******************************************************************
+Changes in fplll-3.1.3:
+- Fixed build process when DESTDIR is defined
+
+Changes in fplll-3.1.2:
+- Memory leak fixed in the wrapper.
+
+Main changes in fplll-3.1.1:
+- Some code is no longer included in the header files but is compiled in
+libfplll instead. The -lfplll option will now be required for apps which could
+be compiled without it.
+- 'make install' puts all header files but fplll.h in a subdirectory named fplll
+- New programming interface for the library (documented in README.html).
+- 'generate' renamed to 'latticegen'.
+- Removal of fplll_verbose. Use the '-v' option instead.
+- Minor bugs fixed in all versions of LLL.
+- More important bugs fixed in the SVP solver.
+- Optimization of the SVP solver.
+- By default, 'fplll -a svp' now gives the coordinates of a shortest vector in
+the _standard_ basis.
+
+*******************************************************************
+
+The main differences between fplll-2.1 and fplll-3.0 are the following:
+
+- short lattice vector enumeration algorithm (by Xavier Pujol).
+- GPL -> LGPLv2
+- no more need to specify the number of rows and columns in the input
+of the fplll binary.
+- new version of dpe.h [Patrick Pelissier and Paul Zimmermann]
+*******************************************************************
+
+The main differences between fplll-2.1 and fplll-2.0 are the following:
+
+- "configure/make/make install" packaging (thanks to Martin Albrecht)
+- few minor changes to make fplll portable to SAGE (thanks to Martin 
+Albrecht) 
+- conversion scripts between MAGMA and fplll formats.
+- a bug fixed in fast_early (discovered by Martin Albrecht)
+
+
+*******************************************************************
+
+fplll-2.0 is an improved version of fplll-1.3. Parts of it resemble
+Magma's LLL (Allan Steel, Damien Stehle) and/or NTL's LLL (Victor
+Shoup).
+
+The improvements from fplll-1.3 to fplll-2.0 were mostly performed
+by David Cade. Here is a brief summary of the changes:
+
+- the major algorithmic improvement is the so-called wrapper, which
+chooses for the user a guess of the right sequence of heuristic/proved
+variants to use, in order to finish as quick as possible, but in a
+reliable way.  
+
+- the early-reduction strategy of Allan Steel has been integrated. It
+consists in size-reducing vectors earlier than what would have been
+done in the standard LLL. This is not integrated into the wrapper yet. 
+
+- we switched from C to C++, to simplify our lives with the wrapper.
+It is extremely convenient for the use of the underlying arrithmetics
+(integers and floating-point numbers).
+
+- we translated the matrix indices by 1: the first matrix entry is
+B[0][0] instead of B[1][1].
+
+- automatised triangular option: the code looks at the matrix and
+decides how close to upper-triangular it is.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..1e8b56a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,431 @@
+# fplll #
+
+[![Build Status](https://travis-ci.org/fplll/fplll.svg?branch=master)](https://travis-ci.org/fplll/fplll) [![codecov](https://codecov.io/gh/fplll/fplll/branch/master/graph/badge.svg)](https://codecov.io/gh/fplll/fplll)
+
+
+fplll contains implementations of several lattice algorithms. The implementation relies on floating-point orthogonalization, and LLL [[LLL82](#LLL82)] is central to the code, hence the name.
+
+It includes implementations of floating-point LLL reduction algorithms [[NS09](#NS09),[MSV09](#MSV09)], offering different speed/guarantees ratios. It contains a 'wrapper' choosing the estimated best sequence of variants in order to provide a guaranteed output as fast as possible [[S09](#S09)]. In the case of the wrapper, the succession of variants is oblivious to the user. 
+
+It includes an implementation of the BKZ reduction algorithm [[SE94](#SE94)], including the BKZ-2.0 [[CN11](#CN11)] improvements (extreme enumeration pruning, pre-processing of blocks, early termination). Additionally, Slide reduction [[GN08](#GN08)] and self dual BKZ [[MW16](#MW16)] are supported. 
+
+It also includes a floating-point implementation of the Kannan-Fincke-Pohst algorithm [[K83](#K83),[FP85](#FP85)] that finds a shortest non-zero lattice vector. For the same task, the GaussSieve algorithm [[MV10](#MV10)] is also available in fplll. Finally, it contains a variant of the enumeration algorithm that computes a lattice vector closest to a given vector belonging to the real span of the lattice.
+
+fplll is distributed under the [GNU Lesser General Public License](COPYING) (either version 2.1 of the License, or, at your option, any later version) as published by the Free Software Foundation.
+
+## How to cite ##
+
+       @unpublished{fplll,
+           author = {The {FPLLL} development team},
+           title = {{fplll}, a lattice reduction library},
+           year = 2016,
+           note = {Available at \url{https://github.com/fplll/fplll}},
+           url = {https://github.com/fplll/fplll}
+       }
+
+
+# Table of contents #
+
+  * [fplll](#fplll)
+    * [How to cite](#How-to-cite)
+  * [Table of contents](#table-of-contents)
+  * [Compilation](#compilation)
+    * [Dependencies](#dependencies)
+      * [Required](#required), [Optional](#optional).
+    * [Installation](#installation)
+      * [Linux](#linux)
+      * [Windows 10](#windows-10)
+    * [Optimization](#optimization)
+    * [Check](#check)
+  * [How to use](#how-to-use)
+    * Programs [latticegen](#latticegen), [fplll](#fplll-1), [llldiff](#llldiff), [latsieve](#latsieve).
+    * [How to use as a library](#how-to-use-as-a-library)
+    * [Multicore support](#multicore-support)
+  * [Examples](#examples)
+  * [Alternative interfaces](#alternative-interfaces)
+  * [Credit](#credit)
+    * [Maintainers](#maintainers), [Contributors](#contributors), [Acknowledgments](#acknowledgments).
+  * [Contributing](#contributing)
+  * [New releases and bug reports](#new-releases-and-bug-reports)
+  * [Bibliography](#bibliography)
+
+
+# Compilation #
+
+## Dependencies ##
+
+### Required ###
+
+- GNU MP 4.2.0 or higher [http://gmplib.org/](http://gmplib.org/) or MPIR 1.0.0 or higher [http://mpir.org](http://mpir.org)
+- MPFR 2.3.0 or higher, COMPLETE INSTALLATION [http://www.mpfr.org/](http://www.mpfr.org/)
+- autotools 2.61 or higher
+- g++ 4.9.3 or higher
+
+### Optional ###
+- QD 2.3.15 or higher (a C++/Fortran-90 double-double and quad-double package), compile and install
+  the shared library (e.g. `./configure --enable-shared=yes`).
+  [http://crd-legacy.lbl.gov/~dhbailey/mpdist/](http://crd-legacy.lbl.gov/~dhbailey/mpdist/)
+  
+NOTE: If you are intending to use fplll on Windows 10, then these packages are not required before you get started. This is because you use fplll via the "Windows Subsystem for Linux". Please go straight to the instructions for [Windows 10](#windows-10).
+
+## Installation ##
+
+### Linux ###
+
+You should downloaded the source code from github and then run
+
+    ./autogen.sh
+
+which generates the `./configure` script used to configure fplll by calling the appropriate
+autotools command.
+
+Then, to compile and install type
+
+       ./configure
+       make
+       make install                    # (as root)
+
+If GMP, MPFR and/or MPIR are not in the `$LD_LIBRARY_PATH`, you have to point to the directories where the libraries are, with
+
+    ./configure --with-gmp=path/to/gmp
+
+or
+
+    ./configure --with-mpfr=path/to/mpfr
+
+The same philosophy applies to the (optional) QD library. If you want to use
+mpir instead of gmp, use `--enable-mpir` and `--with-mpir=path/to/mpir`.
+
+You can remove the program binaries and object files from the source code directory by typing `make
+clean`. To also remove the files that `./configure` created (so you can compile the package for a
+different kind of computer), type `make distclean`.  By default, `make install` installs the package
+commands under `/usr/local/bin`, include files under `/usr/local/include`, etc.  You can specify an
+installation directory name other than `/usr/local` by giving `./configure` the option
+`--prefix=dirname`.  Run `./configure --help` for further details.
+
+### Windows 10 ###
+
+Windows 10 has a "Windows Subsystem for Linux", which essentially allows you to use Linux features in Windows without the need for a dual-boot system or a virtual machine. To activate this, first go to **Settings** -> **Update and security** -> **For developers** and enable developer mode. (This may take a while.) Afterwards, open Powershell as an administrator and run 
+
+       Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
+
+This will enable the WSL. Next, open the Windows Store and navigate to your favourite available Linux distribution - this may be installed as if were a regular application. Afterwards, this system can be accessed as if it were a regular program e.g. by opening command prompt and typing `bash`. With this Linux-like subsystem, installing fplll is then similar to above, except that most likely the package repository is not up to date, and various additional packages need to be installed first. To make sure you only install the most recent software, run:
+       
+       sudo apt-get update
+       
+Then run `sudo apt-get install <packages>` for the (indirectly) required packages, such as `make`, `autoconf`, `libtool`, `gcc`, `g++`, `libgmp-dev`, and `libmpfr-dev`. Finally, download the fplll source code, extract the contents, navigate to this folder in Bash (commonly found under `/mnt/c/<local path>` when stored somewhere on the `C:\` drive), and run:
+       
+       ./autogen.sh
+       ./configure
+       make 
+
+The same comments as before apply for using e.g. `make install` or `make distclean` instead of `make`.
+
+Note: to fix a potential error `libfplll.so.5: cannot open shared object file: No such file or directory` raised after trying to run `fplll` after a successful compilation, find the location of `libfplll.so.5` (probably something like `/../fplll/.libs/`; run `find -name libfplll.so.5` to find it) and run `export LD_LIBRARY_PATH=<path>`. 
+
+## Check ##
+
+Type
+
+       make check
+
+
+## Optimization ##
+
+The default compilation flag is `-O3`. One may use the `-march=native -O3` flag to optimize the binaries. See "[this issue](https://github.com/fplll/fplll/issues/169)" for its impact on the enumeration speed.
+
+
+# How to use #
+
+Executable files `fplll` and `latticegen` are installed in the directory
+`/usr/local/bin`. (Note that the programs generated by `make` in the `fplll/` directory are only wrappers to the programs in `fplll/.libs/`).
+
+If you type `make check`, it will also generate the executable file `llldiff`, 
+in `fplll/.libs/`.
+
+
+## latticegen ##
+
+`latticegen` is a utility for generating matrices (rows form input
+lattice basis vectors).
+
+The options are:
+
+* `r` `d` `b` : generates a knapsack like matrix of dimension d x (d+1) and b bits (see, e.g., [[S09](#S09)]): the i-th vector starts with a random integer of bit-length <=b and the rest is the i-th canonical unit vector.
+* `s` `d` `b` `b2` : generates a d x d matrix of a form similar to that is involved when trying to find rational approximations to reals with the same small denominator (see, e.g., [[LLL82](#LLL82)]): the first vector starts with a random integer of bit-length <=b2 and continues with d-1 independent integers of bit-lengths <=b; the i-th vector for i>1 is the i-th canonical unit vector scaled by a factor 2^b.
+* `u` `d` `b` : generates a d x d matrix whose entries are independent integers of bit-lengths <=b.
+* `n` `d` `b` `c` : generates an ntru-like matrix. If char is 'b', then it first samples an integer q of bit-length <=b, whereas if char is 'q', then it sets q to the provided value. Then it samples a uniform h in the ring Z_q[x]/(x^n-1). It finally returns the 2 x 2 block matrix [[I, Rot(h)], [0, q*I]], where each block is d x d, the first row of Rot(h) is the coefficient vector of h, and the i-th row of Rot(h) is the shift of the (i-1)-th (with last entry put back in first position), for all i>1. Warning: this does not produce a genuine ntru lattice with h a genuine public key (see [[HPS98](#HPS98)]).
+* `N` `d` `b` `c` : as the previous option, except that the contructed matrix is [[q*I, 0], [Rot(h), I]]. 
+* `q` `d` `k` `b` `c` : generates a q-ary matrix. If char is 'b', then it first samples an integer q of bit-length <=b; if char is 'p', it does the same and updates q to the smallest (probabilistic) prime that is greater; if char is 'q', then it sets q to the provided value. It returns a 2 x 2 block matrix [[I, H], [0, q*I]], where H is (d-k) x k and uniformly random modulo q. These bases correspond to the SIS/LWE q-ary lattices (see [[MR09](#MR09)]). Goldstein-Mayer lattices correspond to k=1 and q prime (see [[GM03](#GM03)]).
+* `t` `d` `f` : generates a d x d lower-triangular matrix B with B_ii = 2^(d-i+1)^f for all i, and B_ij is uniform between -B_jj/2 and B_jj/2 for all j<i.
+* `T` `d` : also takes as input a d-dimensional vector vec read from a file. It generates a d x d lower-triangular matrix B with B_ii = vec[i] for all i and B_ij is uniform between -B_jj/2 and B_jj/2 for all j<i.
+
+The generated matrix is printed in stdout.
+
+Note that by default, the random bits always use the same seed, to ensure reproducibility. The seed may be changed with the option `-randseed <integer>` or by using the current time (in seconds) `-randseed time`. If you use this option, it must be the first one on the command line.
+
+## fplll ##
+
+`fplll` does LLL, BKZ, HKZ or SVP on a matrix (considered as a set of row
+vectors) given in stdin or in a file as parameter. 
+
+The options are:
+
+* `-a lll` : LLL-reduction (default).
+* `-a bkz` : BKZ-reduction.
+* `-a hkz` : HKZ-reduction.
+* `-a svp` : prints a shortest non-zero vector of the lattice.
+* `-a sdb` : self dual variant of BKZ-reduction.
+* `-a sld` : slide reduction.
+* `-a cvp` : prints the vector in the lattice closest to the input vector.
+* `-v` : verbose mode. 
+* `-nolll` : does not apply to LLL-reduction. In the case of bkz, hkz and svp, by default, the input basis is LLL-reduced before anything else. This option allows to remove that initial LLL-reduction (note that other calls to LLL-reduction may occur during the execution). In the cas of hlll, verify if the input basis is HLLL-reduced.
+
+* `-a hlll` : HLLL-reduction.
+
+Options for LLL-reduction:
+
+
+* `-d delta` :     Î´ (default=0.99)
+* `-e eta` :       Î· (default=0.51). See [[NS09](#NS09)] for the definition of (δ,η)-LLL-reduced bases. 
+* `-l lovasz` :    if !=0 Lovasz's condition. Otherwise, Siegel's condition (default: Lovasz). See [[A02](#A02)] for the definition of Siegel condition.
+
+* `-f mpfr` : sets the floating-point type to MPFR (default if `m=proved`).
+* `-p precision` : precision of the floating-point arithmetic, works only with `-f mpfr`.
+* `-f dd` : sets the floating-point type to double-double.
+* `-f qd` : sets the floating-point type to quad-double.
+* `-f dpe` : sets the floating-point type to DPE (default if `m=heuristic`).
+* `-f double` : sets the floating-point type to double (default if `m=fast`).
+* `-f longdouble` : sets the floating-point type to long double.
+
+* `-z mpz` : sets the integer type to mpz, the integer type of GMP (default).
+* `-z int` : sets the integer type to int.
+* `-z long` : as `-z int`.
+* `-z double` : sets the integer type to double.
+
+* `-m wrapper` : uses the wrapper. (default if `z=mpz`).
+* `-m fast` : uses the fast method, works only with `-f double`.
+* `-m heuristic` : uses the heuristic method.
+* `-m proved` : uses the proved version of the algorithm.
+* `-y` : early reduction.
+
+With the wrapper or the proved version, it is guaranteed that the basis is LLL-reduced with Î´'=2×δ-1
+and Î·'=2×η-1/2. For instance, with the default options, it is guaranteed that the basis is
+(0.98,0.52)-LLL-reduced.
+
+
+Options for BKZ-reduction:
+
+* `-b block_size` :            block size, mandatory, between 2 and the number of vectors.
+
+* `-f float_type` :            same as LLL (`-p` is required if `float_type=mpfr`).
+* `-p precision` :             precision of the floating-point arithmetic with `-f mpfr`.
+
+* `-bkzmaxloops loops` :       maximum number of full loop iterations.
+* `-bkzmaxtime time` :         stops after `time` seconds (up to completion of the current loop iteration).
+* `-bkzautoabort` :            stops when the average slope of the log ||b_i*||'s does not decrease fast enough.
+
+Without any of the last three options, BKZ runs until no block has been updated for a full loop iteration.
+
+* `-s filename.json` :         use strategies for preprocessing and pruning paramater (/strategies/default.json provided). Experimental.
+
+* `-bkzghbound factor` :       multiplies the Gaussian heuristic by `factor` (of float type) to set the enumeration radius of the SVP calls.
+* `-bkzboundedlll` :          restricts the LLL call before considering a block to vector indices within that block.
+
+* `-bkzdumgso file_name` :     dumps the log ||b_i*|| 's in specified file.
+
+Output formats:
+
+* `-of  ` : prints new line (if `-a [lll|bkz]`)
+* `-of b` : prints the basis (if `-a [lll|bkz]`, this value by default)
+* `-of bk` : prints the basis (if `-a [lll|bkz]`, format compatible with sage)
+* `-of c` : prints the closest vector (if `-a cvp`, this value by default)
+* `-of s` : prints the closest vector (if `-a svp`, this value by default)
+* `-of t` : prints status (if `-a [lll|bkz|cvp|svp]`)
+* `-of u` : prints unimodular matrix (if `-a [lll|bkz]`)
+* `-of uk` : prints unimodular matrix (if `-a [lll|bkz]`, format compatible with sage)
+* `-of v` : prints inverse of u (if `-a lll`)
+* `-of vk` : prints inverse of u (if `-a lll`, format compatible with sage)
+
+A combination of these option is allowed (e.g., `-of bkut`).
+
+Only for `-a hlll`:
+* `-t theta` : Î¸ (default=0.001). See [[MSV09](#MSV09)] for the definition of (δ,η,θ)-HLLL-reduced bases.
+* `-c c` : constant for HLLL during the size-reduction (only used if `fplll` is compiled with `-DHOUSEHOLDER_USE_SIZE_REDUCTION_TEST`)
+
+## llldiff ##
+
+`llldiff` compares two bases (b1,...,bd) and (c1,...c_d'): they are considered
+equal iff d=d' and for any i, bi = +- ci. Concretely, if basis B is in file 'B.txt' and if basis C is in file 'C.txt' (in the fplll format), then one may run `cat B.txt C.txt | ./llldiff`.
+
+
+## latsieve ##
+
+`latsieve` does (tuple) lattice sieve on a matrix (considered as a set of row
+vectors) given in a file as parameter. 
+ It will generate the executable file
+ `latsieve` in `fplll/` which is a wrapper of `fplll/.libs/latsieve`.
+
+
+The options are:
+
+* `-a nnn` : nnn is the tuple algorithm to use (default 2 corresponding to GaussSieve)
+* `-f filename` : follows input matrix
+* `-b nnn` : BKZ preprocessing of blocksize nnn (optional)
+* `-t nnn` : targeted square norm for stoping sieving (optional)
+* `-s nnn` : using seed=nnn (optional)
+* `-v` : verbose toggle
+
+
+## How to use as a library ##
+
+See [API documentation](https://fplll.github.io/fplll/).
+
+## Multicore support ##
+
+This library does not currently use multiple cores and running multiple threads working on the same object `IntegerMatrix`, `LLLReduction`, `MatGSO` etc. is not supported. Running multiple threads working on *different* objects, however, is supported. That is, there are no global variables and it is safe to e.g. reduce several lattices in parallel in the same process.
+
+# Examples #
+
+1. LLL reduction
+
+   ``` 
+   ./latticegen r 10 1000 | ./fplll
+   ``` 
+
+2. Fileinput for reduction. If the file `matrix` contains
+
+   ``` 
+   [[ 10 11]
+   [11 12]]
+   ``` 
+
+   then
+
+   ``` 
+   ./fplll matrix
+   ```
+
+   produces
+
+   ``` 
+   [[0 1 ]
+    [1 0 ]
+   ]
+   ``` 
+
+3. Random generator
+
+   ``` 
+   ./latticegen -randseed 1234 r 10 1000 | ./fplll
+   ./latticegen -randseed time u 10 16 | ./fplll
+   ``` 
+       
+4. Solving SVP
+
+   ```
+   ./latticegen r 30 3000 | ./fplll -a svp
+   ```
+
+5. Solving CVP
+
+   ```
+   echo "[[17 42 4][50 75 108][11 47 33]][100 101 102]" | ./fplll -a cvp
+   ```
+
+# Alternative interfaces #
+
+- [fpylll](https://github.com/malb/fpylll) is a stand-alone Python interface for fplll.
+- fplll is included in [Sage](http://sagemath.org), see documentation for [IntegerMatrix](http://doc.sagemath.org/html/en/reference/matrices/sage/matrix/matrix_integer_dense.html) and [IntegerLattice](http://doc.sagemath.org/html/en/reference/modules/sage/modules/free_module_integer.html).
+
+
+# Credit #
+
+## Maintainers ##
+
+fplll is currently maintained by:
+
+- Martin Albrecht, <martinralbrecht@googlemail.com>
+- Shi Bai, <shih.bai@gmail.com>
+
+## Contributors ##
+
+The following people have contributed to fplll:
+
+- Martin Albrecht
+- Shi Bai
+- Guillaume Bonnoron
+- David Cade
+- Léo Ducas
+- Joop van de Pol
+- Xavier Pujol
+- Damien Stehlé
+- Marc Stevens
+- Gilles Villard
+- Michael Walter
+
+Please add yourself here if you make a contribution.
+
+## Acknowledgments ##
+
+- Patrick Pelissier and Paul Zimmermann for `dpe`.
+
+- David H. Bailey for `QD`.
+
+- Sylvain Chevillard, Christoph Lauter and Gilles Villard for the `configure/make/make install` packaging.
+
+- Timothy Abbott, Michael Abshoff, Bill Allombert, John Cannon, Sylvain Chevillard, Julien Clement, Andreas Enge, Jean-Pierre Flori, Laurent Fousse, Guillaume Hanrot, Jens Hermans, Jerry James, Christoph Lauter, Tancrède Lepoint, Andrew Novocin, Willem Jan Palenstijn, Patrick Pelissier, Julien Puydt, Michael Schneider, Thiemo Seufer, Allan Steel, Gilles Villard and Paul Zimmermann for their support and for many suggestions that helped debugging and improving this code.
+
+- [CONTRIBUTING.md](CONTRIBUTING.md) is taken, almost verbatim, from https://github.com/pydanny/djangopackages/blob/master/docs/contributing.rst
+
+- [json.hpp](fplll/io/json.hpp) is taken from https://github.com/nlohmann/json
+
+- This project has been supported by ERC Starting Grant ERC-2013-StG-335086-LATTAC.
+
+# Contributing #
+
+fplll welcomes contributions. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
+
+# New releases and bug reports #
+
+New releases will be announced on [https://groups.google.com/forum/#!forum/fplll-devel](https://groups.google.com/forum/#!forum/fplll-devel).
+
+Bug reports may be sent to [https://groups.google.com/forum/#!forum/fplll-devel](https://groups.google.com/forum/#!forum/fplll-devel) or via
+[https://github.com/fplll/fplll/issues](https://github.com/fplll/fplll/issues). 
+
+# Bibliography #
+
+<a name="A02">[A02]<a/> A. Akhavi. Random lattices, threshold phenomena and efficient reduction algorithms. Theor. Comput. Sci. 287(2): 359-385 (2002)
+
+<a name="Chen13">[Chen13]</a> Y. Chen, Lattice reduction and concrete security of fully homomorphic encryption.
+
+<a name="CN11">[CN11]</a> Y. Chen and P. Q. Nguyen. BKZ 2.0: Better Lattice Security Estimates. ASIACRYPT 2011: 1-20
+
+<a name="GM03">[GM03]</a> D. Goldstein and A. Mayer. On the equidistribution of Hecke points. Forum Mathematicum, 15:165–189 (2003)
+
+<a name="GN08">[GN08]</a> N. Gama and P. Q. Nguyen. Finding Short Lattice Vectors within Mordell's Inequality. STOC 2008: 207-216
+
+<a name="GNR13">[GNR13]</a> N. Gama, P. Q. Nguyen and Oded Regev. Lattice Enumeration Using Extreme Pruning.
+
+<a name="HPS98">[HPS98]</a> J. Hoffstein, J. Pipher, J. H. Silverman. NTRU: A Ring-Based Public Key Cryptosystem. ANTS 1998: 267-288
+
+<a name="K83">[K83]</a> R. Kannan. Improved algorithms for integer programming and related lattice problems. STOC 1983, 99-108
+
+<a name="FP85">[FP85]</a> U. Fincke and M. Pohst. Improved methods for calculating vectors of short length in a lattice, including a complexity analysis. Math. Comp., 44(170):463–471 (1985)
+
+<a name="LLL82">[LLL82]</a> A. K. Lenstra, H. W. Lenstra, Jr. and L. Lovasz. Factoring polynomials with rational coefficients. Math. Ann., 261: 515–534 (1982)
+
+<a name="MSV09">[MSV09]</a> I. Morel, D. Stehle and G. Villard. H-LLL: using Householder inside LLL. ISSAC 2009: 271-278
+
+<a name="MV10">[MV10]</a> D. Micciancio and P. Voulgaris. Faster Exponential Time Algorithms for the Shortest Vector Problem. SODA 2010: 1468-1480
+
+<a name="MW16">[MW16]</a> D. Micciancio and M. Walter. Practical, Predictable Lattice Basis Reduction. EUROCRYPT 2016: 820-849
+
+<a name="MR09">[MR09]</a> D. Micciancio and O. Regev. Post-Quantum Cryptography. Chapter of Lattice-based Cryptography, 147-191 (2009)
+
+<a name="NS09">[NS09]</a> P. Q. Nguyen and D. Stehle. An LLL Algorithm with Quadratic Complexity. SIAM J. Comput. 39(3): 874-903 (2009)
+
+<a name="S09">[S09]</a> D. Stehle. Floating-Point LLL: Theoretical and Practical Aspects. The LLL Algorithm 2009: 179-213
+
+<a name="SE94">[SE94]</a>: C.-P. Schnorr and M. Euchner. Lattice basis reduction: Improved practical algorithms and solving subset sum problems. Math. Program. 66: 181-199 (1994)
+
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..5bce9ba
--- /dev/null
@@ -0,0 +1,1578 @@
+#!/bin/sh
+#                        a u t o g e n . s h
+#
+# Copyright (c) 2005-2009 United States Government as represented by
+# the U.S. Army Research Laboratory.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+#
+# 3. The name of the author may not be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+###
+#
+# Script for automatically preparing the sources for compilation by
+# performing the myriad of necessary steps.  The script attempts to
+# detect proper version support, and outputs warnings about particular
+# systems that have autotool peculiarities.
+#
+# Basically, if everything is set up and installed correctly, the
+# script will validate that minimum versions of the GNU Build System
+# tools are installed, account for several common configuration
+# issues, and then simply run autoreconf for you.
+#
+# If autoreconf fails, which can happen for many valid configurations,
+# this script proceeds to run manual preparation steps effectively
+# providing a POSIX shell script (mostly complete) reimplementation of
+# autoreconf.
+#
+# The AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER
+# environment variables and corresponding _OPTIONS variables (e.g.
+# AUTORECONF_OPTIONS) may be used to override the default automatic
+# detection behaviors.  Similarly the _VERSION variables will override
+# the minimum required version numbers.
+#
+# Examples:
+#
+#   To obtain help on usage:
+#     ./autogen.sh --help
+#
+#   To obtain verbose output:
+#     ./autogen.sh --verbose
+#
+#   To skip autoreconf and prepare manually:
+#     AUTORECONF=false ./autogen.sh
+#
+#   To verbosely try running with an older (unsupported) autoconf:
+#     AUTOCONF_VERSION=2.50 ./autogen.sh --verbose
+#
+# Author:
+#   Christopher Sean Morrison <morrison@brlcad.org>
+#
+# Patches:
+#   Sebastian Pipping <sebastian@pipping.org>
+#
+######################################################################
+
+# set to minimum acceptable version of autoconf
+if [ "x$AUTOCONF_VERSION" = "x" ] ; then
+    AUTOCONF_VERSION=2.52
+fi
+# set to minimum acceptable version of automake
+if [ "x$AUTOMAKE_VERSION" = "x" ] ; then
+    AUTOMAKE_VERSION=1.6.0
+fi
+# set to minimum acceptable version of libtool
+if [ "x$LIBTOOL_VERSION" = "x" ] ; then
+    LIBTOOL_VERSION=1.4.2
+fi
+
+
+##################
+# ident function #
+##################
+ident ( ) {
+    # extract copyright from header
+    __copyright="`grep Copyright $AUTOGEN_SH | head -${HEAD_N}1 | awk '{print $4}'`"
+    if [ "x$__copyright" = "x" ] ; then
+       __copyright="`date +%Y`"
+    fi
+
+    # extract version from CVS Id string
+    __id="$Id: autogen.sh 33925 2009-03-01 23:27:06Z brlcad $"
+    __version="`echo $__id | sed 's/.*\([0-9][0-9][0-9][0-9]\)[-\/]\([0-9][0-9]\)[-\/]\([0-9][0-9]\).*/\1\2\3/'`"
+    if [ "x$__version" = "x" ] ; then
+       __version=""
+    fi
+
+    echo "autogen.sh build preparation script by Christopher Sean Morrison"
+    echo "  + config.guess download patch by Sebastian Pipping (2008-12-03)"
+    echo "revised 3-clause BSD-style license, copyright (c) $__copyright"
+    echo "script version $__version, ISO/IEC 9945 POSIX shell script"
+}
+
+
+##################
+# USAGE FUNCTION #
+##################
+usage ( ) {
+    echo "Usage: $AUTOGEN_SH [-h|--help] [-v|--verbose] [-q|--quiet] [-d|--download] [--version]"
+    echo "    --help      Help on $NAME_OF_AUTOGEN usage"
+    echo "    --verbose   Verbose progress output"
+    echo "    --quiet     Quiet suppressed progress output"
+    echo "    --download  Download the latest config.guess from gnulib"
+    echo "    --version   Only perform GNU Build System version checks"
+    echo
+    echo "Description: This script will validate that minimum versions of the"
+    echo "GNU Build System tools are installed and then run autoreconf for you."
+    echo "Should autoreconf fail, manual preparation steps will be run"
+    echo "potentially accounting for several common preparation issues.  The"
+
+    echo "AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER,"
+    echo "PROJECT, & CONFIGURE environment variables and corresponding _OPTIONS"
+    echo "variables (e.g. AUTORECONF_OPTIONS) may be used to override the"
+    echo "default automatic detection behavior."
+    echo
+
+    ident
+
+    return 0
+}
+
+
+##########################
+# VERSION_ERROR FUNCTION #
+##########################
+version_error ( ) {
+    if [ "x$1" = "x" ] ; then
+       echo "INTERNAL ERROR: version_error was not provided a version"
+       exit 1
+    fi
+    if [ "x$2" = "x" ] ; then
+       echo "INTERNAL ERROR: version_error was not provided an application name"
+       exit 1
+    fi
+    $ECHO
+    $ECHO "ERROR:  To prepare the ${PROJECT} build system from scratch,"
+    $ECHO "        at least version $1 of $2 must be installed."
+    $ECHO
+    $ECHO "$NAME_OF_AUTOGEN does not need to be run on the same machine that will"
+    $ECHO "run configure or make.  Either the GNU Autotools will need to be installed"
+    $ECHO "or upgraded on this system, or $NAME_OF_AUTOGEN must be run on the source"
+    $ECHO "code on another system and then transferred to here. -- Cheers!"
+    $ECHO
+}
+
+##########################
+# VERSION_CHECK FUNCTION #
+##########################
+version_check ( ) {
+    if [ "x$1" = "x" ] ; then
+       echo "INTERNAL ERROR: version_check was not provided a minimum version"
+       exit 1
+    fi
+    _min="$1"
+    if [ "x$2" = "x" ] ; then
+       echo "INTERNAL ERROR: version check was not provided a comparison version"
+       exit 1
+    fi
+    _cur="$2"
+
+    # needed to handle versions like 1.10 and 1.4-p6
+    _min="`echo ${_min}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`"
+    _cur="`echo ${_cur}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`"
+
+    _min_major="`echo $_min | cut -d. -f1`"
+    _min_minor="`echo $_min | cut -d. -f2`"
+    _min_patch="`echo $_min | cut -d. -f3`"
+
+    _cur_major="`echo $_cur | cut -d. -f1`"
+    _cur_minor="`echo $_cur | cut -d. -f2`"
+    _cur_patch="`echo $_cur | cut -d. -f3`"
+
+    if [ "x$_min_major" = "x" ] ; then
+       _min_major=0
+    fi
+    if [ "x$_min_minor" = "x" ] ; then
+       _min_minor=0
+    fi
+    if [ "x$_min_patch" = "x" ] ; then
+       _min_patch=0
+    fi
+    if [ "x$_cur_minor" = "x" ] ; then
+       _cur_major=0
+    fi
+    if [ "x$_cur_minor" = "x" ] ; then
+       _cur_minor=0
+    fi
+    if [ "x$_cur_patch" = "x" ] ; then
+       _cur_patch=0
+    fi
+
+    $VERBOSE_ECHO "Checking if ${_cur_major}.${_cur_minor}.${_cur_patch} is greater than ${_min_major}.${_min_minor}.${_min_patch}"
+
+    if [ $_min_major -lt $_cur_major ] ; then
+       return 0
+    elif [ $_min_major -eq $_cur_major ] ; then
+       if [ $_min_minor -lt $_cur_minor ] ; then
+           return 0
+       elif [ $_min_minor -eq $_cur_minor ] ; then
+           if [ $_min_patch -lt $_cur_patch ] ; then
+               return 0
+           elif [ $_min_patch -eq $_cur_patch ] ; then
+               return 0
+           fi
+       fi
+    fi
+    return 1
+}
+
+
+######################################
+# LOCATE_CONFIGURE_TEMPLATE FUNCTION #
+######################################
+locate_configure_template ( ) {
+    _pwd="`pwd`"
+    if test -f "./configure.ac" ; then
+       echo "./configure.ac"
+    elif test -f "./configure.in" ; then
+       echo "./configure.in"
+    elif test -f "$_pwd/configure.ac" ; then
+       echo "$_pwd/configure.ac"
+    elif test -f "$_pwd/configure.in" ; then
+       echo "$_pwd/configure.in"
+    elif test -f "$PATH_TO_AUTOGEN/configure.ac" ; then
+       echo "$PATH_TO_AUTOGEN/configure.ac"
+    elif test -f "$PATH_TO_AUTOGEN/configure.in" ; then
+       echo "$PATH_TO_AUTOGEN/configure.in"
+    fi
+}
+
+
+##################
+# argument check #
+##################
+ARGS="$*"
+PATH_TO_AUTOGEN="`dirname $0`"
+NAME_OF_AUTOGEN="`basename $0`"
+AUTOGEN_SH="$PATH_TO_AUTOGEN/$NAME_OF_AUTOGEN"
+
+LIBTOOL_M4="${PATH_TO_AUTOGEN}/misc/libtool.m4"
+
+if [ "x$HELP" = "x" ] ; then
+    HELP=no
+fi
+if [ "x$QUIET" = "x" ] ; then
+    QUIET=no
+fi
+if [ "x$VERBOSE" = "x" ] ; then
+    VERBOSE=no
+fi
+if [ "x$VERSION_ONLY" = "x" ] ; then
+    VERSION_ONLY=no
+fi
+if [ "x$DOWNLOAD" = "x" ] ; then
+    DOWNLOAD=no
+fi
+if [ "x$AUTORECONF_OPTIONS" = "x" ] ; then
+    AUTORECONF_OPTIONS="-i -f"
+fi
+if [ "x$AUTOCONF_OPTIONS" = "x" ] ; then
+    AUTOCONF_OPTIONS="-f"
+fi
+if [ "x$AUTOMAKE_OPTIONS" = "x" ] ; then
+    AUTOMAKE_OPTIONS="-a -c -f"
+fi
+ALT_AUTOMAKE_OPTIONS="-a -c"
+if [ "x$LIBTOOLIZE_OPTIONS" = "x" ] ; then
+    LIBTOOLIZE_OPTIONS="--automake -c -f"
+fi
+ALT_LIBTOOLIZE_OPTIONS="--automake --copy --force"
+if [ "x$ACLOCAL_OPTIONS" = "x" ] ; then
+    ACLOCAL_OPTIONS=""
+fi
+if [ "x$AUTOHEADER_OPTIONS" = "x" ] ; then
+    AUTOHEADER_OPTIONS=""
+fi
+if [ "x$CONFIG_GUESS_URL" = "x" ] ; then
+    CONFIG_GUESS_URL="http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=build-aux/config.guess;hb=HEAD"
+fi
+for arg in $ARGS ; do
+    case "x$arg" in
+       x--help) HELP=yes ;;
+       x-[hH]) HELP=yes ;;
+       x--quiet) QUIET=yes ;;
+       x-[qQ]) QUIET=yes ;;
+       x--verbose) VERBOSE=yes ;;
+       x-[dD]) DOWNLOAD=yes ;;
+       x--download) DOWNLOAD=yes ;;
+       x-[vV]) VERBOSE=yes ;;
+       x--version) VERSION_ONLY=yes ;;
+       *)
+           echo "Unknown option: $arg"
+           echo
+           usage
+           exit 1
+           ;;
+    esac
+done
+
+
+#####################
+# environment check #
+#####################
+
+# sanity check before recursions potentially begin
+if [ ! -f "$AUTOGEN_SH" ] ; then
+    echo "INTERNAL ERROR: $AUTOGEN_SH does not exist"
+    if [ ! "x$0" = "x$AUTOGEN_SH" ] ; then
+       echo "INTERNAL ERROR: dirname/basename inconsistency: $0 != $AUTOGEN_SH"
+    fi
+    exit 1
+fi
+
+# force locale setting to C so things like date output as expected
+LC_ALL=C
+
+# commands that this script expects
+for __cmd in echo head tail pwd ; do
+    echo "test" | $__cmd > /dev/null 2>&1
+    if [ $? != 0 ] ; then
+       echo "INTERNAL ERROR: '${__cmd}' command is required"
+       exit 2
+    fi
+done
+echo "test" | grep "test" > /dev/null 2>&1
+if test ! x$? = x0 ; then
+    echo "INTERNAL ERROR: grep command is required"
+    exit 1
+fi
+echo "test" | sed "s/test/test/" > /dev/null 2>&1
+if test ! x$? = x0 ; then
+    echo "INTERNAL ERROR: sed command is required"
+    exit 1
+fi
+
+
+# determine the behavior of echo
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+    *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+    *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+    *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+# determine the behavior of head
+case "x`echo 'head' | head -n 1 2>&1`" in
+    *xhead*) HEAD_N="n " ;;
+    *) HEAD_N="" ;;
+esac
+
+# determine the behavior of tail
+case "x`echo 'tail' | tail -n 1 2>&1`" in
+    *xtail*) TAIL_N="n " ;;
+    *) TAIL_N="" ;;
+esac
+
+VERBOSE_ECHO=:
+ECHO=:
+if [ "x$QUIET" = "xyes" ] ; then
+    if [ "x$VERBOSE" = "xyes" ] ; then
+       echo "Verbose output quelled by quiet option.  Further output disabled."
+    fi
+else
+    ECHO=echo
+    if [ "x$VERBOSE" = "xyes" ] ; then
+       echo "Verbose output enabled"
+       VERBOSE_ECHO=echo
+    fi
+fi
+
+
+# allow a recursive run to disable further recursions
+if [ "x$RUN_RECURSIVE" = "x" ] ; then
+    RUN_RECURSIVE=yes
+fi
+
+
+################################################
+# check for help arg and bypass version checks #
+################################################
+if [ "x`echo $ARGS | sed 's/.*[hH][eE][lL][pP].*/help/'`" = "xhelp" ] ; then
+    HELP=yes
+fi
+if [ "x$HELP" = "xyes" ] ; then
+    usage
+    $ECHO "---"
+    $ECHO "Help was requested.  No preparation or configuration will be performed."
+    exit 0
+fi
+
+
+#######################
+# set up signal traps #
+#######################
+untrap_abnormal ( ) {
+    for sig in 1 2 13 15; do
+       trap - $sig
+    done
+}
+
+# do this cleanup whenever we exit.
+trap '
+    # start from the root
+    if test -d "$START_PATH" ; then
+       cd "$START_PATH"
+    fi
+
+    # restore/delete backup files
+    if test "x$PFC_INIT" = "x1" ; then
+       recursive_restore
+    fi
+' 0
+
+# trap SIGHUP (1), SIGINT (2), SIGPIPE (13), SIGTERM (15)
+for sig in 1 2 13 15; do
+    trap '
+       $ECHO ""
+       $ECHO "Aborting $NAME_OF_AUTOGEN: caught signal '$sig'"
+
+       # start from the root
+       if test -d "$START_PATH" ; then
+           cd "$START_PATH"
+       fi
+
+       # clean up on abnormal exit
+       $VERBOSE_ECHO "rm -rf autom4te.cache"
+       rm -rf autom4te.cache
+
+       if test -f "acinclude.m4.$$.backup" ; then
+           $VERBOSE_ECHO "cat acinclude.m4.$$.backup > acinclude.m4"
+           chmod u+w acinclude.m4
+           cat acinclude.m4.$$.backup > acinclude.m4
+
+           $VERBOSE_ECHO "rm -f acinclude.m4.$$.backup"
+           rm -f acinclude.m4.$$.backup
+        fi
+
+       { (exit 1); exit 1; }
+' $sig
+done
+
+
+#############################
+# look for a configure file #
+#############################
+if [ "x$CONFIGURE" = "x" ] ; then
+    CONFIGURE="`locate_configure_template`"
+    if [ ! "x$CONFIGURE" = "x" ] ; then
+       $VERBOSE_ECHO "Found a configure template: $CONFIGURE"
+    fi
+else
+    $ECHO "Using CONFIGURE environment variable override: $CONFIGURE"
+fi
+if [ "x$CONFIGURE" = "x" ] ; then
+    if [ "x$VERSION_ONLY" = "xyes" ] ; then
+       CONFIGURE=/dev/null
+    else
+       $ECHO
+       $ECHO "A configure.ac or configure.in file could not be located implying"
+       $ECHO "that the GNU Build System is at least not used in this directory.  In"
+       $ECHO "any case, there is nothing to do here without one of those files."
+       $ECHO
+       $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`"
+       exit 1
+    fi
+fi
+
+####################
+# get project name #
+####################
+if [ "x$PROJECT" = "x" ] ; then
+    PROJECT="`grep AC_INIT $CONFIGURE | grep -v '.*#.*AC_INIT' | tail -${TAIL_N}1 | sed 's/^[  ]*AC_INIT(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
+    if [ "x$PROJECT" = "xAC_INIT" ] ; then
+       # projects might be using the older/deprecated arg-less AC_INIT .. look for AM_INIT_AUTOMAKE instead
+       PROJECT="`grep AM_INIT_AUTOMAKE $CONFIGURE | grep -v '.*#.*AM_INIT_AUTOMAKE' | tail -${TAIL_N}1 | sed 's/^[     ]*AM_INIT_AUTOMAKE(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
+    fi
+    if [ "x$PROJECT" = "xAM_INIT_AUTOMAKE" ] ; then
+       PROJECT="project"
+    fi
+    if [ "x$PROJECT" = "x" ] ; then
+       PROJECT="project"
+    fi
+else
+    $ECHO "Using PROJECT environment variable override: $PROJECT"
+fi
+$ECHO "Preparing the $PROJECT build system...please wait"
+$ECHO
+
+
+########################
+# check for autoreconf #
+########################
+HAVE_AUTORECONF=no
+if [ "x$AUTORECONF" = "x" ] ; then
+    for AUTORECONF in autoreconf ; do
+       $VERBOSE_ECHO "Checking autoreconf version: $AUTORECONF --version"
+       $AUTORECONF --version > /dev/null 2>&1
+       if [ $? = 0 ] ; then
+           HAVE_AUTORECONF=yes
+           break
+       fi
+    done
+else
+    HAVE_AUTORECONF=yes
+    $ECHO "Using AUTORECONF environment variable override: $AUTORECONF"
+fi
+
+
+##########################
+# autoconf version check #
+##########################
+_acfound=no
+if [ "x$AUTOCONF" = "x" ] ; then
+    for AUTOCONF in autoconf ; do
+       $VERBOSE_ECHO "Checking autoconf version: $AUTOCONF --version"
+       $AUTOCONF --version > /dev/null 2>&1
+       if [ $? = 0 ] ; then
+           _acfound=yes
+           break
+       fi
+    done
+else
+    _acfound=yes
+    $ECHO "Using AUTOCONF environment variable override: $AUTOCONF"
+fi
+
+_report_error=no
+if [ ! "x$_acfound" = "xyes" ] ; then
+    $ECHO "ERROR:  Unable to locate GNU Autoconf."
+    _report_error=yes
+else
+    _version="`$AUTOCONF --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`"
+    if [ "x$_version" = "x" ] ; then
+       _version="0.0.0"
+    fi
+    $ECHO "Found GNU Autoconf version $_version"
+    version_check "$AUTOCONF_VERSION" "$_version"
+    if [ $? -ne 0 ] ; then
+       _report_error=yes
+    fi
+fi
+if [ "x$_report_error" = "xyes" ] ; then
+    version_error "$AUTOCONF_VERSION" "GNU Autoconf"
+    exit 1
+fi
+
+
+##########################
+# automake version check #
+##########################
+_amfound=no
+if [ "x$AUTOMAKE" = "x" ] ; then
+    for AUTOMAKE in automake ; do
+       $VERBOSE_ECHO "Checking automake version: $AUTOMAKE --version"
+       $AUTOMAKE --version > /dev/null 2>&1
+       if [ $? = 0 ] ; then
+           _amfound=yes
+           break
+       fi
+    done
+else
+    _amfound=yes
+    $ECHO "Using AUTOMAKE environment variable override: $AUTOMAKE"
+fi
+
+
+_report_error=no
+if [ ! "x$_amfound" = "xyes" ] ; then
+    $ECHO
+    $ECHO "ERROR: Unable to locate GNU Automake."
+    _report_error=yes
+else
+    _version="`$AUTOMAKE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`"
+    if [ "x$_version" = "x" ] ; then
+       _version="0.0.0"
+    fi
+    $ECHO "Found GNU Automake version $_version"
+    version_check "$AUTOMAKE_VERSION" "$_version"
+    if [ $? -ne 0 ] ; then
+       _report_error=yes
+    fi
+fi
+if [ "x$_report_error" = "xyes" ] ; then
+    version_error "$AUTOMAKE_VERSION" "GNU Automake"
+    exit 1
+fi
+
+
+########################
+# check for libtoolize #
+########################
+HAVE_LIBTOOLIZE=yes
+HAVE_ALT_LIBTOOLIZE=no
+_ltfound=no
+if [ "x$LIBTOOLIZE" = "x" ] ; then
+    LIBTOOLIZE=libtoolize
+    $VERBOSE_ECHO "Checking libtoolize version: $LIBTOOLIZE --version"
+    $LIBTOOLIZE --version > /dev/null 2>&1
+    if [ ! $? = 0 ] ; then
+       HAVE_LIBTOOLIZE=no
+       $ECHO
+       if [ "x$HAVE_AUTORECONF" = "xno" ] ; then
+           $ECHO "Warning:  libtoolize does not appear to be available."
+       else
+           $ECHO "Warning:  libtoolize does not appear to be available.  This means that"
+           $ECHO "the automatic build preparation via autoreconf will probably not work."
+           $ECHO "Preparing the build by running each step individually, however, should"
+           $ECHO "work and will be done automatically for you if autoreconf fails."
+       fi
+
+       # look for some alternates
+       for tool in glibtoolize libtoolize15 libtoolize14 libtoolize13 ; do
+           $VERBOSE_ECHO "Checking libtoolize alternate: $tool --version"
+           _glibtoolize="`$tool --version > /dev/null 2>&1`"
+           if [ $? = 0 ] ; then
+               $VERBOSE_ECHO "Found $tool --version"
+               _glti="`which $tool`"
+               if [ "x$_glti" = "x" ] ; then
+                   $VERBOSE_ECHO "Cannot find $tool with which"
+                   continue;
+               fi
+               if test ! -f "$_glti" ; then
+                   $VERBOSE_ECHO "Cannot use $tool, $_glti is not a file"
+                   continue;
+               fi
+               _gltidir="`dirname $_glti`"
+               if [ "x$_gltidir" = "x" ] ; then
+                   $VERBOSE_ECHO "Cannot find $tool path with dirname of $_glti"
+                   continue;
+               fi
+               if test ! -d "$_gltidir" ; then
+                   $VERBOSE_ECHO "Cannot use $tool, $_gltidir is not a directory"
+                   continue;
+               fi
+               HAVE_ALT_LIBTOOLIZE=yes
+               LIBTOOLIZE="$tool"
+               $ECHO
+               $ECHO "Fortunately, $tool was found which means that your system may simply"
+               $ECHO "have a non-standard or incomplete GNU Autotools install.  If you have"
+               $ECHO "sufficient system access, it may be possible to quell this warning by"
+               $ECHO "running:"
+               $ECHO
+               sudo -V > /dev/null 2>&1
+               if [ $? = 0 ] ; then
+                   $ECHO "   sudo ln -s $_glti $_gltidir/libtoolize"
+                   $ECHO
+               else
+                   $ECHO "   ln -s $_glti $_gltidir/libtoolize"
+                   $ECHO
+                   $ECHO "Run that as root or with proper permissions to the $_gltidir directory"
+                   $ECHO
+               fi
+               _ltfound=yes
+               break
+           fi
+       done
+    else
+       _ltfound=yes
+    fi
+else
+    _ltfound=yes
+    $ECHO "Using LIBTOOLIZE environment variable override: $LIBTOOLIZE"
+fi
+
+
+############################
+# libtoolize version check #
+############################
+_report_error=no
+if [ ! "x$_ltfound" = "xyes" ] ; then
+    $ECHO
+    $ECHO "ERROR: Unable to locate GNU Libtool."
+    _report_error=yes
+else
+    _version="`$LIBTOOLIZE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`"
+    if [ "x$_version" = "x" ] ; then
+       _version="0.0.0"
+    fi
+    $ECHO "Found GNU Libtool version $_version"
+    version_check "$LIBTOOL_VERSION" "$_version"
+    if [ $? -ne 0 ] ; then
+       _report_error=yes
+    fi
+fi
+if [ "x$_report_error" = "xyes" ] ; then
+    version_error "$LIBTOOL_VERSION" "GNU Libtool"
+    exit 1
+fi
+
+
+#####################
+# check for aclocal #
+#####################
+if [ "x$ACLOCAL" = "x" ] ; then
+    for ACLOCAL in aclocal ; do
+       $VERBOSE_ECHO "Checking aclocal version: $ACLOCAL --version"
+       $ACLOCAL --version > /dev/null 2>&1
+       if [ $? = 0 ] ; then
+           break
+       fi
+    done
+else
+    $ECHO "Using ACLOCAL environment variable override: $ACLOCAL"
+fi
+
+
+########################
+# check for autoheader #
+########################
+if [ "x$AUTOHEADER" = "x" ] ; then
+    for AUTOHEADER in autoheader ; do
+       $VERBOSE_ECHO "Checking autoheader version: $AUTOHEADER --version"
+       $AUTOHEADER --version > /dev/null 2>&1
+       if [ $? = 0 ] ; then
+           break
+       fi
+    done
+else
+    $ECHO "Using AUTOHEADER environment variable override: $AUTOHEADER"
+fi
+
+
+#########################
+# check if version only #
+#########################
+$VERBOSE_ECHO "Checking whether to only output version information"
+if [ "x$VERSION_ONLY" = "xyes" ] ; then
+    $ECHO
+    ident
+    $ECHO "---"
+    $ECHO "Version requested.  No preparation or configuration will be performed."
+    exit 0
+fi
+
+
+#################################
+# PROTECT_FROM_CLOBBER FUNCTION #
+#################################
+protect_from_clobber ( ) {
+    PFC_INIT=1
+
+    # protect COPYING & INSTALL from overwrite by automake.  the
+    # automake force option will (inappropriately) ignore the existing
+    # contents of a COPYING and/or INSTALL files (depending on the
+    # version) instead of just forcing *missing* files like it does
+    # for AUTHORS, NEWS, and README. this is broken but extremely
+    # prevalent behavior, so we protect against it by keeping a backup
+    # of the file that can later be restored.
+
+    for file in COPYING INSTALL ; do
+       if test -f ${file} ; then
+           if test -f ${file}.$$.protect_from_automake.backup ; then
+               $VERBOSE_ECHO "Already backed up ${file} in `pwd`"
+           else
+               $VERBOSE_ECHO "Backing up ${file} in `pwd`"
+               $VERBOSE_ECHO "cp -p ${file} ${file}.$$.protect_from_automake.backup"
+               cp -p ${file} ${file}.$$.protect_from_automake.backup
+           fi
+       fi
+    done
+}
+
+
+##############################
+# RECURSIVE_PROTECT FUNCTION #
+##############################
+recursive_protect ( ) {
+
+    # for projects using recursive configure, run the build
+    # preparation steps for the subdirectories.  this function assumes
+    # START_PATH was set to pwd before recursion begins so that
+    # relative paths work.
+
+    # git 'r done, protect COPYING and INSTALL from being clobbered
+    protect_from_clobber
+
+    if test -d autom4te.cache ; then
+       $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it"
+       $VERBOSE_ECHO "rm -rf autom4te.cache"
+       rm -rf autom4te.cache
+    fi
+
+    # find configure template
+    _configure="`locate_configure_template`"
+    if [ "x$_configure" = "x" ] ; then
+       return
+    fi
+    # $VERBOSE_ECHO "Looking for configure template found `pwd`/$_configure"
+
+    # look for subdirs
+    # $VERBOSE_ECHO "Looking for subdirs in `pwd`"
+    _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[    ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
+    CHECK_DIRS=""
+    for dir in $_det_config_subdirs ; do
+       if test -d "`pwd`/$dir" ; then
+           CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\""
+       fi
+    done
+
+    # process subdirs
+    if [ ! "x$CHECK_DIRS" = "x" ] ; then
+       $VERBOSE_ECHO "Recursively scanning the following directories:"
+       $VERBOSE_ECHO "  $CHECK_DIRS"
+       for dir in $CHECK_DIRS ; do
+           $VERBOSE_ECHO "Protecting files from automake in $dir"
+           cd "$START_PATH"
+           eval "cd $dir"
+
+           # recursively git 'r done
+           recursive_protect
+       done
+    fi
+} # end of recursive_protect
+
+
+#############################
+# RESTORE_CLOBBERED FUNCION #
+#############################
+restore_clobbered ( ) {
+
+    # The automake (and autoreconf by extension) -f/--force-missing
+    # option may overwrite COPYING and INSTALL even if they do exist.
+    # Here we restore the files if necessary.
+
+    spacer=no
+
+    for file in COPYING INSTALL ; do
+       if test -f ${file}.$$.protect_from_automake.backup ; then
+           if test -f ${file} ; then
+           # compare entire content, restore if needed
+           if test "x`cat ${file}`" != "x`cat ${file}.$$.protect_from_automake.backup`" ; then
+               if test "x$spacer" = "xno" ; then
+                   $VERBOSE_ECHO
+                   spacer=yes
+               fi
+               # restore the backup
+               $VERBOSE_ECHO "Restoring ${file} from backup (automake -f likely clobbered it)"
+               $VERBOSE_ECHO "rm -f ${file}"
+               rm -f ${file}
+               $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}"
+               mv ${file}.$$.protect_from_automake.backup ${file}
+           fi # check contents
+           elif test -f ${file}.$$.protect_from_automake.backup ; then
+               $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}"
+               mv ${file}.$$.protect_from_automake.backup ${file}
+           fi # -f ${file}
+       
+           # just in case
+           $VERBOSE_ECHO "rm -f ${file}.$$.protect_from_automake.backup"
+           rm -f ${file}.$$.protect_from_automake.backup
+       fi # -f ${file}.$$.protect_from_automake.backup
+    done
+
+    CONFIGURE="`locate_configure_template`"
+    if [ "x$CONFIGURE" = "x" ] ; then
+       return
+    fi
+
+    _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[     ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
+    if test ! -d "$_aux_dir" ; then
+       _aux_dir=.
+    fi
+
+    for file in config.guess config.sub ltmain.sh ; do
+       if test -f "${_aux_dir}/${file}" ; then
+           $VERBOSE_ECHO "rm -f \"${_aux_dir}/${file}.backup\""
+           rm -f "${_aux_dir}/${file}.backup"
+       fi
+    done
+} # end of restore_clobbered
+
+
+##############################
+# RECURSIVE_RESTORE FUNCTION #
+##############################
+recursive_restore ( ) {
+
+    # restore COPYING and INSTALL from backup if they were clobbered
+    # for each directory recursively.
+
+    # git 'r undone
+    restore_clobbered
+
+    # find configure template
+    _configure="`locate_configure_template`"
+    if [ "x$_configure" = "x" ] ; then
+       return
+    fi
+
+    # look for subdirs
+    _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[    ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
+    CHECK_DIRS=""
+    for dir in $_det_config_subdirs ; do
+       if test -d "`pwd`/$dir" ; then
+           CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\""
+       fi
+    done
+
+    # process subdirs
+    if [ ! "x$CHECK_DIRS" = "x" ] ; then
+       $VERBOSE_ECHO "Recursively scanning the following directories:"
+       $VERBOSE_ECHO "  $CHECK_DIRS"
+       for dir in $CHECK_DIRS ; do
+           $VERBOSE_ECHO "Checking files for automake damage in $dir"
+           cd "$START_PATH"
+           eval "cd $dir"
+
+           # recursively git 'r undone
+           recursive_restore
+       done
+    fi
+} # end of recursive_restore
+
+
+#######################
+# INITIALIZE FUNCTION #
+#######################
+initialize ( ) {
+
+    # this routine performs a variety of directory-specific
+    # initializations.  some are sanity checks, some are preventive,
+    # and some are necessary setup detection.
+    #
+    # this function sets:
+    #   CONFIGURE
+    #   SEARCH_DIRS
+    #   CONFIG_SUBDIRS
+
+    ##################################
+    # check for a configure template #
+    ##################################
+    CONFIGURE="`locate_configure_template`"
+    if [ "x$CONFIGURE" = "x" ] ; then
+       $ECHO
+       $ECHO "A configure.ac or configure.in file could not be located implying"
+       $ECHO "that the GNU Build System is at least not used in this directory.  In"
+       $ECHO "any case, there is nothing to do here without one of those files."
+       $ECHO
+       $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`"
+       exit 1
+    fi
+
+    #####################
+    # detect an aux dir #
+    #####################
+    _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[     ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
+    if test ! -d "$_aux_dir" ; then
+       _aux_dir=.
+    else
+       $VERBOSE_ECHO "Detected auxillary directory: $_aux_dir"
+    fi
+
+    ################################
+    # detect a recursive configure #
+    ################################
+    CONFIG_SUBDIRS=""
+    _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $CONFIGURE | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[     ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
+    for dir in $_det_config_subdirs ; do
+       if test -d "`pwd`/$dir" ; then
+           $VERBOSE_ECHO "Detected recursive configure directory: `pwd`/$dir"
+           CONFIG_SUBDIRS="$CONFIG_SUBDIRS `pwd`/$dir"
+       fi
+    done
+
+    ###########################################################
+    # make sure certain required files exist for GNU projects #
+    ###########################################################
+    _marker_found=""
+    _marker_found_message_intro='Detected non-GNU marker "'
+    _marker_found_message_mid='" in '
+    for marker in foreign cygnus ; do
+       _marker_found_message=${_marker_found_message_intro}${marker}${_marker_found_message_mid}
+       _marker_found="`grep 'AM_INIT_AUTOMAKE.*'${marker} $CONFIGURE`"
+       if [ ! "x$_marker_found" = "x" ] ; then
+           $VERBOSE_ECHO "${_marker_found_message}`basename \"$CONFIGURE\"`"
+           break
+       fi
+       if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then
+           _marker_found="`grep 'AUTOMAKE_OPTIONS.*'${marker} Makefile.am`"
+           if [ ! "x$_marker_found" = "x" ] ; then
+               $VERBOSE_ECHO "${_marker_found_message}Makefile.am"
+               break
+           fi
+       fi
+    done
+    if [ "x${_marker_found}" = "x" ] ; then
+       _suggest_foreign=no
+       for file in AUTHORS COPYING ChangeLog INSTALL NEWS README ; do
+           if [ ! -f $file ] ; then
+               $VERBOSE_ECHO "Touching ${file} since it does not exist"
+               _suggest_foreign=yes
+               touch $file
+           fi
+       done
+
+       if [ "x${_suggest_foreign}" = "xyes" ] ; then
+           $ECHO
+           $ECHO "Warning: Several files expected of projects that conform to the GNU"
+           $ECHO "coding standards were not found.  The files were automatically added"
+           $ECHO "for you since you do not have a 'foreign' declaration specified."
+           $ECHO
+           $ECHO "Considered adding 'foreign' to AM_INIT_AUTOMAKE in `basename \"$CONFIGURE\"`"
+           if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then
+               $ECHO "or to AUTOMAKE_OPTIONS in your top-level Makefile.am file."
+           fi
+           $ECHO
+       fi
+    fi
+
+    ##################################################
+    # make sure certain generated files do not exist #
+    ##################################################
+    for file in config.guess config.sub ltmain.sh ; do
+       if test -f "${_aux_dir}/${file}" ; then
+           $VERBOSE_ECHO "mv -f \"${_aux_dir}/${file}\" \"${_aux_dir}/${file}.backup\""
+           mv -f "${_aux_dir}/${file}" "${_aux_dir}/${file}.backup"
+       fi
+    done
+
+    ############################
+    # search alternate m4 dirs #
+    ############################
+    SEARCH_DIRS=""
+    for dir in m4 ; do
+       if [ -d $dir ] ; then
+           $VERBOSE_ECHO "Found extra aclocal search directory: $dir"
+           SEARCH_DIRS="$SEARCH_DIRS -I $dir"
+       fi
+    done
+
+    ######################################
+    # remove any previous build products #
+    ######################################
+    if test -d autom4te.cache ; then
+       $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it"
+       $VERBOSE_ECHO "rm -rf autom4te.cache"
+       rm -rf autom4te.cache
+    fi
+# tcl/tk (and probably others) have a customized aclocal.m4, so can't delete it
+#     if test -f aclocal.m4 ; then
+#      $VERBOSE_ECHO "Found an aclocal.m4 file, deleting it"
+#      $VERBOSE_ECHO "rm -f aclocal.m4"
+#      rm -f aclocal.m4
+#     fi
+
+} # end of initialize()
+
+
+##############
+# initialize #
+##############
+
+# stash path
+START_PATH="`pwd`"
+
+# Before running autoreconf or manual steps, some prep detection work
+# is necessary or useful.  Only needs to occur once per directory, but
+# does need to traverse the entire subconfigure hierarchy to protect
+# files from being clobbered even by autoreconf.
+recursive_protect
+
+# start from where we started
+cd "$START_PATH"
+
+# get ready to process
+initialize
+
+
+#########################################
+# DOWNLOAD_GNULIB_CONFIG_GUESS FUNCTION #
+#########################################
+
+# TODO - should make sure wget/curl exist and/or work before trying to
+# use them.
+
+download_gnulib_config_guess () {
+    # abuse gitweb to download gnulib's latest config.guess via HTTP
+    config_guess_temp="config.guess.$$.download"
+    ret=1
+    for __cmd in wget curl fetch ; do
+       $VERBOSE_ECHO "Checking for command ${__cmd}"
+       ${__cmd} --version > /dev/null 2>&1
+       ret=$?
+       if [ ! $ret = 0 ] ; then
+           continue
+        fi
+
+       __cmd_version=`${__cmd} --version | head -n 1 | sed -e 's/^[^0-9]\+//' -e 's/ .*//'`
+       $VERBOSE_ECHO "Found ${__cmd} ${__cmd_version}"
+
+       opts=""
+       case ${__cmd} in
+           wget)
+               opts="-O" 
+               ;;
+           curl)
+               opts="-o"
+               ;;
+           fetch)
+               opts="-t 5 -f"
+               ;;
+       esac
+
+       $VERBOSE_ECHO "Running $__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\""
+       eval "$__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\"" > /dev/null 2>&1
+       if [ $? = 0 ] ; then
+           mv -f "${config_guess_temp}" ${_aux_dir}/config.guess
+           ret=0
+           break
+       fi
+    done
+
+    if [ ! $ret = 0 ] ; then
+       $ECHO "Warning: config.guess download failed from: $CONFIG_GUESS_URL"
+       rm -f "${config_guess_temp}"
+    fi
+}
+
+
+##############################
+# LIBTOOLIZE_NEEDED FUNCTION #
+##############################
+libtoolize_needed () {
+    ret=1 # means no, don't need libtoolize
+    for feature in AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT ; do
+       $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
+       found="`grep \"^$feature.*\" $CONFIGURE`"
+       if [ ! "x$found" = "x" ] ; then
+           ret=0 # means yes, need to run libtoolize
+           break
+       fi
+    done
+    return ${ret}
+}
+
+
+
+############################################
+# prepare build via autoreconf or manually #
+############################################
+reconfigure_manually=no
+if [ "x$HAVE_AUTORECONF" = "xyes" ] ; then
+    $ECHO
+    $ECHO $ECHO_N "Automatically preparing build ... $ECHO_C"
+
+    $VERBOSE_ECHO "$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS"
+    autoreconf_output="`$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS 2>&1`"
+    ret=$?
+    $VERBOSE_ECHO "$autoreconf_output"
+
+    if [ ! $ret = 0 ] ; then
+       if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then
+           if [ ! "x`echo \"$autoreconf_output\" | grep libtoolize | grep \"No such file or directory\"`" = "x" ] ; then
+               $ECHO
+               $ECHO "Warning: autoreconf failed but due to what is usually a common libtool"
+               $ECHO "misconfiguration issue.  This problem is encountered on systems that"
+               $ECHO "have installed libtoolize under a different name without providing a"
+               $ECHO "symbolic link or without setting the LIBTOOLIZE environment variable."
+               $ECHO
+               $ECHO "Restarting the preparation steps with LIBTOOLIZE set to $LIBTOOLIZE"
+
+               export LIBTOOLIZE
+               RUN_RECURSIVE=no
+               export RUN_RECURSIVE
+               untrap_abnormal
+
+               $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
+               sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
+               exit $?
+           fi
+       fi
+
+       $ECHO "Warning: $AUTORECONF failed"
+
+       if test -f ltmain.sh ; then
+           $ECHO "libtoolize being run by autoreconf is not creating ltmain.sh in the auxillary directory like it should"
+       fi
+
+       $ECHO "Attempting to run the preparation steps individually"
+       reconfigure_manually=yes
+    else
+       if [ "x$DOWNLOAD" = "xyes" ] ; then
+           if libtoolize_needed ; then
+               download_gnulib_config_guess
+           fi
+       fi
+    fi
+else
+    reconfigure_manually=yes
+fi
+
+
+############################
+# LIBTOOL_FAILURE FUNCTION #
+############################
+libtool_failure ( ) {
+
+    # libtool is rather error-prone in comparison to the other
+    # autotools and this routine attempts to compensate for some
+    # common failures.  the output after a libtoolize failure is
+    # parsed for an error related to AC_PROG_LIBTOOL and if found, we
+    # attempt to inject a project-provided libtool.m4 file.
+
+    _autoconf_output="$1"
+
+    if [ "x$RUN_RECURSIVE" = "xno" ] ; then
+       # we already tried the libtool.m4, don't try again
+       return 1
+    fi
+
+    if test -f "$LIBTOOL_M4" ; then
+       found_libtool="`$ECHO $_autoconf_output | grep AC_PROG_LIBTOOL`"
+       if test ! "x$found_libtool" = "x" ; then
+           if test -f acinclude.m4 ; then
+               rm -f acinclude.m4.$$.backup
+               $VERBOSE_ECHO "cat acinclude.m4 > acinclude.m4.$$.backup"
+               cat acinclude.m4 > acinclude.m4.$$.backup
+           fi
+           $VERBOSE_ECHO "cat \"$LIBTOOL_M4\" >> acinclude.m4"
+           chmod u+w acinclude.m4
+           cat "$LIBTOOL_M4" >> acinclude.m4
+
+           # don't keep doing this
+           RUN_RECURSIVE=no
+           export RUN_RECURSIVE
+           untrap_abnormal
+
+           $ECHO
+           $ECHO "Restarting the preparation steps with libtool macros in acinclude.m4"
+           $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
+           sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
+           exit $?
+       fi
+    fi
+}
+
+
+###########################
+# MANUAL_AUTOGEN FUNCTION #
+###########################
+manual_autogen ( ) {
+
+    ##################################################
+    # Manual preparation steps taken are as follows: #
+    #   aclocal [-I m4]                              #
+    #   libtoolize --automake -c -f                  #
+    #   aclocal [-I m4]                              #
+    #   autoconf -f                                  #
+    #   autoheader                                   #
+    #   automake -a -c -f                            #
+    ##################################################
+
+    ###########
+    # aclocal #
+    ###########
+    $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS"
+    aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`"
+    ret=$?
+    $VERBOSE_ECHO "$aclocal_output"
+    if [ ! $ret = 0 ] ; then $ECHO "ERROR: $ACLOCAL failed" && exit 2 ; fi
+
+    ##############
+    # libtoolize #
+    ##############
+    if libtoolize_needed ; then
+       if [ "x$HAVE_LIBTOOLIZE" = "xyes" ] ; then
+           $VERBOSE_ECHO "$LIBTOOLIZE $LIBTOOLIZE_OPTIONS"
+           libtoolize_output="`$LIBTOOLIZE $LIBTOOLIZE_OPTIONS 2>&1`"
+           ret=$?
+           $VERBOSE_ECHO "$libtoolize_output"
+
+           if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi
+       else
+           if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then
+               $VERBOSE_ECHO "$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS"
+               libtoolize_output="`$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS 2>&1`"
+               ret=$?
+               $VERBOSE_ECHO "$libtoolize_output"
+
+               if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi
+           fi
+       fi
+
+       ###########
+       # aclocal #
+       ###########
+       # re-run again as instructed by libtoolize
+       $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS"
+       aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`"
+       ret=$?
+       $VERBOSE_ECHO "$aclocal_output"
+
+       # libtoolize might put ltmain.sh in the wrong place
+       if test -f ltmain.sh ; then
+           if test ! -f "${_aux_dir}/ltmain.sh" ; then
+               $ECHO
+               $ECHO "Warning:  $LIBTOOLIZE is creating ltmain.sh in the wrong directory"
+               $ECHO
+               $ECHO "Fortunately, the problem can be worked around by simply copying the"
+               $ECHO "file to the appropriate location (${_aux_dir}/).  This has been done for you."
+               $ECHO
+               $VERBOSE_ECHO "cp -p ltmain.sh \"${_aux_dir}/ltmain.sh\""
+               cp -p ltmain.sh "${_aux_dir}/ltmain.sh"
+               $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C"
+           fi
+       fi # ltmain.sh
+
+       if [ "x$DOWNLOAD" = "xyes" ] ; then
+           download_gnulib_config_guess
+       fi
+    fi # libtoolize_needed
+
+    ############
+    # autoconf #
+    ############
+    $VERBOSE_ECHO
+    $VERBOSE_ECHO "$AUTOCONF $AUTOCONF_OPTIONS"
+    autoconf_output="`$AUTOCONF $AUTOCONF_OPTIONS 2>&1`"
+    ret=$?
+    $VERBOSE_ECHO "$autoconf_output"
+
+    if [ ! $ret = 0 ] ; then
+       # retry without the -f and check for usage of macros that are too new
+       ac2_59_macros="AC_C_RESTRICT AC_INCLUDES_DEFAULT AC_LANG_ASSERT AC_LANG_WERROR AS_SET_CATFILE"
+       ac2_55_macros="AC_COMPILER_IFELSE AC_FUNC_MBRTOWC AC_HEADER_STDBOOL AC_LANG_CONFTEST AC_LANG_SOURCE AC_LANG_PROGRAM AC_LANG_CALL AC_LANG_FUNC_TRY_LINK AC_MSG_FAILURE AC_PREPROC_IFELSE"
+       ac2_54_macros="AC_C_BACKSLASH_A AC_CONFIG_LIBOBJ_DIR AC_GNU_SOURCE AC_PROG_EGREP AC_PROG_FGREP AC_REPLACE_FNMATCH AC_FUNC_FNMATCH_GNU AC_FUNC_REALLOC AC_TYPE_MBSTATE_T"
+
+       macros_to_search=""
+       ac_major="`echo ${AUTOCONF_VERSION}. | cut -d. -f1 | sed 's/[^0-9]//g'`"
+       ac_minor="`echo ${AUTOCONF_VERSION}. | cut -d. -f2 | sed 's/[^0-9]//g'`"
+
+       if [ $ac_major -lt 2 ] ; then
+           macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros"
+       else
+           if [ $ac_minor -lt 54 ] ; then
+               macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros"
+           elif [ $ac_minor -lt 55 ] ; then
+               macros_to_search="$ac2_59_macros $ac2_55_macros"
+           elif [ $ac_minor -lt 59 ] ; then
+               macros_to_search="$ac2_59_macros"
+           fi
+       fi
+
+       configure_ac_macros=__none__
+       for feature in $macros_to_search ; do
+           $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
+           found="`grep \"^$feature.*\" $CONFIGURE`"
+           if [ ! "x$found" = "x" ] ; then
+               if [ "x$configure_ac_macros" = "x__none__" ] ; then
+                   configure_ac_macros="$feature"
+               else
+                   configure_ac_macros="$feature $configure_ac_macros"
+               fi
+           fi
+       done
+       if [ ! "x$configure_ac_macros" = "x__none__" ] ; then
+           $ECHO
+           $ECHO "Warning:  Unsupported macros were found in $CONFIGURE"
+           $ECHO
+           $ECHO "The `basename \"$CONFIGURE\"` file was scanned in order to determine if any"
+           $ECHO "unsupported macros are used that exceed the minimum version"
+           $ECHO "settings specified within this file.  As such, the following macros"
+           $ECHO "should be removed from configure.ac or the version numbers in this"
+           $ECHO "file should be increased:"
+           $ECHO
+           $ECHO "$configure_ac_macros"
+           $ECHO
+           $ECHO $ECHO_N "Ignorantly continuing build preparation ... $ECHO_C"
+       fi
+
+       ###################
+       # autoconf, retry #
+       ###################
+       $VERBOSE_ECHO
+       $VERBOSE_ECHO "$AUTOCONF"
+       autoconf_output="`$AUTOCONF 2>&1`"
+       ret=$?
+       $VERBOSE_ECHO "$autoconf_output"
+
+       if [ ! $ret = 0 ] ; then
+           # test if libtool is busted
+           libtool_failure "$autoconf_output"
+
+           # let the user know what went wrong
+           cat <<EOF
+$autoconf_output
+EOF
+           $ECHO "ERROR: $AUTOCONF failed"
+           exit 2
+       else
+           # autoconf sans -f and possibly sans unsupported options succeed so warn verbosely
+           $ECHO
+           $ECHO "Warning: autoconf seems to have succeeded by removing the following options:"
+           $ECHO "     AUTOCONF_OPTIONS=\"$AUTOCONF_OPTIONS\""
+           $ECHO
+           $ECHO "Removing those options should not be necessary and indicate some other"
+           $ECHO "problem with the build system.  The build preparation is highly suspect"
+           $ECHO "and may result in configuration or compilation errors.  Consider"
+           if [ "x$VERBOSE_ECHO" = "x:" ] ; then
+               $ECHO "rerunning the build preparation with verbose output enabled."
+               $ECHO " $AUTOGEN_SH --verbose"
+           else
+               $ECHO "reviewing the minimum GNU Autotools version settings contained in"
+               $ECHO "this script along with the macros being used in your `basename \"$CONFIGURE\"` file."
+           fi
+           $ECHO
+           $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C"
+       fi # autoconf ret = 0
+    fi # autoconf ret = 0
+
+    ##############
+    # autoheader #
+    ##############
+    need_autoheader=no
+    for feature in AM_CONFIG_HEADER AC_CONFIG_HEADER ; do
+       $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
+       found="`grep \"^$feature.*\" $CONFIGURE`"
+       if [ ! "x$found" = "x" ] ; then
+           need_autoheader=yes
+           break
+       fi
+    done
+    if [ "x$need_autoheader" = "xyes" ] ; then
+       $VERBOSE_ECHO "$AUTOHEADER $AUTOHEADER_OPTIONS"
+       autoheader_output="`$AUTOHEADER $AUTOHEADER_OPTIONS 2>&1`"
+       ret=$?
+       $VERBOSE_ECHO "$autoheader_output"
+       if [ ! $ret = 0 ] ; then $ECHO "ERROR: $AUTOHEADER failed" && exit 2 ; fi
+    fi # need_autoheader
+
+    ############
+    # automake #
+    ############
+    need_automake=no
+    for feature in AM_INIT_AUTOMAKE ; do
+       $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
+       found="`grep \"^$feature.*\" $CONFIGURE`"
+       if [ ! "x$found" = "x" ] ; then
+           need_automake=yes
+           break
+       fi
+    done
+
+    if [ "x$need_automake" = "xyes" ] ; then
+       $VERBOSE_ECHO "$AUTOMAKE $AUTOMAKE_OPTIONS"
+       automake_output="`$AUTOMAKE $AUTOMAKE_OPTIONS 2>&1`"
+       ret=$?
+       $VERBOSE_ECHO "$automake_output"
+
+       if [ ! $ret = 0 ] ; then
+
+           ###################
+           # automake, retry #
+           ###################
+           $VERBOSE_ECHO
+           $VERBOSE_ECHO "$AUTOMAKE $ALT_AUTOMAKE_OPTIONS"
+           # retry without the -f
+           automake_output="`$AUTOMAKE $ALT_AUTOMAKE_OPTIONS 2>&1`"
+           ret=$?
+           $VERBOSE_ECHO "$automake_output"
+
+           if [ ! $ret = 0 ] ; then
+               # test if libtool is busted
+               libtool_failure "$automake_output"
+
+               # let the user know what went wrong
+               cat <<EOF
+$automake_output
+EOF
+               $ECHO "ERROR: $AUTOMAKE failed"
+               exit 2
+           fi # automake retry
+       fi # automake ret = 0
+    fi # need_automake
+} # end of manual_autogen
+
+
+#####################################
+# RECURSIVE_MANUAL_AUTOGEN FUNCTION #
+#####################################
+recursive_manual_autogen ( ) {
+
+    # run the build preparation steps manually for this directory
+    manual_autogen
+
+    # for projects using recursive configure, run the build
+    # preparation steps for the subdirectories.
+    if [ ! "x$CONFIG_SUBDIRS" = "x" ] ; then
+       $VERBOSE_ECHO "Recursively configuring the following directories:"
+       $VERBOSE_ECHO "  $CONFIG_SUBDIRS"
+       for dir in $CONFIG_SUBDIRS ; do
+           $VERBOSE_ECHO "Processing recursive configure in $dir"
+           cd "$START_PATH"
+           cd "$dir"
+
+           # new directory, prepare
+           initialize
+
+           # run manual steps for the subdir and any others below
+           recursive_manual_autogen
+       done
+    fi
+}
+
+
+################################
+# run manual preparation steps #
+################################
+if [ "x$reconfigure_manually" = "xyes" ] ; then
+    $ECHO
+    $ECHO $ECHO_N "Preparing build ... $ECHO_C"
+
+    recursive_manual_autogen
+fi
+
+
+#########################
+# restore and summarize #
+#########################
+cd "$START_PATH"
+
+# restore COPYING and INSTALL from backup if necessary
+recursive_restore
+
+# make sure we end up with a configure script
+config_ac="`locate_configure_template`"
+config="`echo $config_ac | sed 's/\.ac$//' | sed 's/\.in$//'`"
+if [ "x$config" = "x" ] ; then
+    $VERBOSE_ECHO "Could not locate the configure template (from `pwd`)"
+fi
+
+# summarize
+$ECHO "done"
+$ECHO
+if test "x$config" = "x" -o ! -f "$config" ; then
+    $ECHO "WARNING: The $PROJECT build system should now be prepared but there"
+    $ECHO "does not seem to be a resulting configure file.  This is unexpected"
+    $ECHO "and likely the result of an error.  You should run $NAME_OF_AUTOGEN"
+    $ECHO "with the --verbose option to get more details on a potential"
+    $ECHO "misconfiguration."
+else
+    $ECHO "The $PROJECT build system is now prepared.  To build here, run:"
+    $ECHO "  $config"
+    $ECHO "  make"
+fi
+
+
+# Local Variables:
+# mode: sh
+# tab-width: 8
+# sh-basic-offset: 4
+# sh-indentation: 4
+# indent-tabs-mode: t
+# End:
+# ex: shiftwidth=4 tabstop=8
diff --git a/codecov.yml b/codecov.yml
new file mode 100644 (file)
index 0000000..5ef87f4
--- /dev/null
@@ -0,0 +1,27 @@
+coverage:
+  precision: 2
+  round: down
+  range: 50...100
+
+  status:
+    # Learn more at http://docs.codecov.io/docs/codecov-yaml
+    project: true
+
+    project:                   # measuring the overall project coverage
+      default:                 # context, you can create multiple ones with custom titles
+        enabled: yes           # must be yes|true to enable this status
+        target: auto           # specify the target coverage for each commit status
+                               #   option: "auto" (must increase from parent commit or pull request base)
+                               #   option: "X%" a static target percentage to hit
+        threshold: 1           # allowed to drop X% and still result in a "success" commit status
+
+    patch:                     # pull requests only: this commit status will measure the
+                               # entire pull requests Coverage Diff. Checking if the lines
+                               # adjusted are covered at least X%.
+      default:
+        enabled: yes             # must be yes|true to enable this status
+        target: 50%              # specify the target "X%" coverage to hit
+
+  ignore:
+    - "tests"
+    - "fplll/io/json.hpp"
\ No newline at end of file
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..b1b808a
--- /dev/null
@@ -0,0 +1,182 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.61)
+AC_INIT(fplll, 5.3.1)
+AC_CONFIG_SRCDIR([fplll/fplll.cpp])
+
+# cf http://comments.gmane.org/gmane.comp.sysutils.autoconf.general/15737
+
+# First extract pieces from the version number string
+FPLLL_MAJOR_VERSION=`echo AC_PACKAGE_VERSION | awk -F. '{print $1}'`
+FPLLL_MINOR_VERSION=`echo AC_PACKAGE_VERSION | awk -F. '{print $2}'`
+FPLLL_MICRO_VERSION=`echo AC_PACKAGE_VERSION | awk -F. '{print $3}'`
+FPLLL_VERSION=$FPLLL_MAJOR_VERSION.$FPLLL_MINOR_VERSION.$FPLLL_MICRO_VERSION$FPLLL_MICRO_VERSION_SUFFIX
+FPLLL_VERSION_NUMBER=`expr $FPLLL_MAJOR_VERSION \* 1000000 + $FPLLL_MINOR_VERSION \* 1000 + $FPLLL_MICRO_VERSION`
+
+AC_CONFIG_MACRO_DIR([m4])
+AM_INIT_AUTOMAKE([foreign subdir-objects])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_CONFIG_HEADER(config.h)
+
+DEFAULT_CXXFLAGS="-O3 -Wall"
+
+CXXFLAGS=${CXXFLAGS:-$DEFAULT_CXXFLAGS}
+
+LT_INIT
+
+# The version of the libtool library is of the form current:revision:age
+#
+# See http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+#
+# When doing a release, they should be updated like this:
+# 1. If no interfaces changed, only implementations: just increment
+#    revision.
+# 2. If interfaces were added, none removed: increment current, set
+#    revision to zero and increment age.
+# 3. If interfaces were removed (breaks backward compatibility): increment
+#    current, and set both revision and age to zero.
+
+FPLLL_LT_CURRENT=6
+FPLLL_LT_REVISION=1
+FPLLL_LT_AGE=0
+
+AC_SUBST(FPLLL_LT_CURRENT)
+AC_SUBST(FPLLL_LT_REVISION)
+AC_SUBST(FPLLL_LT_AGE)
+
+AC_PROG_INSTALL
+
+# Checks for programs.
+AC_LANG_CPLUSPLUS
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_MAKE_SET
+AX_CXX_COMPILE_STDCXX([11],[noext],[mandatory])
+
+# Checks for libraries.
+AC_ARG_ENABLE(mpir,
+        AS_HELP_STRING([--enable-mpir],
+         [Enable MPIR instead of GMP]))
+
+AS_IF([test "x$enable_mpir" = "xyes"], [
+       AC_ARG_WITH(mpir,
+          AS_HELP_STRING([--with-mpir=@<:@=DIR@:>@], [MPIR install directory]), [
+             CPPFLAGS="$CPPFLAGS -I$withval/include"
+             LDFLAGS="$LDFLAGS -L$withval/lib"
+             mpir_lib_path="$withval/lib"
+          ])
+       AC_CHECK_LIB(mpir, __gmpz_init, , [AC_MSG_ERROR(
+       [MPIR not found, see http://mpir.org])])
+       AC_CHECK_LIB(mpir, __gmp_get_memory_functions, , [AC_MSG_ERROR(
+       [MPIR version too old, need >= 1.0.0, see http://mpir.org])])
+        LIBGMP="-lmpir"
+])
+
+AS_IF([test "x$enable_mpir" != "xyes"], [
+       AC_ARG_WITH(gmp,
+          AS_HELP_STRING([--with-gmp=@<:@=DIR@:>@], [GMP install directory]), [
+             CPPFLAGS="$CPPFLAGS -I$withval/include"
+             LDFLAGS="$LDFLAGS -L$withval/lib"
+             mpir_lib_path="$withval/lib"
+          ])
+       AC_CHECK_LIB(gmp, __gmpz_init, , [AC_MSG_ERROR(
+       [GNU MP not found, see http://mpir.org])])
+       AC_CHECK_LIB(gmp, __gmp_get_memory_functions, , [AC_MSG_ERROR(
+       [GMP version too old, need >= 4.2.0, see http://gmplib.org])])
+        LIBGMP="-lgmp"
+])
+
+AC_SUBST(LIBGMP)
+
+AC_ARG_WITH(mpfr,
+   AS_HELP_STRING([--with-mpfr=@<:@=DIR@:>@], [MPFR install directory]), [
+      CPPFLAGS="$CPPFLAGS -I$withval/include"
+       LDFLAGS="$LDFLAGS -L$withval/lib"
+       mpfr_lib_path="$withval/lib"
+   ])
+
+AC_CHECK_LIB(mpfr, mpfr_add, , [AC_MSG_ERROR(
+[MPFR not found, see http://www.mpfr.org])])
+
+AC_CHECK_LIB(mpfr, mpfr_fms, , [AC_MSG_ERROR(
+[MPFR version too old, need >= 2.3.0, see http://www.mpfr.org])])
+
+AC_ARG_WITH(qd, AS_HELP_STRING([--with-qd=@<:@=DIR@:>@], [quaddouble install directory]),)
+
+AS_IF([test "x$with_qd" != "xno"], [
+       CPPFLAGS="$CPPFLAGS -I$with_qd/include"
+       LDFLAGS="$LDFLAGS -L$with_qd/lib"
+       qd_lib_path="$with_qd/lib"
+       AC_CHECK_HEADER(qd/dd_real.h,
+           have_libqd="yes",
+           have_libqd="no")
+      ])
+
+AS_IF([test "x${have_libqd}" = "xyes"], [
+    LIBQD_LIBADD="-lqd"
+    AC_DEFINE([FPLLL_WITH_QD], [1], [defined when libqd-dev is available])])
+
+AC_SUBST(LIBQD_LIBADD)
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([limits.h cstdio iostream string limits vector])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_SIZE_T
+AC_C_VOLATILE
+
+# Checks for library functions.
+AC_FUNC_STRTOD
+AC_CHECK_FUNCS([floor pow rint sqrt strtol])
+
+AX_PTHREAD()
+
+# enumeration dimension
+max_enum_dim=256
+
+AC_ARG_WITH(max-enum-dim,
+        AS_HELP_STRING([--with-max-enum-dim@<:@=DIM@:>@],
+         [Maximum supported enumeration dimension (default: 256).]),
+        [max_enum_dim=$withval])
+
+AC_DEFINE_UNQUOTED([FPLLL_MAX_ENUM_DIM], $max_enum_dim, [maximum supported enumeration dimension])
+
+AC_ARG_ENABLE(recursive-enum,
+        AS_HELP_STRING([--disable-recursive-enum],
+         [Disable recursive enumeration]))
+
+AS_IF([test "x$enable_recursive_enum" != "xno"], [
+        AC_DEFINE([FPLLL_WITH_RECURSIVE_ENUM], [1], [recursive enumeration enabled])])
+
+
+max_parallel_enum_dim=80
+AC_ARG_WITH(max-parallel-enum-dim,
+        AS_HELP_STRING([--with-max-parallel-enum-dim@<:@=DIM@:>@],
+         [Maximum supported parallel enumeration dimension (max=160, default=120, disable=0).]),
+        [max_parallel_enum_dim=$withval])
+
+AC_DEFINE_UNQUOTED([FPLLL_MAX_PARALLEL_ENUM_DIM], $max_parallel_enum_dim, [parallel enumeration enabled])
+AM_CONDITIONAL(FPLLL_PARALLEL_ENUM, test "x$max_parallel_enum_dim" != "x0")
+
+# Store version numbers in header
+
+AC_DEFINE_UNQUOTED([FPLLL_MAJOR_VERSION],[$FPLLL_MAJOR_VERSION],[major version])
+AC_DEFINE_UNQUOTED([FPLLL_MINOR_VERSION],[$FPLLL_MINOR_VERSION],[minor version])
+AC_DEFINE_UNQUOTED([FPLLL_MICRO_VERSION],[$FPLLL_MICRO_VERSION],[micro version])
+AC_DEFINE_UNQUOTED([FPLLL_VERSION],[$FPLLL_VERSION],[full version])
+AC_DEFINE_UNQUOTED([FPLLL_VERSION_INFO],[$FPLLL_VERSION_INFO],[long version string])
+
+AC_CONFIG_HEADERS([fplll/fplll_config.h])
+
+AC_CONFIG_FILES([Makefile
+                 fplll/Makefile
+                 tests/Makefile
+                 fplll.pc])
+AC_OUTPUT
+
diff --git a/doc/templates/customdoxygen.css b/doc/templates/customdoxygen.css
new file mode 100644 (file)
index 0000000..725ee7e
--- /dev/null
@@ -0,0 +1,485 @@
+h1, .h1, h2, .h2, h3, .h3{
+    font-weight: 200 !important;
+}
+
+.sm-dox a span.sub-arrow {
+    position: absolute;
+    top: 50%;
+    margin-top: -14px;
+    left: auto;
+    right: 3px;
+    width: 28px;
+    height: 28px;
+    overflow: hidden;
+    font: bold 12px / 28px monospace !important;
+    text-align: center;
+    text-shadow: none;
+    background: rgba(255, 255, 255, 0.5);
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    border-radius: 5px
+}
+
+/* Handing of arrow-carets in the smart menus */
+.sm-dox a.highlighted span.sub-arrow:before {
+    display: block;
+    content: '-'
+}
+
+.sm-dox a span.sub-arrow {
+    top: 50%;
+    margin-top: -2px;
+    right: 12px;
+    width: 0;
+    height: 0;
+    border-width: 4px;
+    border-style: solid dashed dashed dashed;
+    border-color: #283a5d transparent transparent transparent;
+    background: transparent;
+    -moz-border-radius: 0;
+    -webkit-border-radius: 0;
+    border-radius: 0
+}
+
+.sm-dox a:hover span.sub-arrow {
+    border-color: red transparent transparent transparent
+}
+
+
+.sm-dox.sm-rtl a.has-submenu {
+    padding-right: 12px;
+    padding-left: 24px
+}
+
+.sm-dox.sm-rtl a span.sub-arrow {
+    right: auto;
+    left: 12px
+}
+
+.sm-dox.sm-rtl.sm-vertical a.has-submenu {
+    padding: 10px 20px
+}
+
+.sm-dox.sm-rtl.sm-vertical a span.sub-arrow {
+    right: auto;
+    left: 8px;
+    border-style: dashed solid dashed dashed;
+    border-color: transparent #555 transparent transparent
+}
+
+.sm-dox.sm-rtl ul a.has-submenu {
+    padding: 10px 20px !important
+}
+
+.sm-dox.sm-rtl ul a span.sub-arrow {
+    right: auto;
+    left: 8px;
+    border-style: dashed solid dashed dashed;
+    border-color: transparent #555 transparent transparent
+}
+
+.sm-dox.sm-vertical a.disabled {
+}
+
+.sm-dox.sm-vertical a span.sub-arrow {
+    right: 8px;
+    top: 50%;
+    margin-top: -5px;
+    border-width: 5px;
+    border-style: dashed dashed dashed solid;
+    border-color: transparent transparent transparent #555
+}
+.sm-dox ul a span.sub-arrow {
+    right: 8px;
+    top: 50%;
+    margin-top: -5px;
+    border-width: 5px;
+    border-color: transparent transparent transparent #555;
+    border-style: dashed dashed dashed solid
+}
+
+#navrow1, #navrow2, #navrow3, #navrow4, #navrow5{
+    border-bottom: 1px solid #EEEEEE;
+}
+
+.adjust-right {
+margin-left: 30px !important;
+font-size: 1.15em !important;
+}
+.navbar{
+ border: 0px solid #222 !important;
+}
+table{
+    white-space:pre-wrap !important;
+}
+/*
+ ===========================
+ */
+
+
+/* Sticky footer styles
+-------------------------------------------------- */
+html,
+body {
+    height: 100%;
+    /* The html and body elements cannot have any padding or margin. */
+}
+
+/* Wrapper for page content to push down footer */
+#wrap {
+    min-height: 100%;
+    height: auto;
+    /* Negative indent footer by its height */
+    margin: 0 auto -60px;
+    /* Pad bottom by footer height */
+    padding: 0 0 60px;
+}
+
+/* Set the fixed height of the footer here */
+#footer {
+    font-size: 0.9em;
+    padding: 8px 0px;
+    background-color: #f5f5f5;
+}
+
+.footer-row {
+    line-height: 44px;
+}
+
+#footer > .container {
+    padding-left: 15px;
+    padding-right: 15px;
+}
+
+.footer-follow-icon {
+    margin-left: 3px;
+    text-decoration: none !important;
+}
+
+.footer-follow-icon img {
+    width: 20px;
+}
+
+.footer-link {
+    padding-top: 5px;
+    display: inline-block;
+    color: #999999;
+    text-decoration: none;
+}
+
+.footer-copyright {
+    text-align: center;
+}
+
+
+@media (min-width: 992px) {
+    .footer-row {
+        text-align: left;
+    }
+
+    .footer-icons {
+        text-align: right;
+    }
+}
+@media (max-width: 991px) {
+    .footer-row {
+        text-align: center;
+    }
+
+    .footer-icons {
+        text-align: center;
+    }
+}
+
+/* DOXYGEN Code Styles
+----------------------------------- */
+
+
+a.qindex {
+    font-weight: bold;
+}
+
+a.qindexHL {
+    font-weight: bold;
+    background-color: #9CAFD4;
+    color: #ffffff;
+    border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+    color: #ffffff;
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+    color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+    color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+    margin-left: -1cm;
+}
+
+pre.fragment {
+    border: 1px solid #C4CFE5;
+    background-color: #FBFCFD;
+    padding: 4px 6px;
+    margin: 4px 8px 4px 2px;
+    overflow: auto;
+    word-wrap: break-word;
+    font-size:  9pt;
+    line-height: 125%;
+    font-family: monospace, fixed;
+    font-size: 105%;
+}
+
+div.fragment {
+    padding: 4px 6px;
+    margin: 4px 8px 4px 2px;
+    border: 1px solid #C4CFE5;
+}
+
+div.line {
+    font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+    font-size: 12px;
+    min-height: 13px;
+    line-height: 1.0;
+    text-wrap: unrestricted;
+    white-space: -moz-pre-wrap; /* Moz */
+    white-space: -pre-wrap;     /* Opera 4-6 */
+    white-space: -o-pre-wrap;   /* Opera 7 */
+    white-space: pre-wrap;      /* CSS3  */
+    word-wrap: normal;      /* IE 5.5+ */
+    text-indent: -53px;
+    padding-left: 53px;
+    padding-bottom: 0px;
+    margin: 0px;
+    -webkit-transition-property: background-color, box-shadow;
+    -webkit-transition-duration: 0.5s;
+    -moz-transition-property: background-color, box-shadow;
+    -moz-transition-duration: 0.5s;
+    -ms-transition-property: background-color, box-shadow;
+    -ms-transition-duration: 0.5s;
+    -o-transition-property: background-color, box-shadow;
+    -o-transition-duration: 0.5s;
+    transition-property: background-color, box-shadow;
+    transition-duration: 0.5s;
+}
+div.line:hover{
+    background-color: #FBFF00;
+}
+
+div.line.glow {
+    background-color: cyan;
+    box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+    padding-right: 4px;
+    text-align: right;
+    color:rgba(0,0,0,0.3);
+    border-right: 1px solid #EEE;
+    border-left: 1px solid #EEE;
+    background-color: #FFF;
+    white-space: pre;
+    font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace ;
+}
+span.lineno a {
+    background-color: #FAFAFA;
+    cursor:pointer;
+}
+
+span.lineno a:hover {
+    background-color: #EFE200;
+    color: #1e1e1e;
+}
+
+div.groupHeader {
+    margin-left: 16px;
+    margin-top: 12px;
+    font-weight: bold;
+}
+
+div.groupText {
+    margin-left: 16px;
+    font-style: italic;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+    color: #008000
+}
+
+span.keywordtype {
+    color: #604020
+}
+
+span.keywordflow {
+    color: #e08000
+}
+
+span.comment {
+    color: #800000
+}
+
+span.preprocessor {
+    color: #806020
+}
+
+span.stringliteral {
+    color: #002080
+}
+
+span.charliteral {
+    color: #008080
+}
+
+span.vhdldigit {
+    color: #ff00ff
+}
+
+span.vhdlchar {
+    color: #000000
+}
+
+span.vhdlkeyword {
+    color: #700070
+}
+
+span.vhdllogic {
+    color: #ff0000
+}
+
+blockquote {
+    background-color: #F7F8FB;
+    border-left: 2px solid #9CAFD4;
+    margin: 0 24px 0 4px;
+    padding: 0 12px 0 16px;
+}
+
+/*---------------- Search Box */
+
+#search-box {
+  margin: 10px 0px;
+}
+#search-box .close {
+  display: none;
+  position: absolute;
+  right: 0px;
+  padding: 6px 12px;
+  z-index: 5;
+}
+
+/*---------------- Search results window */
+
+#search-results-window {
+  display: none;
+}
+
+iframe#MSearchResults {
+  width: 100%;
+  height: 15em;
+}
+
+.SRChildren {
+  padding-left: 3ex; padding-bottom: .5em
+}
+.SRPage .SRChildren {
+  display: none;
+}
+a.SRScope {
+  display: block;
+}
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+  text-decoration: underline;
+}
+span.SRScope {
+  padding-left: 4px;
+}
+.SRResult {
+  display: none;
+}
+
+/* class and file list */
+.directory .icona,
+.directory .arrow {
+  height: auto;
+}
+.directory .icona .icon {
+  height: 16px;
+}
+.directory .icondoc {
+  background-position: 0px 0px;
+  height: 20px;
+}
+.directory .iconfopen {
+  background-position: 0px 0px;
+}
+.directory td.entry {
+  padding: 7px 8px 6px 8px;
+}
+
+.table > tbody > tr > td.memSeparator {
+  line-height: 0;
+  .table-hover;
+
+}
+
+.memItemLeft, .memTemplItemLeft {
+  white-space: normal;
+}
+
+/* enumerations */
+.panel-body thead > tr {
+  background-color: #e0e0e0;
+}
+
+/* todo lists */
+.todoname,
+.todoname a {
+  font-weight: bold;
+}
+
+/* Class title */
+.summary {
+  margin-top: 25px;
+}
+.page-header {
+  margin: 20px 0px !important;
+}
+.page-header .title {
+  display: inline-block;
+}
+.page-header .pull-right {
+  margin-top: 0.3em;
+  margin-left: 0.5em;
+}
+.page-header .label {
+  font-size: 50%;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
diff --git a/doc/templates/doxy-boot.js b/doc/templates/doxy-boot.js
new file mode 100644 (file)
index 0000000..ad4878c
--- /dev/null
@@ -0,0 +1,278 @@
+$( document ).ready(function() {
+    $("div.headertitle").addClass("page-header");
+    $("div.title").addClass("h1");
+
+    $('li > a[href="index.html"] > span').before("<i class='fa fa-cog'></i> ");
+    $('li > a[href="modules.html"] > span').before("<i class='fa fa-square'></i> ");
+    $('li > a[href="namespaces.html"] > span').before("<i class='fa fa-bars'></i> ");
+    $('li > a[href="annotated.html"] > span').before("<i class='fa fa-list-ul'></i> ");
+    $('li > a[href="classes.html"] > span').before("<i class='fa fa-book'></i> ");
+    $('li > a[href="inherits.html"] > span').before("<i class='fa fa-sitemap'></i> ");
+    $('li > a[href="functions.html"] > span').before("<i class='fa fa-list'></i> ");
+    $('li > a[href="functions_func.html"] > span').before("<i class='fa fa-list'></i> ");
+    $('li > a[href="functions_vars.html"] > span').before("<i class='fa fa-list'></i> ");
+    $('li > a[href="functions_enum.html"] > span').before("<i class='fa fa-list'></i> ");
+    $('li > a[href="functions_eval.html"] > span').before("<i class='fa fa-list'></i> ");
+    $('img[src="ftv2ns.png"]').replaceWith('<span class="label label-danger">N</span> ');
+    $('img[src="ftv2cl.png"]').replaceWith('<span class="label label-danger">C</span> ');
+
+    $("ul.tablist").addClass("nav nav-pills nav-justified");
+    $("ul.tablist").css("margin-top", "0.5em");
+    $("ul.tablist").css("margin-bottom", "0.5em");
+    $("li.current").addClass("active");
+    $("iframe").attr("scrolling", "yes");
+
+    $("#nav-path > ul").addClass("breadcrumb");
+
+    $("table.params").addClass("table");
+    $("div.ingroups").wrapInner("<span class='text-nowrap'></span>");
+    $("div.levels").css("margin", "0.5em");
+    $("div.levels > span").addClass("btn btn-default btn-xs");
+    $("div.levels > span").css("margin-right", "0.25em");
+
+    $("table.directory").addClass("table table-striped");
+    $("div.summary > a").addClass("btn btn-default btn-xs");
+    $("table.fieldtable").addClass("table");
+    $(".fragment").addClass("well");
+    $(".memitem").addClass("panel panel-default");
+    $(".memproto").addClass("panel-heading");
+    $(".memdoc").addClass("panel-body");
+    $("span.mlabel").addClass("label label-info");
+
+    $("table.memberdecls").addClass("table");
+    $("[class^=memitem]").addClass("active");
+
+    $("div.ah").addClass("btn btn-default");
+    $("span.mlabels").addClass("pull-right");
+    $("table.mlabels").css("width", "100%")
+    $("td.mlabels-right").addClass("pull-right");
+
+    $("div.ttc").addClass("panel panel-primary");
+    $("div.ttname").addClass("panel-heading");
+    $("div.ttname a").css("color", 'white');
+    $("div.ttdef,div.ttdoc,div.ttdeci").addClass("panel-body");
+
+    $('div.fragment.well div.line:first').css('margin-top', '2px');
+    $('div.fragment.well div.line:last').css('margin-bottom', '2px');
+
+       $('table.doxtable').removeClass('doxtable').addClass('table table-striped table-bordered').each(function(){
+               $(this).prepend('<thead></thead>');
+               $(this).find('tbody > tr:first').prependTo($(this).find('thead'));
+
+               $(this).find('td > span.success').parent().addClass('success');
+               $(this).find('td > span.warning').parent().addClass('warning');
+               $(this).find('td > span.danger').parent().addClass('danger');
+       });
+
+
+
+    if($('div.fragment.well div.ttc').length > 0)
+    {
+        $('div.fragment.well div.line:first').parent().removeClass('fragment well');
+    }
+
+    $('table.memberdecls').find('.memItemRight').each(function(){
+        $(this).contents().appendTo($(this).siblings('.memItemLeft'));
+        $(this).siblings('.memItemLeft').attr('align', 'left');
+    });
+
+    $('table.memberdecls').find('.memTemplItemRight').each(function(){
+        $(this).contents().appendTo($(this).siblings('.memTemplItemLeft'));
+        $(this).siblings('.memTemplItemLeft').attr('align', 'left');
+    });
+
+       function getOriginalWidthOfImg(img_element) {
+               var t = new Image();
+               t.src = (img_element.getAttribute ? img_element.getAttribute("src") : false) || img_element.src;
+               return t.width;
+       }
+
+       $('div.dyncontent').find('img').each(function(){
+               if(getOriginalWidthOfImg($(this)[0]) > $('#content>div.container').width())
+                       $(this).css('width', '100%');
+       });
+
+    var nav_container = $('#main-nav').detach();
+    nav_container.addClass('nav navbar-nav navbar-right');
+    $('nav > .container').append(nav_container);
+    $('#main-nav > ul').addClass('nav navbar-nav navbar-right');
+    $('#main-nav * li > ul').addClass('dropdown-menu');
+
+
+
+  /* responsive search box */
+  //$('#MSearchBox').parent().remove();
+
+    /*
+  var nav_container = $('<div class="row"></div>');
+  $('#navrow1').parent().prepend(nav_container);
+
+  var left_nav = $('<div class="col-md-9"></div>');
+  for (i = 0; i < 6; i++) {
+    var navrow = $('#navrow' + i + ' > ul.tablist').detach();
+    left_nav.append(navrow);
+    $('#navrow' + i).remove();
+  }
+  var right_nav = $('<div class="col-md-3"></div>').append('\
+    <div id="search-box" class="input-group">\
+      <div class="input-group-btn">\
+        <button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">\
+          <span class="glyphicon glyphicon-search"></span> <span class="caret"></span>\
+        </button>\
+        <ul class="dropdown-menu">\
+        </ul>\
+      </div>\
+      <button id="search-close" type="button" class="close" aria-label="Close"><span aria-hidden="true">&times;</span></button>\
+      <input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">\
+    </div>');
+  $(nav_container).append(left_nav);
+  $(nav_container).append(right_nav);
+
+
+  $('#MSearchSelectWindow .SelectionMark').remove();
+  var search_selectors = $('#MSearchSelectWindow .SelectItem');
+  for (var i = 0; i < search_selectors.length; i += 1) {
+    var element_a = $('<a href="#"></a>').text($(search_selectors[i]).text());
+
+    element_a.click(function(){
+      $('#search-box .dropdown-menu li').removeClass('active');
+      $(this).parent().addClass('active');
+      searchBox.OnSelectItem($('#search-box li a').index(this));
+      searchBox.Search();
+      return false;
+    });
+
+    var element = $('<li></li>').append(element_a);
+    $('#search-box .dropdown-menu').append(element);
+  }
+  $('#MSearchSelectWindow').remove();
+
+  $('#search-box .close').click(function (){
+    searchBox.CloseResultsWindow();
+  });
+
+  $('body').append('<div id="MSearchClose"></div>');
+  $('body').append('<div id="MSearchBox"></div>');
+  $('body').append('<div id="MSearchSelectWindow"></div>');
+
+  searchBox.searchLabel = '';
+  searchBox.DOMSearchField = function() {
+    return document.getElementById("search-field");
+  }
+  searchBox.DOMSearchClose = function(){
+    return document.getElementById("search-close");
+  }
+  */
+  /* search results */
+
+  var results_iframe = $('#MSearchResults').detach();
+  $('#MSearchResultsWindow')
+    .attr('id', 'search-results-window')
+    .addClass('panel panel-default')
+    .append(
+      '<div class="panel-heading">\
+        <h3 class="panel-title">Search Results</h3>\
+      </div>\
+      <div class="panel-body"></div>'
+    );
+  $('#search-results-window .panel-body').append(results_iframe);
+
+  searchBox.DOMPopupSearchResultsWindow = function() {
+    return document.getElementById("search-results-window");
+  }
+
+  function update_search_results_window() {
+    $('#search-results-window').removeClass('panel-default panel-success panel-warning panel-danger')
+    var status = $('#MSearchResults').contents().find('.SRStatus:visible');
+    if (status.length > 0) {
+      switch(status.attr('id')) {
+        case 'Loading':
+        case 'Searching':
+          $('#search-results-window').addClass('panel-warning');
+          break;
+        case 'NoMatches':
+          $('#search-results-window').addClass('panel-danger');
+          break;
+        default:
+          $('#search-results-window').addClass('panel-default');
+      }
+    } else {
+      $('#search-results-window').addClass('panel-success');
+    }
+  }
+  $('#MSearchResults').load(function() {
+    $('#MSearchResults').contents().find('link[href="search.css"]').attr('href','../doxygen.css');
+    $('#MSearchResults').contents().find('head').append(
+      '<link href="../customdoxygen.css" rel="stylesheet" type="text/css">');
+
+    update_search_results_window();
+
+    // detect status changes (only for search with external search backend)
+    var observer = new MutationObserver(function(mutations) {
+      update_search_results_window();
+    });
+    var config = { attributes: true};
+
+    var targets = $('#MSearchResults').contents().find('.SRStatus');
+    for (i = 0; i < targets.length; i++) {
+      observer.observe(targets[i], config);
+    }
+  });
+
+  /* enumerations */
+  $('table.fieldtable').removeClass('fieldtable').addClass('table table-striped table-bordered').each(function(){
+    $(this).prepend('<thead></thead>');
+    $(this).find('tbody > tr:first').prependTo($(this).find('thead'));
+
+    $(this).find('td > span.success').parent().addClass('success');
+    $(this).find('td > span.warning').parent().addClass('warning');
+    $(this).find('td > span.danger').parent().addClass('danger');
+  });
+
+  /* todo list */
+  var todoelements = $('.contents > .textblock > dl.reflist > dt, .contents > .textblock > dl.reflist > dd');
+  for (var i = 0; i < todoelements.length; i += 2) {
+    $('.contents > .textblock').append(
+      '<div class="panel panel-default active">'
+        + "<div class=\"panel-heading todoname\">" + $(todoelements[i]).html() + "</div>"
+        + "<div class=\"panel-body\">" + $(todoelements[i+1]).html() + "</div>"
+      + '</div>');
+  }
+  $('.contents > .textblock > dl').remove();
+
+
+       $(".memitem").removeClass('memitem');
+    $(".memproto").removeClass('memproto');
+    $(".memdoc").removeClass('memdoc');
+       $("span.mlabel").removeClass('mlabel');
+       $("table.memberdecls").removeClass('memberdecls');
+    $("[class^=memitem]").removeClass('memitem');
+    $("span.mlabels").removeClass('mlabels');
+    $("table.mlabels").removeClass('mlabels');
+    $("td.mlabels-right").removeClass('mlabels-right');
+       $(".navpath").removeClass('navpath');
+       $("li.navelem").removeClass('navelem');
+       $("a.el").removeClass('el');
+       $("div.ah").removeClass('ah');
+       $("div.header").removeClass("header");
+
+       $('.mdescLeft').each(function(){
+               if($(this).html()=="&nbsp;") {
+                       $(this).siblings('.mdescRight').attr('colspan', 2);
+                       $(this).remove();
+               }
+       });
+  $('td.memItemLeft').each(function(){
+    if($(this).siblings('.memItemRight').html()=="") {
+      $(this).attr('colspan', 2);
+      $(this).siblings('.memItemRight').remove();
+    }
+  });
+       $('td.memTemplItemLeft').each(function(){
+               if($(this).siblings('.memTemplItemRight').html()=="") {
+                       $(this).attr('colspan', 2);
+                       $(this).siblings('.memTemplItemRight').remove();
+               }
+       });
+  //searchBox.CloseResultsWindow();
+});
diff --git a/doc/templates/footer.html b/doc/templates/footer.html
new file mode 100644 (file)
index 0000000..9199fe2
--- /dev/null
@@ -0,0 +1,27 @@
+<!-- HTML footer for doxygen 1.8.8-->
+<!-- start footer part -->
+<!--BEGIN GENERATE_TREEVIEW-->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    $navpath
+    <li class="footer">$generatedby
+    <a href="http://www.doxygen.org/index.html">
+    <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
+  </ul>
+</div>
+<!--END GENERATE_TREEVIEW-->
+</div>
+</div>
+</div>
+</div>
+</div>
+<!--BEGIN !GENERATE_TREEVIEW-->
+<hr class="footer"/><address class="footer"><small>
+$generatedby &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
+</a> $doxygenversion
+</small></address>
+<!--END !GENERATE_TREEVIEW-->
+</body>
+        <script type="text/javascript" src="$relpath^doxy-boot.js"></script>
+</html>
diff --git a/doc/templates/header.html b/doc/templates/header.html
new file mode 100644 (file)
index 0000000..ffc0aeb
--- /dev/null
@@ -0,0 +1,47 @@
+<!-- HTML header for doxygen 1.8.8-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <!-- For Mobile Devices -->
+        <meta name="viewport" content="width=device-width, initial-scale=1">
+
+        <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+        <meta name="generator" content="Doxygen $doxygenversion"/>
+        
+        <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
+
+        <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+        <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+        <!--<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>-->
+        <script type="text/javascript" src="$relpath^dynsections.js"></script>
+        $treeview
+        $search
+        $mathjax
+        <link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+        $extrastylesheet
+        <link href='https://fonts.googleapis.com/css?family=Roboto+Slab' rel='stylesheet' type='text/css'>
+        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
+        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
+        <link href="https://cdnjs.cloudflare.com/ajax/libs/jquery.smartmenus/1.0.1/addons/bootstrap/jquery.smartmenus.bootstrap.css" rel="stylesheet">
+
+        <script type="text/javascript" src="$relpath^jquery.smartmenus.js"></script>
+        <!-- SmartMenus jQuery Bootstrap Addon -->
+        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.smartmenus/1.0.1/addons/bootstrap/jquery.smartmenus.bootstrap.js"></script>
+        <!-- SmartMenus jQuery plugin -->
+    </head>
+    <body>
+        <nav class="navbar navbar-default" role="navigation">
+            <div class="container">
+                <div class="navbar-header">
+                    <a class="navbar-brand">$projectname $projectnumber</a>
+                </div>
+            </div>
+        </nav>
+        <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+            <div class="content" id="content">
+                <div class="container">
+                    <div class="row">
+                        <div class="col-sm-12 panel " style="padding-bottom: 15px;">
+                            <div style="margin-bottom: 15px;">
+<!-- end header part -->
diff --git a/doc/templates/jquery.smartmenus.js b/doc/templates/jquery.smartmenus.js
new file mode 100755 (executable)
index 0000000..1370d65
--- /dev/null
@@ -0,0 +1,1223 @@
+/*!
+ * SmartMenus jQuery Plugin - v1.0.1 - November 1, 2016
+ * http://www.smartmenus.org/
+ *
+ * Copyright Vasil Dinkov, Vadikom Web Ltd.
+ * http://vadikom.com
+ *
+ * Licensed MIT
+ */
+
+(function(factory) {
+       if (typeof define === 'function' && define.amd) {
+               // AMD
+               define(['jquery'], factory);
+       } else if (typeof module === 'object' && typeof module.exports === 'object') {
+               // CommonJS
+               module.exports = factory(require('jquery'));
+       } else {
+               // Global jQuery
+               factory(jQuery);
+       }
+} (function($) {
+
+       var menuTrees = [],
+               IE = !!window.createPopup, // detect it for the iframe shim
+               mouse = false, // optimize for touch by default - we will detect for mouse input
+               touchEvents = 'ontouchstart' in window, // we use this just to choose between toucn and pointer events, not for touch screen detection
+               mouseDetectionEnabled = false,
+               requestAnimationFrame = window.requestAnimationFrame || function(callback) { return setTimeout(callback, 1000 / 60); },
+               cancelAnimationFrame = window.cancelAnimationFrame || function(id) { clearTimeout(id); };
+
+       // Handle detection for mouse input (i.e. desktop browsers, tablets with a mouse, etc.)
+       function initMouseDetection(disable) {
+               var eNS = '.smartmenus_mouse';
+               if (!mouseDetectionEnabled && !disable) {
+                       // if we get two consecutive mousemoves within 2 pixels from each other and within 300ms, we assume a real mouse/cursor is present
+                       // in practice, this seems like impossible to trick unintentianally with a real mouse and a pretty safe detection on touch devices (even with older browsers that do not support touch events)
+                       var firstTime = true,
+                               lastMove = null;
+                       $(document).bind(getEventsNS([
+                               ['mousemove', function(e) {
+                                       var thisMove = { x: e.pageX, y: e.pageY, timeStamp: new Date().getTime() };
+                                       if (lastMove) {
+                                               var deltaX = Math.abs(lastMove.x - thisMove.x),
+                                                       deltaY = Math.abs(lastMove.y - thisMove.y);
+                                               if ((deltaX > 0 || deltaY > 0) && deltaX <= 2 && deltaY <= 2 && thisMove.timeStamp - lastMove.timeStamp <= 300) {
+                                                       mouse = true;
+                                                       // if this is the first check after page load, check if we are not over some item by chance and call the mouseenter handler if yes
+                                                       if (firstTime) {
+                                                               var $a = $(e.target).closest('a');
+                                                               if ($a.is('a')) {
+                                                                       $.each(menuTrees, function() {
+                                                                               if ($.contains(this.$root[0], $a[0])) {
+                                                                                       this.itemEnter({ currentTarget: $a[0] });
+                                                                                       return false;
+                                                                               }
+                                                                       });
+                                                               }
+                                                               firstTime = false;
+                                                       }
+                                               }
+                                       }
+                                       lastMove = thisMove;
+                               }],
+                               [touchEvents ? 'touchstart' : 'pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut', function(e) {
+                                       if (isTouchEvent(e.originalEvent)) {
+                                               mouse = false;
+                                       }
+                               }]
+                       ], eNS));
+                       mouseDetectionEnabled = true;
+               } else if (mouseDetectionEnabled && disable) {
+                       $(document).unbind(eNS);
+                       mouseDetectionEnabled = false;
+               }
+       }
+
+       function isTouchEvent(e) {
+               return !/^(4|mouse)$/.test(e.pointerType);
+       }
+
+       // returns a jQuery bind() ready object
+       function getEventsNS(defArr, eNS) {
+               if (!eNS) {
+                       eNS = '';
+               }
+               var obj = {};
+               $.each(defArr, function(index, value) {
+                       obj[value[0].split(' ').join(eNS + ' ') + eNS] = value[1];
+               });
+               return obj;
+       }
+
+       $.SmartMenus = function(elm, options) {
+               this.$root = $(elm);
+               this.opts = options;
+               this.rootId = ''; // internal
+               this.accessIdPrefix = '';
+               this.$subArrow = null;
+               this.activatedItems = []; // stores last activated A's for each level
+               this.visibleSubMenus = []; // stores visible sub menus UL's (might be in no particular order)
+               this.showTimeout = 0;
+               this.hideTimeout = 0;
+               this.scrollTimeout = 0;
+               this.clickActivated = false;
+               this.focusActivated = false;
+               this.zIndexInc = 0;
+               this.idInc = 0;
+               this.$firstLink = null; // we'll use these for some tests
+               this.$firstSub = null; // at runtime so we'll cache them
+               this.disabled = false;
+               this.$disableOverlay = null;
+               this.$touchScrollingSub = null;
+               this.cssTransforms3d = 'perspective' in elm.style || 'webkitPerspective' in elm.style;
+               this.wasCollapsible = false;
+               this.init();
+       };
+
+       $.extend($.SmartMenus, {
+               hideAll: function() {
+                       $.each(menuTrees, function() {
+                               this.menuHideAll();
+                       });
+               },
+               destroy: function() {
+                       while (menuTrees.length) {
+                               menuTrees[0].destroy();
+                       }
+                       initMouseDetection(true);
+               },
+               prototype: {
+                       init: function(refresh) {
+                               var self = this;
+
+                               if (!refresh) {
+                                       menuTrees.push(this);
+
+                                       this.rootId = (new Date().getTime() + Math.random() + '').replace(/\D/g, '');
+                                       this.accessIdPrefix = 'sm-' + this.rootId + '-';
+
+                                       if (this.$root.hasClass('sm-rtl')) {
+                                               this.opts.rightToLeftSubMenus = true;
+                                       }
+
+                                       // init root (main menu)
+                                       var eNS = '.smartmenus';
+                                       this.$root
+                                               .data('smartmenus', this)
+                                               .attr('data-smartmenus-id', this.rootId)
+                                               .dataSM('level', 1)
+                                               .bind(getEventsNS([
+                                                       ['mouseover focusin', $.proxy(this.rootOver, this)],
+                                                       ['mouseout focusout', $.proxy(this.rootOut, this)],
+                                                       ['keydown', $.proxy(this.rootKeyDown, this)]
+                                               ], eNS))
+                                               .delegate('a', getEventsNS([
+                                                       ['mouseenter', $.proxy(this.itemEnter, this)],
+                                                       ['mouseleave', $.proxy(this.itemLeave, this)],
+                                                       ['mousedown', $.proxy(this.itemDown, this)],
+                                                       ['focus', $.proxy(this.itemFocus, this)],
+                                                       ['blur', $.proxy(this.itemBlur, this)],
+                                                       ['click', $.proxy(this.itemClick, this)]
+                                               ], eNS));
+
+                                       // hide menus on tap or click outside the root UL
+                                       eNS += this.rootId;
+                                       if (this.opts.hideOnClick) {
+                                               $(document).bind(getEventsNS([
+                                                       ['touchstart', $.proxy(this.docTouchStart, this)],
+                                                       ['touchmove', $.proxy(this.docTouchMove, this)],
+                                                       ['touchend', $.proxy(this.docTouchEnd, this)],
+                                                       // for Opera Mobile < 11.5, webOS browser, etc. we'll check click too
+                                                       ['click', $.proxy(this.docClick, this)]
+                                               ], eNS));
+                                       }
+                                       // hide sub menus on resize
+                                       $(window).bind(getEventsNS([['resize orientationchange', $.proxy(this.winResize, this)]], eNS));
+
+                                       if (this.opts.subIndicators) {
+                                               this.$subArrow = $('<span/>').addClass('sub-arrow');
+                                               if (this.opts.subIndicatorsText) {
+                                                       this.$subArrow.html(this.opts.subIndicatorsText);
+                                               }
+                                       }
+
+                                       // make sure mouse detection is enabled
+                                       initMouseDetection();
+                               }
+
+                               // init sub menus
+                               this.$firstSub = this.$root.find('ul').each(function() { self.menuInit($(this)); }).eq(0);
+
+                               this.$firstLink = this.$root.find('a').eq(0);
+
+                               // find current item
+                               if (this.opts.markCurrentItem) {
+                                       var reDefaultDoc = /(index|default)\.[^#\?\/]*/i,
+                                               reHash = /#.*/,
+                                               locHref = window.location.href.replace(reDefaultDoc, ''),
+                                               locHrefNoHash = locHref.replace(reHash, '');
+                                       this.$root.find('a').each(function() {
+                                               var href = this.href.replace(reDefaultDoc, ''),
+                                                       $this = $(this);
+                                               if (href == locHref || href == locHrefNoHash) {
+                                                       $this.addClass('current');
+                                                       if (self.opts.markCurrentTree) {
+                                                               $this.parentsUntil('[data-smartmenus-id]', 'ul').each(function() {
+                                                                       $(this).dataSM('parent-a').addClass('current');
+                                                               });
+                                                       }
+                                               }
+                                       });
+                               }
+
+                               // save initial state
+                               this.wasCollapsible = this.isCollapsible();
+                       },
+                       destroy: function(refresh) {
+                               if (!refresh) {
+                                       var eNS = '.smartmenus';
+                                       this.$root
+                                               .removeData('smartmenus')
+                                               .removeAttr('data-smartmenus-id')
+                                               .removeDataSM('level')
+                                               .unbind(eNS)
+                                               .undelegate(eNS);
+                                       eNS += this.rootId;
+                                       $(document).unbind(eNS);
+                                       $(window).unbind(eNS);
+                                       if (this.opts.subIndicators) {
+                                               this.$subArrow = null;
+                                       }
+                               }
+                               this.menuHideAll();
+                               var self = this;
+                               this.$root.find('ul').each(function() {
+                                               var $this = $(this);
+                                               if ($this.dataSM('scroll-arrows')) {
+                                                       $this.dataSM('scroll-arrows').remove();
+                                               }
+                                               if ($this.dataSM('shown-before')) {
+                                                       if (self.opts.subMenusMinWidth || self.opts.subMenusMaxWidth) {
+                                                               $this.css({ width: '', minWidth: '', maxWidth: '' }).removeClass('sm-nowrap');
+                                                       }
+                                                       if ($this.dataSM('scroll-arrows')) {
+                                                               $this.dataSM('scroll-arrows').remove();
+                                                       }
+                                                       $this.css({ zIndex: '', top: '', left: '', marginLeft: '', marginTop: '', display: '' });
+                                               }
+                                               if (($this.attr('id') || '').indexOf(self.accessIdPrefix) == 0) {
+                                                       $this.removeAttr('id');
+                                               }
+                                       })
+                                       .removeDataSM('in-mega')
+                                       .removeDataSM('shown-before')
+                                       .removeDataSM('ie-shim')
+                                       .removeDataSM('scroll-arrows')
+                                       .removeDataSM('parent-a')
+                                       .removeDataSM('level')
+                                       .removeDataSM('beforefirstshowfired')
+                                       .removeAttr('role')
+                                       .removeAttr('aria-hidden')
+                                       .removeAttr('aria-labelledby')
+                                       .removeAttr('aria-expanded');
+                               this.$root.find('a.has-submenu').each(function() {
+                                               var $this = $(this);
+                                               if ($this.attr('id').indexOf(self.accessIdPrefix) == 0) {
+                                                       $this.removeAttr('id');
+                                               }
+                                       })
+                                       .removeClass('has-submenu')
+                                       .removeDataSM('sub')
+                                       .removeAttr('aria-haspopup')
+                                       .removeAttr('aria-controls')
+                                       .removeAttr('aria-expanded')
+                                       .closest('li').removeDataSM('sub');
+                               if (this.opts.subIndicators) {
+                                       this.$root.find('span.sub-arrow').remove();
+                               }
+                               if (this.opts.markCurrentItem) {
+                                       this.$root.find('a.current').removeClass('current');
+                               }
+                               if (!refresh) {
+                                       this.$root = null;
+                                       this.$firstLink = null;
+                                       this.$firstSub = null;
+                                       if (this.$disableOverlay) {
+                                               this.$disableOverlay.remove();
+                                               this.$disableOverlay = null;
+                                       }
+                                       menuTrees.splice($.inArray(this, menuTrees), 1);
+                               }
+                       },
+                       disable: function(noOverlay) {
+                               if (!this.disabled) {
+                                       this.menuHideAll();
+                                       // display overlay over the menu to prevent interaction
+                                       if (!noOverlay && !this.opts.isPopup && this.$root.is(':visible')) {
+                                               var pos = this.$root.offset();
+                                               this.$disableOverlay = $('<div class="sm-jquery-disable-overlay"/>').css({
+                                                       position: 'absolute',
+                                                       top: pos.top,
+                                                       left: pos.left,
+                                                       width: this.$root.outerWidth(),
+                                                       height: this.$root.outerHeight(),
+                                                       zIndex: this.getStartZIndex(true),
+                                                       opacity: 0
+                                               }).appendTo(document.body);
+                                       }
+                                       this.disabled = true;
+                               }
+                       },
+                       docClick: function(e) {
+                               if (this.$touchScrollingSub) {
+                                       this.$touchScrollingSub = null;
+                                       return;
+                               }
+                               // hide on any click outside the menu or on a menu link
+                               if (this.visibleSubMenus.length && !$.contains(this.$root[0], e.target) || $(e.target).is('a')) {
+                                       this.menuHideAll();
+                               }
+                       },
+                       docTouchEnd: function(e) {
+                               if (!this.lastTouch) {
+                                       return;
+                               }
+                               if (this.visibleSubMenus.length && (this.lastTouch.x2 === undefined || this.lastTouch.x1 == this.lastTouch.x2) && (this.lastTouch.y2 === undefined || this.lastTouch.y1 == this.lastTouch.y2) && (!this.lastTouch.target || !$.contains(this.$root[0], this.lastTouch.target))) {
+                                       if (this.hideTimeout) {
+                                               clearTimeout(this.hideTimeout);
+                                               this.hideTimeout = 0;
+                                       }
+                                       // hide with a delay to prevent triggering accidental unwanted click on some page element
+                                       var self = this;
+                                       this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, 350);
+                               }
+                               this.lastTouch = null;
+                       },
+                       docTouchMove: function(e) {
+                               if (!this.lastTouch) {
+                                       return;
+                               }
+                               var touchPoint = e.originalEvent.touches[0];
+                               this.lastTouch.x2 = touchPoint.pageX;
+                               this.lastTouch.y2 = touchPoint.pageY;
+                       },
+                       docTouchStart: function(e) {
+                               var touchPoint = e.originalEvent.touches[0];
+                               this.lastTouch = { x1: touchPoint.pageX, y1: touchPoint.pageY, target: touchPoint.target };
+                       },
+                       enable: function() {
+                               if (this.disabled) {
+                                       if (this.$disableOverlay) {
+                                               this.$disableOverlay.remove();
+                                               this.$disableOverlay = null;
+                                       }
+                                       this.disabled = false;
+                               }
+                       },
+                       getClosestMenu: function(elm) {
+                               var $closestMenu = $(elm).closest('ul');
+                               while ($closestMenu.dataSM('in-mega')) {
+                                       $closestMenu = $closestMenu.parent().closest('ul');
+                               }
+                               return $closestMenu[0] || null;
+                       },
+                       getHeight: function($elm) {
+                               return this.getOffset($elm, true);
+                       },
+                       // returns precise width/height float values
+                       getOffset: function($elm, height) {
+                               var old;
+                               if ($elm.css('display') == 'none') {
+                                       old = { position: $elm[0].style.position, visibility: $elm[0].style.visibility };
+                                       $elm.css({ position: 'absolute', visibility: 'hidden' }).show();
+                               }
+                               var box = $elm[0].getBoundingClientRect && $elm[0].getBoundingClientRect(),
+                                       val = box && (height ? box.height || box.bottom - box.top : box.width || box.right - box.left);
+                               if (!val && val !== 0) {
+                                       val = height ? $elm[0].offsetHeight : $elm[0].offsetWidth;
+                               }
+                               if (old) {
+                                       $elm.hide().css(old);
+                               }
+                               return val;
+                       },
+                       getStartZIndex: function(root) {
+                               var zIndex = parseInt(this[root ? '$root' : '$firstSub'].css('z-index'));
+                               if (!root && isNaN(zIndex)) {
+                                       zIndex = parseInt(this.$root.css('z-index'));
+                               }
+                               return !isNaN(zIndex) ? zIndex : 1;
+                       },
+                       getTouchPoint: function(e) {
+                               return e.touches && e.touches[0] || e.changedTouches && e.changedTouches[0] || e;
+                       },
+                       getViewport: function(height) {
+                               var name = height ? 'Height' : 'Width',
+                                       val = document.documentElement['client' + name],
+                                       val2 = window['inner' + name];
+                               if (val2) {
+                                       val = Math.min(val, val2);
+                               }
+                               return val;
+                       },
+                       getViewportHeight: function() {
+                               return this.getViewport(true);
+                       },
+                       getViewportWidth: function() {
+                               return this.getViewport();
+                       },
+                       getWidth: function($elm) {
+                               return this.getOffset($elm);
+                       },
+                       handleEvents: function() {
+                               return !this.disabled && this.isCSSOn();
+                       },
+                       handleItemEvents: function($a) {
+                               return this.handleEvents() && !this.isLinkInMegaMenu($a);
+                       },
+                       isCollapsible: function() {
+                               return this.$firstSub.css('position') == 'static';
+                       },
+                       isCSSOn: function() {
+                               return this.$firstLink.css('display') == 'block';
+                       },
+                       isFixed: function() {
+                               var isFixed = this.$root.css('position') == 'fixed';
+                               if (!isFixed) {
+                                       this.$root.parentsUntil('body').each(function() {
+                                               if ($(this).css('position') == 'fixed') {
+                                                       isFixed = true;
+                                                       return false;
+                                               }
+                                       });
+                               }
+                               return isFixed;
+                       },
+                       isLinkInMegaMenu: function($a) {
+                               return $(this.getClosestMenu($a[0])).hasClass('mega-menu');
+                       },
+                       isTouchMode: function() {
+                               return !mouse || this.opts.noMouseOver || this.isCollapsible();
+                       },
+                       itemActivate: function($a, focus) {
+                               var $ul = $a.closest('ul'),
+                                       level = $ul.dataSM('level');
+                               // if for some reason the parent item is not activated (e.g. this is an API call to activate the item), activate all parent items first
+                               if (level > 1 && (!this.activatedItems[level - 2] || this.activatedItems[level - 2][0] != $ul.dataSM('parent-a')[0])) {
+                                       var self = this;
+                                       $($ul.parentsUntil('[data-smartmenus-id]', 'ul').get().reverse()).add($ul).each(function() {
+                                               self.itemActivate($(this).dataSM('parent-a'));
+                                       });
+                               }
+                               // hide any visible deeper level sub menus
+                               if (!this.isCollapsible() || focus) {
+                                       this.menuHideSubMenus(!this.activatedItems[level - 1] || this.activatedItems[level - 1][0] != $a[0] ? level - 1 : level);
+                               }
+                               // save new active item for this level
+                               this.activatedItems[level - 1] = $a;
+                               if (this.$root.triggerHandler('activate.smapi', $a[0]) === false) {
+                                       return;
+                               }
+                               // show the sub menu if this item has one
+                               var $sub = $a.dataSM('sub');
+                               if ($sub && (this.isTouchMode() || (!this.opts.showOnClick || this.clickActivated))) {
+                                       this.menuShow($sub);
+                               }
+                       },
+                       itemBlur: function(e) {
+                               var $a = $(e.currentTarget);
+                               if (!this.handleItemEvents($a)) {
+                                       return;
+                               }
+                               this.$root.triggerHandler('blur.smapi', $a[0]);
+                       },
+                       itemClick: function(e) {
+                               var $a = $(e.currentTarget);
+                               if (!this.handleItemEvents($a)) {
+                                       return;
+                               }
+                               if (this.$touchScrollingSub && this.$touchScrollingSub[0] == $a.closest('ul')[0]) {
+                                       this.$touchScrollingSub = null;
+                                       e.stopPropagation();
+                                       return false;
+                               }
+                               if (this.$root.triggerHandler('click.smapi', $a[0]) === false) {
+                                       return false;
+                               }
+                               var subArrowClicked = $(e.target).is('span.sub-arrow'),
+                                       $sub = $a.dataSM('sub'),
+                                       firstLevelSub = $sub ? $sub.dataSM('level') == 2 : false;
+                               // if the sub is not visible
+                               if ($sub && !$sub.is(':visible')) {
+                                       if (this.opts.showOnClick && firstLevelSub) {
+                                               this.clickActivated = true;
+                                       }
+                                       // try to activate the item and show the sub
+                                       this.itemActivate($a);
+                                       // if "itemActivate" showed the sub, prevent the click so that the link is not loaded
+                                       // if it couldn't show it, then the sub menus are disabled with an !important declaration (e.g. via mobile styles) so let the link get loaded
+                                       if ($sub.is(':visible')) {
+                                               this.focusActivated = true;
+                                               return false;
+                                       }
+                               } else if (this.isCollapsible() && subArrowClicked) {
+                                       this.itemActivate($a);
+                                       this.menuHide($sub);
+                                       return false;
+                               }
+                               if (this.opts.showOnClick && firstLevelSub || $a.hasClass('disabled') || this.$root.triggerHandler('select.smapi', $a[0]) === false) {
+                                       return false;
+                               }
+                       },
+                       itemDown: function(e) {
+                               var $a = $(e.currentTarget);
+                               if (!this.handleItemEvents($a)) {
+                                       return;
+                               }
+                               $a.dataSM('mousedown', true);
+                       },
+                       itemEnter: function(e) {
+                               var $a = $(e.currentTarget);
+                               if (!this.handleItemEvents($a)) {
+                                       return;
+                               }
+                               if (!this.isTouchMode()) {
+                                       if (this.showTimeout) {
+                                               clearTimeout(this.showTimeout);
+                                               this.showTimeout = 0;
+                                       }
+                                       var self = this;
+                                       this.showTimeout = setTimeout(function() { self.itemActivate($a); }, this.opts.showOnClick && $a.closest('ul').dataSM('level') == 1 ? 1 : this.opts.showTimeout);
+                               }
+                               this.$root.triggerHandler('mouseenter.smapi', $a[0]);
+                       },
+                       itemFocus: function(e) {
+                               var $a = $(e.currentTarget);
+                               if (!this.handleItemEvents($a)) {
+                                       return;
+                               }
+                               // fix (the mousedown check): in some browsers a tap/click produces consecutive focus + click events so we don't need to activate the item on focus
+                               if (this.focusActivated && (!this.isTouchMode() || !$a.dataSM('mousedown')) && (!this.activatedItems.length || this.activatedItems[this.activatedItems.length - 1][0] != $a[0])) {
+                                       this.itemActivate($a, true);
+                               }
+                               this.$root.triggerHandler('focus.smapi', $a[0]);
+                       },
+                       itemLeave: function(e) {
+                               var $a = $(e.currentTarget);
+                               if (!this.handleItemEvents($a)) {
+                                       return;
+                               }
+                               if (!this.isTouchMode()) {
+                                       $a[0].blur();
+                                       if (this.showTimeout) {
+                                               clearTimeout(this.showTimeout);
+                                               this.showTimeout = 0;
+                                       }
+                               }
+                               $a.removeDataSM('mousedown');
+                               this.$root.triggerHandler('mouseleave.smapi', $a[0]);
+                       },
+                       menuHide: function($sub) {
+                               if (this.$root.triggerHandler('beforehide.smapi', $sub[0]) === false) {
+                                       return;
+                               }
+                               $sub.stop(true, true);
+                               if ($sub.css('display') != 'none') {
+                                       var complete = function() {
+                                               // unset z-index
+                                               $sub.css('z-index', '');
+                                       };
+                                       // if sub is collapsible (mobile view)
+                                       if (this.isCollapsible()) {
+                                               if (this.opts.collapsibleHideFunction) {
+                                                       this.opts.collapsibleHideFunction.call(this, $sub, complete);
+                                               } else {
+                                                       $sub.hide(this.opts.collapsibleHideDuration, complete);
+                                               }
+                                       } else {
+                                               if (this.opts.hideFunction) {
+                                                       this.opts.hideFunction.call(this, $sub, complete);
+                                               } else {
+                                                       $sub.hide(this.opts.hideDuration, complete);
+                                               }
+                                       }
+                                       // remove IE iframe shim
+                                       if ($sub.dataSM('ie-shim')) {
+                                               $sub.dataSM('ie-shim').remove().css({ '-webkit-transform': '', transform: '' });
+                                       }
+                                       // deactivate scrolling if it is activated for this sub
+                                       if ($sub.dataSM('scroll')) {
+                                               this.menuScrollStop($sub);
+                                               $sub.css({ 'touch-action': '', '-ms-touch-action': '', '-webkit-transform': '', transform: '' })
+                                                       .unbind('.smartmenus_scroll').removeDataSM('scroll').dataSM('scroll-arrows').hide();
+                                       }
+                                       // unhighlight parent item + accessibility
+                                       $sub.dataSM('parent-a').removeClass('highlighted').attr('aria-expanded', 'false');
+                                       $sub.attr({
+                                               'aria-expanded': 'false',
+                                               'aria-hidden': 'true'
+                                       });
+                                       var level = $sub.dataSM('level');
+                                       this.activatedItems.splice(level - 1, 1);
+                                       this.visibleSubMenus.splice($.inArray($sub, this.visibleSubMenus), 1);
+                                       this.$root.triggerHandler('hide.smapi', $sub[0]);
+                               }
+                       },
+                       menuHideAll: function() {
+                               if (this.showTimeout) {
+                                       clearTimeout(this.showTimeout);
+                                       this.showTimeout = 0;
+                               }
+                               // hide all subs
+                               // if it's a popup, this.visibleSubMenus[0] is the root UL
+                               var level = this.opts.isPopup ? 1 : 0;
+                               for (var i = this.visibleSubMenus.length - 1; i >= level; i--) {
+                                       this.menuHide(this.visibleSubMenus[i]);
+                               }
+                               // hide root if it's popup
+                               if (this.opts.isPopup) {
+                                       this.$root.stop(true, true);
+                                       if (this.$root.is(':visible')) {
+                                               if (this.opts.hideFunction) {
+                                                       this.opts.hideFunction.call(this, this.$root);
+                                               } else {
+                                                       this.$root.hide(this.opts.hideDuration);
+                                               }
+                                               // remove IE iframe shim
+                                               if (this.$root.dataSM('ie-shim')) {
+                                                       this.$root.dataSM('ie-shim').remove();
+                                               }
+                                       }
+                               }
+                               this.activatedItems = [];
+                               this.visibleSubMenus = [];
+                               this.clickActivated = false;
+                               this.focusActivated = false;
+                               // reset z-index increment
+                               this.zIndexInc = 0;
+                               this.$root.triggerHandler('hideAll.smapi');
+                       },
+                       menuHideSubMenus: function(level) {
+                               for (var i = this.activatedItems.length - 1; i >= level; i--) {
+                                       var $sub = this.activatedItems[i].dataSM('sub');
+                                       if ($sub) {
+                                               this.menuHide($sub);
+                                       }
+                               }
+                       },
+                       menuIframeShim: function($ul) {
+                               // create iframe shim for the menu
+                               if (IE && this.opts.overlapControlsInIE && !$ul.dataSM('ie-shim')) {
+                                       $ul.dataSM('ie-shim', $('<iframe/>').attr({ src: 'javascript:0', tabindex: -9 })
+                                               .css({ position: 'absolute', top: 'auto', left: '0', opacity: 0, border: '0' })
+                                       );
+                               }
+                       },
+                       menuInit: function($ul) {
+                               if (!$ul.dataSM('in-mega')) {
+                                       // mark UL's in mega drop downs (if any) so we can neglect them
+                                       if ($ul.hasClass('mega-menu')) {
+                                               $ul.find('ul').dataSM('in-mega', true);
+                                       }
+                                       // get level (much faster than, for example, using parentsUntil)
+                                       var level = 2,
+                                               par = $ul[0];
+                                       while ((par = par.parentNode.parentNode) != this.$root[0]) {
+                                               level++;
+                                       }
+                                       // cache stuff for quick access
+                                       var $a = $ul.prevAll('a').eq(-1);
+                                       // if the link is nested (e.g. in a heading)
+                                       if (!$a.length) {
+                                               $a = $ul.prevAll().find('a').eq(-1);
+                                       }
+                                       $a.addClass('has-submenu').dataSM('sub', $ul);
+                                       $ul.dataSM('parent-a', $a)
+                                               .dataSM('level', level)
+                                               .parent().dataSM('sub', $ul);
+                                       // accessibility
+                                       var aId = $a.attr('id') || this.accessIdPrefix + (++this.idInc),
+                                               ulId = $ul.attr('id') || this.accessIdPrefix + (++this.idInc);
+                                       $a.attr({
+                                               id: aId,
+                                               'aria-haspopup': 'true',
+                                               'aria-controls': ulId,
+                                               'aria-expanded': 'false'
+                                       });
+                                       $ul.attr({
+                                               id: ulId,
+                                               'role': 'group',
+                                               'aria-hidden': 'true',
+                                               'aria-labelledby': aId,
+                                               'aria-expanded': 'false'
+                                       });
+                                       // add sub indicator to parent item
+                                       if (this.opts.subIndicators) {
+                                               $a[this.opts.subIndicatorsPos](this.$subArrow.clone());
+                                       }
+                               }
+                       },
+                       menuPosition: function($sub) {
+                               var $a = $sub.dataSM('parent-a'),
+                                       $li = $a.closest('li'),
+                                       $ul = $li.parent(),
+                                       level = $sub.dataSM('level'),
+                                       subW = this.getWidth($sub),
+                                       subH = this.getHeight($sub),
+                                       itemOffset = $a.offset(),
+                                       itemX = itemOffset.left,
+                                       itemY = itemOffset.top,
+                                       itemW = this.getWidth($a),
+                                       itemH = this.getHeight($a),
+                                       $win = $(window),
+                                       winX = $win.scrollLeft(),
+                                       winY = $win.scrollTop(),
+                                       winW = this.getViewportWidth(),
+                                       winH = this.getViewportHeight(),
+                                       horizontalParent = $ul.parent().is('[data-sm-horizontal-sub]') || level == 2 && !$ul.hasClass('sm-vertical'),
+                                       rightToLeft = this.opts.rightToLeftSubMenus && !$li.is('[data-sm-reverse]') || !this.opts.rightToLeftSubMenus && $li.is('[data-sm-reverse]'),
+                                       subOffsetX = level == 2 ? this.opts.mainMenuSubOffsetX : this.opts.subMenusSubOffsetX,
+                                       subOffsetY = level == 2 ? this.opts.mainMenuSubOffsetY : this.opts.subMenusSubOffsetY,
+                                       x, y;
+                               if (horizontalParent) {
+                                       x = rightToLeft ? itemW - subW - subOffsetX : subOffsetX;
+                                       y = this.opts.bottomToTopSubMenus ? -subH - subOffsetY : itemH + subOffsetY;
+                               } else {
+                                       x = rightToLeft ? subOffsetX - subW : itemW - subOffsetX;
+                                       y = this.opts.bottomToTopSubMenus ? itemH - subOffsetY - subH : subOffsetY;
+                               }
+                               if (this.opts.keepInViewport) {
+                                       var absX = itemX + x,
+                                               absY = itemY + y;
+                                       if (rightToLeft && absX < winX) {
+                                               x = horizontalParent ? winX - absX + x : itemW - subOffsetX;
+                                       } else if (!rightToLeft && absX + subW > winX + winW) {
+                                               x = horizontalParent ? winX + winW - subW - absX + x : subOffsetX - subW;
+                                       }
+                                       if (!horizontalParent) {
+                                               if (subH < winH && absY + subH > winY + winH) {
+                                                       y += winY + winH - subH - absY;
+                                               } else if (subH >= winH || absY < winY) {
+                                                       y += winY - absY;
+                                               }
+                                       }
+                                       // do we need scrolling?
+                                       // 0.49 used for better precision when dealing with float values
+                                       if (horizontalParent && (absY + subH > winY + winH + 0.49 || absY < winY) || !horizontalParent && subH > winH + 0.49) {
+                                               var self = this;
+                                               if (!$sub.dataSM('scroll-arrows')) {
+                                                       $sub.dataSM('scroll-arrows', $([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0], $('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]])
+                                                               .bind({
+                                                                       mouseenter: function() {
+                                                                               $sub.dataSM('scroll').up = $(this).hasClass('scroll-up');
+                                                                               self.menuScroll($sub);
+                                                                       },
+                                                                       mouseleave: function(e) {
+                                                                               self.menuScrollStop($sub);
+                                                                               self.menuScrollOut($sub, e);
+                                                                       },
+                                                                       'mousewheel DOMMouseScroll': function(e) { e.preventDefault(); }
+                                                               })
+                                                               .insertAfter($sub)
+                                                       );
+                                               }
+                                               // bind scroll events and save scroll data for this sub
+                                               var eNS = '.smartmenus_scroll';
+                                               $sub.dataSM('scroll', {
+                                                               y: this.cssTransforms3d ? 0 : y - itemH,
+                                                               step: 1,
+                                                               // cache stuff for faster recalcs later
+                                                               itemH: itemH,
+                                                               subH: subH,
+                                                               arrowDownH: this.getHeight($sub.dataSM('scroll-arrows').eq(1))
+                                                       })
+                                                       .bind(getEventsNS([
+                                                               ['mouseover', function(e) { self.menuScrollOver($sub, e); }],
+                                                               ['mouseout', function(e) { self.menuScrollOut($sub, e); }],
+                                                               ['mousewheel DOMMouseScroll', function(e) { self.menuScrollMousewheel($sub, e); }]
+                                                       ], eNS))
+                                                       .dataSM('scroll-arrows').css({ top: 'auto', left: '0', marginLeft: x + (parseInt($sub.css('border-left-width')) || 0), width: subW - (parseInt($sub.css('border-left-width')) || 0) - (parseInt($sub.css('border-right-width')) || 0), zIndex: $sub.css('z-index') })
+                                                               .eq(horizontalParent && this.opts.bottomToTopSubMenus ? 0 : 1).show();
+                                               // when a menu tree is fixed positioned we allow scrolling via touch too
+                                               // since there is no other way to access such long sub menus if no mouse is present
+                                               if (this.isFixed()) {
+                                                       $sub.css({ 'touch-action': 'none', '-ms-touch-action': 'none' })
+                                                               .bind(getEventsNS([
+                                                                       [touchEvents ? 'touchstart touchmove touchend' : 'pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp', function(e) {
+                                                                               self.menuScrollTouch($sub, e);
+                                                                       }]
+                                                               ], eNS));
+                                               }
+                                       }
+                               }
+                               $sub.css({ top: 'auto', left: '0', marginLeft: x, marginTop: y - itemH });
+                               // IE iframe shim
+                               this.menuIframeShim($sub);
+                               if ($sub.dataSM('ie-shim')) {
+                                       $sub.dataSM('ie-shim').css({ zIndex: $sub.css('z-index'), width: subW, height: subH, marginLeft: x, marginTop: y - itemH });
+                               }
+                       },
+                       menuScroll: function($sub, once, step) {
+                               var data = $sub.dataSM('scroll'),
+                                       $arrows = $sub.dataSM('scroll-arrows'),
+                                       end = data.up ? data.upEnd : data.downEnd,
+                                       diff;
+                               if (!once && data.momentum) {
+                                       data.momentum *= 0.92;
+                                       diff = data.momentum;
+                                       if (diff < 0.5) {
+                                               this.menuScrollStop($sub);
+                                               return;
+                                       }
+                               } else {
+                                       diff = step || (once || !this.opts.scrollAccelerate ? this.opts.scrollStep : Math.floor(data.step));
+                               }
+                               // hide any visible deeper level sub menus
+                               var level = $sub.dataSM('level');
+                               if (this.activatedItems[level - 1] && this.activatedItems[level - 1].dataSM('sub') && this.activatedItems[level - 1].dataSM('sub').is(':visible')) {
+                                       this.menuHideSubMenus(level - 1);
+                               }
+                               data.y = data.up && end <= data.y || !data.up && end >= data.y ? data.y : (Math.abs(end - data.y) > diff ? data.y + (data.up ? diff : -diff) : end);
+                               $sub.add($sub.dataSM('ie-shim')).css(this.cssTransforms3d ? { '-webkit-transform': 'translate3d(0, ' + data.y + 'px, 0)', transform: 'translate3d(0, ' + data.y + 'px, 0)' } : { marginTop: data.y });
+                               // show opposite arrow if appropriate
+                               if (mouse && (data.up && data.y > data.downEnd || !data.up && data.y < data.upEnd)) {
+                                       $arrows.eq(data.up ? 1 : 0).show();
+                               }
+                               // if we've reached the end
+                               if (data.y == end) {
+                                       if (mouse) {
+                                               $arrows.eq(data.up ? 0 : 1).hide();
+                                       }
+                                       this.menuScrollStop($sub);
+                               } else if (!once) {
+                                       if (this.opts.scrollAccelerate && data.step < this.opts.scrollStep) {
+                                               data.step += 0.2;
+                                       }
+                                       var self = this;
+                                       this.scrollTimeout = requestAnimationFrame(function() { self.menuScroll($sub); });
+                               }
+                       },
+                       menuScrollMousewheel: function($sub, e) {
+                               if (this.getClosestMenu(e.target) == $sub[0]) {
+                                       e = e.originalEvent;
+                                       var up = (e.wheelDelta || -e.detail) > 0;
+                                       if ($sub.dataSM('scroll-arrows').eq(up ? 0 : 1).is(':visible')) {
+                                               $sub.dataSM('scroll').up = up;
+                                               this.menuScroll($sub, true);
+                                       }
+                               }
+                               e.preventDefault();
+                       },
+                       menuScrollOut: function($sub, e) {
+                               if (mouse) {
+                                       if (!/^scroll-(up|down)/.test((e.relatedTarget || '').className) && ($sub[0] != e.relatedTarget && !$.contains($sub[0], e.relatedTarget) || this.getClosestMenu(e.relatedTarget) != $sub[0])) {
+                                               $sub.dataSM('scroll-arrows').css('visibility', 'hidden');
+                                       }
+                               }
+                       },
+                       menuScrollOver: function($sub, e) {
+                               if (mouse) {
+                                       if (!/^scroll-(up|down)/.test(e.target.className) && this.getClosestMenu(e.target) == $sub[0]) {
+                                               this.menuScrollRefreshData($sub);
+                                               var data = $sub.dataSM('scroll'),
+                                                       upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH;
+                                               $sub.dataSM('scroll-arrows').eq(0).css('margin-top', upEnd).end()
+                                                       .eq(1).css('margin-top', upEnd + this.getViewportHeight() - data.arrowDownH).end()
+                                                       .css('visibility', 'visible');
+                                       }
+                               }
+                       },
+                       menuScrollRefreshData: function($sub) {
+                               var data = $sub.dataSM('scroll'),
+                                       upEnd = $(window).scrollTop() - $sub.dataSM('parent-a').offset().top - data.itemH;
+                               if (this.cssTransforms3d) {
+                                       upEnd = -(parseFloat($sub.css('margin-top')) - upEnd);
+                               }
+                               $.extend(data, {
+                                       upEnd: upEnd,
+                                       downEnd: upEnd + this.getViewportHeight() - data.subH
+                               });
+                       },
+                       menuScrollStop: function($sub) {
+                               if (this.scrollTimeout) {
+                                       cancelAnimationFrame(this.scrollTimeout);
+                                       this.scrollTimeout = 0;
+                                       $sub.dataSM('scroll').step = 1;
+                                       return true;
+                               }
+                       },
+                       menuScrollTouch: function($sub, e) {
+                               e = e.originalEvent;
+                               if (isTouchEvent(e)) {
+                                       var touchPoint = this.getTouchPoint(e);
+                                       // neglect event if we touched a visible deeper level sub menu
+                                       if (this.getClosestMenu(touchPoint.target) == $sub[0]) {
+                                               var data = $sub.dataSM('scroll');
+                                               if (/(start|down)$/i.test(e.type)) {
+                                                       if (this.menuScrollStop($sub)) {
+                                                               // if we were scrolling, just stop and don't activate any link on the first touch
+                                                               e.preventDefault();
+                                                               this.$touchScrollingSub = $sub;
+                                                       } else {
+                                                               this.$touchScrollingSub = null;
+                                                       }
+                                                       // update scroll data since the user might have zoomed, etc.
+                                                       this.menuScrollRefreshData($sub);
+                                                       // extend it with the touch properties
+                                                       $.extend(data, {
+                                                               touchStartY: touchPoint.pageY,
+                                                               touchStartTime: e.timeStamp
+                                                       });
+                                               } else if (/move$/i.test(e.type)) {
+                                                       var prevY = data.touchY !== undefined ? data.touchY : data.touchStartY;
+                                                       if (prevY !== undefined && prevY != touchPoint.pageY) {
+                                                               this.$touchScrollingSub = $sub;
+                                                               var up = prevY < touchPoint.pageY;
+                                                               // changed direction? reset...
+                                                               if (data.up !== undefined && data.up != up) {
+                                                                       $.extend(data, {
+                                                                               touchStartY: touchPoint.pageY,
+                                                                               touchStartTime: e.timeStamp
+                                                                       });
+                                                               }
+                                                               $.extend(data, {
+                                                                       up: up,
+                                                                       touchY: touchPoint.pageY
+                                                               });
+                                                               this.menuScroll($sub, true, Math.abs(touchPoint.pageY - prevY));
+                                                       }
+                                                       e.preventDefault();
+                                               } else { // touchend/pointerup
+                                                       if (data.touchY !== undefined) {
+                                                               if (data.momentum = Math.pow(Math.abs(touchPoint.pageY - data.touchStartY) / (e.timeStamp - data.touchStartTime), 2) * 15) {
+                                                                       this.menuScrollStop($sub);
+                                                                       this.menuScroll($sub);
+                                                                       e.preventDefault();
+                                                               }
+                                                               delete data.touchY;
+                                                       }
+                                               }
+                                       }
+                               }
+                       },
+                       menuShow: function($sub) {
+                               if (!$sub.dataSM('beforefirstshowfired')) {
+                                       $sub.dataSM('beforefirstshowfired', true);
+                                       if (this.$root.triggerHandler('beforefirstshow.smapi', $sub[0]) === false) {
+                                               return;
+                                       }
+                               }
+                               if (this.$root.triggerHandler('beforeshow.smapi', $sub[0]) === false) {
+                                       return;
+                               }
+                               $sub.dataSM('shown-before', true)
+                                       .stop(true, true);
+                               if (!$sub.is(':visible')) {
+                                       // highlight parent item
+                                       var $a = $sub.dataSM('parent-a');
+                                       if (this.opts.keepHighlighted || this.isCollapsible()) {
+                                               $a.addClass('highlighted');
+                                       }
+                                       if (this.isCollapsible()) {
+                                               $sub.removeClass('sm-nowrap').css({ zIndex: '', width: 'auto', minWidth: '', maxWidth: '', top: '', left: '', marginLeft: '', marginTop: '' });
+                                       } else {
+                                               // set z-index
+                                               $sub.css('z-index', this.zIndexInc = (this.zIndexInc || this.getStartZIndex()) + 1);
+                                               // min/max-width fix - no way to rely purely on CSS as all UL's are nested
+                                               if (this.opts.subMenusMinWidth || this.opts.subMenusMaxWidth) {
+                                                       $sub.css({ width: 'auto', minWidth: '', maxWidth: '' }).addClass('sm-nowrap');
+                                                       if (this.opts.subMenusMinWidth) {
+                                                               $sub.css('min-width', this.opts.subMenusMinWidth);
+                                                       }
+                                                       if (this.opts.subMenusMaxWidth) {
+                                                               var noMaxWidth = this.getWidth($sub);
+                                                               $sub.css('max-width', this.opts.subMenusMaxWidth);
+                                                               if (noMaxWidth > this.getWidth($sub)) {
+                                                                       $sub.removeClass('sm-nowrap').css('width', this.opts.subMenusMaxWidth);
+                                                               }
+                                                       }
+                                               }
+                                               this.menuPosition($sub);
+                                               // insert IE iframe shim
+                                               if ($sub.dataSM('ie-shim')) {
+                                                       $sub.dataSM('ie-shim').insertBefore($sub);
+                                               }
+                                       }
+                                       var complete = function() {
+                                               // fix: "overflow: hidden;" is not reset on animation complete in jQuery < 1.9.0 in Chrome when global "box-sizing: border-box;" is used
+                                               $sub.css('overflow', '');
+                                       };
+                                       // if sub is collapsible (mobile view)
+                                       if (this.isCollapsible()) {
+                                               if (this.opts.collapsibleShowFunction) {
+                                                       this.opts.collapsibleShowFunction.call(this, $sub, complete);
+                                               } else {
+                                                       $sub.show(this.opts.collapsibleShowDuration, complete);
+                                               }
+                                       } else {
+                                               if (this.opts.showFunction) {
+                                                       this.opts.showFunction.call(this, $sub, complete);
+                                               } else {
+                                                       $sub.show(this.opts.showDuration, complete);
+                                               }
+                                       }
+                                       // accessibility
+                                       $a.attr('aria-expanded', 'true');
+                                       $sub.attr({
+                                               'aria-expanded': 'true',
+                                               'aria-hidden': 'false'
+                                       });
+                                       // store sub menu in visible array
+                                       this.visibleSubMenus.push($sub);
+                                       this.$root.triggerHandler('show.smapi', $sub[0]);
+                               }
+                       },
+                       popupHide: function(noHideTimeout) {
+                               if (this.hideTimeout) {
+                                       clearTimeout(this.hideTimeout);
+                                       this.hideTimeout = 0;
+                               }
+                               var self = this;
+                               this.hideTimeout = setTimeout(function() {
+                                       self.menuHideAll();
+                               }, noHideTimeout ? 1 : this.opts.hideTimeout);
+                       },
+                       popupShow: function(left, top) {
+                               if (!this.opts.isPopup) {
+                                       alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');
+                                       return;
+                               }
+                               if (this.hideTimeout) {
+                                       clearTimeout(this.hideTimeout);
+                                       this.hideTimeout = 0;
+                               }
+                               this.$root.dataSM('shown-before', true)
+                                       .stop(true, true);
+                               if (!this.$root.is(':visible')) {
+                                       this.$root.css({ left: left, top: top });
+                                       // IE iframe shim
+                                       this.menuIframeShim(this.$root);
+                                       if (this.$root.dataSM('ie-shim')) {
+                                               this.$root.dataSM('ie-shim').css({ zIndex: this.$root.css('z-index'), width: this.getWidth(this.$root), height: this.getHeight(this.$root), left: left, top: top }).insertBefore(this.$root);
+                                       }
+                                       // show menu
+                                       var self = this,
+                                               complete = function() {
+                                                       self.$root.css('overflow', '');
+                                               };
+                                       if (this.opts.showFunction) {
+                                               this.opts.showFunction.call(this, this.$root, complete);
+                                       } else {
+                                               this.$root.show(this.opts.showDuration, complete);
+                                       }
+                                       this.visibleSubMenus[0] = this.$root;
+                               }
+                       },
+                       refresh: function() {
+                               this.destroy(true);
+                               this.init(true);
+                       },
+                       rootKeyDown: function(e) {
+                               if (!this.handleEvents()) {
+                                       return;
+                               }
+                               switch (e.keyCode) {
+                                       case 27: // reset on Esc
+                                               var $activeTopItem = this.activatedItems[0];
+                                               if ($activeTopItem) {
+                                                       this.menuHideAll();
+                                                       $activeTopItem[0].focus();
+                                                       var $sub = $activeTopItem.dataSM('sub');
+                                                       if ($sub) {
+                                                               this.menuHide($sub);
+                                                       }
+                                               }
+                                               break;
+                                       case 32: // activate item's sub on Space
+                                               var $target = $(e.target);
+                                               if ($target.is('a') && this.handleItemEvents($target)) {
+                                                       var $sub = $target.dataSM('sub');
+                                                       if ($sub && !$sub.is(':visible')) {
+                                                               this.itemClick({ currentTarget: e.target });
+                                                               e.preventDefault();
+                                                       }
+                                               }
+                                               break;
+                               }
+                       },
+                       rootOut: function(e) {
+                               if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) {
+                                       return;
+                               }
+                               if (this.hideTimeout) {
+                                       clearTimeout(this.hideTimeout);
+                                       this.hideTimeout = 0;
+                               }
+                               if (!this.opts.showOnClick || !this.opts.hideOnClick) {
+                                       var self = this;
+                                       this.hideTimeout = setTimeout(function() { self.menuHideAll(); }, this.opts.hideTimeout);
+                               }
+                       },
+                       rootOver: function(e) {
+                               if (!this.handleEvents() || this.isTouchMode() || e.target == this.$root[0]) {
+                                       return;
+                               }
+                               if (this.hideTimeout) {
+                                       clearTimeout(this.hideTimeout);
+                                       this.hideTimeout = 0;
+                               }
+                       },
+                       winResize: function(e) {
+                               if (!this.handleEvents()) {
+                                       // we still need to resize the disable overlay if it's visible
+                                       if (this.$disableOverlay) {
+                                               var pos = this.$root.offset();
+                                               this.$disableOverlay.css({
+                                                       top: pos.top,
+                                                       left: pos.left,
+                                                       width: this.$root.outerWidth(),
+                                                       height: this.$root.outerHeight()
+                                               });
+                                       }
+                                       return;
+                               }
+                               // hide sub menus on resize - on mobile do it only on orientation change
+                               if (!('onorientationchange' in window) || e.type == 'orientationchange') {
+                                       var isCollapsible = this.isCollapsible();
+                                       // if it was collapsible before resize and still is, don't do it
+                                       if (!(this.wasCollapsible && isCollapsible)) { 
+                                               if (this.activatedItems.length) {
+                                                       this.activatedItems[this.activatedItems.length - 1][0].blur();
+                                               }
+                                               this.menuHideAll();
+                                       }
+                                       this.wasCollapsible = isCollapsible;
+                               }
+                       }
+               }
+       });
+
+       $.fn.dataSM = function(key, val) {
+               if (val) {
+                       return this.data(key + '_smartmenus', val);
+               }
+               return this.data(key + '_smartmenus');
+       };
+
+       $.fn.removeDataSM = function(key) {
+               return this.removeData(key + '_smartmenus');
+       };
+
+       $.fn.smartmenus = function(options) {
+               if (typeof options == 'string') {
+                       var args = arguments,
+                               method = options;
+                       Array.prototype.shift.call(args);
+                       return this.each(function() {
+                               var smartmenus = $(this).data('smartmenus');
+                               if (smartmenus && smartmenus[method]) {
+                                       smartmenus[method].apply(smartmenus, args);
+                               }
+                       });
+               }
+               // [data-sm-options] attribute on the root UL
+               var dataOpts = this.data('sm-options') || null;
+               if (dataOpts) {
+                       try {
+                               dataOpts = eval('(' + dataOpts + ')');
+                       } catch(e) {
+                               dataOpts = null;
+                               alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.');
+                       };
+               }
+               return this.each(function() {
+                       new $.SmartMenus(this, $.extend({}, $.fn.smartmenus.defaults, options, dataOpts));
+               });
+       };
+
+       // default settings
+       $.fn.smartmenus.defaults = {
+               isPopup:                false,          // is this a popup menu (can be shown via the popupShow/popupHide methods) or a permanent menu bar
+               mainMenuSubOffsetX:     0,              // pixels offset from default position
+               mainMenuSubOffsetY:     0,              // pixels offset from default position
+               subMenusSubOffsetX:     0,              // pixels offset from default position
+               subMenusSubOffsetY:     0,              // pixels offset from default position
+               subMenusMinWidth:       '10em',         // min-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored
+               subMenusMaxWidth:       '20em',         // max-width for the sub menus (any CSS unit) - if set, the fixed width set in CSS will be ignored
+               subIndicators:          true,           // create sub menu indicators - creates a SPAN and inserts it in the A
+               subIndicatorsPos:       'prepend',      // position of the SPAN relative to the menu item content ('prepend', 'append')
+               subIndicatorsText:      '+',            // [optionally] add text in the SPAN (e.g. '+') (you may want to check the CSS for the sub indicators too)
+               scrollStep:             30,             // pixels step when scrolling long sub menus that do not fit in the viewport height
+               scrollAccelerate:       true,           // accelerate scrolling or use a fixed step
+               showTimeout:            250,            // timeout before showing the sub menus
+               hideTimeout:            500,            // timeout before hiding the sub menus
+               showDuration:           0,              // duration for show animation - set to 0 for no animation - matters only if showFunction:null
+               showFunction:           null,           // custom function to use when showing a sub menu (the default is the jQuery 'show')
+                                                       // don't forget to call complete() at the end of whatever you do
+                                                       // e.g.: function($ul, complete) { $ul.fadeIn(250, complete); }
+               hideDuration:           0,              // duration for hide animation - set to 0 for no animation - matters only if hideFunction:null
+               hideFunction:           function($ul, complete) { $ul.fadeOut(200, complete); },        // custom function to use when hiding a sub menu (the default is the jQuery 'hide')
+                                                       // don't forget to call complete() at the end of whatever you do
+                                                       // e.g.: function($ul, complete) { $ul.fadeOut(250, complete); }
+               collapsibleShowDuration:0,              // duration for show animation for collapsible sub menus - matters only if collapsibleShowFunction:null
+               collapsibleShowFunction:function($ul, complete) { $ul.slideDown(200, complete); },      // custom function to use when showing a collapsible sub menu
+                                                       // (i.e. when mobile styles are used to make the sub menus collapsible)
+               collapsibleHideDuration:0,              // duration for hide animation for collapsible sub menus - matters only if collapsibleHideFunction:null
+               collapsibleHideFunction:function($ul, complete) { $ul.slideUp(200, complete); },        // custom function to use when hiding a collapsible sub menu
+                                                       // (i.e. when mobile styles are used to make the sub menus collapsible)
+               showOnClick:            false,          // show the first-level sub menus onclick instead of onmouseover (i.e. mimic desktop app menus) (matters only for mouse input)
+               hideOnClick:            true,           // hide the sub menus on click/tap anywhere on the page
+               noMouseOver:            false,          // disable sub menus activation onmouseover (i.e. behave like in touch mode - use just mouse clicks) (matters only for mouse input)
+               keepInViewport:         true,           // reposition the sub menus if needed to make sure they always appear inside the viewport
+               keepHighlighted:        true,           // keep all ancestor items of the current sub menu highlighted (adds the 'highlighted' class to the A's)
+               markCurrentItem:        false,          // automatically add the 'current' class to the A element of the item linking to the current URL
+               markCurrentTree:        true,           // add the 'current' class also to the A elements of all ancestor items of the current item
+               rightToLeftSubMenus:    false,          // right to left display of the sub menus (check the CSS for the sub indicators' position)
+               bottomToTopSubMenus:    false,          // bottom to top display of the sub menus
+               overlapControlsInIE:    true            // make sure sub menus appear on top of special OS controls in IE (i.e. SELECT, OBJECT, EMBED, etc.)
+       };
+
+       return $;
+}));
\ No newline at end of file
diff --git a/fplll.pc.in b/fplll.pc.in
new file mode 100644 (file)
index 0000000..01b3d30
--- /dev/null
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: @PACKAGE_NAME@
+Description: lattice algorithms with floating-point computations
+Version: @PACKAGE_VERSION@
+Cflags: @PTHREAD_CFLAGS@
+Libs: -L${libdir} @LIBQD_LIBADD@ @LIBGMP@ @PTHREAD_LIBS@ -lmpfr -lfplll
diff --git a/fplll/Makefile.am b/fplll/Makefile.am
new file mode 100755 (executable)
index 0000000..5012d94
--- /dev/null
@@ -0,0 +1,153 @@
+include_fpllldir=$(includedir)/fplll
+TOPSRCDIR = $(srcdir)/..
+strategydir = $(pkgdatadir)/strategies
+# see https://stackoverflow.com/questions/5867136/autoconf-how-to-get-installation-paths-into-config-h
+AM_CPPFLAGS = -DFPLLL_DEFAULT_STRATEGY_PATH=\"$(strategydir)\" -DFPLLL_DEFAULT_STRATEGY=\"$(strategydir)/default.json\" -I$(TOPSRCDIR)
+EXTRA_DIST = io/json.hpp ballvol.const factorial.const
+
+CLEANFILES = *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda */*.gcno */*.gcda
+
+nodist_include_fplll_HEADERS=fplll_config.h
+
+nobase_include_fplll_HEADERS=defs.h fplll.h \
+       nr/dpe.h \
+       nr/matrix.h \
+       nr/matrix.cpp \
+       nr/nr_FP_dd.inl \
+       nr/nr_FP_d.inl \
+       nr/nr_FP_dpe.inl \
+       nr/nr_FP.inl \
+       nr/nr_FP_ld.inl \
+       nr/nr_FP_misc.inl \
+       nr/nr_FP_mpfr.inl \
+       nr/nr_FP_qd.inl \
+       nr/nr.h \
+       nr/nr_rand.inl \
+       nr/nr_Z_d.inl \
+       nr/nr_Z.inl \
+       nr/nr_Z_l.inl \
+       nr/nr_Z_misc.inl \
+       nr/nr_Z_mpz.inl \
+       nr/numvect.h \
+       util.h \
+       svpcvp.h bkz.h lll.h gso_interface.h gso_gram.h gso.h  \
+       enum/evaluator.h \
+       wrapper.h \
+       bkz_param.h \
+       enum/enumerate.h enum/enumerate_base.h enum/enumerate_ext.h \
+       sieve/sieve_gauss.h sieve/sieve_common.h sieve/sieve_gauss_str.h sieve/sampler_basic.h \
+       pruner/pruner.h pruner/pruner_simplex.h \
+       householder.h hlll.h \
+       threadpool.h io/thread_pool.hpp
+
+bin_PROGRAMS=fplll latticegen latsieve
+check_PROGRAMS=llldiff
+EXTRA_PROGRAMS=fplll_dbg latticegen_dbg
+lib_LTLIBRARIES=libfplll.la
+EXTRA_LTLIBRARIES=libfplllv.la libfpllld.la
+
+# fplll bin
+fplll_SOURCES=main.cpp main.h
+fplll_LDADD=libfplll.la
+fplll_dbg_SOURCES=$(fplll_SOURCES)
+fplll_dbg_CPPFLAGS=-DDEBUG $(AM_CPPFLAGS)
+fplll_dbg_CXXFLAGS=-g $(AM_CXXFLAGS)
+fplll_dbg_LDADD=libfpllld.la
+
+# latticegen bin
+latticegen_SOURCES=latticegen.cpp
+latticegen_LDADD=libfplll.la
+latticegen_dbg_SOURCES=$(latticegen_SOURCES)
+latticegen_dbg_CPPFLAGS=-DDEBUG $(AM_CPPFLAGS)
+latticegen_dbg_CXXFLAGS=-g $(AM_CXXFLAGS)
+latticegen_dbg_LDADD=libfpllld.la
+
+# llldiff bin
+llldiff_SOURCES=llldiff.cpp
+llldiff_LDADD=libfplll.la
+
+# latsieve bin
+latsieve_SOURCES=sieve/sieve_main.cpp sieve/sieve_main.h
+latsieve_LDADD=libfplll.la $(LIBQD_LIBADD)
+
+# libfplll
+libfplll_la_SOURCES=fplll.cpp fplll.h \
+       util.cpp util.h \
+       enum/topenum.cpp enum/topenum.h \
+       enum/enumerate.cpp enum/enumerate.h \
+       enum/enumerate_base.cpp enum/enumerate_base.h \
+       enum/enumerate_ext.cpp enum/enumerate_ext.h \
+       enum/evaluator.cpp enum/evaluator.h \
+       lll.cpp lll.h \
+       wrapper.cpp wrapper.h \
+       bkz.cpp bkz.h \
+       bkz_param.cpp bkz_param.h \
+       gso_interface.cpp gso_interface.h gso_gram.cpp gso_gram.h gso.cpp gso.h \
+       pruner/pruner.cpp \
+       pruner/pruner.h \
+       pruner/pruner_simplex.h \
+       pruner/pruner_cost.cpp \
+       pruner/pruner_optimize.cpp \
+       pruner/pruner_optimize_tc.cpp \
+       pruner/pruner_optimize_tp.cpp \
+       pruner/pruner_prob.cpp \
+       pruner/pruner_util.cpp \
+       sieve/sieve_gauss.cpp \
+       sieve/sieve_gauss.h  \
+       sieve/sieve_common.h\
+       sieve/sieve_gauss_str.h \
+       sieve/sieve_gauss_2sieve.cpp \
+       sieve/sieve_gauss_3sieve.cpp \
+       sieve/sieve_gauss_4sieve.cpp \
+       sieve/sampler_basic.h \
+       sieve/sampler_basic.cpp \
+       householder.cpp householder.h hlll.cpp hlll.h \
+       io/json.hpp \
+       threadpool.h threadpool.cpp io/thread_pool.hpp
+libfplll_la_CXXFLAGS=$(PTHREAD_CFLAGS)
+
+EXTRA_libfplll_la_SOURCES= svpcvp.cpp
+libfplll_la_LIBADD=$(LIBGMP) -lmpfr $(LIBQD_LIBADD) $(PTHREAD_LIBS)
+libfplll_la_LDFLAGS=-no-undefined -version-info @FPLLL_LT_CURRENT@:@FPLLL_LT_REVISION@:@FPLLL_LT_AGE@ $(PTHREAD_CFLAGS)
+
+if FPLLL_PARALLEL_ENUM
+libfplll_la_SOURCES+=\
+       enum-parallel/enumeration.h enum-parallel/enumlib.h enum-parallel/fplll_types.h \
+       enum-parallel/enumlib.cpp \
+       enum-parallel/enumlib_dim.160.cpp enum-parallel/enumlib_dim.150.cpp enum-parallel/enumlib_dim.140.cpp enum-parallel/enumlib_dim.130.cpp \
+       enum-parallel/enumlib_dim.120.cpp enum-parallel/enumlib_dim.110.cpp enum-parallel/enumlib_dim.100.cpp enum-parallel/enumlib_dim.90.cpp \
+       enum-parallel/enumlib_dim.80.cpp enum-parallel/enumlib_dim.70.cpp enum-parallel/enumlib_dim.60.cpp enum-parallel/enumlib_dim.50.cpp \
+       enum-parallel/enumlib_dim.40.cpp enum-parallel/enumlib_dim.30.cpp enum-parallel/enumlib_dim.20.cpp
+EXTRA_libfplll_la_SOURCES+=enum-parallel/enumlib_dim.cpp
+endif
+
+
+# libfplll variants
+libfplllv_la_SOURCES=$(libfplll_la_SOURCES)
+EXTRA_libfplllv_la_SOURCES=$(EXTRA_libfplll_la_SOURCES)
+libfplllv_la_CPPFLAGS=$(AM_CPPFLAGS)
+libfplllv_la_LIBADD=$(libfplll_la_LIBADD)
+libfplllv_la_LDFLAGS=$(libfplll_la_LDFLAGS)
+
+libfpllld_la_SOURCES=$(libfplll_la_SOURCES)
+EXTRA_libfpllld_la_SOURCES=$(EXTRA_libfplll_la_SOURCES)
+libfpllld_la_CPPFLAGS=-DDEBUG $(AM_CPPFLAGS)
+libfpllld_la_CXXFLAGS=-g $(AM_CXXFLAGS)
+libfpllld_la_LIBADD=$(libfplll_la_LIBADD)
+libfpllld_la_LDFLAGS=$(libfplll_la_LDFLAGS)
+
+install-data-hook:
+       echo "#include <fplll/fplll.h>" > "$(builddir)/fplll.h.root"
+       echo "using namespace fplll;" >> "$(builddir)/fplll.h.root"
+       $(INSTALL) -m 644 "$(builddir)/fplll.h.root" "${DESTDIR}$(includedir)/fplll.h"
+       rm -f "$(builddir)/fplll.h.root"
+
+uninstall-hook:
+       if test -d "${DESTDIR}$(includedir)/fplll/enum"; then rmdir "${DESTDIR}$(includedir)/fplll/enum"; fi
+       if test -d "${DESTDIR}$(includedir)/fplll/nr"; then rmdir "${DESTDIR}$(includedir)/fplll/nr"; fi
+       if test -d "${DESTDIR}$(includedir)/fplll/pruner"; then rmdir "${DESTDIR}$(includedir)/fplll/pruner"; fi
+       (test -d "${DESTDIR}$(includedir)/fplll" && rmdir "${DESTDIR}$(includedir)/fplll") || true
+       rm -f "${DESTDIR}$(includedir)/fplll.h"
+
+dbg: fplll_dbg latticegen_dbg
+
diff --git a/fplll/ballvol.const b/fplll/ballvol.const
new file mode 100644 (file)
index 0000000..36665bc
--- /dev/null
@@ -0,0 +1,2050 @@
+const char* pre_ball_vol[2048] ={
+"1.00000000000000000000000000000000000000000000000000000000",
+"2.00000000000000000000000000000000000000000000000000000000",
+"3.14159265358979323846264338327950288419716939937510582097",
+"4.18879020478639098461685784437267051226289253250014109463",
+"4.93480220054467930941724549993807556765684970362039531320",
+"5.26378901391432459671172853326728060550063968386175500075",
+"5.16771278004997002924605251118356586703754809431418461569",
+"4.72476597033140116959639086736783164986290111480154022006",
+"4.05871212641676821818501386202937963540531606969522590381",
+"3.29850890273870686938210650374451170369447909156183438531",
+"2.55016403987734544385617758369529672066917255523395825461",
+"1.88410387938990024134828704596247030444821983878757088941",
+"1.33526276885458949587530478285058319287113545566812029991",
+"0.91062875478328314603816989519746732567435411695248430710",
+"0.59926452932079207688773938354604004601536358636813536959",
+"0.38144328082330448281774366977538151180713741255071988715",
+"0.23533063035889320454187935277546542154506893530855859851",
+"0.14098110691713903791632711973575485046279663370704050744",
+"0.08214588661112822879880236552369834480783746079775312311",
+"0.04662160103008854577980308581663248587608682440270669359",
+"0.02580689139001406001259829425289884965718644104814668599",
+"0.01394915040902100118239359659665807060748020277374919168",
+"0.00737043094571435077725908995729078150121163823602099744",
+"0.00381065638685212494181313381380666820672303164707655101",
+"0.00192957430940392304790334556368595764016847181500030335",
+"0.00095772240882317287085664512386418734706005801529710946",
+"0.00046630280576761256442062891447027174382819981361599267",
+"0.00022287212472127410876149755331532225348544350829318964",
+"0.00010463810492484570711801672835223932761029733149091321",
+"0.00004828782273891744035080372832307872986142559005042791",
+"0.00002191535344783021582738465205709418885924870876595578",
+"9.78713994673736768588044664432891683819954092164034358803e-6",
+"4.30306958703294700729782371496692330089609015560084108780e-6",
+"1.86346708826214027921181564695895601233004182055674013236e-6",
+"7.95205400147551278478320686245758903276824593842811128562e-7",
+"3.34528829410897298741822222497534824830635012647835357525e-7",
+"1.38789524622137721144680875039930934377703784997799014943e-7",
+"5.68082871833117899201202777180523549702523987788765200013e-8",
+"2.29484289972698731102038723855715878560747855810879887065e-8",
+"9.15223065015956549183029023983166007872557958556370868499e-9",
+"3.60473079746250093385942876362119701504149780226516508001e-9",
+"1.40256490607320136493273393370519933754417324759688133996e-9",
+"5.39266466260812848935231228565622592722519011781399910157e-10",
+"2.04943609539647804017172811013792751968167347143716595416e-10",
+"7.70070713060135337978723602565237678942858952591507132680e-11",
+"2.86155261391081159324687271787601161646386052824107899381e-11",
+"1.05184717169320644551330616082432117155045168306895246733e-11",
+"3.82546071052037263055374448562827012660461513487892103491e-12",
+"1.37686472803774137041564823120508683967739347201900717259e-12",
+"4.90532214888456870368952747842769975438251887334958839828e-13",
+"1.73021924583611076115452730581917680393318424411101366889e-13",
+"6.04334275546159177273643773266212734445106484826806417219e-14",
+"2.09063233531476846984206655788704287977342361191757790230e-14",
+"7.16442309572952265350848506464306618953108555653889329027e-15",
+"2.43256117999338884545626097423960871149839706933212496614e-15",
+"8.18461780536469539738407033836513614815765608562668592737e-16",
+"2.72932726159819611484441138200822426282090890349722202714e-16",
+"9.02201234027155904807360264416616345226041262569768977825e-17",
+"2.95670154285491059203128461232499629781273347489258022504e-17",
+"9.60796192840460603589911823509084063244065691928135938482e-18",
+"3.09625061529686477967508532388030396322049075188253235609e-18",
+"9.89649265909715846377693799263762646005402814833328594122e-19",
+"3.13779296344822822040309737111141857790099495978205994362e-19",
+"9.87007893146823844374891591170238562085387757936789941130e-20",
+"3.08052103826709387394470647488814792031852714580740628463e-20",
+"9.54085152660061975834040220335506827165101528973974139114e-21",
+"2.93264917062081952889631874846106728802418996734099180119e-21",
+"8.94730419849536442316832164920524731001446090701385898825e-22",
+"2.70976149705251962718671603921784779651129571963765919729e-22",
+"8.14747395345685508554323741224269307783218549703343915408e-23",
+"2.43227623203447880706173497195941855721632427621503164506e-23",
+"7.21015332887161829226131716544918204474644872608652680240e-24",
+"2.12256142835016164963241172046081687735309860232014554524e-24",
+"6.20585335047645712022903044712435727674797623054430714072e-25",
+"1.80222253786430435905677855385443422430350434155636168346e-25",
+"5.19900354536331788890208405544215670968230016619095351143e-26",
+"1.48996028554959251379105303145336347383797303867769437732e-26",
+"4.24237697249368541124074110103725310226659849378142921010e-27",
+"1.20021750954439754114481857089625823497452436840403302393e-27",
+"3.37413172925181529879331421423907252692163379630553391910e-28",
+"9.42648627673629216096396512795901097687968366316718740920e-29",
+"2.61732035873129091585112663759974418715817222310483664059e-29",
+"7.22297074052676539995752428609274889528467713372008583345e-30",
+"1.98133841230872910672623524663265976023939178415367832465e-30",
+"5.40276947988878924636603886211702914721218601646637362723e-31",
+"1.46460192950220426544573906710208701963655140343625639883e-31",
+"3.94727928071110894457202211132747306088015331616124721037e-32",
+"1.05774314072587613395157167748051317019897654791115474598e-32",
+"2.81835081589755070587207895965161430042108663386933348083e-33",
+"7.46741141638069056593407519207189121312390540953516604339e-34",
+"1.96758004854723225624327486251072538019971669088345358559e-34",
+"5.15594831802947914180329338842533523356001517393758236436e-35",
+"1.34376848388387686705774845382699714125937754697844464944e-35",
+"3.48341706628173388497690265304205473655702131562088785909e-36",
+"8.98207063211719582246635834129509337334983177883489968282e-37",
+"2.30388999259368527022798500098655072502709196680727593001e-37",
+"5.87875148164250265771650145216429188632589831377342422093e-38",
+"1.49234719080646696885279637708279282003354654368139492180e-38",
+"3.76911070755269359112043457037303453822092833899245940651e-39",
+"9.47140802271305466022525146470792148996895909978385814082e-40",
+"2.36820210188283396131117432457541701103907108278836304506e-40",
+"5.89213977491223011054812982803519408327696175019261523329e-41",
+"1.45880908342961141699560530906885410746896225437347484680e-41",
+"3.59431126811426796785697423564425656915971127885249891862e-42",
+"8.81343057594716731517881539401318968616336638850092998751e-43",
+"2.15083083326148531336316095198330614171438963585907213855e-43",
+"5.22419033024892096507189846995800606886709435409577600757e-44",
+"1.26299707381097117212405726071534759468056712912533702455e-44",
+"3.03931073378978627745745988541856986632705148950033612771e-45",
+"7.28040794236688601737899380118598959217267424510834050731e-46",
+"1.73605023150010842474122301030927597185671651409503446268e-46",
+"4.12109479403181836402594466533637996554354798776074814456e-47",
+"9.73921902418500086435839345222454331351684798529711929911e-48",
+"2.29146922649159339207751393420857809417732654062600460092e-48",
+"5.36783490141781641344526941036205524061801011473187178239e-49",
+"1.25197615441270883873809243553609235588102104198609845703e-49",
+"2.90750873999605242376249772935383489897503954378868752733e-50",
+"6.72341724644883194563560855543312850344553947436627464840e-51",
+"1.54817086403723975239251136103090169718481923474113240235e-51",
+"3.54995600478362467431246526883424741798480147993683404706e-52",
+"8.10620368826859172018314209435424776528774589092806444287e-53",
+"1.84339102565210052561831402602863952433551064160960219192e-53",
+"4.17481802550280232192225374464237850564673215300877371075e-54",
+"9.41655886810080180174351173616115895179053312381206895254e-55",
+"2.11541574822481449172835637044928213990578677633417903013e-55",
+"4.73327874593940764060125992310055557003032515442426092475e-56",
+"1.05488485300178300068922584682483679744490929656350281460e-56",
+"2.34173759616314211448802918962749257338797553680071581458e-57",
+"5.17815391339617253831668276524298649385898270009224224413e-58",
+"1.14058691918467430337073840725318794159282198631925139635e-58",
+"2.50271542976656216777476775175925673267795103469451502590e-59",
+"5.47062516960486716714727218929450675245085500118353521237e-60",
+"1.19128975881522028024566829493657662206872012363559011227e-60",
+"2.58443245765023569030786400046173302058506492418891465022e-61",
+"5.58589127550843680864985475776364606246820859822148955195e-62",
+"1.20284948483748072254445478626492962774087214629052096148e-62",
+"2.58067573454244482686051429949000447039199052614993926203e-63",
+"5.51658847436452091973753377631223504284809615693993416453e-64",
+"1.17499013462840407008994178477183836767159486825234636457e-64",
+"2.49365090991966969019760902755587256455851368135300638151e-65",
+"5.27334339284153764053428847816023407437416554797067708375e-66",
+"1.11121069208810461910190553748813551053340870831523014368e-66",
+"2.33333758631088024252324924111819183394003783381641972226e-67",
+"4.88247740818799895491869702598546959708252965861606282653e-68",
+"1.01811058604155576046261107301622835286654572327272199033e-68",
+"2.11569036646642092715036555481942758217467616647646222638e-69",
+"4.38149142143856256084070647778625765295694869038845550389e-70",
+"9.04304396266885092348773308747460536111633430386213157872e-71",
+"1.86011638667001200631953640807987592186721988777794244846e-71",
+"3.81336382271275094194414021009030156334921546004340530015e-72",
+"7.79163730024600122944904280949130963778793689227889128064e-73",
+"1.58675970475489656782312308383759441689619860453287619730e-73",
+"3.22080927656434836201374958312127510251113663791765579583e-74",
+"6.51627794963436910872870327457485815446229810170025130853e-75",
+"1.31408711193096278305589488463836811205614798840722090961e-75",
+"2.64148270133167673585933170675537531136964763602086532703e-76",
+"5.29272617566582181517002171485120387694189973407009030316e-77",
+"1.05712899988383663519849161264493644204067313861937456268e-77",
+"2.10475818619419586192243174230496051001874728610408294909e-78",
+"4.17744490557457429296362995845702233618642314286737270416e-79",
+"8.26536606916332987234343517496849724745166118583855966978e-80",
+"1.63028946908437144120935517279460882315735751879876506037e-80",
+"3.20573003976714370431859914037230744517223761860105762538e-81",
+"6.28430112797578608887011853856051399358251292229236963122e-82",
+"1.22818267589324077976509239920801763569756504783034024387e-82",
+"2.39305627352664007908330316003936785952920152901367590409e-83",
+"4.64873454440055335410698187649382169869545138389069673540e-84",
+"9.00360240543504105582043899978093765037585589662471727468e-85",
+"1.73862265394974677477287679148778946567871867734777070270e-85",
+"3.34741433997137468286987370301487285413331099983078334263e-86",
+"6.42593430236860445220523809206506264493817248956307456177e-87",
+"1.22996635075733301497803616110329302003450019150340184462e-87",
+"2.34740325543858847061084092022491921699222668371987917545e-88",
+"4.46711358578252511322842120817681441941495798802020564315e-89",
+"8.47653427850417747122344947744692956657557778524340315637e-90",
+"1.60386871129663309026806262532174058684639978680211804518e-90",
+"3.02611566105122527005253328682219839049459476119145559568e-91",
+"5.69344876918873620488969378530195425158894374098057431267e-92",
+"1.06818232917657866525156230577911196276787921197275577007e-92",
+"1.99849126557242279544553524378101689711033303876082142643e-93",
+"3.72865973115063754402719803119718511099010968405433415027e-94",
+"6.93750881567479771175986884873458750858009651463628200902e-95",
+"1.28724505704603697170795528603943767152489348736361455301e-95",
+"2.38194827645228104041376965277127407158742619261273539993e-96",
+"4.39565175498435224345031897520321242725370623603509359752e-97",
+"8.08984995300903352375610531665611430045755118279415762435e-98",
+"1.48487604959117449695847445286521230552628557527372826507e-98",
+"2.71818322791624746131817569031137723897375379195900039609e-99",
+"4.96263371158198649711671239290135048103664494465719879552e-100",
+"9.03642799992875514553930953651039727308081275529415184064e-101",
+"1.64111301165926500995209441115398762543309682111604894082e-101",
+"2.97264668264599851548426475935490687825924313278149188119e-102",
+"5.37052977202017463799497023231409728218727050333443032962e-103",
+"9.67755956468263051798682911486091355940201803404035975455e-104",
+"1.73938318326431420175275812346298076606145765615958455558e-104",
+"3.11825128544457328288105689153520960559908906762704468883e-105",
+"5.57595247991918213662749596610549561543601260941606321119e-106",
+"9.94545718822294496264149692789287022457125814956995760986e-107",
+"1.76943144926059512170132580362555516006313866202788236252e-107",
+"3.14015831548874426368758516169078837782628820620781964361e-108",
+"5.55883284202782662144158085983166963766857557968079877137e-109",
+"9.81601820402819823400429624897990223787096143837412311403e-110",
+"1.72906816030181106529215586933031628257224085625167911682e-110",
+"3.03821977116045948198399245499653108014610394532742293059e-111",
+"5.32551748035312609323822581047523078403892417272253897205e-112",
+"9.31204772006728026409663926804685732245545551843607345616e-113",
+"1.62433073716906863896375633317688566618970115614364996648e-113",
+"2.82653726640009189612705871244197723355709177643393343377e-114",
+"4.90671683739465321233711946482519024493100453904943254105e-115",
+"8.49744374279455026543833911226280291650545923360503799594e-116",
+"1.46808624472422729591498243336345577293454016445276252047e-116",
+"2.53037979494368868872580180775428568769898154352874032397e-117",
+"4.35106505779420738166691372300914448577528489821395893826e-118",
+"7.46424654890811251363423524833557743505330378877134100634e-119",
+"1.27750224493995617265432123494153029012413590138555486603e-119",
+"2.18136019745420405485533033547428259269549580460483025709e-120",
+"3.71610339597021752253634159980394364583043654572362759404e-121",
+"6.31607849876065277217174284602888827829392539650459319221e-122",
+"1.07105349805138695706269120067444900018440964149580874405e-122",
+"1.81210464029250381248467091237516584558300662157335792227e-123",
+"3.05892163734535199268240650386855395230437931302089600529e-124",
+"5.15194083753747041855894219527123731193792237835596488665e-125",
+"8.65755472413605364198497726704063442994052067465825205759e-126",
+"1.45159636654143170852814131050592603763380591938373585481e-126",
+"2.42843842137477099392764796045148533856540414471787192779e-127",
+"4.05362176098150986451228756225142664610845388002812897871e-128",
+"6.75147283565148254427463894645366888251636963984422513850e-129",
+"1.12201130790583543304940582210994780265327951110084038430e-129",
+"1.86055942643804798752477253442984081185175986641755182834e-130",
+"3.07851745166956165517604847465222183028478719675729746068e-131",
+"5.08271289188261816238291798822823175960204749895164979088e-132",
+"8.37354788754378030919095092078926184513392576070408986683e-133",
+"1.37653564495211778051946662887652629290362355624176979071e-133",
+"2.25804948738110492370959934479825673358127334226907144845e-134",
+"3.69616604238124886492837255852359189485785107033007295683e-135",
+"6.03733760084993851839967359542024359765436055407076744162e-136",
+"9.84054922473982355852140115478349977404264035760322915853e-137",
+"1.60057851933093622786529037717265572199588558871491832372e-137",
+"2.59789892031356007760315165058190752365316454617164774998e-138",
+"4.20783742077296913590214699199092143400625515051101124791e-139",
+"6.80128346902161334456875866208505919849364190657078516951e-140",
+"1.09703826793365837988945473752191050262736434498277570484e-140",
+"1.76585637861652930449592301548469940228865245663150478840e-141",
+"2.83658219197304725138653119053467205405401961667919015387e-142",
+"4.54721428389865977013750013287681737483351359736022411555e-143",
+"7.27460063314788393154858578016826940110455336296333458699e-144",
+"1.16142235679630910316218045753835959512432674029200709906e-144",
+"1.85051270501190693828311566358541456158472397360042049584e-145",
+"2.94251285792437770084607743050829500387322550937195150699e-146",
+"4.66952379071484577986763010682910545549490102883521185236e-147",
+"7.39534142203898560181460442144364342026339971097701299634e-148",
+"1.16890371606952371941547964686495085297939093812573380519e-148",
+"1.84390081605285490579959114086011478998874151865116056156e-149",
+"2.90294017957140336938859044314957404578107114468078784633e-150",
+"4.56124823437785327987301323191833044070616215684015299486e-151",
+"7.15282787604090666960265596062387806881563385953020644247e-152",
+"1.11949874565006869199583902022827075704255010860770174138e-152",
+"1.74873708231613981617575407384364863807836295740478698567e-153",
+"2.72636359305212736617927820818543551441740331337745001867e-154",
+"4.24233171495323117900962921791051294414735957304202110856e-155",
+"6.58855679611325845567840282961950372636292648397588727580e-156",
+"1.02127801914084749972277585444232558129457767773000624383e-156",
+"1.58004287239912350914687734249583879038904358967422048509e-157",
+"2.43987796365446596775839247456412024687804622463267482773e-158",
+"3.76049324264091022924053365160011030217830304269830629200e-159",
+"5.78498315945093950232883612781914079287643217850013299240e-160",
+"8.88266010898852885805163588091155196429729778946807907809e-161",
+"1.36135285354844516902832749524505954908279904287779973996e-161",
+"2.08251490617413988011767018235029567986205135654391539457e-162",
+"3.17978893951769295968582525208126719513541789955375518591e-163",
+"4.84623224461327066417122023261540169037690001607661445269e-164",
+"7.37239968439473327079309845184981280904229495930447423725e-165",
+"1.11947703068139889373185897510496723890902664697987474561e-165",
+"1.69678217493202961762039540792978441225691263874633072096e-166",
+"2.56711008427094768731420594825090527626665159713933636057e-167",
+"3.87679884764260049091889656777766618254794382924916316637e-168",
+"5.84406824761006107674342196378379729378003527472804383728e-169",
+"8.79373485862770384065297618891272847948043464376685775206e-170",
+"1.32084042257331975720381631636855490977225287194074802380e-170",
+"1.98038228168324540562775208953507846654686375072323908337e-171",
+"2.96395897722912818098081271210516951545913786775693863026e-172",
+"4.42815261739179809168978717046785350338260640468756018219e-173",
+"6.60393741021599032256380662214416111276404275889439142033e-174",
+"9.83141465142931970313102116579755133535460060862723406249e-175",
+"1.46104797554234929382122860323879012005121154923898511757e-175",
+"2.16745965216318656940913234550630602637336983170280156682e-176",
+"3.20980250804621290130973513988591029159435925924364396829e-177",
+"4.74513959594993416795152969025490147536105322705888730614e-178",
+"7.00270276302227475782956169828047213546390710160303454508e-179",
+"1.03164676089234276727493595367632827269040167796234307754e-179",
+"1.51721652107473966863026989320409966607256808278314573408e-180",
+"2.22750095197188319291052837184923708292196670852634903892e-181",
+"3.26470977843388072073301822160490602415855179270557345894e-182",
+"4.77672397718712566659659772650694874946326436668286589433e-183",
+"6.97713486804805528666419882722199047774331919762356783808e-184",
+"1.01739125118354529519423401037314061889757670899943635568e-184",
+"1.48103484084898391273910449066267959144208513815393937076e-185",
+"2.15234268050151780114075799157560903106893060759254387415e-186",
+"3.12269005081993052203804807657361155144413541414275706963e-187",
+"4.52293241008115842088754319245385504666734364374758809332e-188",
+"6.54014674872922122119556646093124376944897622899676078025e-189",
+"9.44133636690640889187960295881986051795628200950469994090e-190",
+"1.36069383968257568250818641444229020361335324386061117702e-190",
+"1.95781075711837114617793338341548444147058766571220711135e-191",
+"2.81233274377083397535969359048105232609002298014221050789e-192",
+"4.03320910929976773173614977583332520259468593477356947612e-193",
+"5.77464306358201200604962617775172322945652066257648928923e-194",
+"8.25452775776389820364801726463472666457142892765072510600e-195",
+"1.17802443023717572822072547384358869426763357477272519206e-195",
+"1.67847014644945572578976444316194305689667053121295874734e-196",
+"2.38765993276284719931990329010974662333412782521242147390e-197",
+"3.39104146710957844844192823175331225556286535685500572791e-198",
+"4.80836852822978233130559729364085815229064480043032604556e-199",
+"6.80720189207016366019167584737107506251817848116857057280e-200",
+"9.62161480512041434000342290996791780778592000901006161089e-201",
+"1.35780669559556614375611763023535701149503390910303507242e-201",
+"1.91311356882513188772295455622483582791694372222917821903e-202",
+"2.69127794314073392101030318536918432538739201359515527880e-203",
+"3.78001480082011674687462557182715508176001876803954231565e-204",
+"5.30087712535371721941185335823671489022164252373975150883e-205",
+"7.42204170544822769837250309784583813260041971131114162111e-206",
+"1.03758234483448096755132610549194288056304280932259607149e-206",
+"1.44826283829026162872914700189110377598025230644541160447e-207",
+"2.01836598887088356660010477013459093936525852874217581975e-208",
+"2.80855055138258558259482404775183233342686059655009114709e-209",
+"3.90208231562600996395590116143917181445726333078335993053e-210",
+"5.41308084629392268926969433191334235821421458535358815971e-211",
+"7.49770834035065551324130206897224317310415474001642651326e-212",
+"1.03693262317101270009484589317168510821735871061066358094e-212",
+"1.43189941889389303873778742371044447507959854651134023336e-213",
+"1.97431509771008903701530647654556244366798356634711106742e-214",
+"2.71809347134534643654905360073738625426179055687599618380e-215",
+"3.73644205231170514330557559646555009914710944961991957464e-216",
+"5.12861410291226398901572223235851982540364139828395106117e-217",
+"7.02896940245893580986349376172036585738400152575856343678e-218",
+"9.61911426197383664004183549538206948748645210804257933673e-219",
+"1.31441420458764473222600262103495738954306538514841086673e-219",
+"1.79343256376604219693112076881020378411808665162801570377e-220",
+"2.44340473899799774895882168393872607393159150111668832061e-221",
+"3.32403219294165579735381909445831368585162079860540908742e-222",
+"4.51540139869564464925186564990901699193736635686691772829e-223",
+"6.12478306020027919205322951690125808236267836818217770978e-224",
+"8.29564436383117791057536660025404828167397717118891413670e-225",
+"1.12195763654556323348454016240401598696803406661193854912e-225",
+"1.51520554594218618666731559269409426981415080192612632438e-226",
+"2.04332398180319349677568470386677948464919478034706148154e-227",
+"2.75153676983264975298839583422662126403381440626039505337e-228",
+"3.69987989056873605179478913313763895488232566323084205176e-229",
+"4.96793546102784039410301646173012491052637306176186694859e-230",
+"6.66104039161911135495477504424375169880736255063362175569e-231",
+"8.91841688449902054548781503148500988525005603341723413254e-232",
+"1.19238037376498459209221119304417976757589572376149816660e-232",
+"1.59193369124961900611756635796759805790566836367514730577e-233",
+"2.12236454532845746475764305181690933059993154445528800620e-234",
+"2.82554078498976564172204021084279470865838211156381075699e-235",
+"3.75639710639060490224968138178726943907796447748628852389e-236",
+"4.98690908569785689337819394247672605747890311482160108727e-237",
+"6.61124344728441530726229682069029184436450674141460299202e-238",
+"8.75242287583719544896919409967300663199926798690678434852e-239",
+"1.15709380752548070271502924138880110732299893429422581833e-239",
+"1.52758596710229912660784436681779492139216134204152535342e-240",
+"2.01391545996470492514589298751988026054456356568270128543e-241",
+"2.65141041545604558570545563213222820921981601955976026529e-242",
+"3.48589642643307237094976292466665988552784143911958970454e-243",
+"4.57673158398251340214876104047362820551005106565379877651e-244",
+"6.00069402983948125977226482008892838963083068738509348657e-245",
+"7.85695427414854750117808316776619029156583342866456610531e-246",
+"1.02734257659857470626235472874077380337068601119628370426e-246",
+"1.34148640365521756337638882368795082440458099307791802007e-247",
+"1.74931809829923671150573244114246202898327728410870861382e-248",
+"2.27805612465612078518121114209627675118867206081701941770e-249",
+"2.96261179860299182462075965547901687384913493804258632646e-250",
+"3.84770128262629210180993381982474821793814320015335554739e-251",
+"4.99051981872900975177122692520737690075184700740328336383e-252",
+"6.46412303888063316138772384635351432404287979840563627362e-253",
+"8.36169621339377262913601435963637570721710894958410655729e-254",
+"1.08019369419403864599607600002579049755707106541773648663e-254",
+"1.39358320400782324543154015936498375669102295124522928348e-255",
+"1.79551776409206957869045954873488221567566189037696972761e-256",
+"2.31032757566074069304974304842949230766499896652526685948e-257",
+"2.96883443003243012672622070502860354610058472346827181620e-258",
+"3.81003051920299221237884353459512074815607677809170128733e-259",
+"4.88317719115933168105087797064493568787354341961574704228e-260",
+"6.25042500735301618203019836394282912943775100404544292582e-261",
+"7.99007999475176971413560123683953812481556852575143724540e-262",
+"1.02006697583969688424471734024405253561816336452233609081e-262",
+"1.30059982451331261390448404138699522936115255892526519335e-263",
+"1.65614207621061955680593554591410232112886062972178584194e-264",
+"2.10616229585113257266917785151735478668410066192296943422e-265",
+"2.67502507965256034895740386095609615610306760405080919711e-266",
+"3.39318153636601577088432473547044342654581645583812813747e-267",
+"4.29863894547567012256816895956188470399892751524899619446e-268",
+"5.43877254435918519985575820538518401283533121312351975183e-269",
+"6.87255599569533894755496533947252258747424752590717776280e-270",
+"8.67330348726126095895050824500363833264025368195671988293e-271",
+"1.09320361658030195044052870891993961100571136532311254086e-271",
+"1.37616093524922789252908124321304141407877582000013679364e-272",
+"1.73017654948436760370151400480332098245206392327220950400e-273",
+"2.17253119815891129936605900968523997322288741246619189694e-274",
+"2.72456638459820883828190432800022090647153046218627958985e-275",
+"3.41260402591533353779518282999800593203482901831010536720e-276",
+"4.26906620352690078537891736137906109123716628525911594823e-277",
+"5.33383668528684787184930514973254823393168802564006047564e-278",
+"6.65591415518043701071756311154334849991985364466153830707e-279",
+"8.29541690393311647711715039438004234713455821081499274919e-280",
+"1.03260103767107041810927395514395886156996389751208124368e-280",
+"1.28378427605225942502822412531527421315246136791839115627e-281",
+"1.59410900935461040109368051455197281002222014589939923139e-282",
+"1.97702316198032810753870366377699799902540002442054598244e-283",
+"2.44891987912457067131688108231756068806110469188537121845e-284",
+"3.02975680080695736897220401687521123870009747806647216190e-285",
+"3.74379985473856724040526382624719051643753472801737628259e-286",
+"4.62051539202856884317933962963385545426810976979526643612e-287",
+"5.69563879910761158289873851156501184435277174048787269912e-288",
+"7.01245275912826829964634899605663478785624614321436104089e-289",
+"8.62331422109757337718146347025643346042699426485027361164e-290",
+"1.05914759960205978832472753805949092304079242231105053450e-290",
+"1.29932568856578064933447426706699177723775905808030453918e-291",
+"1.59206235309908844375451349028343129856608497194436632418e-292",
+"1.94842579370823680230819545333841804500826777494776859592e-293",
+"2.38171971073951221284054816103993279766768064026597899364e-294",
+"2.90791456512050295605271619480775503153088731212628171512e-295",
+"3.54615788917974357628957607145378800226564804214939077337e-296",
+"4.31937732153632647514662213221567703825616579129795576117e-297",
+"5.25499225147008045342191028204092902585790983165456232447e-298",
+"6.38575249949217951319577583643959606780605408642290973751e-299",
+"7.75072537647403384970883495603607856962113625321310054169e-300",
+"9.39645580330083889288495455283801826548411787897761079833e-301",
+"1.13783279919265463587587819370355828469210794950292936812e-301",
+"1.37621615484527248078899431980704849228540651936519932611e-302",
+"1.66260798277076940795297652678875892637430542403344861239e-303",
+"2.00626940223364332260816155072061009849103561574704208407e-304",
+"2.41816528910759013964557671718774532520387113905711893794e-305",
+"2.91126153126060036013866111657211100919689989231965730692e-306",
+"3.50087110941301550518272245538484291504943471349386507645e-307",
+"4.20505647783304564888031053689367262528107177771576576773e-308",
+"5.04509676995260493702666689770888562290266745476196069838e-309",
+"6.04602953715810867236405951098610844381145016683361813176e-310",
+"7.23727805896470264414715662186650528020985502319104287997e-311",
+"8.65337675504456129614386847074115951780848486725627935641e-312",
+"1.03348089009227764896517301823767131762234484057366466021e-312",
+"1.23289727176384025195323476456086000997420667320059622140e-313",
+"1.46912939906757465840809061352692460007411797714766379791e-314",
+"1.74865056957299293959697711715020700210971706480754323458e-315",
+"2.07901176904661269521647936101968744121463674669521330833e-316",
+"2.46901023958027966230415168140455252173119247575427471650e-317",
+"2.92888255621684230578321556872594102901629248728966895841e-318",
+"3.47052547217153554173580497864215107390227974606315086136e-319",
+"4.10774817939202071009643126344838413904561672905877115091e-320",
+"4.85656005677966346148985490990582705000553009905553579422e-321",
+"5.73549844585547572052241718227285660056973781663279905576e-322",
+"6.76600150602954317255231643470827101828001525259964013054e-323",
+"7.97283176202444204689896736842990070510346457528220073533e-324",
+"9.38455656755845031855229809661580642406195891498172963825e-325",
+"1.10340923752790104870503507879432944025218452116330616258e-325",
+"1.29593204263030653531189347099904673078699181517359319659e-326",
+"1.52037822566700400204996062513098446315111893144171523052e-327",
+"1.78174642655535481957293938954321170550462686268856608422e-328",
+"2.08576815040757405884977430793269132274613414271342578014e-329",
+"2.43900718266935459434240177952323410692643599431230424426e-330",
+"2.84897126017913285693346154532369770778945693963045472682e-331",
+"3.32423733064068688361739325870926614379520021683390538051e-332",
+"3.87459185336243256843338174504124465632134624206956966769e-333",
+"4.51118772212947144583276564219318408746980641116525311916e-334",
+"5.24671952680270671556630878712313341708778973271423057339e-335",
+"6.09561901368018108599963887218327527039481232611823586331e-336",
+"7.07427275572939901251288955961039135686196165878438881790e-337",
+"8.20126420233829476231217333803603104461446481188415165311e-338",
+"9.49764244397004351802805114769617611529952727949830570313e-339",
+"1.09872201996652206478520919864553858664401250417080180950e-339",
+"1.26969037142122970906878917057304288345741356799252543576e-340",
+"1.46570574363658761911587066425560814060013938010702016650e-341",
+"1.69019065389433526196660979283196644222400608193194977703e-342",
+"1.94699805350235454688283365995811370242341647100237813797e-343",
+"2.24046014406775211674800189155978625686470513321873520421e-344",
+"2.57544201323647336839741935725747176577246711911235870537e-345",
+"2.95740047448066379336845423043145906435426412231722292452e-346",
+"3.39244851510700703196938563145150215982952991981500513277e-347",
+"3.88742577587925613685537856091904844856050049076007236160e-348",
+"4.44997550427631565615745531239934441098808259644634949880e-349",
+"5.08862844119911380512041683237709415335329044111273607024e-350",
+"5.81289411762536748899779567608070978798736678061916423034e-351",
+"6.63336005299552576263282718383176101845110085758621162254e-352",
+"7.56179936067377969206428513154036671004618876507972879807e-353",
+"8.61128727731683689475391516273930906730701468375690316162e-354",
+"9.79632714202587280159434861819731611886816036974651997946e-355",
+"1.11329863573538384166169096225067859142658132378949192758e-355",
+"1.26390428671666435480641739783891276445891787752035014722e-356",
+"1.43341426855648407247774525948640699723033396969653113287e-357",
+"1.62399690060929261026432104213931642194381577433629163087e-358",
+"1.83804234108074992698697712941070880636158418466239597963e-359",
+"2.07818196839378707910274283342108168188715626942059852839e-360",
+"2.34730907143344268094717391163829349129344902306595355354e-361",
+"2.64860089441326465387795099189403670671183913570864841566e-362",
+"2.98554207875302944286386036947773476551308132260068612028e-363",
+"3.36194954027477490152671189654079369424357761662651919844e-364",
+"3.78199881515875694773710828291239950474247966774192757168e-365",
+"4.25025190240113301359024997426177679702866185534886367682e-366",
+"4.77168662393094505408753728061366432404752483760854249177e-367",
+"5.35172751602783261249300745749311915332520535182432537993e-368",
+"5.99627825718965578725008174205392890883947693285700225666e-369",
+"6.71175562809077500278224425604150480200466472437580926838e-370",
+"7.50512498871204439077880884515747908747301441614458827315e-371",
+"8.38393724608347008090587848587554760722730111226936063647e-372",
+"9.35636727333767403287299735856690597229213635090993989398e-373",
+"1.04312537269123453981601462042622096714669616453291238226e-373",
+"1.16181401937571548158776317112812019054525382860501466935e-374",
+"1.29273175842993986566782743524011511572880210974900160975e-375",
+"1.43698676697180214824936106072362175667645161651462011826e-376",
+"1.59577076437945553928556205616211407340547274567386417310e-377",
+"1.77036355702916147687453826808810698947275685846992105628e-378",
+"1.96213765565082834963876381729071175705169012506158504220e-379",
+"2.17256294724449556955318461692279052159292236556657233335e-380",
+"2.40321140129611766036064587352389414876682392077217468069e-381",
+"2.65576178775280031611619119736247731813322233619229022517e-382",
+"2.93200438187771485603624811330564412908179387170646069855e-383",
+"3.23384562871654775142277799250279081257170161410399437626e-384",
+"3.56331273748553643935270722106409258568410134478884208400e-385",
+"3.92255817375265348318241907461898487181408468455688780857e-386",
+"4.31386401484681954941465381758808462603851564917994044726e-387",
+"4.73964613151535842706786019890145956691656387995549851257e-388",
+"5.20245815647913207081067689165471431038195355521056593389e-389",
+"5.70499519823139196636452450136504109648727494054505277442e-390",
+"6.25009725621535002124348722873267800726782768764531620648e-391",
+"6.84075229142320121712699851699210342828721073534810021880e-392",
+"7.48009890451347326248063484063233690197157898718611742193e-393",
+"8.17142857177287958362968614729285284912308619058670771695e-394",
+"8.91818738768295555895065481770803395731785373302510018137e-395",
+"9.72397726152099053212000775905907117727066197110941092535e-396",
+"1.05925565143598950842809518439064100394859730214537067924e-396",
+"1.15278398220635998116227729963292079471969532271289108454e-397",
+"1.25338974494341821487121455002426840404881810418837740476e-398",
+"1.36149537205845392661878950544253786891369204973411167360e-399",
+"1.47753846709156749015828450260730662947767661158226528784e-400",
+"1.60197148267990303634563570560097356493666356149366369806e-401",
+"1.73526130602287585151176890778755694134102819266091296640e-402",
+"1.87788874673415376060836699153997222682261908679758892711e-403",
+"2.03034792218253140048366486248297536319159180403137112198e-404",
+"2.19314553568734620219645272335329737539267631231842759985e-405",
+"2.36680004325044224450137901008227880323955782250956841464e-406",
+"2.55184070487726612659287299304582988949755654154155950367e-407",
+"2.74880651696546922611037512100362824037907738777007437256e-408",
+"2.95824502272096639239863288405926110001761758596858717331e-409",
+"3.18071099809888231049511359972951295796372712722579196002e-410",
+"3.41676501135983786747649078703975056496605727832439264642e-411",
+"3.66697185497970916489746796946541156241543453791516193006e-412",
+"3.93189884935190955489051296356292559730959193476078240100e-413",
+"4.21211401847341534998848271634992545812022407067123230858e-414",
+"4.50818413860661322074136484305456569295772481443809694188e-415",
+"4.82067266175543326304938982614083157381590627389454733979e-416",
+"5.15013751668238773606852937677793996591823531707162805361e-417",
+"5.49712879111870176507181397900592721280338448667257991983e-418",
+"5.86218629977774294587762917394935848880036675583846225075e-419",
+"6.24583704376689132296849107864450543778998974242181131152e-420",
+"6.64859256799873307361335445684567307141498054302200161311e-421",
+"7.07094622422236312859116376759426188844587115201026187219e-422",
+"7.51337034832248837383829418827380466497840623050775053165e-423",
+"7.97631336156030984404287339273938455156778060677683802625e-424",
+"8.46019680644778329011993612757592780795706817238984691038e-425",
+"8.96541232894739810767662802952784323959483724153489197124e-426",
+"9.49231861966435210174396795913192290022939383436892764883e-427",
+"1.00412383276379695865189993837219972108536964460704899918e-427",
+"1.06124549612352794405889841025282811969667096024879786504e-428",
+"1.12062097914926133457471942292026158967652224673970553174e-429",
+"1.18226987740316694590717037086892509941459556812105844826e-430",
+"1.24620695063855584971983526639905212668825241440559961936e-431",
+"1.31244182381989214696991556807544361490548501194920040746e-432",
+"1.38097869523055560819110264671940630953184784050518807464e-433",
+"1.45181605351287425272451943823867942339880506206546695805e-434",
+"1.52494640551856996017893142333743722573674660325489160923e-435",
+"1.60035601687009539828969402499096109861732036839668574089e-436",
+"1.67802466714371317721800291953072383399695419061163666336e-437",
+"1.75792542158297724355209854089240217094706853306092460803e-438",
+"1.84002442123600258825209590460690231210149401416895670716e-439",
+"1.92428069338112246187480703747341204759633823395802838422e-440",
+"2.01064598406289978177144405496471338163680222650679522260e-441",
+"2.09906461450375270728456927428753860164269982432248449492e-442",
+"2.18947336308555509553928529874604869691098449501945988855e-443",
+"2.28180137451047780721957468502706125005381222375192999817e-444",
+"2.37597009765116334504830961745604966467615688466749420084e-445",
+"2.47189325348731364582124547137528446442559407138540999236e-446",
+"2.56947683439928344925671466181080379743688453886382672987e-447",
+"2.66861913594979969262093178322053664654356882644294923012e-448",
+"2.76921082213308631765505582120203045403640935023334915785e-449",
+"2.87113502490720288136122984797341426842106958517909791920e-450",
+"2.97426747865116430172021185168626228543852729818038972018e-451",
+"3.07847669000437426732710299936310680108425661655093100110e-452",
+"3.18362414335316353269774584325179940140040802443800829000e-453",
+"3.28956454202896784783215093029756421711525408094587816238e-454",
+"3.39614608507619603809401859187968818181606354178097697349e-455",
+"3.50321077923650102654164564265129782113187270867203292458e-456",
+"3.61059478558142619840040425869237434836884300812766922782e-457",
+"3.71812880000877250165990822465010145606760619704060588192e-458",
+"3.82563846660108710607785269099602083738092617221989883996e-459",
+"3.93294482262902129721939193026242644442765457005224399898e-460",
+"4.03986477376957876795668235363214150225363361091895073385e-461",
+"4.14621159790112272334168726841966699025004809685797433487e-462",
+"4.25179547563507561145400976174309794872701981298352511169e-463",
+"4.35642404555015549624718089209753373512738251916014598488e-464",
+"4.45990298191034199429015896827945971533976706531866901580e-465",
+"4.56203659247409843198642300784807417629825829574535054867e-466",
+"4.66262843384117901394656638938366896225159004435102051260e-467",
+"4.76148194163602693109227498548995946649594068154098043700e-468",
+"4.85840107269463724139817892054565737933315973408100440263e-469",
+"4.95319095630602876194322377997278211771841683253293020394e-470",
+"5.04565855146123747850963865712579853836141176199388875817e-471",
+"5.13561330698297772705317758243559849977897411743974551616e-472",
+"5.22286782134864625173547928236228421776018554378902701433e-473",
+"5.30723849897885079841784144518499768670322002608420276494e-474",
+"5.38854619974365705824752678224009194497875986294867977968e-475",
+"5.46661687843963247616361625877660360252925154562537224309e-476",
+"5.54128221101272393168392952722058284826722403150633910711e-477",
+"5.61238020434507096840041562675312686647919424238611683839e-478",
+"5.67975578648788906158699451143991940973742242236015650899e-479",
+"5.74326137430725000889076629867615694074197896267780317588e-480",
+"5.80275741561446195393508834086869625625163928544778135705e-481",
+"5.85811290297716763566737043712604729196900086571683745029e-482",
+"5.90920585655043379033999046000918558403884141691885889846e-483",
+"5.95592377342804111692190693530107390533865395940984622983e-484",
+"5.99816404119180109162273190524514679054246279462195401330e-485",
+"6.03583431352978521531308008326828404214686618788327393437e-486",
+"6.06885284600149058549566603918498595947422433541134377577e-487",
+"6.09714879024770610794092396260650600103970798023465886537e-488",
+"6.12066244517360886813428632121692976184651970809585234758e-489",
+"6.13934546387374637474333802279161149791836774641796490512e-490",
+"6.15316101531531208150462206469211313374063268883015772261e-491",
+"6.16208390004970702033804854542381056077067600363085206888e-492",
+"6.16610061947996736065772331658646932417979839902580506053e-493",
+"6.16520939847136984999533990277338856113520537690129344359e-494",
+"6.15942016135254009347272060321447638172007528919519415061e-495",
+"6.14875446161282659317962753385724476772768725615871969024e-496",
+"6.13324536585673498084248632859668666810160900584490591643e-497",
+"6.11293729282605074750708672007653369919164524277756326402e-498",
+"6.08788580854317924581279448820680725133716431736511020817e-499",
+"6.05815737886353303401525625781682029157280707801517930953e-500",
+"6.02382908094891667348630110716076069241734190881010316114e-501",
+"5.98498827538631230467968883142092096101439854949211682616e-502",
+"5.94173224087587835206658517995521225176378629919885812984e-503",
+"5.89416777359707996559443636701795539552381506081522442416e-504",
+"5.84241075353154279067236767573244177979153775571184564638e-505",
+"5.78658568017446690668654515279576858006697777167729438870e-506",
+"5.72682518020240343016716644473145716939240523685668946015e-507",
+"5.66326948978317822435817559018912432539597882728903021209e-508",
+"5.59606591431319267132073264568465476917367316130219631024e-509",
+"5.52536826844784140537240150145163490089037972632353157231e-510",
+"5.45133629935211642649545699399976693442068829863624174016e-511",
+"5.37413509614052480420238760745870036871965175846634553523e-512",
+"5.29393448849829332779678174605548857119956906218710490198e-513",
+"5.21090843747967590207868947624071363329638980967967119935e-514",
+"5.12523442146436921042396799764141414815894133613133399245e-515",
+"5.03709282022006714260461821703972627614572473324728668427e-516",
+"4.94666629996866249464302048773815202549344857142657004178e-517",
+"4.85413920228627486664045853109682627264239624684585755424e-518",
+"4.75969693958399833386208398352940949683300416135186628713e-519",
+"4.66352539981797565866700726417561012682416645676130283922e-520",
+"4.56581036296516369896895975687154994415732140687256606288e-521",
+"4.46673693167608402890626324327555137105002845902781541479e-522",
+"4.36648897837914936127936340340642496674887265931934906989e-523",
+"4.26524861096407288793814130201132634322968363718480297225e-524",
+"4.16319565901570171686026357394333146987693506765426932792e-525",
+"4.06050718240569740085204513061342525024461726327605569273e-526",
+"3.95735700387916683068447195307553110968161101835488951280e-527",
+"3.85391526709798474343500320324929522617220922576921860668e-528",
+"3.75034802142350088027461521806869873904212254190560294542e-529",
+"3.64681683453993212868187943659859098751382767967436121899e-530",
+"3.54347843383731935997807441866664374682666239779791417994e-531",
+"3.44048437729076135781052117154883855055826817432751419987e-532",
+"3.33798075439196063551341200495963469693824669528803157566e-533",
+"3.23610791751111088300487623346622730810286540144795165032e-534",
+"3.13500024389294454225798443398055157218602200782651780936e-535",
+"3.03478592832139419838804198283917144292786975388843164953e-536",
+"2.93558680632378081636987437696903946280975275979437636353e-537",
+"2.83751820762862287413042611746798437212913409287934401818e-538",
+"2.74068883944187607761659757779978101892734114171126424873e-539",
+"2.64520069896538849458453746721230923960058833080469878159e-540",
+"2.55114901444922496361766176683892864525949309665866347413e-541",
+"2.45862221394681972855146672348196215192241236130020436961e-542",
+"2.36770192082910677290346466674080620982057638619114426946e-543",
+"2.27846297501120995564974367481889791865863010295248113725e-544",
+"2.19097347875321475402241067180154078626213114284109560248e-545",
+"2.10529486581516524884081793988854033309222778868627697658e-546",
+"2.02148199267582156087742428177703824532335115068470695446e-547",
+"1.93958325046487761834813283507478909066881273222061266911e-548",
+"1.85964069620919977667516799655191469411161369745682243162e-549",
+"1.78169020195505013067433118242269532324607892159347341165e-550",
+"1.70576162029997970160761964103965639169309845678844770677e-551",
+"1.63187896484982523642023291790061353822589801658876012727e-552",
+"1.56006060410766770209654760982184074875064510262491116118e-553",
+"1.49031946730230447399117336358968037468548128684670279432e-554",
+"1.42266326067329569514268673971958904468426246795985232768e-555",
+"1.35709469274747066968807175275357191544655050427236753783e-556",
+"1.29361170716738835337514307396196618522660843963248567885e-557",
+"1.23220772166507269189625223781969873242087844690191915803e-558",
+"1.17287187181380032618890618059949683391412310475569012756e-559",
+"1.11558925823619858161144593437530215536325083122163318799e-560",
+"1.06034119599779706139363303179147670929945018556102666209e-561",
+"1.00710546497084143794505895608633830217078091447009827524e-562",
+"9.55856560012996935472631472512915234405994525859306546653e-564",
+"9.06565939868919287774994687964547103994512529512573042778e-565",
+"8.59202273768939196860704324501844468147025409913471499046e-566",
+"8.13731684767692308308324561345095951310700585915073986242e-567",
+"7.70117988935847558345779951457866022417134612634384623041e-568",
+"7.28322929589580516565482451478267058428042905240865839298e-569",
+"6.88306405814567385581764673311967937335674460221979588661e-570",
+"6.50026694613529089625938338396813637841184194028433508995e-571",
+"6.13440666078252437746679761328310099550516022303653435142e-572",
+"5.78503991058107368746149414088987879939533095034771759189e-573",
+"5.45171340866949742165567905281045175619891374320126238727e-574",
+"5.13396578638566539007850298353245353521381857689465611853e-575",
+"4.83132942007138598351066959104184935010870831380635361452e-576",
+"4.54333216853254989332276542945288653114878627973026787048e-577",
+"4.26949901917538744474487939615465135859628677808294218899e-578",
+"4.00935364142697840710928385016951292440587704185588183849e-579",
+"3.76241984660595370770588720684739917829708351592847119303e-580",
+"3.52822295393570909470122649313807660897279722744790295844e-581",
+"3.30629106288607019299937681912620084141178699827511425814e-582",
+"3.09615623248919082912810896538956411090824437798459251157e-583",
+"2.89735556870082767298432493618135703627697253003269700209e-584",
+"2.70943222126860552140666918527113547360499512975643875315e-585",
+"2.53193629192433871941821329431681066359338926692144979540e-586",
+"2.36442565603803506938429731818850530025510885525000908465e-587",
+"2.20646670015724955839191120013622626117965991388251656414e-588",
+"2.05763497810756740368778020170100432506568700310388103808e-589",
+"1.91751578854897048353450878739937116881138082509813776719e-590",
+"1.78570467706964883879554913997042352184801115819845769136e-591",
+"1.66180786605458897890135638439012596476694710843459917712e-592",
+"1.54544261569227077291373981838161228478102052006854047786e-593",
+"1.43623751958042032354176174995103006344292794000350836299e-594",
+"1.33383273846248131160432945255466525058117183939342132099e-595",
+"1.23788017567184507790550670551356087132587706472206857696e-596",
+"1.14804359788254447536198573596550672458985567358648225782e-597",
+"1.06399870476473630460748451457820417706869791482921670257e-598",
+"9.85433151122567331211585936524465597333385262604915186781e-600",
+"9.12046525052646905822781777270975928330475071885015237043e-601",
+"8.43550285605040337798681856905398205349078702737552220409e-602",
+"7.79667663357141450659982362071115737974278537548032941873e-603",
+"7.20133527225643108627734131192391707609439709178595922696e-604",
+"6.64694220744726082108866508008180113662938637440904925506e-605",
+"6.13107370931107248892387174989150812454156357378266033502e-606",
+"5.65141672740250014909641385179426078780680142103042471185e-607",
+"5.20576651994302401108686709250817050989910173848899699708e-608",
+"4.79202409532582067902547173893743751825174760253753265477e-609",
+"4.40819349200989436827781491778205267133609582285165625997e-610",
+"4.05237892158839119687621208571015238690531502730779341771e-611",
+"3.72278179841414544787906556112811195338186463094543625204e-612",
+"3.41769767775146807029196136396438503911728201669864128503e-613",
+"3.13551312300688416174443144088006052256629504187265437437e-614",
+"2.87470252118203711674447323027655096928494782336478164171e-615",
+"2.63382486429754464973762470158351628932415260205765828070e-616",
+"2.41152051316463145290318284043649426562783184283965790869e-617",
+"2.20650795853848009968337633087165743600316072916788655630e-618",
+"2.01758059337925284819489170507956923461773380183479281555e-619",
+"1.84360350867869712061489599469752896150236956102530911669e-620",
+"1.68351032408647983600183992136155369358011520166377462121e-621",
+"1.53630006339452559563944640328135140487050453211076835637e-622",
+"1.40103408381262436965411508292718685791810813789230440085e-623",
+"1.27683306689676593685744847595856997992829501359538669471e-624",
+"1.16287407797480776164927724085112723523041930631378987662e-625",
+"1.05838769995340498316444712505989770237617862639364154580e-626",
+"9.62655246486340039909819998037146177492896542103635619440e-628",
+"8.75006058637740906986200794570762158316182714081496051673e-629",
+"7.94814888384009852717122203274543746168437063861282410173e-630",
+"7.21499371565062120447189404330956539341059181821864560984e-631",
+"6.54517592217823549927667839740842084475336651367783932859e-632",
+"5.93365739601688931934453228568107013231294319563238621918e-633",
+"5.37575858655371108613872405976029467301546000290709966573e-634",
+"4.86713694105624072091163712576383120602667564761960742300e-635",
+"4.40376627978862826702866787679910740652939266416327198435e-636",
+"3.98191709844733967893805903976315820715195915776899989158e-637",
+"3.59813778744093849993095123385486411810488571729847947788e-638",
+"3.24923675420409034377408154843924922499387631775805022100e-639",
+"2.93226543181019076547276754726338912477783483403144183260e-640",
+"2.64450215460661009179864697568387268195013237481364548053e-641",
+"2.38343687941790378380260967944930784420186958048489282969e-642",
+"2.14675672902183613941011770033376289884219199323085124852e-643",
+"1.93233233307723055474538356147950020242027266227245716987e-644",
+"1.73820494044831311740772413061716988379567453229348437356e-645",
+"1.56257427590462109057578027376113587818620597268073701535e-646",
+"1.40378711345653072926231601898037106818885570783067935500e-647",
+"1.26032653809251560704131587922827398907506237658323927641e-648",
+"1.13080186739463039017355835016019532366381230919408977659e-649",
+"1.01393920440350927933183864038368216542613666622571978238e-650",
+"9.08572593164345365946306391589250369904592963844314114326e-652",
+"8.13635748592782755130424235503454289218040604578420818900e-653",
+"7.28154332637279437579671829156143115326283066689749338846e-654",
+"6.51238749166144778454612309578558933741451264169483161968e-655",
+"5.82077430557978548843515273188265506120088657480154506949e-656",
+"5.19930589609495939824748247225879913782865450215238988597e-657",
+"4.64124411081565591975429902487940081792331470327758890680e-658",
+"4.14045657970545533538234578961720491703466330719935895049e-659",
+"3.69136668406464730873156981918627064968332879048004172506e-660",
+"3.28890719931989397737427785270372563764426823996704828169e-661",
+"2.92847738797060890734720207128732646576627697313869161942e-662",
+"2.60590332805093587494273955963495203494812034149535464655e-663",
+"2.31740127160007347246199902019819628776767561837212391460e-664",
+"2.05954383682264480942540352881591531323195461403592304926e-665",
+"1.82922884680362712968373595040663277617615831571152478237e-666",
+"1.62365063676490761018691054460309455769110662874683835103e-667",
+"1.44027366086536449368709295559597994103185137788672331702e-668",
+"1.27680823841227123994405357990816683033495561373510984243e-669",
+"1.13118828803337659556216659908035862782538619742970632780e-670",
+"1.00155090682619639907125971896052907090696182963303510816e-671",
+"8.86217659728795744416576958479997018630358575136336245452e-673",
+"7.83677452324128046844220456795553437299099823395966012095e-674",
+"6.92570867981473598684332170280818742299179159129090300932e-675",
+"6.11675857641104623382222140819671797964996985109947514307e-676",
+"5.39894677652829779859018754260317816461924497613789269416e-677",
+"4.76241977879437541657864439748167493345828792401077694661e-678",
+"4.19833948768900879065917849055249144718686207650027059549e-679",
+"3.69878442283588083824498493152489760246149544562992334758e-680",
+"3.25665987451845091560419402205655702522610751145241521093e-681",
+"2.86561626880235923781343514588096315005976653748488067704e-682",
+"2.51997505838123726191301526957524120070604084574163055801e-683",
+"2.21466150506196457317332051209848065133567879807228464485e-684",
+"1.94514376674201604560283151005252627629651138010722606336e-685",
+"1.70737774588730861202371351759428423550564992632243437884e-686",
+"1.49775719798350392076866830278738341581994928062487114680e-687",
+"1.31306863730288116315869028027788913459138904695229384763e-688",
+"1.15045061370322968237480874280024155898400313022748199489e-689",
+"1.00735696815870383439072821548525249330177617039073958182e-690",
+"8.81523706421447679431118563001609294954299341050447364298e-692",
+"7.70939159734438789930102889494693937892782617113263786012e-693",
+"6.73817128968093837692603266807042481762055615312925119722e-694",
+"5.88572734042867809769153194740820509526571799372617029846e-695",
+"5.13800714133283946246444076437585053845063374132026242470e-696",
+"4.48255946029656416267376586652755455617654332183679792661e-697",
+"3.90835968263998618741831486891003146572437416734766403180e-698",
+"3.40565317285299018991261648715028006022931477382737225980e-699",
+"2.96581499192471409775746995608959013100357469260802071311e-700",
+"2.58122436393479475117203675664513070847575369859645961344e-701",
+"2.24515243145473584756836796431446673859383272971369498857e-702",
+"1.95166197328629074323677814768128223954308442457715365759e-703",
+"1.69551788097294710677078830161762938451251025549190751246e-704",
+"1.47210730313727978395761970827097997149114775533717712878e-705",
+"1.27736846975893143987507632535961274934803545990321195404e-706",
+"1.10772730271424214451940834597324906917431010114776625472e-707",
+"9.60041004909544253380727833840132532295913579759203323151e-709",
+"8.31547898778470765325318816207264577421052291649439099020e-710",
+"7.19822856364865596501621860498539963750945265626605715543e-711",
+"6.22737728226572767360827031823311310641172841399317172425e-712",
+"5.38426237486162547351624288274393848350648138347396767857e-713",
+"4.65252859003519197801253803273913936700193640205650206079e-714",
+"4.01785252300836485084049310406908294167947318462960114382e-715",
+"3.46769860950677058925874709463783861858375548113281596607e-716",
+"2.99110331030575704363846917105826384922850328562434151911e-717",
+"2.57848437313373056328642939980053350021660715463443893643e-718",
+"2.22147238434625957916292683404039200535237234692679866157e-719",
+"1.91276211665478422027344982929793153843805371277161003001e-720",
+"1.64598144406009686170944181177754799291272552506420139743e-721",
+"1.41557583362721630315709994940186139757280841983037254557e-722",
+"1.21670663825983988648384993773361142931509161974237899873e-723",
+"1.04516160740834550741354121907190908405414351040849273849e-724",
+"8.97276205711513389852648801674283098523900783503137658218e-726",
+"7.69864484794409816207767435806424161663957756390945183764e-727",
+"6.60158392530261016916691499662131551552727186065835221346e-728",
+"5.65754528582411453037116242707436836023433252875606483860e-729",
+"4.84567466396896039052921097845591304203008498469552726684e-730",
+"4.14788861313806422747254495762137961936762589907093256882e-731",
+"3.54851653286971467028746256243318733341379155997217527942e-732",
+"3.03398751919518009536551559052322293959376530416866791931e-733",
+"2.59255662111753945861415579675992934055619113305759266257e-734",
+"2.21406571460782801045609983783780108372367993093745107928e-735",
+"1.88973476448223642182981701979690485148817530735395536067e-736",
+"1.61197974126929043845287324797892099480554035692089818372e-737",
+"1.37425390123394261074281964430134488825704620096496183430e-738",
+"1.17090952899587941916903678185600632344165679985144629673e-739",
+"9.97077588980061754968122343946717463072967650743576874940e-741",
+"8.48563039056918056191142209057375197368059970415205834466e-742",
+"7.21753831474374514538528685255452401204832814106523038505e-743",
+"6.13541866423254903797057714529277146564769255049175552868e-744",
+"5.21254375783949577536270275050778018768170174459555900916e-745",
+"4.42594401888649331445521100357673727021540714682722547491e-746",
+"3.75589201287703994143770604322842693749114329753014119489e-747",
+"3.18545549024822279353483192391813354230771591535714521121e-748",
+"2.70011047032748050022859799395100628420193018629535616347e-749",
+"2.28740652948596342492531897650516173625713880588915117001e-750",
+"1.93667744690906258950234341692224193973928755356604647531e-751",
+"1.63879123119872918291407560089928884989337667856291510098e-752",
+"1.38593431425570566140496062128751745434277116968590949202e-753",
+"1.17142536807765642124970058339893402921099160187590520334e-754",
+"9.89554786369030171977660338126491141284342930834320288745e-756",
+"8.35446386057090784997082279896286440465914927971074365040e-757",
+"7.04938332694231849684613093139291458201893225106955668620e-758",
+"5.94480686048719972433830053566509682484241865196125994289e-759",
+"5.01047304802270664390038050303912038548905222874772237034e-760",
+"4.22060148246707108357209391891539527818563910103268461693e-761",
+"3.55324273559318160155187957202037274754393301657555009615e-762",
+"2.98972054364120429474257647882069642683602703862834061271e-763",
+"2.51415344021640528297286552479942385326568641079441900220e-764",
+"2.11304479104379982946406420939029065574865964208403029445e-765",
+"1.77493168040030657675397075894320247868108129621371802223e-766",
+"1.49008439781130892834417493605698826849458491930464759136e-767",
+"1.25024940084515469603387746069049104202280792486894905402e-768",
+"1.04842960747878591537898166349501112939260700469396312822e-769",
+"8.78696718758429222979624386385334015894962754386068851636e-771",
+"7.36031006181314944940674790331216888156448313154942746129e-772",
+"6.16184633121637926811678409603967135908369243621410917575e-773",
+"5.15565128613940407502635244936356513150117034752058246394e-774",
+"4.31136106162552270925934795171636619678158831268779998350e-775",
+"3.60332729811041620563677446921872578525370647088204709456e-776",
+"3.00989783070574088520259552153539541128285051613684483044e-777",
+"2.51280500959450441971010367299154350199623075909967227547e-778",
+"2.09664587871419307292412739791181085757414137257625980811e-779",
+"1.74844069945641749687069469076526376393366979580113377883e-780",
+"1.45725824994420920518542708221685935885685462144192805462e-781",
+"1.21389800146954271917390381602952020939567559195698811736e-782",
+"1.01062070914080493629503456461403711602181276607131674407e-783",
+"8.40920186025148278561506217165160296648871848365296455331e-785",
+"6.99330087093052861513696509684047877897345075244525918487e-786",
+"5.81260435351368128706007932460618338733187716168075601961e-787",
+"4.82859398691394539317149341915243120504458534047509278038e-788",
+"4.00896490345173010142094904130623417394998439605548494790e-789",
+"3.32663934132822391999868040219953002771212527348650815850e-790",
+"2.75893421449797809858770486923458549497658288345224920765e-791",
+"2.28685901878764484002755409357395837277208394075218490967e-792",
+"1.89452403497363384108244699448737650508983478688296606425e-793",
+"1.56864181074646899196554417817926321681092817195036861826e-794",
+"1.29810747880533491598455808116606424764989691572196756614e-795",
+"1.07364566203810408810443017813295917304797434639793536827e-796",
+"8.87513584109860370633000134248313669278783960159211994604e-798",
+"7.33251592264664730698470585958001122059699940024313457754e-799",
+"6.05473649468118218499073260387651815836830665222048925303e-800",
+"4.99691500106657089084643191567400719613818094821414140946e-801",
+"4.12167187239705702599292316722531048619808447198867614152e-802",
+"3.39789425497042704662087260148670504562456282700370808243e-803",
+"2.79970034050384476825575021772827677767900569396899561202e-804",
+"2.30557227410152427614022481587352808570045128269118922976e-805",
+"1.89763064120382338139276817778569540373060565171557338098e-806",
+"1.56102778418915124570588206469022619058927514489445205980e-807",
+"1.28344079260125303159842473300686274731430926826938608646e-808",
+"1.05464804706627758021128619063708940044043791277563436000e-809",
+"8.66175760548562402600847013207211239597741135430796998186e-811",
+"7.11003123773871274070368471993416247240843110318270454039e-812",
+"5.83316485757109432071731795995426676832210061589450516422e-813",
+"4.78304537543338000624168352430736566309037047922665492216e-814",
+"3.91987761790877059571527089891130284040153677826847469037e-815",
+"3.21076500283079938894371586417751893423364322671840233071e-816",
+"2.62852907735181477959555482974631064359821495601582390922e-817",
+"2.15072830390116227108412850980346239563066642854616980294e-818",
+"1.75884294763697948556310122556297927888475240339163966357e-819",
+"1.43759834880926120008719728046050179469603514645661761461e-820",
+"1.17440341830277410010430478414577108146631959104143687787e-821",
+"9.58885013042885789873601891111174176103233458188568921645e-823",
+"7.82502046933348046182134043522114111880881413637602640002e-824",
+"6.38225871316288785707810836704593432330361553906253468818e-825",
+"5.20275699907890332051251580898491176042696293807770717488e-826",
+"4.23899726989048116685037249634864230921688328758046131196e-827",
+"3.45194153468197705141295762774706568026809934776091210004e-828",
+"2.80953643073314887680485405406573242001183203095746014674e-829",
+"2.28547822254549537891619418508184205375808640431260062755e-830",
+"1.85819347595455779052341297699755166709316230248401391404e-831",
+"1.50999823215318335288317990614290828755688061121542079150e-832",
+"1.22640482626204219841295418690227142379092555445050978721e-833",
+"9.95550756152364310470975188455377657594683797361186551605e-835",
+"8.07728384174402200724824007627790687280558611267843426299e-836",
+"6.54997893571524894425144075367081848085985062651943422213e-837",
+"5.30868945150262795808484769913521880625940831913253494075e-838",
+"4.30038990712871863567062231816759564231084290849751606622e-839",
+"3.48178283528815969664007483084733459361641502842364199825e-840",
+"2.81753354323405123693525004914938959736024358291560566433e-841",
+"2.27882153682006741977154500734684706364476635352106011020e-842",
+"1.84215248296918115677887223995022779563710574601121927297e-843",
+"1.48838440725906992162130524451344755789810305048136400638e-844",
+"1.20192994959255996391172150374996557093901736809080929978e-845",
+"9.70103219826284853322283642358930464343749082326089625664e-847",
+"7.82585347102494690873046026307176261008174984883571915050e-848",
+"6.30987401372683385330610995635397931154160558710947498542e-849",
+"5.08493149382464468471408427357550109350293899634432618618e-850",
+"4.09567228235565359738540951373951208808368646963028894769e-851",
+"3.29716892157004681629242366611603207187561886820641023036e-852",
+"2.65297607294017787497963905609932902018724641969431025815e-853",
+"2.13354514143131621811359386812468536874257934434664661697e-854",
+"1.71493212775686466464454323015603302547597119182643328537e-855",
+"1.37774506524621159985949157348835001840950376530782376320e-856",
+"1.10628709937701822877535087420281790822179119553713688976e-857",
+"8.87859235999402814771167918888789058668039317448663185382e-859",
+"7.12193324623770900733346570565858663911457293821956730487e-860",
+"5.70991208441672542348347423381625242196483607896894704861e-861",
+"4.57550371487470236858978404654225631836689427508451436924e-862",
+"3.66460017508624472325620412537451575005096828948091839207e-863",
+"2.93354466471901488373819786216085039596734633293131955432e-864",
+"2.34713169997855585502071260854293964982379334909830075264e-865",
+"1.87698622559242164483279200740572699685577519222293231579e-866",
+"1.50025060135510757642154340443543012682088309902037137667e-867",
+"1.19852157260373703179406562436733213062063195495498997561e-868",
+"9.56990105129111769906459673017052824437917715270142896123e-870",
+"7.63745754089408977505387871131331148822631023650617007152e-871",
+"6.09214404018589958669658477169227298921700335646326488417e-872",
+"4.85704058756616200508027325070435628562084450536380004387e-873",
+"3.87038118528996243850431976305327240034307934852977799142e-874",
+"3.08259455112834493011173374505284310539442022545467976028e-875",
+"2.45391747695239199289771673824794769188448973218854498262e-876",
+"1.95247104754450296686816658969246939061815328826654041630e-877",
+"1.55271079921636162161436564240025178105478798708310244074e-878",
+"1.23417881273894938297496111526739920398331975701111896098e-879",
+"9.80499465320132293169968695922653711867172307893143155474e-881",
+"7.78571705083706125963916945679734826291279015480587494777e-882",
+"6.17919742647632469442902077646365233625357738413257469154e-883",
+"4.90171372541853756043293620137869059166214191972760741567e-884",
+"3.88639063865845409403847547077602049145169944666174476645e-885",
+"3.07983756595502691239840869285131867784383199133958795298e-886",
+"2.43945180407383498079406916450004121983071914617250150636e-887",
+"1.93125650128826004957517678939289000954715520195144805617e-888",
+"1.52816826848748307573186216421762428525238532266908461450e-889",
+"1.20860980809655873169235623117417368072165933838135310936e-890",
+"9.55399443926231157247391784432694737345184102296921827859e-892",
+"7.54862762260977876505504555431440208678954620379942626866e-893",
+"5.96122318626101570932821106629022286513851807788020440718e-894",
+"4.70530021505473555272617664777007800449583063298018921861e-895",
+"3.71213775388835413696066867854117483271937829532149486204e-896",
+"2.92715576010899632813436742913454113109193574863232151305e-897",
+"2.30702763535686830591949513690591189752645098837417026693e-898",
+"1.81737767428289921322335401852074360049470667271523841435e-899",
+"1.43094591724891802630704522128361074373075475761771139383e-900",
+"1.12612630183930182955167409142491583824574044396138970646e-901",
+"8.85802794347489471969381490542183866969714942411116704581e-903",
+"6.96423251352872577332433006587508094369019019850611726459e-904",
+"5.47262841937341858967811808491761221618517319720333212178e-905",
+"4.29838540322063364272856597111340216019875563050411507433e-906",
+"3.37443949717963767285404184866530477638436615017933687005e-907",
+"2.64779921667755761512289067416029699940805192256751142472e-908",
+"2.07661397342268080965291045827776718677781482358477721543e-909",
+"1.62784864330626695664528026020892685897172898282916790053e-910",
+"1.27543992243335370001787205231431258576347114820432403297e-911",
+"9.98835417767007816975801877042319993751971499085565811479e-913",
+"7.81836622519367747988882569182792383714397860646614131783e-914",
+"6.11683043002363313711644975177457232259407495470432433264e-915",
+"4.78327592914177608730559331458176372755090997095718701439e-916",
+"3.73863609770753729735075141540385781223447230453268417932e-917",
+"2.92072002314571353779577767959504028465301229193497917329e-918",
+"2.28063528135992458399628447832362570910961781581551240601e-919",
+"1.77996364071914345681389914627245287242634425925306526328e-920",
+"1.38853237314690507559345745791189309604789788430826249864e-921",
+"1.08265647576770633889352739884803467071802643038538731098e-922",
+"8.43753017940022916874535449470553470180025451951417687888e-924",
+"6.57249397223814925200970384116514016845099258393497997410e-925",
+"5.11723606680423362011224951284641683334924894013584270484e-926",
+"3.98227556006684053251565517347748525015244140375868557873e-927",
+"3.09754744396086874028102982095603173125082214076772296648e-928",
+"2.40821706334478644945067347696649874649521829484038127925e-929",
+"1.87139082578717442158261780572221865560689775389565669182e-930",
+"1.45353257146081976102964650940196236959615759613110380542e-931",
+"1.12843525341426559693738480134746523476913970268531175926e-932",
+"8.75629386050775171839072616046778769908950085380021587750e-934",
+"6.79134847160535143148613172070537048112841925459241734417e-935",
+"5.26482458657312202123710218483542146441860041168581314711e-936",
+"4.07947427655136569430904550630897923009059652211543769454e-937",
+"3.15949078197078138147921669812207116630816085496993626205e-938",
+"2.44581038506150896701332452319408981744791703930662075381e-939",
+"1.89243718393214069569413043435640087911193632134178634546e-940",
+"1.46356951195863999076831845131373423840074225114325002368e-941",
+"1.13135428247790095441549976829706605076557886913299257510e-942",
+"8.74132932849289436700192742342277260417000399537517077453e-944",
+"6.75072042248798742519400459959468858036875965881089864989e-945",
+"5.21094800778031829965818763450939797986606472205285021258e-946",
+"4.02047652809987612050824003889615408163766452915320240728e-947",
+"3.10050681429564710401076295888433759615831321851120665203e-948",
+"2.38991476340752483293659419489611750743130425040024896530e-949",
+"1.84130991119022651544798924419325109199920515590371075558e-950",
+"1.41796764181810553881557374394781223119825065778896122035e-951",
+"1.09144258301458306450404528125645179665141545591302511827e-952",
+"8.39712860803733016140386581700567145512124205765988341979e-954",
+"6.45737853222915669102888357903875273243774651058845659204e-955",
+"4.96337865404680392480213260326016963871134908357693108087e-956",
+"3.81324303727435349049336781894336629530113087585983452155e-957",
+"2.92824674488973429077494175558676990406916545832293948218e-958",
+"2.24759030248659268875385309282653167446681671559038860178e-959",
+"1.72434085504101493415312708852916260674920506335530603091e-960",
+"1.32228711284111250659801878972303719817939203774580355547e-961",
+"1.01350356641376896312569252501819895793973061389071992365e-962",
+"7.76464949465064860847612778035567388099744000612253876174e-964",
+"5.94587368558833180807417201794865686968483992844005210360e-965",
+"4.55100108397279444795720335717025575458728878578181555861e-966",
+"3.48173589744961254189841195921739012653545908207861067925e-967",
+"2.66245653107786159350928413509869095614780103012912758179e-968",
+"2.03501319389164064925640012682012066076583894731998491727e-969",
+"1.55471261682832249309480800052781751196396324166378144670e-970",
+"1.18722051994211323375294605391720881446993854438960424647e-971",
+"9.06173234781302615172393166102266341048600121686455008229e-973",
+"6.91337027551658490394492899876610902153692059009512722962e-974",
+"5.27190218012710963767613044720599151308473682939115715546e-975",
+"4.01831512841978685612810423801272796658972193739302302235e-976",
+"3.06139910527381561987509451240860486583967357529313670266e-977",
+"2.33128518693487146441221775072944128253544587476072566579e-978",
+"1.77447766399162088509267902740909974314232333651003891210e-979",
+"1.35003657450641475065052185281294360674144042939494468542e-980",
+"1.02664567093098595841505747574693238803540677600529739226e-981",
+"7.80361542694918514321188320027772456300056029860787739602e-983",
+"5.92886488536130483826277132344522996970047226551316713640e-984",
+"4.50243909949376269322839458113846662299293028531040173150e-985",
+"3.41762905834450769752740707581454741239572201104683398611e-986",
+"2.59300267611458277430670419518462095436418131945337612530e-987",
+"1.96644658285533117868847800738217120034217970419584201932e-988",
+"1.49060533541084122152062573332920641139071648830286875613e-989",
+"1.12939198142140056512168139768108785211525586467043545662e-990",
+"8.55319592900173235821077277012465204646411232861443848131e-992",
+"6.47461597054140924557042288155722881576273126588198727122e-993",
+"4.89893482137939273053760388289524239275292430162969755829e-994",
+"3.70502840944773049894679087957708121453125188997912696939e-995",
+"2.80081121842779365990487871591885898744165512058986002697e-996",
+"2.11630727862953938676718838298645869081971738071784281057e-997",
+"1.59836656637686363157060456361099944462043416298124258514e-998",
+"1.20663800349930464059653434523981323121142043200147138170e-999",
+"9.10501661409446492757740016925926963761105088918888330971e-1001",
+"6.86732805676751935732396945530065571115278563049496666380e-1002",
+"5.17724041731261257909977992022804261123725424572191893654e-1003",
+"3.90132863886652972806339079978768789274502041132051667317e-1004",
+"2.93853305526602693310961933248220913410238148764616458734e-1005",
+"2.21234393341201395189786706747093685530623242129161974131e-1006",
+"1.66486453719648694329164623794296364175223405669722319471e-1007",
+"1.25230332403984319753082684047927696512580703307558453126e-1008",
+"9.41552871157273527533787488046094206679679861703179845814e-1010",
+"7.07594770300296708931270782423532401818164101454480824397e-1011",
+"5.31532000538017545134804734701437637911320187998322659026e-1012",
+"3.99097761596762900465565895665935478733438561414102305921e-1013",
+"2.99525924311770752811559340309192690074467836802528497185e-1014",
+"2.24695805716222408236727397379879588715304982963680092490e-1015",
+"1.68484949575210643394168271764875849272608132262484824917e-1016",
+"1.26279551436587439633776963760251428774310081489601442445e-1017",
+"9.46043038116047385624129906389460270242362541631075041873e-1019",
+"7.08426626949638430962409958209337167116468829303441635148e-1020",
+"5.30255460932228941168978749802216634585623244764251401570e-1021",
+"3.96717983392581306638101434671714239848559487471951842219e-1022",
+"2.96677944895914525023357766359617297612182130985412624877e-1023",
+"2.21766245938272425590903790231021194933792341166663969500e-1024",
+"1.65696222607488456431994400185187249908546378171302814670e-1025",
+"1.23747639263563761300623314272305370867926651692210966487e-1026",
+"9.23780010064356254200109818188706513862588923391349139732e-1028",
+"6.89299068101935751795120853079937765399211003441192901503e-1029",
+"5.14108147591016274425611225762123476259713912626744865125e-1030",
+"3.83273785570855211073045325196517091802264218428418765631e-1031",
+"2.85608908863411827732390476192016808720955477596061303598e-1032",
+"2.12736768385679934495320652689074541205224528016914063910e-1033",
+"1.58387793448383297759878764983077183874310328764695400246e-1034",
+"1.17871652329609428604283612881601991112197198339319910524e-1035",
+"8.76810446371345467138714928499737662246782040944225876745e-1037",
+"6.51944924340125385234451709076589842903913981852073434619e-1038",
+"4.84534961637819929986116358156659949835436003093400448251e-1039",
+"3.59955252170842089908118407998303666954673406303060969241e-1040",
+"2.67289109023492077814591753560114053690969974659117610096e-1041",
+"1.98391715059820874448769936264678688509831108885597580224e-1042",
+"1.47189044924235587253774881250280318516795121546947673736e-1043",
+"1.09153407104205395231800488295520656802766992014886780630e-1044",
+"8.09112899777561795327538097740141051851549261104196732750e-1046",
+"5.99502695581936392532178760526272846967777861113095979322e-1047",
+"4.44000548797541098322478916481663846729412590787548374247e-1048",
+"3.28689923952441460137307395250050062601049439311191968296e-1049",
+"2.43220377034383891980809603427643834040589158413160208942e-1050",
+"1.79897186480483955971760924976863215640097392752384591494e-1051",
+"1.33002497771028737556078586287247534198971934915206528029e-1052",
+"9.82893355562715596817221385348220398422806460394403459708e-1054",
+"7.26046342148665042644721476000536009185522272726376494685e-1055",
+"5.36085164079522197036500232539038313446803907823811698435e-1056",
+"3.95653400634863409391223980444545367634349119978654361203e-1057",
+"2.91882359301682122525914461611120165917338114858952399714e-1058",
+"2.15234946632433960704968698429493129554705559763692373268e-1059",
+"1.58646276071733738514102877996911969134568149978990881290e-1060",
+"1.16885138657950862344528575453142437187008007669809946121e-1061",
+"8.60797885019580163769456217996291853524061559630595982197e-1063",
+"6.33659176741402542940143704819721150486243104538117495417e-1064",
+"4.66254536517783547570715993844443761442414156847896034471e-1065",
+"3.42928340143074351033274212172555556908714046638847035952e-1066",
+"2.52113911639790493964399267394175778596156278310818845760e-1067",
+"1.85269330026005875551587266684874158397831599814909077516e-1068",
+"1.36089211799888673317064319610630566779718297622235927706e-1069",
+"9.99211615699919237273031997794517013988732471131363868847e-1071",
+"7.33339396266476259447841042997148742817815413548530622338e-1072",
+"5.37980440662288600384484443032477765922459894094826377157e-1073",
+"3.94495489708687682242552058336034327697816255140408574651e-1074",
+"2.89155757084627125314169452650313320416696692788027324721e-1075",
+"2.11853697836430958160511696295110138444496548056657187369e-1076",
+"1.55151084918917060038012765031137395894914923570440435550e-1077",
+"1.13576454054396479936185812372958356068299911841988476510e-1078",
+"8.31068215818850805382952236115378953151956324588535582230e-1080",
+"6.07855116998416811527136933553155930041390596782825702323e-1081",
+"4.44404732161443146125172194975014165775566834374060334139e-1082",
+"3.24767545919930358111551758604026409761084140081476854330e-1083",
+"2.37236812536776466255508510931529625765307167461882390765e-1084",
+"1.73223656432332604748826983043892780274098387599720295750e-1085",
+"1.26429419410788109692998878104657711273960945201268628743e-1086",
+"9.22369773687760074638700870546668739807279895886563962671e-1088",
+"6.72632913155892855313334236546720559192239309922765640650e-1089",
+"4.90306278326691577393406729694763856484206119646742021587e-1090",
+"3.57250823082545119535813839904048794615764257972266409079e-1091",
+"2.60193007094609243423813019485853751444860857832680177042e-1092",
+"1.89423892200005178052998934450750787764757107923604936244e-1093",
+"1.37844930793231256547352896862408530760931363616927156312e-1094",
+"1.00268358576229352107177422919854132221346791691989779556e-1095",
+"7.29044818038061929019058625948132651938218904389108409163e-1097",
+"5.29860956586357061300027809032819093660562935226675003874e-1098",
+"3.84934763779173602484093981478172096145179279122723591467e-1099",
+"2.79531030837239246571758122079651623774441077831254535043e-1100",
+"2.02904064765096346460024100503901893800872743632786901862e-1101",
+"1.47220894036655954360668419391935567641141130548581556183e-1102",
+"1.06774190829067721663483145546182040964191138029558366122e-1103",
+"7.74072099013355224722048865358557414055480538401631718845e-1105",
+"5.60938149668217105369150029114539803753838649044880379507e-1106",
+"4.06319000770123277016978345954932337605070976523693418320e-1107",
+"2.94196856446731681754041619358377402975512724469495293414e-1108",
+"2.12925569279960772025677936001694597396896197091913877030e-1109",
+"1.54041113820377208995013097758018820649300551439861226304e-1110",
+"1.11394738419874991270808947392427575047760682239513025327e-1111",
+"8.05215360281008666961550063380925959184643151642431557877e-1113",
+"5.81806969024831197464953675500668848940930036258669839232e-1114",
+"4.20209079803401232318227535340788581897975248933185227836e-1115",
+"3.03369377542863747874254063213238276232350887102287673296e-1116",
+"2.18926328040148004953689079535006483483139943225222458984e-1117",
+"1.57922619355885526186114807242337396777475546438855597651e-1118",
+"1.13870421166940087648121046431761211925261884953049312515e-1119",
+"8.20725460387274200945820418211495099175993471482804004724e-1121",
+"5.91296658841710198862260923098871217974322167122750413602e-1122",
+"4.25827428070480840884952843206856259376840348056464359102e-1123",
+"3.06536838202855944226277384387690327770015043617765189035e-1124",
+"2.20573177200867059147458713907395897697820847242780965433e-1125",
+"1.58651380387600545718354620832151437442258854170989351452e-1126",
+"1.14066020258963559958299032002525023028475607063948035065e-1127",
+"8.19766465637443549593659730837444072415836699848651755399e-1129",
+"5.88905458126186433601966855214120032795486455388490847426e-1130",
+"4.22885436142177723424805524154272121328430439012816242642e-1131",
+"3.03544062495186038393565467027930234321882795439479719673e-1132",
+"2.17792422867931339379117608102213951570256390523589008039e-1133",
+"1.56201768513624494958320062036555347431724485511865957766e-1134",
+"1.11982827445076069312240287008051593185366209935130024424e-1135",
+"8.02489498675611104933992805843849099106638105548113190204e-1137",
+"5.74843836649778520961581119067777175743512194367056733746e-1138",
+"4.11607365489347911477876847463710376949916163038157728569e-1139",
+"2.94604432982106907595118006889502808746580338452673967891e-1140",
+"2.10774682246908620949768811638569416400611517753781858728e-1141",
+"1.50737316347161831263084731239208201298018154577031559164e-1142",
+"1.07757232434436312118225295986447734752514464425635411762e-1143",
+"7.70008529525340254412509320926120505659077726400042971096e-1145",
+"5.50007034585203752123979598838447970097964247202912770293e-1146",
+"3.92703431746475380659106898842677824813577782637546567007e-1147",
+"2.80275435405609641571122445416988158953710550297660277543e-1148",
+"1.99953681720296246886414243935275332184526187099541800765e-1149",
+"1.42592914793837065855093697334063522308227336921698414945e-1150",
+"1.01646119344775796065724157903279484212192450240942542992e-1151",
+"7.24282705853312647966894836246242938580163162911997333708e-1153",
+"5.15881586105749610271116283182689863172748040230172808990e-1154",
+"3.67296404815319475901934402894655933404995235419353229525e-1155",
+"2.61401580811624730325468923997097717438943920149922193712e-1156",
+"1.85962238043150753168902656842645474996457179980272366176e-1157",
+"1.32241108842924140848589694024143822820719252912745129180e-1158",
+"9.40012229897793682597058600503897999241306708186000627826e-1160",
+"6.67922340905946501235732644020819024479780552654958852399e-1161",
+"4.74399279635577258059862464615646046029655997467379211480e-1162",
+"3.36812186092876239611187959472127733325729698343032557202e-1163",
+"2.39032765320195592429087604140053954232794150684427701033e-1164",
+"1.69571584850784987177912763698240135589276590103487644705e-1165",
+"1.20247170455913462682959685055922572217849648950060522374e-1166",
+"8.52359752359687025889947741539520693915823504827591820188e-1168",
+"6.03945047672673641643067162334078488855182018772729474820e-1169",
+"4.27758328471055621820242358249790427942147849294032413439e-1170",
+"3.02849054260240856659689764878914912527223866633011722762e-1171",
+"2.14328934965951839632078297310723097071257297244876851623e-1172",
+"1.51622050041528183230279481625189544346300779401007139714e-1173",
+"1.07218822856808735858246723058617521004655267068011843413e-1174",
+"7.57891358047237780819445833694470162032511221879944361930e-1176",
+"5.35513300816368413919483733304483663737751289909614370745e-1177",
+"3.78234459517139608837478395618222992946046282108632679141e-1178",
+"2.67042008213384767498256934226941703048444037625573066936e-1179",
+"1.88462902355836930924012268856249037861277130456945586643e-1180",
+"1.32953599239783647014956765450702302973608200079727483238e-1181",
+"9.37567172629149389338817817227058132660980250991560434671e-1183",
+"6.60895649746876304798465180405777884386448390294814544734e-1184",
+"4.65684449293073390388533885000289977653849988117040498140e-1185",
+"3.28003936498300109700589243605888351360543890650587563264e-1186",
+"2.30937781340193835277770049504175051819056898920506073601e-1187",
+"1.62532296096465721697207074383236686979070462655118095316e-1188",
+"1.14343961748570368549179722598607815338134411897008210877e-1189",
+"8.04110657303523999716208197190643054321555020388203624593e-1191",
+"5.65259087665870965516826471362358944686772614834141528004e-1192",
+"3.97199392084592895781601258009723305422280386602756051994e-1193",
+"2.78996668843043068656492013495283715923828858841298402159e-1194",
+"1.95893044298789468077933828766767526033769506423125167064e-1195",
+"1.37489236896208386429966735432719281784837136908809674491e-1196",
+"9.64602114198145646860037693584847386766124168276793658091e-1198",
+"6.76484223305865329127863265383382801283199903606536489652e-1199",
+"4.74238953928337582967177436268794906714129002446038221110e-1200",
+"3.32328047882267976642372862983692744213850337063976027130e-1201",
+"2.32791502141777151186873926730166474113443167549286427391e-1202",
+"1.63003802312064031223935275565134009867794573079744005357e-1203",
+"1.14092991099335369183578079169307745399076981389733786774e-1204",
+"7.98272093298181315987582886190069954229870261359970083592e-1206",
+"5.58307948074388884293672984765626498614348732682736794430e-1207",
+"3.90326185816546683836443516633736683615700301850622925599e-1208",
+"2.72780116347012732366422598176052590735802768327493309188e-1209",
+"1.90558799979019054073286305413028719683623416053998450960e-1210",
+"1.33068945584028612842908357964415560243562986676030720777e-1211",
+"9.28872189435179373438055436078574420493231000417372813685e-1213",
+"6.48137088167014338920737743226357097028534368263280901154e-1214",
+"4.52074058319663249582493991435558968046541599154003079631e-1215",
+"3.15198562647766618621797654876583324949097783600774948043e-1216",
+"2.19680207346570427409709596254503102964622280364917069228e-1217",
+"1.53048761798498580671358447466207731814741265452203917169e-1218",
+"1.06586212438466128249342431413145928863777381198313131201e-1219",
+"7.42001335967866253598613710628218374473325102339625751710e-1221",
+"5.16346124858359646117255441905440870355662384912681534527e-1222",
+"3.59178111869100252276754291899170898114820168473494689747e-1223",
+"2.49753532342506664052578601695791178974922008677446386789e-1224",
+"1.73598664242802811085734161989021662822448908715916676827e-1225",
+"1.20618579925491123758476816358125053807684415164669163327e-1226",
+"8.37751594866651978204671517541739666449805997084643329237e-1228",
+"5.81633836654422447719670160040498848463969198970621695066e-1229",
+"4.03661695700338434907877185648594461671925897414430339818e-1230",
+"2.80039323879353159514828555838570893913773979445502179355e-1231",
+"1.94202238552493392874506951620100498247150761763815210444e-1232",
+"1.34624251356637895034707757784802485934909359649623896330e-1233",
+"9.32881232335177010822879941970297258749228208063856374854e-1235",
+"6.46194895427103692903993044895292005376297222813292605991e-1236",
+"4.47440126133738194469564395425471434353365722066154082672e-1237",
+"3.09699639399086748855581000287428225607985612232511106745e-1238",
+"2.14279666643756458564271314223939954106561433174716818336e-1239",
+"1.48202606543119423973533840879183067389727451478311549465e-1240",
+"1.02462622000258014775240559085036544099086043817371137977e-1241",
+"7.08125049366878487176452209796057334026994622405352845278e-1243",
+"4.89203374686259126099038073253483850987615462568260497765e-1244",
+"3.37834541065132137123752081766029952959967601256792426541e-1245",
+"2.33213615785384930687405352013053700564973215505204532280e-1246",
+"1.60930782765594911979001252310651038071430088561985919541e-1247",
+"1.11009421525526960110926018348093211925484529177640938055e-1248",
+"7.65448849164039188770719764544820977264233424745852335884e-1250",
+"5.27604210505065289045861519031018145018324479948861466465e-1251",
+"3.63526603360923244576286534455711034645396487161912366295e-1252",
+"2.50380288780325668775242990551602012359357404270121118207e-1253",
+"1.72385284000472015867373231011020460000200227733872076934e-1254",
+"1.18641459402105890397975115866660057488166252766942152200e-1255",
+"8.16223574684058792004491423869593680076582523568516399599e-1257",
+"5.61330026007270434576813453878352218418674317728415460628e-1258",
+"3.85890441823060804003586410572346847528799349346627407604e-1259",
+"2.65183501645685470035455966071411517220937875602169156105e-1260",
+"1.82165375976235510323748064214745004225549779484128272652e-1261",
+"1.25089870964459807512719619670869788534411370960918324561e-1262",
+"8.58648772551183929277691715682624442190573643712682835534e-1264",
+"5.89177540720303021725273006173518102376031304871710480857e-1265",
+"4.04123546945422133173843348966535237099481510924474226804e-1266",
+"2.77089196644761262089326425588266361530499661087558774087e-1267",
+"1.89916464656153792229541428737381247333872850244081281256e-1268",
+"1.30119788425751803669799894208880584654764166713287705016e-1269",
+"8.91172770962686141349282956795407906538485510891120537369e-1271",
+"6.10124434932835931066029736785747715593337169384282219915e-1272",
+"4.17554337111951408415158399137276037343638651771934178452e-1273",
+"2.85657592035860085817538171098454465111468568664246862036e-1274",
+"1.95351546976241624406469715778592397425827312418572394980e-1275",
+"1.33544611991370278934315170214016590871149910504975566244e-1276",
+"9.12587338063884125379859482688578169227797435513006873680e-1278",
+"6.23391934559566533266318936568897340158042375580734835092e-1279",
+"4.25683396736535034065835003381041422820868271502512699221e-1280",
+"2.90570255477665186897555885270770058419881026743310471518e-1281",
+"1.98268915039680923472105441430146848071386106144063487617e-1282",
+"1.35237537771902567219307144616047899039942416522383496139e-1283",
+"9.22102393669697199307105576954594695583438629055959899850e-1285",
+"6.28492980996717870373104197985436346691268598415892884757e-1286",
+"4.28214354147861668445600230015111121996521743651157048033e-1287",
+"2.91649768379917044208426194450526364717563026445584625228e-1288",
+"1.98564585852785272905989109161772711129397621643670097733e-1289",
+"1.35139346572789404162881866730024783704728330722685656457e-1290",
+"9.19394317138113490172679667302878433456653322552607174974e-1292",
+"6.25261823864506914128495254362156632413784804415326730582e-1293",
+"4.25071733991655905627037040493062280956720296933917908570e-1294",
+"2.88870287121013262482042506005138049601774666109807466213e-1295",
+"1.96238388942962673180283754780873638997204344418160364500e-1296",
+"1.33261787350917698893668328661125525389403296376900709353e-1297",
+"9.04623743294949442467764245037230819587108920218643150571e-1299",
+"6.13862539803355244541103409977256839914664552208675317107e-1300",
+"4.16404293948470644338652241971773972340306541187934061924e-1301",
+"2.82358132556397200046979947953608926075279791843573822816e-1302",
+"1.91393221769094392666877092192739796189192636315720558575e-1303",
+"1.29686291655045390237436447851110554673311674969690275940e-1304",
+"8.78421533172635550844048542178778570301023038880356576252e-1306",
+"5.94775914065392563928304196503416567541866669543169913308e-1307",
+"4.02573688602514180592776060315535022322910232034802222364e-1308",
+"2.72382455125363185556005837854368861854790722047867422691e-1309",
+"1.84227609998864330167415738206653466831382257607522057228e-1310",
+"1.24558183404453057934238318769816798965290541848364939650e-1311",
+"8.41844518052127587946447414606700371859822820931531532319e-1313",
+"5.68766095825464867233608592211845137173774465811039985988e-1314",
+"3.84129637382339013201911130586820423027032938971539528299e-1315",
+"2.59336921372457009404264189512151353336072040988286574370e-1316",
+"1.75022312810220081022712780141704490236941372174644244711e-1317",
+"1.18076951737435475364055307093877638341984960500962053541e-1318",
+"7.96305303604463673467893833815083191973122195812127864238e-1320",
+"5.36830223063102550243557117687348629395971645868485117071e-1321",
+"3.61773953986749526882137582170419798499685473386446203703e-1322",
+"2.43714145231215746097649260634572258414700358169400575530e-1323",
+"1.64122223264246094572914045298395899451154856870932059967e-1324",
+"1.10483487479697450097166243585976121636431241160061229167e-1325",
+"7.43482582404872942836220089256362946177727290905920034637e-1327",
+"5.00135608946970331074047953554161205376772728820768378768e-1328",
+"3.36316690994257294259164456726555714244489263916206101796e-1329",
+"2.26075158973591317867989421860620662941350944512743779262e-1330",
+"1.51915175515052090750078113002453715499345868685572374689e-1331",
+"1.02045410717037227785295193660357177632440843777221628916e-1332",
+"6.85219812443491288659552189660522582916812204707597356874e-1334",
+"4.59949946400570028686976706232280707424244523371744119291e-1335",
+"3.08628176181598311449772503052311612359196316673688743240e-1336",
+"2.07016529030236384749758839353653723450201076734486918494e-1337",
+"1.38809450391256357989803178502490073806199305366536027809e-1338",
+"9.30417177071600558304953587821956908654527791170005624438e-1340",
+"6.23420657037895389529352741281690782738385666469612875301e-1341",
+"4.17570252608842018415410046684929437761411322373929071329e-1342",
+"2.79590828871716514856085218034275570266321909054148406994e-1343",
+"1.87137751491237129737999415198755062068198548282676297870e-1344",
+"1.25211759657087051029985330040849648323470357452447070503e-1345",
+"8.37479466231029830707038312777679467682854096164354874607e-1347",
+"5.59949244529189363870459116217928041454098627146543212309e-1348",
+"3.74255951442916734467628795508308054148550493343408637546e-1349",
+"2.50054361477762050872318293764494671643816270348217940789e-1350",
+"1.67011327786267839703080989044634847178460903892220577726e-1351",
+"1.11507302344446253165417336202044731506538062378798247867e-1352",
+"7.44229163744136101243106246089906981819438429556131754119e-1354",
+"4.96542199669636112345594840084449257064036618921975050318e-1355",
+"3.31170661955503296903740181661358566523855254323483450140e-1356",
+"2.20797356925611474834383938103646532433261067681124065379e-1357",
+"1.47157470818087409854119012704207680136911606691459267128e-1358",
+"9.80431596395115851671156925551076163300946238590404551363e-1360",
+"6.52978572377059022015920628104775628042241099802124732950e-1361",
+"4.34737713561356269728005513859414067246452408249557744397e-1362",
+"2.89336062895813782251277955956351745261823689418541349868e-1363",
+"1.92497365350638574440618151278354890394955242925811651813e-1364",
+"1.28024795720011681171283057551440945876081844730344044493e-1365",
+"8.51158773850748147539365702181236424856876968870706427071e-1367",
+"5.65684610001860339680879526945697801525415708213857164759e-1368",
+"3.75824898238651663884519574385783000562413490784007537154e-1369",
+"2.49599805481833106398175579218439936797847147202813515334e-1370",
+"1.65710700258621711117599985875565755820276462409654573341e-1371",
+"1.09977687971832859695294795055942490692615125536529427084e-1372",
+"7.29636325933715792721493244639096548248057850891083865219e-1374",
+"4.83900695505743248893920660476083343412451590153305487716e-1375",
+"3.20814572616600345832938429909288180700248479359599068273e-1376",
+"2.12618023785711114451209697429152152642529738409591754559e-1377",
+"1.40862152969512354721952778002210414098171176516297517485e-1378",
+"9.32903940706661950201765936593530948541148534372123460629e-1380",
+"6.17629455600644371198779700185623786447987258986096441909e-1381",
+"4.08759297995678835044974020810614476668303244072040570147e-1382",
+"2.70430684370125119918120497309639061717770715302925233979e-1383",
+"1.78851700232555114769007997640029808640008538141953477027e-1384",
+"1.18243987657960361661772632932206122647995636673739894363e-1385",
+"7.81473139822863787845056894767892330444659409874186131663e-1387",
+"5.16295264708006189814278042055554007196541620924564412457e-1388",
+"3.40981982645174746002983111136887715824904218087192063431e-1389",
+"2.25119973725172781731314644645559702752735068335666200893e-1390",
+"1.48575102868871477912042071378636931043521654738716258289e-1391",
+"9.80229044534068039623930077594708512057454159227770558702e-1393",
+"6.46485390137388432805644374371150986006379902212663517170e-1394",
+"4.26225656075234660774469520652102690329596535591499419142e-1395",
+"2.80911998936203440245824663933237427870151883799631131661e-1396",
+"1.85076349674837185287145575370871584440929230993950119308e-1397",
+"1.21893794497679632757625046709921340483806661928067889554e-1398",
+"8.02532091775961656186146382523790845366039324883817016433e-1400",
+"5.28193999051164545688799155931895460741804157631456397416e-1401",
+"3.47516047387100049960420845432769998099202181795099922407e-1402",
+"2.28563414199635365987181126238264634159339250300433463831e-1403",
+"1.50275824015949893866175670557858944110174981790637635271e-1404",
+"9.87693456573556392461039601835661625390328523625022010362e-1406",
+"6.48942164591973616900503943682282321287019864093432883644e-1407",
+"4.26226718017883824038141023921204958639781828778442466677e-1408",
+"2.79850643361263247557188426681078702409531366878573794248e-1409",
+"1.83680483688432397879950651012886776794362803697377187381e-1410",
+"1.20517714227021502475459501247793853313262069241347489369e-1411",
+"7.90478435840272698060015107849869100716095791883568562888e-1413",
+"5.18299200058925200843251586604847752838600144327445633582e-1414",
+"3.39721100801224545328447348734418226264725493954547017716e-1415",
+"2.22595346447926991352161253531079381239815223945688706983e-1416",
+"1.45801272479038887052290164082217956950151677143590016871e-1417",
+"9.54681099145504864656083621248655963465205662640457527324e-1419",
+"6.24895233975705687219861163183500867886500123345171888379e-1420",
+"4.08891496604846232848454658105023377893534701705721916988e-1421",
+"2.67461345547868113243410700514917519057330649485751233105e-1422",
+"1.74890472681976965183640793445016447987485681115511047368e-1423",
+"1.14320353509173281296969292205004623650705094501962994626e-1424",
+"7.47021922719979955942254753229052751176504006170936356447e-1426",
+"4.87972802636150706718519792068301319088230202382876209006e-1427",
+"3.18647465646654621167557192154803909252065328908810097944e-1428",
+"2.08007024682951581000831365987562703903598354093897194933e-1429",
+"1.35737021987869311536291564921644143611259342030572184289e-1430",
+"8.85465231218199834603906797126564332235374804830959222001e-1432",
+"5.77427801079548357513990787114803048376178581316989302970e-1433",
+"3.76423689499903145675738045233942344146546991527596061450e-1434",
+"2.45306685307642677660749246025205763489512362212449639361e-1435",
+"1.59806742914873123450093482363621952799707413045538862962e-1436",
+"1.04072070282100405838269841137664763391715530248793595584e-1437",
+"6.77527246336677659230642113911685284964373223596609153953e-1439",
+"4.40933312801250540465298267903230203751360040761061600574e-1440",
+"2.86861808584666939006982365208421335848473978713383178859e-1441",
+"1.86563347638978994429787410941912714407193204232396575337e-1442",
+"1.21292456318313746852319857739583226604449590514342463264e-1443",
+"7.88306714689623545802788741161237891727641637173534771505e-1445",
+"5.12165980786929256818839942061838544034935293096834492978e-1446",
+"3.32644537762851105035391567195337671286850418004251937950e-1447",
+"2.15975420491117871690139155781538879572982086949122573182e-1448",
+"1.40178891494640588477019245635114974602138714604533965445e-1449",
+"9.09526534009198927799631934820274489293247091551075684571e-1451",
+"5.89932988222268752865006952948984655311782338488866574137e-1452",
+"3.82511630185848271211752360485290224851334312205575097121e-1453",
+"2.47937008951084084627656841366723564958042109570497826921e-1454",
+"1.60654508997930043653546669965724032099524695606637023422e-1455",
+"1.04063738927689053853771310085107136233444281321239134302e-1456",
+"6.73846495639482457256964669002337404205635161595501349912e-1458",
+"4.36191964937043521606700546083189479403688231693498161513e-1459",
+"2.82260160046429964177437413184238502732520966230340368523e-1460",
+"1.82589936389222199415384394712749231444395216093969160430e-1461",
+"1.18075425459779447166665581883922524444079158587269637964e-1462",
+"7.63304328382978203541663239945449470434877439738257528348e-1464",
+"4.93277778183420672585074510347948984916325760158923711866e-1465",
+"3.18669936279236601498362462421003391933415634460087634092e-1466",
+"2.05800510507321377112622275665624412583114214520482230140e-1467",
+"1.32864118212976408418680752263880201415611815540734167808e-1468",
+"8.57481925616485266069276972109940273602066483378523943373e-1470",
+"5.53220593377829731619310316726418241142855835689400625135e-1471",
+"3.56802505708977437006426629804662045687061588417683098397e-1472",
+"2.30045499929897564962636993487684429925767130145573412962e-1473",
+"1.48270916761607642536487277860138090084933963172948809614e-1474",
+"9.55332785949976848019329391262841672795416275019405269675e-1476",
+"6.15332658968679400829501084152000611982008162888222577454e-1477",
+"3.96206793673124450018824945352658796857856770994830830166e-1478",
+"2.55029625452490343591473543431956935378012144405903118184e-1479",
+"1.64102880989565556186575951808816022281615646645013797356e-1480",
+"1.05559841603333361354408192510685717809184825873671449774e-1481",
+"6.78794477089847650556275619608342678255357553746541713281e-1483",
+"4.36350030125176722594258636577677525070084054231492899604e-1484",
+"2.80407066735409676892871096092723013879594200932817871743e-1485",
+"1.80135880293684646438836006757759408987303816193448180629e-1486",
+"1.15682833994829406152256801077096143500952908455179015963e-1487",
+"7.42668711520433191276746908641972918432923286643037900404e-1489",
+"4.76627333015873646757547244658325714669938429316604798038e-1490",
+"3.05788016797325079628425522716843063360287861812123309006e-1491",
+"1.96119047531468835534914551610863345350971196004340415815e-1492",
+"1.25741019257365021586814809323955448420095193161534130401e-1493",
+"8.05920417205873078067687339967582337019611251904546909494e-1495",
+"5.16375244906968197270220560313205512353643354099975630835e-1496",
+"3.30747702426125677768119990560939469224396262977560610476e-1497",
+"2.11780767088167308747310827695310394134285900419909893798e-1498",
+"1.35560933089839460281663999389018384294070320378937911654e-1499",
+"8.67443157830244439192134718260699285310530873696282463690e-1501",
+"5.54888900988686852255941446254125459052161404600106958498e-1502",
+"3.54837636985185867265504875747122544862571734194007327601e-1503",
+"2.26836030566632761622128408797380013235366520268790875629e-1504",
+"1.44961679267857194991764360670862009450867503719389195160e-1505",
+"9.26090197787658567809076635692614131831539770517649203441e-1507",
+"5.91442268363558442996997191024638894787066355402721290377e-1508",
+"3.77598723157849026289836541321077009013593223679563540639e-1509",
+"2.40994900818863578246085684011971577593059438979185565569e-1510",
+"1.53760385570652577322875079704423060852698804272719147435e-1511",
+"9.80709598400443865588257135314069941089349668044451617638e-1513",
+"6.25310676662648783282897923085147352025346890436918467293e-1514",
+"3.98575688181090671423413241153778502594832280353897533722e-1515",
+"2.53971742471188104216557445677368037635478496310024176321e-1516",
+"1.61778094817727471934810632162156680972607780358416365870e-1517",
+"1.03018174353374232260531658125202321962697644108473097866e-1518",
+"6.55794676375645969601972706513404737196891801039669086734e-1520",
+"4.17332224029391278532027930925685576013228386809552525486e-1521",
+"2.65494811541884705177419097636256463380210044030179052044e-1522",
+"1.68845827317067021329505171203838630713936709200066992679e-1523",
+"1.07345759267206130791862068131288275112166894030656783809e-1524",
+"6.82244129503007823809138204443762216869367112195382882073e-1526",
+"4.33466129444567155945639796621994617428485939865042049232e-1527",
+"2.75315754040001656421581644801761245727603644330277400067e-1528",
+"1.74810527322600069336701655138511919040968459980062474969e-1529",
+"1.10959583105786227337640581954372127437914951135804165750e-1530",
+"7.04081369752356673990296413208472049544616188898316139920e-1532",
+"4.46623717015405695645029948898289718764487781528946241946e-1533",
+"2.83218547854474082925849896660426656563893100207806498080e-1534",
+"1.79540599909733239882983942678801242240690875846431476492e-1535",
+"1.13779707071609344837664985738110591682083950987357653229e-1536",
+"7.20822274373830340527228472692372598539858146535525283991e-1538",
+"4.56512761000979009621005362530297777863801680398155639502e-1539",
+"2.89027436083817699658937918446011560035350841995197360624e-1540",
+"1.82930757172279173742711339402162107540419868493204540991e-1541",
+"1.15743335868300217332353025079296020247853253690948353821e-1542",
+"7.32094169233185517429394163428489954303304382276738854537e-1544",
+"4.62913321025879026431391136888809145323328918103292324785e-1545",
+"2.92613443231412017337639584832143899084618755757456462307e-1546",
+"1.84905923532581706171519601019583110493848698201977050647e-1547",
+"1.16807146581628716999364230045483775161896077632439026869e-1548",
+"7.37649639333580644675375239927128111893043742608422986658e-1550",
+"4.65685880187348867204287254543761277545890361749976406591e-1551",
+"2.93899136062591951696704608642560275207516806481268822538e-1552",
+"1.85423997474914049193774970235188616505757780600467894001e-1553",
+"1.16948874825918422650668429555106670707599498439926014866e-1554",
+"7.37375529451192846472231121778296587682192783272983391000e-1556",
+"4.64776376974949558753737457012720346884950239424005874674e-1557",
+"2.92861383850916772445188819503508660456469893711226749887e-1558",
+"1.84477328043787980210148236500086410193074527674930318411e-1559",
+"1.16168077276032909549288072537326807007585640686347728180e-1560",
+"7.31296679540995156653365589460873107317942123104667946451e-1562",
+"4.60217879132454461700967228097719168720120187716222746414e-1563",
+"2.89531981857668510819692358004046797368302938566570781874e-1564",
+"1.82092834777480395978434286056333276767183891633999327448e-1565",
+"1.14486034887771515483818520000880423059312482489807360616e-1566",
+"7.19574228941223175574381279114376046890780372460755148296e-1568",
+"4.52128832359582353063288419937400085903526694262513463782e-1569",
+"2.83996119516870189952174480613973624439129349031762695601e-1570",
+"1.78330774415190847805620918156587481592011702974108505827e-1571",
+"1.11944808371669797910808602283570063299012496814578131514e-1572",
+"7.02498621707513760525224285789830216740983882629519812028e-1574",
+"4.40708004496184237490223329179861037199458084020549015540e-1575",
+"2.76388792625332558807121353319997910685450453714988358058e-1576",
+"1.73282231452244051091602812589867935576485892643027067989e-1577",
+"1.08605503495471868606306159409120811234950821582998153214e-1578",
+"6.80477731660020149660735456384133675380398022200208072177e-1580",
+"4.26226423386377305188273665423464835330910699219296640968e-1581",
+"2.66889368628535076287590995204519286285303802467513450938e-1582",
+"1.67065477289643890808836002435812702742849723566546962926e-1583",
+"1.04545845362172571926753654352537059949266990494756682937e-1584",
+"6.54020780213853818364286211344282765320770300359685442398e-1586",
+"4.09016761834540359635334772319391133613095884097066607572e-1587",
+"2.55714608390156559872237909350762626711129818475933793752e-1588",
+"1.59821399772945039304756561862959446793775934943676692786e-1589",
+"9.98571951689380674977022139264187838682829588610292973318e-1591",
+"6.23718925979033024348245310982887328393988278963816019661e-1592",
+"3.89460745811071415500041688543467434432527658373497739469e-1593",
+"2.43110520565836995853651764776082027963394549280553028321e-1594",
+"1.51708247724942814571510164093673539992106673551115113478e-1595",
+"9.46411679578716047333690105515689382047035645703621778365e-1597",
+"5.90223549896793572545120306627054178651329279646431033196e-1598",
+"3.67975245029216791942366533381425358131772570343034944631e-1599",
+"2.29343471655096531190589973195439219443570162468566943814e-1600",
+"1.42895961246809833788656957892613937162421047412911567407e-1601",
+"8.90060241754700730403789554687221087726024565604820531086e-1603",
+"5.54223335902011808969857053902988809372644836727777901543e-1604",
+"3.44997744200977563881755362793004142857810034340924827805e-1605",
+"2.14690993898617583611856889487371538244963773454096173400e-1606",
+"1.33560367059376686004111153698331543580191433206865712609e-1607",
+"8.30630109881512468093413896354713941855107225862361787070e-1609",
+"5.16421252879377246680877122760010404939239994548781919586e-1610",
+"3.20971888198553787547572518285321923599290064162105061795e-1611",
+"1.99432724548677125572793584490672630762334300949977556470e-1612",
+"1.23877509333344107319517353439620596559563957338821220052e-1613",
+"7.69228216485599596114965429897349996314155362647669288307e-1615",
+"4.77512482535748334819924654633534355092755207594682153136e-1616",
+"2.96333747865743564975159760719508846939421041025856424858e-1617",
+"1.83841875873986692648082699097470415505077892703696307143e-1618",
+"1.14018361948040423138701698216106873494117740615737291696e-1619",
+"7.06923239495573124577419389093804036174754281118301230339e-1621",
+"4.38164218067652379225806782531911816925323241048235846353e-1622",
+"2.71499371130952383980840024636463924116059610946528884206e-1623",
+"1.68177579541509207658685032630501160638151147971188873931e-1624",
+"1.04144130622618901556402616649134826888709641128180297094e-1625",
+"6.44716837566953550441698286193678439880514486263199986815e-1627",
+"3.98998092290872391238189849394880828880719271762997795232e-1628",
+"2.46854074411454637560013625356318608089822881359535539152e-1629",
+"1.52678377044743851433262983762585319006548100776125515074e-1630",
+"9.44023063517631226264329678804610389495829332141815795282e-1632",
+"5.83519790371994903126645374127025955121158617749943590133e-1633",
+"3.60575795886482798323512239505220842188015859306581809730e-1634",
+"2.22743801537899799694612090444314403823743432311976773733e-1635",
+"1.37557045709686356720238074678485157126948027861900204553e-1636",
+"8.49235789495302062897188392662983511728727087508295776339e-1638",
+"5.24133661917605875887334012293886117591964843367422201452e-1639",
+"3.23388232417450795796165437220032335784831029821179169105e-1640",
+"1.99468741584429679089878548536297695219375284185612983667e-1641",
+"1.22996863828093467547268150321994089564772996504464677457e-1642",
+"7.58196652368354717598377615272574132764379339104379327500e-1644",
+"4.67238263382010412674379151243077251477898333461473997430e-1645",
+"2.87848342363359213232244094613630325675899367963029793594e-1646",
+"1.77279262767750822864862930687350047160530735904490850953e-1647",
+"1.09149334667076519821227249758910894257799762907723568432e-1648",
+"6.71820542273800411275053646087125864605737976456773652392e-1650",
+"4.13384867913563996658847897984576613801947564450023089806e-1651",
+"2.54287527727479819246202512348679967042000832531449906461e-1652",
+"1.56374095622208271032744863497960763660950164357468428033e-1653",
+"9.61333127566981288602511861938927702436564182365744907314e-1655",
+"5.90816247767260796369204169726273659472209097630356715861e-1656",
+"3.62994842694342302910009046814811025834768201989952472364e-1657",
+"2.22955433466319951941792328926561501161357122674839061118e-1658",
+"1.36900591968730901237349207069356049476130344039700770398e-1659",
+"8.40354111404581513022904773445237480060399556757130030377e-1661",
+"5.15690520384962648136709381483548473043321148705234026029e-1662",
+"3.16363127957173393010555612322104447029672071034274472838e-1663",
+"1.94022700642789960374615960035276788708475171787984736070e-1664",
+"1.18956801754272132124126390397746827939584949742788368345e-1665",
+"7.29115180584976786940710189575370988707171665214112582296e-1667",
+"4.46758893587278851150760992807327037915975117886698032900e-1668",
+"2.73665817795287756224369173888064473138973688901936757862e-1669",
+"1.67586203942650677934130149926094079015657339887859894241e-1670",
+"1.02595050444429465621640057632996665531816661124977929771e-1671",
+"6.27892173105822555859665420367642335648231828859479083732e-1673",
+"3.84161927021327605513133251140950871577801138811553229430e-1674",
+"2.34970987287168897104447497896300976779992361772386192038e-1675",
+"1.43676224728464415097392880232513466722112401718232600415e-1676",
+"8.78266659688412263950397602882134322679602342177620626732e-1678",
+"5.36708884782948861253982526571038791398536524055881564938e-1679",
+"3.27885452878189301855384772993152148169992643588886004745e-1680",
+"2.00251863367040726063899883946021877379455645159301465444e-1681",
+"1.22264988721790129109779678871133995999059325575943056159e-1682",
+"7.46274949966265933994732165850090096791029060304316382750e-1684",
+"4.55372602678855713417935315984858515718568410800322722110e-1685",
+"2.77783400518022698531538466424929255332568796355861204706e-1686",
+"1.69401447391587555922082180465952364141251193102472006770e-1687",
+"1.03276010693090091736876363534485452920494369754692662561e-1688",
+"6.29438607490111541038892437534637225900493626620727185099e-1690",
+"3.83512005301977261075469249738968419748341631536536751010e-1691",
+"2.33601855307350717330573185436803336702737301162754301122e-1692",
+"1.42247756602146587646294297730891515314351723347767483271e-1693",
+"8.65937312682618130044380777702479134833579837028746522715e-1695",
+"5.26986447088364066991797907410446236819230467991322368963e-1696",
+"3.20615474365704279328785526982718011299313884531767292822e-1697",
+"1.95003150849728013887491263274296707194200775777140028662e-1698",
+"1.18568948663272894412873188208326451042386508801688467022e-1699",
+"7.20729960160432676855652912345309570578195250056203792636e-1701",
+"4.37972178794125173703409510089165739480402423940786137533e-1702",
+"2.66068149008469994849696341492985268469061158705814214247e-1703",
+"1.61588981723586503224487031133518288514986656120675082426e-1704",
+"9.81077162299581884796033500051385878095847796768027280615e-1706",
+"5.95480067898973283484626679903813233328098686741646527530e-1707",
+"3.61329988943152134933355454959887114161302452360291643679e-1708",
+"2.19186386253141854871081387119365130852609739255006780454e-1709",
+"1.32921737562703508911047654109299258546845131183437494075e-1710",
+"8.05844752275910237571616034525393753344136112558424493158e-1712",
+"4.88404624829683991194685185514231338629703309441032355504e-1713",
+"2.95924716970647155743472730147006900002831153099640648959e-1714",
+"1.79248642680398872477496654110220720343327651579993500733e-1715",
+"1.08543481243505419533251585631342800887135840217614369025e-1716",
+"6.57090103863107307282722339571437497982232019946410996396e-1718",
+"3.97666942588522613746894602766789995673085365903778130434e-1719",
+"2.40595506182155260446292616796159081021085243354844733093e-1720",
+"1.45522136914573875290672535742932456541670760467165841713e-1721",
+"8.79922089299856401250415219876911381766801153769639326709e-1723",
+"5.31903753653884057751909001490392024258412031384413942816e-1724",
+"3.21436833892536149158872332582470747835250329249297008972e-1725",
+"1.94192321312710900425936708619913911563051944201635367877e-1726",
+"1.17284970493606762945073532356936052509394892083890553546e-1727",
+"7.08152257712781425841833197333076019023627297790847139557e-1729",
+"4.27449653920197995951015728967958597630815725987597633610e-1730",
+"2.57939238313449289857463339166592710984182326115909899460e-1731",
+"1.55605178741042130712672593941776533360193748214129177271e-1732",
+"9.38436613964191336185004100811025848360684488249807193883e-1734",
+"5.65796396288639617710226369488369667059664399645019459281e-1735",
+"3.41027827910883085770609583132521057621141652901045702821e-1736",
+"2.05491537804389546733034190418757072022260460847855935370e-1737",
+"1.23786310668343679725979975550982260666771785196475888620e-1738",
+"7.45462708477066363423579661297378079946372645106605882073e-1740",
+"4.48801112764745935317425302884935166068621547133575551835e-1741",
+"2.70119973296043987463756424414657551958576807606083276113e-1742",
+"1.62530291502553338274120352401948426214818601567227917306e-1743",
+"9.77657746192077095397094263843743159487790698850725049223e-1745",
+"5.87914760817765302517177411327898638719269695761925827338e-1746",
+"3.53441011871367555574661181158521317210494048573686333456e-1747",
+"2.12419631227382621850372301488859299683026796727779705566e-1748",
+"1.27628469697980599155523243138429585774698208647267810677e-1749",
+"7.66612237727970453118489759154718674821329437957643531425e-1751",
+"4.60340600220532018032988693083121039989019178762114417348e-1752",
+"2.76349211038235697355456328382699227479389689706061035716e-1753",
+"1.65848927500222401491239153161387588762316252668915775619e-1754",
+"9.95044872461956063059106748906884352033399916988199776589e-1756",
+"5.96826772325824660294164366856117777287653330077167722405e-1757",
+"3.57873573133219682594193416332532022880822764434066457415e-1758",
+"2.14529359657267605240002570742028221395462801791605773824e-1759",
+"1.28564092426443974697695746121725756717314148782245293724e-1760",
+"7.70244411746965111376541026098170379628148253143551221827e-1762",
+"4.61331819854203959164593772011810028531615099802828722785e-1763",
+"2.76232212946673223168934277906123345220837605047122550430e-1764",
+"1.65352727452501663127515752061814490733280329398886107244e-1765",
+"9.89520058013819806317986582096776160344540488892293340460e-1767",
+"5.91989645374147637566411716442903286286536460181552614082e-1768",
+"3.54062522190884090607537946224040438536735751578147351127e-1769",
+"2.11700662596317489402107705976416328008133493191241089806e-1770",
+"1.26543824644636473743849895712983436834047789404546102336e-1771",
+"7.56199256819423023238699740246465432283516951867050179102e-1773",
+"4.51760397569028379447858232563335147080248938562039385168e-1774",
+"2.69809202711409508927690975355751248027042822735161081633e-1775",
+"1.61095022268520300239874705470830035637893200394368531634e-1776",
+"9.61577548620627834323037904286825489013316572693734161759e-1778",
+"5.73803785134543677209644843340931422320499555977189387754e-1779",
+"3.42309910776594518412519787323034353271083466291041280635e-1780",
+"2.04151501243567228256630700578294402878466616294904633732e-1781",
+"1.21720237798158113666059035421678141434784827313539713658e-1782",
+"7.25521330911898577893731777072499373413612417616908253517e-1784",
+"4.32329457162121198488466577805102672320901901431381582250e-1785",
+"2.57547173244690388466028447882674090636438594225918461186e-1786",
+"1.53382613952680200755433700895131732442393048433114117720e-1787",
+"9.13214793925888348791733993298030390812590047569290070429e-1789",
+"5.43559721581657571301581782738978585035008579957477011388e-1790",
+"3.23444068517146310460423691506038410422612006970460117701e-1791",
+"1.92410504575577331160830601118151640910846712878010575107e-1792",
+"1.14428998817641956993331639147429645021297744481962123272e-1793",
+"6.80332501573594869348423629184541053093343666956565190292e-1795",
+"4.04374917933789773522483338623223935619097845115204365149e-1796",
+"2.40284158397073871801909445098815056352679699047427464309e-1797",
+"1.42739468705254998353483495192921729448885162300262480651e-1798",
+"8.47697862767269516320520548745962419877808220661876506280e-1800",
+"5.03287616455375195087475117035631108370221676513022897002e-1801",
+"2.98723654305487675722129028015106098740007733806338142183e-1802",
+"1.77256129876561014398275114849166935085712967056725283017e-1803",
+"1.05150480427968301524808488902750074758668652095388299089e-1804",
+"6.23590767552029503490593676710549280724269195416697057184e-1806",
+"3.69714579556734811600158108903468615271864385585652312665e-1807",
+"2.19135142526608087435705134919407309971751244160719818580e-1808",
+"1.29848251208549719393629639099427034690298731055970790491e-1809",
+"7.69199278106082960748753039683599371967207399784999657812e-1811",
+"4.55533570159979664792004328012297008972148360922418985729e-1812",
+"2.69699866210339566668982596176026413158193707324366594431e-1813",
+"1.59632004180493337324380116746867707329402112751352176685e-1814",
+"9.44578727269289735549183085630175441529433314904892904967e-1816",
+"5.58772960012538196280355036103582664373583215672130572163e-1817",
+"3.30454520080890593793842192785641033009271559151946089956e-1818",
+"1.95374182103507323201712559348106649458665364712134764021e-1819",
+"1.15478697734334449023656185976020023800398641381010956977e-1820",
+"6.82363641131176279796569673582569459132723190948206141096e-1822",
+"4.03096698275890451119670145490442017008410561253582269036e-1823",
+"2.38057590455800718663930381510213121307084863698125497111e-1824",
+"1.40551123861247382392913187528803509254021135438785434248e-1825",
+"8.29595094073467793901568534069148152494682563314910497246e-1827",
+"4.89528135450425576998610679661579538542227031023310104754e-1828",
+"2.88781147146298043290814157666012786820487459894359477064e-1829",
+"1.70309855377249858554596583030285200709279656537454489196e-1830",
+"1.00413141158831545869736576615449047347966688550629717779e-1831",
+"5.91863042574234845271529267628738598578744808861286761047e-1833",
+"3.48764164276904458017988644805934687061102910663796968338e-1834",
+"2.05457744362709305813020937290241393792390697382816647503e-1835",
+"1.21002201692734052876957803445447932168036786284672583134e-1836",
+"7.12433267453661490873983446167029775847461793166639286051e-1838",
+"4.19348734590274400881005752222610856686407549353160955928e-1839",
+"2.46766826814266293459619680947747387236378069368072979641e-1840",
+"1.45170567920769374245835135865810905968964728282850952200e-1841",
+"8.53789482675510780892312250321535124454020053813784027788e-1843",
+"5.01999768516617690282415826162294838276414245810000914877e-1844",
+"2.95077972110628681653037999057411642235467583791421561510e-1845",
+"1.73400636050091579261350228722835964512404649415244558647e-1846",
+"1.01869757079002743105755750404936028818624767016289722186e-1847",
+"5.98302212347902436103339643129762265429686081396676263754e-1849",
+"3.51298880858805545814397899254407883416913191812051061837e-1850",
+"2.06211940201721423217014513621703236358900827460302376702e-1851",
+"1.21012936767581089659669362760672572576701590030510464796e-1852",
+"7.09954976898877555235632505916709708576826817798833071538e-1854",
+"4.16400167730951732451892967407237379754954044712974943071e-1855",
+"2.44158657887796945425585651751776663797674223129673581470e-1856",
+"1.43124694518283987613885617051494205132813821609926056538e-1857",
+"8.38761121848711326013338688285245116027067993361667952757e-1859",
+"4.91409277427239701354362089040956758100403154252325073289e-1860",
+"2.87825863300561978992146792505697766874450235879095571300e-1861",
+"1.68537966798175202728076130128888405175489870541651924939e-1862",
+"9.86613876331899172942949542864809053001285609257190844714e-1864",
+"5.77402004737303930140801251599173950805973083433304015505e-1865",
+"3.37824403903437953622705114948232346759948279582987992585e-1866",
+"1.97599335103565688477908878963951219283333118159295444395e-1867",
+"1.15547813337658328334498188163569312076242550715878727471e-1868",
+"6.75491424935353332746335565436120175300373884241479728432e-1870",
+"3.94784297465962078896808872730434436091855628376544269441e-1871",
+"2.30665097623892098389273885440179651413460134639062528667e-1872",
+"1.34736713598226408901191788382203109195785632041127050283e-1873",
+"7.86814089180012908243640695488024707207941416973769266080e-1875",
+"4.59346575810114034386836200889257557682179241134414533135e-1876",
+"2.68096460120268218731984778002388729224911926800352316274e-1877",
+"1.56431417671184962389772059842712725485818594625701643752e-1878",
+"9.12513401481325689916039295980356678218792518047122034277e-1880",
+"5.32153538220282880425966198304191164341415291121259752071e-1881",
+"3.10253830995234452201365649529064241689751534468583896451e-1882",
+"1.80833926041606917403373459133323457454238620541323352137e-1883",
+"1.05372016886780307543395780898069531952025998137719895081e-1884",
+"6.13837421471758282973970159397712947497917532591548987076e-1886",
+"3.57490231258583855384888949586083324717310561025365121160e-1887",
+"2.08141082978324601131387642496156767578180731583517464708e-1888",
+"1.21153040372393020978893321324848682543478540074528946198e-1889",
+"7.05007544145475071213402426421356447453100578095742877353e-1891",
+"4.10143859476268903843313776389157737392978041185623270960e-1892",
+"2.38540282327712044105636146336884844022262556295045515035e-1893",
+"1.38698055526976414562173733779734718948288543817231190858e-1894",
+"8.06236039317886327788846713407630723322155434140174487567e-1896",
+"4.68529884205094970570466846569393585858114489088459309536e-1897",
+"2.72204752088168015418074350104139258392588334489265480583e-1898",
+"1.58102045349731778993907640553056321116636421424854354848e-1899",
+"9.18042350437380104912522495380785885082042445985135367870e-1901",
+"5.32931571017422413886551490182803723990378121716874605146e-1902",
+"3.09288482983204272929959166380574398862663934217562921286e-1903",
+"1.79448436052990506710918019510866467626736474435514418312e-1904",
+"1.04087672841988893651079669910524700309090590230930541236e-1905",
+"6.03590886940313456957727073979349965495914608103629476821e-1907",
+"3.49920886388068639755320493928716166457394710276281517345e-1908",
+"2.02806063763148259872780088102409340746803009288263284631e-1909",
+"1.17510303154931600032448561384614691547381944722908060566e-1910",
+"6.80698760707018964201697863483585292890124208129669391552e-1912",
+"3.94201286826099965435076401836392270705704228909932033328e-1913",
+"2.28226064668606978651293989318827534959937365795883047373e-1914",
+"1.32098119117708649985887661979614727767327985652161980117e-1915",
+"7.64385211215996539080933295720771389210039833012946666038e-1917",
+"4.42193373013556648331881343769596071727111277136423833009e-1918",
+"2.55738760816704702066679626266940892663392775085641731475e-1919",
+"1.47864976277326311580109458959572646712696301220678107538e-1920",
+"8.54709587467996557048661985368816405730425571324851917941e-1922",
+"4.93919748214861663112670836136218802181986620091826391656e-1923",
+"2.85350622841893814217979968409911935993664003563619377985e-1924",
+"1.64810903075382877757453477791278066096206407162159737871e-1925",
+"9.51651189402723413266035776613621469544234097871245483817e-1927",
+"5.49356734570952053245194547671989248351684668022460671876e-1928",
+"3.17041398240464980932377453249239531926877558578587379547e-1929",
+"1.82920517385074824085239280239268307359610565644147759660e-1930",
+"1.05510055889415337330075269682416313561271083133230716879e-1931",
+"6.08429596196712677110916579089968451143142099656356533007e-1933",
+"3.50761498901625102407485581088601748728589826421041702867e-1934",
+"2.02161602288545420526810615825030481208664377866730632907e-1935",
+"1.16485174218973546707075022509346404264386356896466346266e-1936",
+"6.71008351386831299831359494699290584893464522786557221178e-1938",
+"3.86429744011039573043075879711141023337018916075865796940e-1939",
+"2.22483895220503193783700023676071267532600940425270197138e-1940",
+"1.28059582796800245118454149569867637462784406881941119077e-1941",
+"7.36904344508986974825293906376085897211755732433768954791e-1943",
+"4.23931553778926784011206008704045665102763270503722583119e-1944",
+"2.43818143771230707990414551017990309059966483257312760019e-1945",
+"1.40191605787029761564662753583178836470484945189585209974e-1946",
+"8.05867742539293421989962429618476090475577439655674111220e-1948",
+"4.63117685421124124927756920466826743874079343725700823771e-1949",
+"2.66075478689063071358878002848890015896746478445007673212e-1950",
+"1.52828478809507609385288216511486121070921461748151736957e-1951",
+"8.77586109343777569224342702136257289905584616078359265048e-1953",
+"5.03803595264693069925282549740647249142083392907469521154e-1954",
+"2.89147149869623557021614260748393135911705641904117461763e-1955",
+"1.65906255108562399662218984258213019572131606530596230156e-1956",
+"9.51684192600142806211292294379614229305961232055883743868e-1958",
+"5.45769499721103392306351134047342969469107803318047528921e-1959",
+"3.12904664365268708392626153560902769341053587325390730573e-1960",
+"1.79349942560376059311470268042283570037488278236327102325e-1961",
+"1.02772503381485430003463887321634281418193684250551514672e-1962",
+"5.88761193280489885361317140486612063699121719783880818952e-1964",
+"3.37200356777343927644602791273677278108748079858733815764e-1965",
+"1.93073887215944401143836808045111952035170625895735569892e-1966",
+"1.10521248162708495605312066582822210474721897885482683079e-1967",
+"6.32491663897429852235271660446922933745360425373754494550e-1969",
+"3.61868411978675813702082850230615785991860973898347884433e-1970",
+"2.06982412995515653762072501211297432465580396635660315827e-1971",
+"1.18359515318939372367881044728499082527739038251008990903e-1972",
+"6.76643525586889206525344724868226788561997175570472660428e-1974",
+"3.86726348214694254629425278275646018786922259025713940097e-1975",
+"2.20970720278884451204334150868383655546606366405492391303e-1976",
+"1.26227184883209529589349623023637252612613598195722478355e-1977",
+"7.20872265302791837651276568291066106269461574501612438012e-1979",
+"4.11576955591501464838378676600470307761374173602037125624e-1980",
+"2.34926038677581249525358368787824250979774325236796675954e-1981",
+"1.34059838265745316401233332533271227729323610340094420590e-1982",
+"7.64810276939316972508058496472318962789880562772945268876e-1984",
+"4.36210671193269118315698777220109848913118128958014741804e-1985",
+"2.48729021472311952144417231534750273420259925932056633767e-1986",
+"1.41789574758225257068538904388626876946796187900817694149e-1987",
+"8.08071630395029128081476731304321382660996896632898686818e-1989",
+"4.60408358052776487237677405221419056147781148200921624420e-1990",
+"2.62255361324726258295685508887370072895526395142171812711e-1991",
+"1.49345948922038382557382643343891238826615599499162313148e-1992",
+"8.50257498970378533702587072558745707729927215746925200591e-1994",
+"4.83944441440817208140569577654532400598891425871879626193e-1995",
+"2.75377599219069318551943057907618427803734558311783461503e-1996",
+"1.56657012053177458502190606559260936308475427324453685284e-1997",
+"8.90962144871083990426347784257702156232725898518685506012e-1999",
+"5.06590342974359233558846408112758905354346161343079167381e-2000",
+"2.87967091456131949098814402984306964844075599573798865482e-2001",
+"1.63650437004399043135005806933545970102390570211654635858e-2002",
+"9.29779341206787509278505206685245506052771527836179404269e-2004",
+"5.28118141396794333651582592624905550356821289677494632086e-2005",
+"2.99896093202751679834449238289449063486283057233794451225e-2006",
+"1.70254702230853231940187795934798393282877446011144119795e-2007",
+"9.66309090508763697193497056679697180041825500142578421426e-2009",
+"5.48304379054399072861944518479877548323020175698367261018e-2010",
+"3.11039911868787564658121146302600326078599948787044339107e-2011",
+"1.76400308158567683565677356156696815375976093665772420028e-2012",
+"1.00016448526120752309103710958441066178867982173256606660e-2013",
+"5.66933925526273046248399705351130346749349353557811034819e-2015",
+"3.21279079680779815052010263369305778067495666388632590439e-2016",
+"1.82020996985606781450831005698400406945557394955136388626e-2017",
+"1.03097854594200988879807868249909427256984175519792752148e-2018",
+"5.83803804930140035358088250277354901760188655034394055450e-2020",
+"3.30501492442867898581432261691888454499887922194674224378e-2021",
+"1.87054945915991499243109729110512151164634610977318546177e-2022",
+"1.05841086713453247500264284617910511502992887031709632069e-2023",
+"5.98726891398181346464448111261550864374297188344192836422e-2025",
+"3.38604460760636452037631303020179332452807458844561190597e-2026",
+"1.91445903666481474590001269249705401678985272450098056082e-2027",
+"1.08215390274501413102270825066017384580167576731190120491e-2028",
+"6.11535378259763561206319813206165387592953046391429481720e-2030",
+"3.45496621028176827359460358935284081837508602847376645626e-2031",
+"1.95144240909205541958475743484846691052124766859752858375e-2032",
+"1.10193872737280933787963358333486949927633576130134223394e-2033",
+"6.22083930624776179093663337647576334528370379342649849008e-2035",
+"3.51099656249543997815118111286006153124627083437048375469e-2036",
+"1.98107887112727768884827375615819739375579626179935935884e-2037",
+"1.11754012234191404399064086532295465298465297142615914537e-2038",
+"6.30252438249662413997836122915660591306658897603655156440e-2040",
+"3.55349781218744526561385861693717005175137760287885519447e-2041",
+"2.00303128974425315746089214927719204481680650862210972356e-2042",
+"1.12878085149802637894965452198295588714428556916850554427e-2043",
+"6.35948295580700786212375881286223015235405174782691364213e-2045",
+"3.58198952583740508083643396355371518300807850403598523679e-2046",
+"2.01705249213455826683640953497307429130650604913463619541e-2047",
+"1.13553501307834295430106191643484893276543004740107834929e-2048",
+"6.39108148380727429145624244990535114394962733132435569279e-2050",
+"3.59615771671462904374770853401656233321339313818085221907e-2051",
+"2.02298988796198368036353051732041183628529235632713186855e-2052",
+"1.13773037905145250828013726833838726666029568607252328659e-2053",
+"6.39699060926804915041192380896508642817472723657914174957e-2055",
+"3.59586056397784103998932382628708869946145580819391117738e-2056",
+"2.02078820544589228018424461121006207859145530190933742402e-2057",
+"1.13534966141970212192170221662773935944757909493843497602e-2058",
+"6.37719073901528578241415036757432856990279252817315521410e-2060",
+"3.58113067828493502939148767576269178507360815628891001534e-2061",
+"2.01049027358066093798148066537189266198126426299220479516e-2062",
+"1.12843067506970764182770624608709254790535223115537504805e-2063",
+"6.33197140209998794486164631519397944369813692674310093670e-2065",
+"3.55217386661759977219822361287269537490751579037799313815e-2066",
+"1.99223583771437003686162380844821631737757342578122978098e-2067",
+"1.11706539776171186518590360109447734368769005170984094941e-2068",
+"6.26192443419887188277610013576032314333195881665677542641e-2070",
+"3.50936444718755425889140214072060834434167822000212915115e-2071",
+"1.96625845075598186295574032186556313909987961378313141563e-2072",
+"1.10139795864671592357887120387774606211064457211701080422e-2073",
+"6.16793120714312616653910854940619871318211932383996386390e-2075",
+"3.45323726104123516662662914240996985774613465050175434366e-2076",
+"1.93288053548210178608748763378529213883176780767965155181e-2077",
+"1.08162161619039716020825798784745783372270410728136219555e-2078",
+"6.05114428553789402566420115535713785388081482974467325418e-2080",
+"3.38447661691999072058412340051587582050798895655514073434e-2081",
+"1.89250676289275321141775617211101261525051458320658113250e-2082",
+"1.05797481352858505084672542987179560224644144436019044808e-2083",
+"5.91296404094766206706230671209386477017480841736209379039e-2085",
+"3.30390248694277752754337919428046759029057361248126763313e-2086",
+"1.84561593561667089101176512152242327273494143772986740892e-2087",
+"1.03073642315357275663183190852162766638368818440072232493e-2088",
+"5.75501088305864624828500535445650914624208920638426570143e-2090",
+"3.21245434004631412296494780081564475723661160222072621310e-2091",
+"1.79275160253310379056471023223077906046817208743543186516e-2092",
+"1.00022031265432586492231001076605679847972114759690528700e-2093",
+"5.57909387244113702936269176845273832981303250069469008849e-2095",
+"3.11117305564962004285575453629896462329273086595289453266e-2096",
+"1.73451165990587898160576207519092863942293707262896001557e-2097",
+"9.66769378405079653885904136200555156134746935302769120720e-2099",
+"5.38717655791018025622035369289160866524848249371294286775e-2100",
+"3.00118140011162958603141106258854755055086511824750724476e-2101",
+"1.67153721460955769235628661987211464134562315714702473810e-2102",
+"9.30749204213329258096683189855511292568551348806273785914e-2104",
+"5.18134093105015496487571965734545985147237233860596149668e-2105",
+"2.88366357227923217875344017715346991380426091334298762631e-2106",
+"1.60450099603068174070657000187339716968357021974767903176e-2107",
+"8.92541506807579857555104789871947497705808705134123594510e-2109",
+"4.96375041044558912629294342411957847573815703853017445653e-2110",
+"2.75984433150655247142546627959120796043557713432887588619e-2111",
+"1.53409560489022958041471515043937090196446960748873992846e-2112",
+"8.52537529686570225321657425787105248499313131381932016854e-2114",
+"4.73661275894598067443111364071245688639765052895318696803e-2115",
+"2.63096821235060833318650074268119547411445292102877630788e-2116",
+"1.46102187986297251734069686101248065811583982511998284020e-2117",
+"8.11131541486647915787421366746697485633623533092989908437e-2119",
+"4.50214380040359385307269251526192951331997199860371263290e-2120",
+"2.49827930571511538089032521984603837925753996662120401768e-2121",
+"1.38597764710953090207483396826508234203148973443134553707e-2122",
+"7.68714585058767447008253134756223377399165745776309138611e-2124",
+"4.26253274028288713965768557033843698923198907358221311048e-2125",
+"2.36300204807040122243832922483585979127017215734118142303e-2126",
+"1.30964709462676658860843614016144141136262069043433317279e-2127",
+"7.25668609446295986080134378249879533874306721901281408444e-2129",
+"4.01990981072268362784684817027527561717889487740566813738e-2130"
+};
diff --git a/fplll/bkz.cpp b/fplll/bkz.cpp
new file mode 100644 (file)
index 0000000..02c666c
--- /dev/null
@@ -0,0 +1,1002 @@
+/* Copyright (C) 2011 Xavier Pujol
+   (C) 2014-2016 Martin R. Albrecht
+   (C) 2016 Michael Walter
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <iomanip>
+
+#include "bkz.h"
+#include "bkz_param.h"
+#include "enum/enumerate.h"
+#include "util.h"
+#include "wrapper.h"
+#include <iomanip>
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class ZT, class FT>
+BKZReduction<ZT, FT>::BKZReduction(MatGSOInterface<ZT, FT> &m, LLLReduction<ZT, FT> &lll_obj,
+                                   const BKZParam &param)
+    : status(RED_SUCCESS), nodes(0), param(param), m(m), lll_obj(lll_obj), algorithm(NULL),
+      cputime_start(0)
+{
+  for (num_rows = m.d; num_rows > 0 && m.b_row_is_zero(num_rows - 1); num_rows--)
+  {
+  }
+  this->delta = param.delta;
+}
+
+template <class ZT, class FT> BKZReduction<ZT, FT>::~BKZReduction() {}
+
+template <class ZT, class FT>
+void BKZReduction<ZT, FT>::rerandomize_block(int min_row, int max_row, int density)
+{
+  if (max_row - min_row < 2)
+    return;
+
+  // 1. permute rows
+  size_t niter = 4 * (max_row - min_row);  // some guestimate
+
+  for (size_t i = 0; i < niter; ++i)
+  {
+    size_t a = gmp_urandomm_ui(RandGen::get_gmp_state(), max_row - min_row - 1) + min_row;
+    size_t b = a;
+    while (b == a)
+    {
+      b = gmp_urandomm_ui(RandGen::get_gmp_state(), max_row - min_row - 1) + min_row;
+    }
+    m.move_row(b, a);
+  }
+
+  // 2. triangular transformation matrix with coefficients in -1,0,1
+  m.row_op_begin(min_row, max_row);
+  FT x;
+  for (long a = min_row; a < max_row - 2; ++a)
+  {
+    for (long i = 0; i < density; i++)
+    {
+      size_t b = gmp_urandomm_ui(RandGen::get_gmp_state(), max_row - (a + 1) - 1) + a + 1;
+      if (gmp_urandomm_ui(RandGen::get_gmp_state(), 2))
+        m.row_add(a, b);
+      else
+        m.row_sub(a, b);
+    }
+  }
+  m.row_op_end(min_row, max_row);
+
+  return;
+}
+
+template <class ZT, class FT>
+const PruningParams &BKZReduction<ZT, FT>::get_pruning(int kappa, unsigned int block_size,
+                                                       const BKZParam &par) const
+{
+
+  FPLLL_DEBUG_CHECK(param.strategies.size() > block_size);
+
+  Strategy &strat = par.strategies[block_size];
+
+  long max_dist_expo;
+  FT max_dist    = m.get_r_exp(kappa, kappa, max_dist_expo);
+  FT gh_max_dist = max_dist;
+  FT root_det    = m.get_root_det(kappa, kappa + block_size);
+  adjust_radius_to_gh_bound(gh_max_dist, max_dist_expo, block_size, root_det, 1.0);
+  return strat.get_pruning(max_dist.get_d() * pow(2, max_dist_expo),
+                           gh_max_dist.get_d() * pow(2, max_dist_expo));
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::svp_preprocessing(int kappa, unsigned int block_size,
+                                             const BKZParam &param)
+{
+  bool clean = true;
+
+  FPLLL_DEBUG_CHECK(param.strategies.size() > block_size);
+
+  int lll_start = (param.flags & BKZ_BOUNDED_LLL) ? kappa : 0;
+  if (!lll_obj.lll(lll_start, lll_start, kappa + block_size, 0))
+  {
+    throw std::runtime_error(RED_STATUS_STR[lll_obj.status]);
+  }
+  if (lll_obj.n_swaps > 0)
+    clean = false;
+
+  // run one tour of recursive preprocessing
+  auto &preproc = param.strategies[block_size].preprocessing_block_sizes;
+  for (auto it = preproc.begin(); it != preproc.end(); ++it)
+  {
+    int dummy_kappa_max = num_rows;
+    BKZParam prepar     = BKZParam(*it, param.strategies, LLL_DEF_DELTA, BKZ_GH_BND);
+    clean &= tour(0, dummy_kappa_max, prepar, kappa, kappa + block_size);
+  }
+
+  return clean;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::svp_postprocessing(int kappa, int block_size, const vector<FT> &solution,
+                                              bool dual)
+{
+  // Is it already in the basis ?
+  int nz_vectors = 0, i_vector = -1;
+  for (int i = block_size - 1; i >= 0; i--)
+  {
+    if (!solution[i].is_zero())
+    {
+      nz_vectors++;
+      if (i_vector == -1 && fabs(solution[i].get_d()) == 1)
+        i_vector = i;
+    }
+  }
+  // nz_vectors is the number of nonzero coordinates
+  // i_vector is the largest index for a \pm 1 coordinate
+  FPLLL_DEBUG_CHECK(nz_vectors > 0);
+
+  int pos = dual ? kappa + block_size - 1 : kappa;
+  if (nz_vectors == 1)
+  {
+    // Yes, it is another vector
+    FPLLL_DEBUG_CHECK(i_vector != -1 && i_vector != (pos - kappa));
+    m.move_row(kappa + i_vector, pos);
+  }
+  else if (i_vector != -1)
+  {
+    // No, but one coordinate is equal to \pm 1, we'll
+    // just compute the new vector in that position.
+    int sol_i = solution[i_vector].get_si();
+    if (dual)
+    {
+      sol_i *= -1;
+      m.row_op_begin(kappa, kappa + block_size);
+    }
+    else
+    {
+      // in case of primal reduction, we can restrict invalidation to
+      // the one vector we're adding rows to
+      m.row_op_begin(kappa + i_vector, kappa + i_vector + 1);
+    }
+
+    for (int i = 0; i < block_size; ++i)
+    {
+      if (!solution[i].is_zero() && (i != i_vector))
+      {
+        if (dual)
+        {
+          m.row_addmul(kappa + i, kappa + i_vector, sol_i * solution[i]);
+        }
+        else
+        {
+          m.row_addmul(kappa + i_vector, kappa + i, sol_i * solution[i]);
+        }
+      }
+    }
+
+    if (dual)
+    {
+      m.row_op_end(kappa, kappa + block_size);
+    }
+    else
+    {
+      m.row_op_end(kappa + i_vector, kappa + i_vector + 1);
+    }
+
+    m.move_row(kappa + i_vector, pos);
+  }
+  else
+  {
+    // No, general case
+    svp_postprocessing_generic(kappa, block_size, solution, dual);
+  }
+  return false;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::svp_postprocessing_generic(int kappa, int block_size,
+                                                      const vector<FT> &solution, bool dual)
+{
+  vector<FT> x = solution;
+  int d        = block_size;
+  // don't want to deal with negativ coefficients
+  for (int i = 0; i < d; i++)
+  {
+    if (x[i] < 0)
+    {
+      x[i].neg(x[i]);
+      m.negate_row_of_b(i + kappa);
+    }
+  }
+
+  m.row_op_begin(kappa, kappa + d);
+  // tree based gcd computation on x, performing operations also on b
+  // (or the dual operations in case of primal [sounds weird,
+  // but is correct] svp reduction)
+  int off = 1;
+  int k;
+  while (off < d)
+  {
+    k = d - 1;
+    while (k - off >= 0)
+    {
+      if (!(x[k].is_zero() && x[k - off].is_zero()))
+      {
+        if (x[k] < x[k - off])
+        {
+          x[k].swap(x[k - off]);
+          m.row_swap(kappa + k - off, kappa + k);
+        }
+
+        while (!x[k - off].is_zero())
+        {
+          while (x[k - off] <= x[k])
+          {
+            x[k] = x[k] - x[k - off];
+            if (dual)
+            {
+              m.row_sub(kappa + k, kappa + k - off);
+            }
+            else
+            {
+              m.row_add(kappa + k - off, kappa + k);
+            }
+          }
+
+          x[k].swap(x[k - off]);
+          m.row_swap(kappa + k - off, kappa + k);
+        }
+      }
+      k -= 2 * off;
+    }
+    off *= 2;
+  }
+  m.row_op_end(kappa, kappa + d);
+
+  // the gcd computation will leave the desired vector in last
+  // position, so in case of primal reduction we need to move it up
+  if (!dual)
+  {
+    m.move_row(kappa + d - 1, kappa);
+  }
+  return false;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::svp_reduction(int kappa, int block_size, const BKZParam &par, bool dual)
+{
+  int first = dual ? kappa + block_size - 1 : kappa;
+
+  // ensure we are computing something sensible.
+  // note that the size reduction here is required, since
+  // we're calling this function on unreduced blocks at times
+  // (e.g. in bkz, after the previous block was reduced by a vector
+  // already in the basis). if size reduction is not called,
+  // old_first might be incorrect (e.g. close to 0) and the function
+  // will return an incorrect clean flag
+  // WARNING: do not try to increase the size reduction beyond first.
+  // GSO might be invalid beyond this and this can cause numerical issues
+  // and even nullpointers!
+  if (!lll_obj.size_reduction(0, first + 1, 0))
+  {
+    throw std::runtime_error(RED_STATUS_STR[lll_obj.status]);
+  }
+  FT old_first;
+  long old_first_expo;
+  old_first = FT(m.get_r_exp(first, first, old_first_expo));
+
+  bool rerandomize             = false;
+  double remaining_probability = 1.0;
+
+  while (remaining_probability > 1. - par.min_success_probability)
+  {
+    if (rerandomize)
+    {
+      rerandomize_block(kappa + 1, kappa + block_size, par.rerandomization_density);
+    }
+
+    svp_preprocessing(kappa, block_size, par);
+
+    // compute enumeration radius
+    long max_dist_expo;
+    FT max_dist = m.get_r_exp(first, first, max_dist_expo);
+    if (dual)
+    {
+      max_dist.pow_si(max_dist, -1, GMP_RNDU);
+      max_dist_expo *= -1;
+    }
+    max_dist *= delta;
+
+    if ((par.flags & BKZ_GH_BND) && block_size > 30)
+    {
+      FT root_det = m.get_root_det(kappa, kappa + block_size);
+      adjust_radius_to_gh_bound(max_dist, max_dist_expo, block_size, root_det, par.gh_factor);
+    }
+
+    const PruningParams &pruning = get_pruning(kappa, block_size, par);
+
+    FPLLL_DEBUG_CHECK(pruning.metric == PRUNER_METRIC_PROBABILITY_OF_SHORTEST)
+    evaluator.solutions.clear();
+    Enumeration<ZT, FT> enum_obj(m, evaluator);
+    enum_obj.enumerate(kappa, kappa + block_size, max_dist, max_dist_expo, vector<FT>(),
+                       vector<enumxt>(), pruning.coefficients, dual);
+    nodes += enum_obj.get_nodes();
+
+    if (!evaluator.empty())
+    {
+      svp_postprocessing(kappa, block_size, evaluator.begin()->second, dual);
+      rerandomize = false;
+    }
+    else
+    {
+      rerandomize = true;
+    }
+    remaining_probability *= (1 - pruning.expectation);
+  }
+
+  if (!lll_obj.size_reduction(0, first + 1, 0))
+  {
+    throw std::runtime_error(RED_STATUS_STR[lll_obj.status]);
+  }
+
+  // in order to check if we made progress, we compare the new shortest vector to the
+  // old one (note that simply checking clean flags is not sufficient since
+  // preprocessing can have changed things but we don't know if it made progress)
+  long new_first_expo;
+  FT new_first = m.get_r_exp(first, first, new_first_expo);
+  new_first.mul_2si(new_first, new_first_expo - old_first_expo);
+  return (dual) ? (old_first >= new_first) : (old_first <= new_first);
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::tour(const int loop, int &kappa_max, const BKZParam &par, int min_row,
+                                int max_row)
+{
+  bool clean = true;
+  clean &= trunc_tour(kappa_max, par, min_row, max_row);
+  clean &= hkz(kappa_max, par, max(max_row - par.block_size, 0), max_row);
+
+  if (par.flags & BKZ_VERBOSE)
+  {
+    print_tour(loop, min_row, max_row);
+  }
+
+  if (par.flags & BKZ_DUMP_GSO)
+  {
+    dump_gso(par.dump_gso_filename, true, "End of BKZ loop", loop,
+             (cputime() - cputime_start) * 0.001);
+  }
+
+  // Symmetrize the Gram matrix
+  if (m.enable_int_gram)
+    m.symmetrize_g();
+
+  return clean;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::trunc_tour(int &kappa_max, const BKZParam &par, int min_row, int max_row)
+{
+  bool clean     = true;
+  int block_size = par.block_size;
+  for (int kappa = min_row; kappa < max_row - block_size; ++kappa)
+  {
+    clean &= svp_reduction(kappa, block_size, par);
+    if ((par.flags & BKZ_VERBOSE) && kappa_max < kappa && clean)
+    {
+      cerr << "Block [1-" << setw(4) << kappa + 1 << "] BKZ-" << setw(0) << par.block_size
+           << " reduced for the first time" << endl;
+      kappa_max = kappa;
+    }
+  }
+
+  return clean;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::trunc_dtour(const BKZParam &par, int min_row, int max_row)
+{
+  bool clean     = true;
+  int block_size = par.block_size;
+
+  for (int kappa = max_row - block_size; kappa > min_row; --kappa)
+  {
+    clean &= svp_reduction(kappa, block_size, par, true);
+  }
+
+  return clean;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::hkz(int &kappa_max, const BKZParam &param, int min_row, int max_row)
+{
+  bool clean = true;
+  for (int kappa = min_row; kappa < max_row - 1; ++kappa)
+  {
+    int block_size = max_row - kappa;
+    clean &= svp_reduction(kappa, block_size, param);
+    if ((param.flags & BKZ_VERBOSE) && kappa_max < kappa && clean)
+    {
+      cerr << "Block [1-" << setw(4) << kappa + 1 << "] BKZ-" << setw(0) << param.block_size
+           << " reduced for the first time" << endl;
+      kappa_max = kappa;
+    }
+  }
+
+  // this line fixes fpylll issue 73 with stalling BKZ instances
+  // test basis: tests/lattices/stalling_93_53.txt. Test with command
+  // fplll -a bkz -b 53 -s strategies/default.json -f double tests/lattices/stalling_93_53.txt
+  lll_obj.size_reduction(max_row - 1, max_row, max_row - 2);
+
+  return clean;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::sd_tour(const int loop, const BKZParam &par, int min_row, int max_row)
+{
+  int dummy_kappa_max = num_rows;
+  bool clean          = true;
+  clean &= trunc_dtour(par, min_row, max_row);
+  clean &= trunc_tour(dummy_kappa_max, par, min_row, max_row);
+
+  if (par.flags & BKZ_VERBOSE)
+  {
+    print_tour(loop, min_row, max_row);
+  }
+
+  if (par.flags & BKZ_DUMP_GSO)
+  {
+    dump_gso(par.dump_gso_filename, true, "End of SD-BKZ loop", loop,
+             (cputime() - cputime_start) * 0.001);
+  }
+
+  return clean;
+}
+
+template <class ZT, class FT>
+bool BKZReduction<ZT, FT>::slide_tour(const int loop, const BKZParam &par, int min_row, int max_row)
+{
+  int p = (max_row - min_row) / par.block_size;
+  if ((max_row - min_row) % par.block_size)
+    ++p;
+  bool clean;  // this clean variable is only for the inner loop of slide reduction
+  do
+  {
+    clean = true;
+    for (int i = 0; i < p; ++i)
+    {
+      int kappa      = min_row + i * par.block_size;
+      int block_size = min(max_row - kappa, par.block_size);
+      clean &= svp_reduction(kappa, block_size, par);
+    }
+    // SVP reduction takes care of the LLL reduction if BKZ_BOUNDED_LLL is off
+    if (par.flags & BKZ_BOUNDED_LLL)
+    {
+      if (!lll_obj.lll(min_row, min_row, max_row, 0))
+      {
+        throw std::runtime_error(RED_STATUS_STR[lll_obj.status]);
+      }
+      if (lll_obj.n_swaps > 0)
+      {
+        clean = false;
+      }
+    }
+  } while (!clean);
+
+  for (int i = 0; i < p - 1; ++i)
+  {
+    int kappa = min_row + i * par.block_size + 1;
+    svp_reduction(kappa, par.block_size, par, true);
+  }
+
+  FT new_potential = m.get_slide_potential(min_row, max_row, par.block_size);
+
+  if (par.flags & BKZ_VERBOSE)
+  {
+    print_tour(loop, min_row, max_row);
+  }
+
+  if (par.flags & BKZ_DUMP_GSO)
+  {
+    dump_gso(par.dump_gso_filename, true, "End of SLD loop", loop,
+             (cputime() - cputime_start) * 0.001);
+  }
+
+  // we check the potential function to see if we made progress
+  if (new_potential >= sld_potential)
+    return true;
+
+  sld_potential = new_potential;
+  return false;
+}
+
+template <class ZT, class FT> bool BKZReduction<ZT, FT>::bkz()
+{
+  int flags        = param.flags;
+  int final_status = RED_SUCCESS;
+  nodes            = 0;
+  bool sd          = (flags & BKZ_SD_VARIANT);
+  bool sld         = (flags & BKZ_SLD_RED);
+  algorithm        = sd ? "SD-BKZ" : sld ? "SLD" : "BKZ";
+
+  if (sd && sld)
+  {
+    throw std::runtime_error("Invalid flags: SD-BKZ and Slide reduction are mutually exclusive!");
+  }
+
+  if (flags & BKZ_DUMP_GSO)
+  {
+    dump_gso(param.dump_gso_filename, false, "Input", -1, 0.0);
+  }
+
+  if (param.block_size < 2)
+    return set_status(RED_SUCCESS);
+
+  int i = 0;
+
+  BKZAutoAbort<ZT, FT> auto_abort(m, num_rows);
+
+  if (sd && !(flags & (BKZ_MAX_LOOPS | BKZ_MAX_TIME | BKZ_AUTO_ABORT)))
+  {
+    cerr << "Warning: SD Variant of BKZ requires explicit termination condition. Turning auto "
+            "abort on!"
+         << endl;
+    flags |= BKZ_AUTO_ABORT;
+  }
+
+  if (flags & BKZ_VERBOSE)
+  {
+    cerr << "Entering " << algorithm << ":" << endl;
+    print_params(param, cerr);
+    cerr << endl;
+  }
+  cputime_start = cputime();
+
+  m.discover_all_rows();
+
+  if (sld)
+  {
+    m.update_gso();
+    sld_potential = m.get_slide_potential(0, num_rows, param.block_size);
+  }
+
+  // the following is necessary, since sd-bkz starts with a dual tour and
+  // svp_reduction calls size_reduction, which needs to be preceeded by a
+  // call to lll lower blocks to avoid seg faults
+  if (sd)
+    lll_obj.lll(0, 0, num_rows, 0);
+
+  int kappa_max = -1;
+  bool clean    = true;
+  for (i = 0;; ++i)
+  {
+    if ((flags & BKZ_MAX_LOOPS) && i >= param.max_loops)
+    {
+      final_status = RED_BKZ_LOOPS_LIMIT;
+      break;
+    }
+    if ((flags & BKZ_MAX_TIME) && (cputime() - cputime_start) * 0.001 >= param.max_time)
+    {
+      final_status = RED_BKZ_TIME_LIMIT;
+      break;
+    }
+    if ((flags & BKZ_AUTO_ABORT) &&
+        auto_abort.test_abort(param.auto_abort_scale, param.auto_abort_max_no_dec))
+    {
+      break;
+    }
+
+    try
+    {
+      if (sd)
+      {
+        clean = sd_tour(i, param, 0, num_rows);
+      }
+      else if (sld)
+      {
+        clean = slide_tour(i, param, 0, num_rows);
+      }
+      else
+      {
+        clean = tour(i, kappa_max, param, 0, num_rows);
+      }
+    }
+    catch (RedStatus &e)
+    {
+      return set_status(e);
+    }
+
+    // if we do hkz reduction, we only need one tour
+    if (clean || param.block_size >= num_rows)
+      break;
+  }
+
+  // some post processing
+  int dummy_kappa_max = num_rows;
+  if (sd)
+  {
+    try
+    {
+      // hkz reduce the last window, which sd leaves unreduced
+      hkz(dummy_kappa_max, param, num_rows - param.block_size, num_rows);
+      if (flags & BKZ_DUMP_GSO)
+      {
+        print_tour(i, 0, num_rows);
+      }
+    }
+    catch (RedStatus &e)
+    {
+      return set_status(e);
+    }
+  }
+  if (sld)
+  {
+    try
+    {
+      // hkz reduce the blocks (which are otherwise only svp and dual svp reduced)
+      int p = num_rows / param.block_size;
+      if (num_rows % param.block_size)
+        ++p;
+      for (int j = 0; j < p; ++j)
+      {
+        int kappa = j * param.block_size + 1;
+        int end   = min(num_rows, kappa + param.block_size - 1);
+        hkz(dummy_kappa_max, param, kappa, end);
+      }
+      if (flags & BKZ_DUMP_GSO)
+      {
+        print_tour(i, 0, num_rows);
+      }
+    }
+    catch (RedStatus &e)
+    {
+      return set_status(e);
+    }
+  }
+
+  if (flags & BKZ_DUMP_GSO)
+  {
+    dump_gso(param.dump_gso_filename, true, "Output", -1, (cputime() - cputime_start) * 0.001);
+  }
+  return set_status(final_status);
+}
+
+template <class ZT, class FT>
+void BKZReduction<ZT, FT>::print_tour(const int loop, int min_row, int max_row)
+{
+  FT r0;
+  FP_NR<mpfr_t> fr0;
+  long expo;
+  r0  = m.get_r_exp(min_row, min_row, expo);
+  fr0 = r0.get_d();
+  fr0.mul_2si(fr0, expo);
+  cerr << "End of " << algorithm << " loop " << std::setw(4) << loop << ", time = " << std::fixed
+       << std::setw(9) << std::setprecision(3) << (cputime() - cputime_start) * 0.001 << "s";
+  cerr << ", r_" << min_row << " = " << fr0;
+  cerr << ", slope = " << std::setw(9) << std::setprecision(6)
+       << m.get_current_slope(min_row, max_row);
+  cerr << ", log2(nodes) = " << std::setw(9) << std::setprecision(6) << log2(nodes) << endl;
+}
+
+template <class ZT, class FT>
+void BKZReduction<ZT, FT>::print_params(const BKZParam &param, ostream &out)
+{
+  out << "block size: " << std::setw(3) << param.block_size << ", ";
+  out << "flags: 0x" << std::setw(4) << setfill('0') << std::hex << param.flags << ", " << std::dec
+      << std::setfill(' ');
+  out << "max_loops: " << std::setw(3) << param.max_loops << ", ";
+  out << "max_time: " << std::setw(0) << std::fixed << std::setprecision(1) << param.max_time
+      << ", ";
+  if (param.flags & BKZ_AUTO_ABORT)
+  {
+    out << "autoAbort: (" << std::setw(0) << std::fixed << std::setprecision(4)
+        << param.auto_abort_scale;
+    out << ", " << std::setw(2) << param.auto_abort_max_no_dec << "), ";
+  }
+  else
+  {
+    out << "autoAbort: (     -,  -), ";
+  }
+  out << endl;
+}
+
+template <class ZT, class FT> bool BKZReduction<ZT, FT>::set_status(int new_status)
+{
+  status = new_status;
+  if (param.flags & BKZ_VERBOSE)
+  {
+    if (status == RED_SUCCESS)
+      cerr << "End of " << algorithm << ": success" << endl;
+    else
+      cerr << "End of " << algorithm << ": failure: " << RED_STATUS_STR[status] << endl;
+  }
+  return status == RED_SUCCESS;
+}
+
+// Generate the json file by hand to generate a flexible human-readable file.
+// TODO: think about use io/json.hpp
+template <class ZT, class FT>
+void BKZReduction<ZT, FT>::dump_gso(const std::string &filename, bool append,
+                                    const std::string &step, const int loop, const double time)
+{
+  ofstream dump;
+  // Enable exceptions
+  dump.exceptions(ios_base::failbit | ios_base::badbit);
+
+  try
+  {
+    if (append)
+    {
+      dump.open(filename.c_str(), std::ios_base::app);
+    }
+    else
+    {
+      dump.open(filename.c_str());
+      dump << "[" << endl;
+    }
+  }
+  catch (const ios_base::failure &e)
+  {
+    cerr << "Cannot open " << filename << endl;
+    throw;
+  }
+
+  try
+  {
+    dump << string(8, ' ') << "{" << endl;
+    dump << string(16, ' ') << "\"step\": \"" << step << "\"," << endl;
+    dump << string(16, ' ') << "\"loop\": " << loop << "," << endl;
+    dump << string(16, ' ') << "\"time\": " << time << "," << endl;
+  }
+  catch (const ios_base::failure &e)
+  {
+    cerr << "Cannot open " << filename << endl;
+    throw;
+  }
+
+  FT f, log_f;
+  long expo;
+  stringstream ss;
+  for (int i = 0; i < num_rows; i++)
+  {
+    m.update_gso_row(i);
+    f = m.get_r_exp(i, i, expo);
+    log_f.log(f, GMP_RNDU);
+    ss << std::setprecision(8) << log_f.get_d() + expo * std::log(2.0) << ", ";
+  }
+  string s = ss.str();
+  try
+  {
+    dump << string(16, ' ') << "\"norms\": [" << s.substr(0, s.size() - 2) << "]" << endl;
+    dump << string(8, ' ') << "}";
+    if (step.compare("Output") == 0)
+    {
+      dump << endl << "]";
+    }
+    else
+    {
+      dump << "," << endl;
+    }
+  }
+  catch (const ios_base::failure &e)
+  {
+    cerr << "Cannot open " << filename << endl;
+    throw;
+  }
+
+  dump.close();
+}
+
+template <class ZT, class FT> bool BKZAutoAbort<ZT, FT>::test_abort(double scale, int maxNoDec)
+{
+  double new_slope = -m.get_current_slope(start_row, num_rows);
+  if (no_dec == -1 || new_slope < scale * old_slope)
+    no_dec = 0;
+  else
+    no_dec++;
+  old_slope = min(old_slope, new_slope);
+  return no_dec >= maxNoDec;
+}
+
+// call LLLReduction() and then BKZReduction.
+template <class FT>
+int bkz_reduction_f(ZZ_mat<mpz_t> &b, const BKZParam &param, int sel_ft, double lll_delta,
+                    ZZ_mat<mpz_t> &u, ZZ_mat<mpz_t> &u_inv)
+{
+  int gso_flags = 0;
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+  if (sel_ft == FT_DOUBLE || sel_ft == FT_LONG_DOUBLE)
+    gso_flags |= GSO_ROW_EXPO;
+  ZZ_mat<long> bl;
+  // we check if we can convert the basis to long integers for performance
+  if (convert<long, mpz_t>(bl, b, 10))
+  {
+    ZZ_mat<long> ul;
+    convert<long, mpz_t>(ul, u, 0);
+    ZZ_mat<long> ul_inv;
+    convert<long, mpz_t>(ul_inv, u_inv, 0);
+
+    MatGSO<Z_NR<long>, FT> m_gso(bl, ul, ul_inv, gso_flags);
+    LLLReduction<Z_NR<long>, FT> lll_obj(m_gso, lll_delta, LLL_DEF_ETA, LLL_DEFAULT);
+    BKZReduction<Z_NR<long>, FT> bkz_obj(m_gso, lll_obj, param);
+    bkz_obj.bkz();
+
+    convert<mpz_t, long>(b, bl, 0);
+    convert<mpz_t, long>(u, ul, 0);
+    convert<mpz_t, long>(u_inv, ul_inv, 0);
+    return bkz_obj.status;
+  }
+  else
+  {
+    MatGSO<Z_NR<mpz_t>, FT> m_gso(b, u, u_inv, gso_flags);
+    LLLReduction<Z_NR<mpz_t>, FT> lll_obj(m_gso, lll_delta, LLL_DEF_ETA, LLL_DEFAULT);
+    BKZReduction<Z_NR<mpz_t>, FT> bkz_obj(m_gso, lll_obj, param);
+    bkz_obj.bkz();
+    return bkz_obj.status;
+  }
+}
+
+// interface called from call_bkz() from main.cpp.
+int bkz_reduction(ZZ_mat<mpz_t> *B, ZZ_mat<mpz_t> *U, const BKZParam &param, FloatType float_type,
+                  int precision)
+{
+  ZZ_mat<mpz_t> empty_mat;
+  ZZ_mat<mpz_t> &u     = U ? *U : empty_mat;
+  ZZ_mat<mpz_t> &u_inv = empty_mat;
+  FPLLL_CHECK(B, "B == NULL in bkzReduction");
+
+  if (U && (!u.empty()))
+  {
+    u.gen_identity(B->get_rows());
+  }
+
+  double lll_delta = param.delta < 1 ? param.delta : LLL_DEF_DELTA;
+
+  FloatType sel_ft = (float_type != FT_DEFAULT) ? float_type : FT_DOUBLE;
+  FPLLL_CHECK(!(sel_ft == FT_MPFR && precision == 0),
+              "Missing precision for BKZ with floating point type mpfr");
+
+  /* lllwrapper (no FloatType needed, -m ignored) */
+  if (param.flags & BKZ_NO_LLL)
+    zeros_last(*B, u, u_inv);
+  else
+  {
+    Wrapper wrapper(*B, u, u_inv, lll_delta, LLL_DEF_ETA, LLL_DEFAULT);
+    if (!wrapper.lll())
+      return wrapper.status;
+  }
+
+  /* bkz (with float_type) */
+  int status;
+  if (sel_ft == FT_DOUBLE)
+  {
+    status = bkz_reduction_f<FP_NR<double>>(*B, param, sel_ft, lll_delta, u, u_inv);
+  }
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  else if (sel_ft == FT_LONG_DOUBLE)
+  {
+    status = bkz_reduction_f<FP_NR<long double>>(*B, param, sel_ft, lll_delta, u, u_inv);
+  }
+#endif
+#ifdef FPLLL_WITH_DPE
+  else if (sel_ft == FT_DPE)
+  {
+    status = bkz_reduction_f<FP_NR<dpe_t>>(*B, param, sel_ft, lll_delta, u, u_inv);
+  }
+#endif
+#ifdef FPLLL_WITH_QD
+  else if (sel_ft == FT_DD)
+  {
+    status = bkz_reduction_f<FP_NR<dd_real>>(*B, param, sel_ft, lll_delta, u, u_inv);
+  }
+  else if (sel_ft == FT_QD)
+  {
+    status = bkz_reduction_f<FP_NR<qd_real>>(*B, param, sel_ft, lll_delta, u, u_inv);
+  }
+#endif
+  else if (sel_ft == FT_MPFR)
+  {
+    int old_prec = FP_NR<mpfr_t>::set_prec(precision);
+    status       = bkz_reduction_f<FP_NR<mpfr_t>>(*B, param, sel_ft, lll_delta, u, u_inv);
+    FP_NR<mpfr_t>::set_prec(old_prec);
+  }
+  else
+  {
+    if (0 <= sel_ft && sel_ft <= FT_MPFR)
+    {
+      // it's a valid choice but we don't have support for it
+      FPLLL_ABORT("Compiled without support for BKZ reduction with " << FLOAT_TYPE_STR[sel_ft]);
+    }
+    else
+    {
+      // it's an invalid choice
+      FPLLL_ABORT("Floating point type " << sel_ft << "not supported in BKZ");
+    }
+  }
+  zeros_first(*B, u, u_inv);
+  return status;
+}
+
+int bkz_reduction(ZZ_mat<mpz_t> &b, int block_size, int flags, FloatType float_type, int precision)
+{
+  vector<Strategy> strategies;
+  BKZParam param(block_size, strategies);
+  param.flags = flags;
+  return bkz_reduction(&b, NULL, param, float_type, precision);
+}
+
+int bkz_reduction(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, int block_size, int flags,
+                  FloatType float_type, int precision)
+{
+  vector<Strategy> strategies;
+  BKZParam param(block_size, strategies);
+  param.flags = flags;
+  return bkz_reduction(&b, &u, param, float_type, precision);
+}
+
+int hkz_reduction(ZZ_mat<mpz_t> &b, int flags, FloatType float_type, int precision)
+{
+  vector<Strategy> strategies;
+  BKZParam param(b.get_rows(), strategies);
+  param.block_size = b.get_rows();
+  param.delta      = 1;
+  if (flags & HKZ_VERBOSE)
+    param.flags |= BKZ_VERBOSE;
+  return bkz_reduction(&b, NULL, param, float_type, precision);
+}
+
+/** enforce instantiation of complete templates **/
+
+template class BKZReduction<Z_NR<mpz_t>, FP_NR<double>>;
+template class BKZAutoAbort<Z_NR<mpz_t>, FP_NR<double>>;
+
+template class BKZReduction<Z_NR<long>, FP_NR<double>>;
+template class BKZAutoAbort<Z_NR<long>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class BKZReduction<Z_NR<mpz_t>, FP_NR<long double>>;
+template class BKZAutoAbort<Z_NR<mpz_t>, FP_NR<long double>>;
+
+template class BKZReduction<Z_NR<long>, FP_NR<long double>>;
+template class BKZAutoAbort<Z_NR<long>, FP_NR<long double>>;
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class BKZReduction<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+template class BKZAutoAbort<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+
+template class BKZReduction<Z_NR<long>, FP_NR<dpe_t>>;
+template class BKZAutoAbort<Z_NR<long>, FP_NR<dpe_t>>;
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class BKZReduction<Z_NR<mpz_t>, FP_NR<dd_real>>;
+template class BKZAutoAbort<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template class BKZReduction<Z_NR<mpz_t>, FP_NR<qd_real>>;
+template class BKZAutoAbort<Z_NR<mpz_t>, FP_NR<qd_real>>;
+
+template class BKZReduction<Z_NR<long>, FP_NR<dd_real>>;
+template class BKZAutoAbort<Z_NR<long>, FP_NR<dd_real>>;
+
+template class BKZReduction<Z_NR<long>, FP_NR<qd_real>>;
+template class BKZAutoAbort<Z_NR<long>, FP_NR<qd_real>>;
+#endif
+
+template class BKZReduction<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+template class BKZAutoAbort<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+
+template class BKZReduction<Z_NR<long>, FP_NR<mpfr_t>>;
+template class BKZAutoAbort<Z_NR<long>, FP_NR<mpfr_t>>;
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/bkz.h b/fplll/bkz.h
new file mode 100644 (file)
index 0000000..d5c8d6a
--- /dev/null
@@ -0,0 +1,431 @@
+/* Copyright (C) 2011 Xavier Pujol
+   (C) 2014-2016 Martin R. Albrecht
+   (C) 2016 Michael Walter
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_BKZ_H
+#define FPLLL_BKZ_H
+
+#include "bkz_param.h"
+#include "enum/enumerate.h"
+#include "enum/evaluator.h"
+#include "lll.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+ * @brief Performs a heuristic check if BKZ can be terminated.
+ *
+ * Checks if the slope of the basis hasn't decreased in a while.
+ */
+template <class ZT, class FT> class BKZAutoAbort
+{
+public:
+  /**
+   * @brief Create an BKZAutoAbort object.
+   *
+   * @param m
+   *    GSO object of the basis to be tested
+   * @param num_rows
+   *    the number of vectors to check
+   * @param start_row
+   *    the starting point of the vectors to check
+   */
+  BKZAutoAbort(MatGSOInterface<ZT, FT> &m, int num_rows, int start_row = 0)
+      : m(m), old_slope(numeric_limits<double>::max()), no_dec(-1), num_rows(num_rows),
+        start_row(start_row)
+  {
+  }
+
+  /**
+   * @brief Performs the check
+   *
+   * Performs the actual check by computing the new slope and checks if
+   * it has decreased. Keeps track of the number of times it has not
+   * decreased and returns true if that number is larger than maxNoDec.
+   *
+   * @param scale
+   *    slack parameter on the slope (i.e. slope has to decrease by at
+   *    at least a multiplicative factor of scale)
+   * @param maxNoDec
+   *    the number of successive non-decreases in the slope before true
+   *    is returned
+   *
+   * @returns
+   *    true, if the slope has not decreased for maxNoDec calls
+   *    false otherwise
+   */
+  bool test_abort(double scale = 1.0, int maxNoDec = 5);
+
+private:
+  MatGSOInterface<ZT, FT> &m;
+  double old_slope;
+  int no_dec;
+  int num_rows;
+  int start_row;
+};
+
+/**
+ * @brief The class performing block reduction.
+ *
+ * This class implements BKZ, SD-BKZ and Slide Reduction. For this
+ * it relies on the GSO, LLL, and Enumeration modules. It assumes
+ * that the basis is LLL reduced.
+ **/
+template <class ZT, class FT> class BKZReduction
+{
+  /**
+   * @brief Create a BKZObject
+   *
+   * @param m
+   *    GSO object corresponding to the basis to be reduced
+   * @param lll_obj
+   *    LLL object associated to the same GSO object m
+   * @param param
+   *    parameter object (see bkz_param.h)
+   */
+public:
+  BKZReduction(MatGSOInterface<ZT, FT> &m, LLLReduction<ZT, FT> &lll_obj, const BKZParam &param);
+  ~BKZReduction();
+
+  /**
+   * @brief Preprocesses a block
+   *
+   * Preprocess a block using LLL or stronger recursive preprocessing.
+   *
+   * @param kappa
+   *    start of the block
+   * @param block_size
+   *    size of the block
+   * @param param
+   *    parameter object for the current block size (the parameter object for the recursive
+   *    calls will be created in this function using the information from this object)
+   *@returns
+   *    false if it modified the basis, true otherwise
+   */
+  bool svp_preprocessing(int kappa, unsigned int block_size, const BKZParam &param);
+
+  /**
+   * @brief Inserts given (dual) vector into the basis
+   *
+   * Inserts a (dual) vector into the basis. This function does not
+   * produce any linear dependencies, i.e. the result is a basis with the
+   * specified (dual) vector in the first (resp, last) position, but there are no
+   * guarantees beyond that, i.e. the basis might not be LLL reduced or even
+   * size reduced.
+   *
+   * @param kappa
+   *    start of the block
+   * @param block_size
+   *    size of the block
+   * @param solution
+   *    the coefficients of the (dual) vector in the current (dual) basis
+   * @param dual
+   *    flag specifying if 'solution' is a dual or primal vector and to be
+   *    inserted into the basis or its dual
+   * @returns
+   *    false if it made progress, true otherwise
+   */
+  bool svp_postprocessing(int kappa, int block_size, const vector<FT> &solution, bool dual = false);
+
+  /**
+   * @brief (d)SVP-reduce a block.
+   *
+   * Ensures that the first (resp. last) vector in a block of the (dual) basis
+   * is the shortest vector in the projected lattice generated by the block
+   * (or its dual, resp.). This is implemented using pruned enumeration
+   * with rerandomization. The results returned by the enumeration are inserted using
+   * postprocessing, and so are no guarantees beyond that, i.e. the basis
+   * might not be LLL reduced or even size reduced.
+   *
+   * @param kappa
+   *    start of the block
+   * @param block_size
+   *    size of the block
+   * @param param
+   *    parameter object (may be different from the one in the constructor)
+   * @param dual
+   *    flag specifying if the block is to be SVP or dual SVP reduced.
+   * @returns
+   *    false if it made progress, true otherwise
+   */
+  bool svp_reduction(int kappa, int block_size, const BKZParam &param, bool dual = false);
+
+  /**
+   * @brief Runs a BKZ tour.
+   *
+   * Runs a BKZ tour from min_row to max_row by successively calling svp_reduction.
+   *
+   * @param loop
+   *    counter indicating the iteration, only for reporting purposes
+   * @param kappa_max
+   *    the largest kappa s.t. the block from min_row to kappa is BKZ reduced, also
+   *    only for reporting purposes
+   * @param param
+   *    parameter object
+   * @param min_row
+   *    start of the tour
+   * @param max_row
+   *    end of the tour
+   * @return
+   *    false if it made progress, true otherwise
+   */
+  bool tour(const int loop, int &kappa_max, const BKZParam &param, int min_row, int max_row);
+
+  /**
+   * @brief Runs a SD-BKZ tour.
+   *
+   * Runs a dual BKZ tour from max_row to min_row and a BKZ tour from min_row to max_row
+   * by successively calling svp_reduction.
+   *
+   * @param loop
+   *    counter indicating the iteration, only for reporting purposes
+   * @param param
+   *    parameter object
+   * @param min_row
+   *    start of the tour
+   * @param max_row
+   *    end of the tour
+   * @return
+   *    false if it made progress, true otherwise
+   */
+  bool sd_tour(const int loop, const BKZParam &param, int min_row, int max_row);
+
+  /**
+   * @brief HKZ reduces a block.
+   *
+   * Runs HKZ reduction from min_row to max_row by successively calling svp_reduction.
+   *
+   * @param kappa_max
+   *    the largest kappa s.t. the block from min_row to kappa is BKZ reduced, also
+   *    only for reporting purposes
+   * @param param
+   *    parameter object
+   * @param min_row
+   *    start of the tour
+   * @param max_row
+   *    end of the tour
+   * @return
+   *    false if it made progress, true otherwise
+   */
+  bool hkz(int &kappa_max, const BKZParam &param, int min_row, int max_row);
+
+  /**
+   * @brief Runs a tour of slide reduction.
+   *
+   * Runs a tour of slide reduction from min_row to max_row by
+   *  1) alternating LLL and svp reductions on disjoint blocks
+   *  2) dual svp reductions on slightly shifted disjoint blocks
+   *
+   * @param loop
+   *    counter indicating the iteration, only for reporting purposes
+   * @param param
+   *    parameter object
+   * @param min_row
+   *    start of the tour
+   * @param max_row
+   *    end of the tour
+   * @return
+   *    false if it made progress, true otherwise
+   */
+  bool slide_tour(const int loop, const BKZParam &param, int min_row, int max_row);
+
+  /**
+   * @brief Runs the main loop of block reduction.
+   *
+   * Top level function implementing block reduction by repeatedly
+   * calling the corresponding tour and regularly checking terminating
+   * conditions. Also performs some postprocessing.
+   *
+   * @return
+   *    true if the reduction was successful, false otherwise.
+   */
+  bool bkz();
+
+  /** Randomize basis between from ``min_row`` and ``max_row`` (exclusive)
+
+      1. permute rows
+      2. apply lower triangular matrix with coefficients in -1,0,1
+      3. LLL reduce result
+
+      @param min_row start in this row
+
+      @param max_row stop at this row (exclusive)
+
+      @param density number of non-zero coefficients in lower triangular
+      transformation matrix
+  **/
+
+  void rerandomize_block(int min_row, int max_row, int density);
+
+  /**
+   * @brief Dumps the shape of the basis.
+   *
+   * Writes the specified prefix and shape of the current basis into the specified file.
+   *
+   * @param filename
+   *    name of the file
+   * @param prefix
+   *    string to write into the file before the shape of the basis
+   * @param append
+   *    flag specifying if the shape should be appended to the file (or if the file
+   *    should be overwritten)
+   * **/
+
+  void dump_gso(const std::string &filename, bool append, const std::string &step, const int loop,
+                const double time);
+
+  /**
+   * Status of reduction (see defs.h)
+   */
+  int status;
+
+  /**
+      Number of nodes visited during enumeration.
+  */
+  long nodes;
+
+private:
+  void print_tour(const int loop, int min_row, int max_row);
+  void print_params(const BKZParam &param, ostream &out);
+
+  bool set_status(int new_status);
+
+  const PruningParams &get_pruning(int kappa, unsigned int block_size, const BKZParam &par) const;
+
+  // handles the general case of inserting a vector into the (dual) basis, i.e.
+  // when none of the coefficients are \pm 1
+  bool svp_postprocessing_generic(int kappa, int block_size, const vector<FT> &solution,
+                                  bool dual = false);
+  // a truncated tour: svp reducing from min_row to max_row without decreasing the window
+  // size (simply returns when the last block is reduced)
+  bool trunc_tour(int &kappa_max, const BKZParam &param, int min_row, int max_row);
+  // a truncated dual tour: dual svp reducing from max_row to min_row without decreasing
+  // the window size (simply returns when the first block is reduced)
+  bool trunc_dtour(const BKZParam &param, int min_row, int max_row);
+
+  const BKZParam &param;
+  int num_rows;
+  MatGSOInterface<ZT, FT> &m;
+  LLLReduction<ZT, FT> &lll_obj;
+  // evaluator passed to the enumeration object to handle solutions found
+  FastEvaluator<FT> evaluator;
+  // slack variable for svp reductions
+  FT delta;
+
+  // an acronym for the type of block reduction used, for reporting purposes
+  const char *algorithm;
+  // current value of the potential function as defined in the slide reduction paper
+  // used to reliably determine terminating condition during slide reduction
+  FT sld_potential;
+
+  // Temporary data
+  const vector<FT> empty_target, empty_sub_tree;
+  FT max_dist, delta_max_dist;
+  double cputime_start;
+};
+
+/**
+ * @brief Performs block reduction using BKZParam object.
+ *
+ * @param B
+ *    basis of the lattice to be reduced
+ * @param U
+ *    transformation matrix (pass an empty matrix to ignore this option)
+ * @param param
+ *    parameter object
+ * @param float_type
+ *    specifies the data type used for GSO computations (see defs.h for options)
+ * @param precision
+ *    specifies the precision if float_type=FT_MPFR (and needs to be > 0 in that case)
+ *    ignored otherwise
+ * @return
+ *    the status of the reduction (see defs.h for more information on the status)
+ */
+int bkz_reduction(ZZ_mat<mpz_t> *B, ZZ_mat<mpz_t> *U, const BKZParam &param,
+                  FloatType float_type = FT_DEFAULT, int precision = 0);
+
+/**
+ * @brief Performs block reduction without transformation matrix.
+ *
+ * Creates a parameter object corresponding to the parameters and calls bkz_reduction
+ * on it.
+ *
+ * @param b
+ *    basis of the lattice to be reduced
+ * @param block_size
+ *    block_size of the reduction
+ * @param flags
+ *    different flags for reduction (see defs.h and bkz_param.h for more information)
+ * @param float_type
+ *    specifies the data type used for GSO computations (see defs.h for options)
+ * @param precision
+ *    specifies the precision if float_type=FT_MPFR (and needs to be > 0 in that case)
+ *    ignored otherwise
+ * @return
+ *    the status of the reduction (see defs.h for more information on the status)
+ */
+int bkz_reduction(ZZ_mat<mpz_t> &b, int block_size, int flags = BKZ_DEFAULT,
+                  FloatType float_type = FT_DEFAULT, int precision = 0);
+
+/**
+ * @brief Performs block reduction with transformation matrix.
+ *
+ * Creates a parameter object corresponding to the parameters and calls bkz_reduction
+ * on it.
+ *
+ * @param b
+ *    basis of the lattice to be reduced
+ * @param u
+ *    transformation matrix
+ * @param block_size
+ *    block_size of the reduction
+ * @param flags
+ *    different flags for reduction (see defs.h and bkz_param.h for more information)
+ * @param float_type
+ *    specifies the data type used for GSO computations (see defs.h for options)
+ * @param precision
+ *    specifies the precision if float_type=FT_MPFR (and needs to be > 0 in that case)
+ *    ignored otherwise
+ * @return
+ *    the status of the reduction (see defs.h for more information on the status)
+ */
+int bkz_reduction(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, int block_size, int flags = BKZ_DEFAULT,
+                  FloatType float_type = FT_DEFAULT, int precision = 0);
+
+/**
+ * @brief Performs HKZ reduction.
+ *
+ * Creates a parameter object corresponding to the parameters (and block size equal to
+ * the dimension) and calls bkz_reduction on it.
+ *
+ * @param b
+ *    basis of the lattice to be reduced
+ * @param flags
+ *    flags for reduction (HKZ_DEFAULT or HKZ_VERBOSE)
+ * @param float_type
+ *    specifies the data type used for GSO computations (see defs.h for options)
+ * @param precision
+ *    specifies the precision if float_type=FT_MPFR (and needs to be > 0 in that case)
+ *    ignored otherwise
+ * @return
+ *    the status of the reduction (see defs.h for more information on the status)
+ */
+int hkz_reduction(ZZ_mat<mpz_t> &b, int flags = HKZ_DEFAULT, FloatType float_type = FT_DEFAULT,
+                  int precision = 0);
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/bkz_param.cpp b/fplll/bkz_param.cpp
new file mode 100644 (file)
index 0000000..991d377
--- /dev/null
@@ -0,0 +1,159 @@
+
+#include "bkz_param.h"
+#include "io/json.hpp"
+#include "nr/nr.h"
+#include <cstdio>
+
+using json = nlohmann::json;
+
+FPLLL_BEGIN_NAMESPACE
+
+PruningParams PruningParams::LinearPruningParams(int block_size, int level)
+{
+
+  PruningParams pruning = PruningParams();
+  int start_descent     = block_size - level;
+
+  if (start_descent > block_size)
+    start_descent = block_size;
+
+  if (start_descent < 1)
+    start_descent = 1;
+
+  pruning.coefficients.resize(block_size);
+  for (int k = 0; k < start_descent; k++)
+  {
+    pruning.coefficients[k] = 1.0;
+  }
+  for (int k = 0; k < block_size - start_descent; k++)
+  {
+    pruning.coefficients[start_descent + k] = ((double)(block_size - k - 1)) / block_size;
+  }
+  pruning.gh_factor   = 1.0;
+  pruning.metric      = PRUNER_METRIC_PROBABILITY_OF_SHORTEST;
+  pruning.expectation = fplll::svp_probability<FP_NR<double>>(pruning.coefficients).get_d();
+
+  return pruning;
+}
+
+const std::string &default_strategy_path()
+{
+  static const std::string ret(FPLLL_DEFAULT_STRATEGY_PATH);
+  return ret;
+}
+
+const std::string strategy_full_path(const std::string &strategy_path)
+{
+  if (std::ifstream(strategy_path).good())
+    return strategy_path;
+  std::string path = default_strategy_path() + "/" + strategy_path;
+  if (std::ifstream(path).good())
+    return path;
+  path.clear();
+  return path;
+}
+
+const std::string &default_strategy()
+{
+  static const std::string ret(FPLLL_DEFAULT_STRATEGY);
+  return ret;
+}
+
+const PruningParams &Strategy::get_pruning(double radius, double gh) const
+{
+  double gh_factor    = radius / gh;
+  double closest_dist = pow(2, 80);
+  auto best           = pruning_parameters.begin();
+
+  for (auto it = pruning_parameters.begin(); it != pruning_parameters.end(); ++it)
+  {
+    if (fabs(it->gh_factor - gh_factor) < closest_dist)
+    {
+      closest_dist = fabs(it->gh_factor - gh_factor);
+      best         = it;
+    }
+  }
+
+  return *best;
+}
+
+vector<Strategy> load_strategies_json(const std::string &filename)
+{
+  json js;
+  {
+    std::ifstream fs(filename);
+    if (fs.fail())
+      throw std::runtime_error("Cannot open strategies file.");
+    fs >> js;
+  }
+
+  vector<Strategy> strategies;
+
+  for (auto it = js.begin(); it != js.end(); ++it)
+  {
+    const json &j_strat     = *it;
+    const size_t block_size = j_strat["block_size"];
+    FPLLL_DEBUG_CHECK(block_size < 4096);  // some arbitrary upper limit
+
+    // ensure to add this strategy in the right place
+    while (strategies.size() <= block_size)
+    {
+      strategies.emplace_back();
+    }
+
+    Strategy strategy;
+    strategy.block_size = block_size;
+
+    if (j_strat.find("preprocessing_block_sizes") != j_strat.end())
+    {
+      for (auto p_it = j_strat["preprocessing_block_sizes"].begin();
+           p_it != j_strat["preprocessing_block_sizes"].end(); ++p_it)
+      {
+        if ((*p_it).is_number())
+        {
+          strategy.preprocessing_block_sizes.emplace_back((*p_it).get<int>());
+        }
+        else
+        {
+          strategy.preprocessing_block_sizes.emplace_back((*p_it)["block_size"]);
+        }
+      }
+    }
+
+    if (j_strat.find("pruning_parameters") != j_strat.end())
+    {
+      for (auto p_it = j_strat["pruning_parameters"].begin();
+           p_it != j_strat["pruning_parameters"].end(); ++p_it)
+      {
+        const json &j_prun = *p_it;
+        PruningParams pruning;
+        pruning.gh_factor = j_prun[0];
+
+        for (auto c_it = j_prun[1].begin(); c_it != j_prun[1].end(); ++c_it)
+        {
+          double c = (*c_it);
+          pruning.coefficients.emplace_back(c);
+        }
+        pruning.expectation = j_prun[2];
+        // TODO: don't hardcode success probability as metric
+        pruning.metric = PRUNER_METRIC_PROBABILITY_OF_SHORTEST;
+        FPLLL_DEBUG_CHECK(pruning.expectation > 0.0 && pruning.expectation <= 1.0);
+
+        strategy.pruning_parameters.emplace_back(pruning);
+      }
+    }
+
+    strategies[block_size] = std::move(strategy);
+  }
+
+  // finally, we make sure all strategies are sound
+  for (auto it = strategies.begin(); it != strategies.end(); ++it)
+  {
+    if (it->pruning_parameters.size() == 0)
+      it->pruning_parameters.emplace_back(PruningParams());
+  }
+
+  return strategies;
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/bkz_param.h b/fplll/bkz_param.h
new file mode 100644 (file)
index 0000000..5605c81
--- /dev/null
@@ -0,0 +1,205 @@
+#ifndef BKZ_PARAM_H
+#define BKZ_PARAM_H
+
+/* (C) 2014-2016 Martin Albrecht.
+
+   This file is part of fplll. fplll is free software: you can
+   redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software
+   Foundation, either version 2.1 of the License, or (at your option)
+   any later version.
+
+   fplll is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with fplll. If not, see
+   <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "defs.h"
+#include "pruner/pruner.h"
+#include <string>
+#include <vector>
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+   A strategy covers pruning parameters and preprocessing block_sizes
+*/
+
+class Strategy
+{
+public:
+  size_t block_size;                         //< block size
+  vector<PruningParams> pruning_parameters;  //< Pruning parameters
+  vector<size_t> preprocessing_block_sizes;  //< For each block size we run one tour
+
+  /** Construct an empty strategy
+
+      @note Use this instead of the default constructor. The default
+      constructor does not add default pruning parameters.
+
+   */
+
+  static Strategy EmptyStrategy(size_t block_size)
+  {
+    Strategy strat;
+    strat.block_size = block_size;
+    strat.pruning_parameters.emplace_back(PruningParams());
+    return strat;
+  };
+
+  /** Select the best pruning parameters for the input `radius`. The
+      parameter `gh` is used to establish the ratio between `radius`
+      and the Gaussian heuristic, which is used for sizes.
+
+     @param radius radius of the currently shortest vector
+     @param gh Gaussian heuristic prediction for radius
+
+   */
+
+  const PruningParams &get_pruning(double radius, double gh) const;
+};
+
+class BKZParam
+{
+public:
+  /**
+     @brief Create BKZ parameters
+
+     @param block_size
+        block size for the reduction
+     @param strategies
+        vector of strategies used for pruning and preprocessing
+     @param delta
+        LLL parameter delta
+     @param flags
+        various flags that can be arbitrarily combined (using |):
+          - BKZ_VERBOSE       print additional information during reduction
+          - BKZ_NO_LLL        do not run LLL before block reduction (use at your own risk)
+          - BKZ_MAX_LOOPS     terminate after max_loops iterations
+          - BKZ_MAX_TIME      terminate after max_time time
+          - BKZ_BOUNDED_LLL   only run LLL in current block during SVP preprocessing (use at your
+     own
+     risk)
+          - BKZ_AUTO_ABORT    heuristically terminate the reduction if progress stalls
+          - BKZ_DUMP_GSO      after every iteration write the shape of the current basis to a file
+          - BKZ_GH_BND        use the Gaussian heuristic to reduce the enumeration bound of possible
+          - BKZ_SD_VARIANT    run SD-BKZ
+          - BKZ_SLD_RED       run slide reduction
+     @param max_loops
+        maximum number of loops (or zero to disable this)
+     @param max_time
+        maximum number of time  (or zero to disable this)
+     @param auto_abort_scale
+        auto abort when next tour does not improve slope over `scale`* previous tour
+     @param auto_abort_max_no_dec
+        auto abort when next tour does not improve slope `no_dec` times
+     @param gh_factor
+        set enumeration bound to Gaussian heuristic times `gh_factor`
+     @param min_success_probability
+        minimum success probability in an SVP reduction (when using pruning)
+     @param rerandomization_density
+        the heavier rerandomization, the better our guarantees and costs
+  */
+
+  BKZParam(int block_size, vector<Strategy> &strategies, double delta = LLL_DEF_DELTA,
+           int flags = BKZ_DEFAULT, int max_loops = 0, double max_time = 0,
+           double auto_abort_scale        = BKZ_DEF_AUTO_ABORT_SCALE,
+           int auto_abort_max_no_dec      = BKZ_DEF_AUTO_ABORT_MAX_NO_DEC,
+           double gh_factor               = BKZ_DEF_AUTO_ABORT_MAX_NO_DEC,
+           double min_success_probability = BKZ_DEF_MIN_SUCCESS_PROBABILITY,
+           int rerandomization_density    = BKZ_DEF_RERANDOMIZATION_DENSITY)
+      : block_size(block_size), strategies(strategies), delta(delta), flags(flags),
+        max_loops(max_loops), max_time(max_time), auto_abort_scale(auto_abort_scale),
+        auto_abort_max_no_dec(auto_abort_max_no_dec), gh_factor(gh_factor),
+        dump_gso_filename("gso.json"), min_success_probability(min_success_probability),
+        rerandomization_density(rerandomization_density)
+  {
+
+    // we create dummy strategies
+    if (strategies.empty())
+    {
+      strategies = vector<Strategy>();
+      for (long b = 0; b <= block_size; ++b)
+      {
+        strategies.emplace_back(Strategy::EmptyStrategy(b));
+      }
+    }
+  };
+
+  /** Block size used for enumeration **/
+  int block_size;
+
+  /** Strategies (pruning coefficients, preprocessing)  */
+  vector<Strategy> &strategies;
+
+  /** LLL parameter delta **/
+  double delta;
+
+  /** See BKZFlags **/
+  int flags;
+
+  /** Maximum number of loops to execute **/
+  int max_loops;
+
+  /** Maximum time to spend **/
+  double max_time;
+
+  /** If BKZ_AUTOABORT is set, We abort if `new_slope < auto_abort_scale * old_slope`
+      is true for `auto_abort_max_no_dec` loops.
+   */
+  double auto_abort_scale;
+  int auto_abort_max_no_dec;
+
+  /** If BKZ_GH_BND is set, the enumeration bound will be set to gh_factor times
+      the Gaussian Heuristic
+  */
+  double gh_factor;
+
+  /** If BKZ_DUMP_GSO is set, the norms of the GSO matrix are written to this
+      file after each complete round.
+  */
+  string dump_gso_filename;
+
+  /** minimum success probability when using extreme pruning */
+
+  double min_success_probability;
+
+  /** density of rerandomization operation when using extreme pruning **/
+
+  int rerandomization_density;
+};
+
+/**
+   Load BKZ pruning and preprocessing strategies from a json file.
+
+   @note All parameters except pruning and preprocessing are silently ignored.
+*/
+
+vector<Strategy> load_strategies_json(const std::string &filename);
+
+/**
+   Return default directory to search for strategies (if any)
+*/
+
+const std::string &default_strategy_path();
+
+/**
+   Return default strategy (if any)
+*/
+
+const std::string &default_strategy();
+
+/**
+   Attempt to expand strategy path to full path
+*/
+
+const std::string strategy_full_path(const string &strategy_path);
+
+FPLLL_END_NAMESPACE
+#endif /* BKZ_PARAM_H */
diff --git a/fplll/defs.h b/fplll/defs.h
new file mode 100644 (file)
index 0000000..74d9902
--- /dev/null
@@ -0,0 +1,316 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2013 Damien Stehle
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_DEFS_H
+#define FPLLL_DEFS_H
+
+#ifndef __CYGWIN__
+#define FPLLL_WITH_LONG_DOUBLE
+#endif
+
+#define FPLLL_WITH_DPE
+#define FPLLL_WITH_ZDOUBLE
+#define FPLLL_WITH_ZLONG
+#define FPLLL_WITH_GETRUSAGE
+
+#include <algorithm>
+#include <climits>
+#include <cmath>
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctime>
+#include <fstream>
+#include <iostream>
+#include <limits>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+
+#ifdef FPLLL_WITH_GETRUSAGE
+#include <sys/resource.h>
+#include <sys/time.h>
+#include <unistd.h>
+#endif
+
+#include "fplll_config.h"
+#ifdef HAVE_LIBMPIR
+#include <mpir.h>
+#endif
+#ifdef HAVE_LIBGMP
+#include <gmp.h>
+#endif
+#include <mpfr.h>
+#ifdef FPLLL_WITH_DPE
+#include "nr/dpe.h"
+#endif
+
+#if defined(__sun) || defined(__CYGWIN__)
+#include <ieeefp.h>
+extern "C" long double ldexpl(long double x, int exp);
+#ifndef NAN
+#define NAN __builtin_nanf("")
+#endif
+#endif
+
+#define FPLLL_INFO(x)                                                                              \
+  {                                                                                                \
+    cerr << x << endl;                                                                             \
+  }
+#define FPLLL_ABORT(x)                                                                             \
+  {                                                                                                \
+    cerr << "fplll: " << x << endl;                                                                \
+    abort();                                                                                       \
+  }
+#define FPLLL_CHECK(x, y)                                                                          \
+  {                                                                                                \
+    if (!(x))                                                                                      \
+      FPLLL_ABORT(y);                                                                              \
+  }
+
+#ifdef DEBUG
+#include <cassert>
+extern int debug_depth;
+#define FPLLL_TRACE(x) std::cerr << "TRACE: " << std::string(debug_depth * 2, ' ') << x << std::endl
+struct DebugTracer
+{
+  DebugTracer(const char *f) : f(f) { debug_depth++; }
+  ~DebugTracer()
+  {
+    debug_depth--;
+    FPLLL_TRACE("</" << f << ">");
+  }
+  std::string f;
+};
+#define FPLLL_DEBUG_ABORT(x) FPLLL_ABORT(x)
+#define FPLLL_DEBUG_CHECK(x) assert(x);
+#define FPLLL_TRACE_IN(x)                                                                          \
+  FPLLL_TRACE("<" << __func__ << " " << x << ">");                                                 \
+  DebugTracer debugTracer(__func__);
+#define FPLLL_DEBUG_SAFEVECT
+#else
+#define FPLLL_DEBUG_ABORT(x)
+#define FPLLL_DEBUG_CHECK(x)
+#define FPLLL_TRACE(x)
+#define FPLLL_TRACE_IN(x)
+#endif
+
+#define FPLLL_BEGIN_NAMESPACE                                                                      \
+  namespace fplll                                                                                  \
+  {
+#define FPLLL_END_NAMESPACE }
+
+/** \namespace fplll
+    The fplll namespace */
+FPLLL_BEGIN_NAMESPACE
+
+using namespace std;
+
+/* this trick will not work on 16-bit machines*/
+#if (LONG_MAX == 2147483647L)
+const int CPU_SIZE         = 32;
+const int CPU_SIZE_1       = 30;
+const double MAX_LONG_FAST = 0x1p30;
+const long int EXPO_MAX    = 30;
+#else
+const int CPU_SIZE         = 64;
+const int CPU_SIZE_1       = 53;
+const double MAX_LONG_FAST = 0x1p53;
+const long int EXPO_MAX    = 53;
+#endif
+
+const int MAX_EXP_DOUBLE = 1000;
+const int PREC_DOUBLE    = 53;
+const int PREC_DD        = 106;
+const int PREC_QD        = 212;
+
+const double LLL_DEF_DELTA        = 0.99;
+const double LLL_DEF_ETA          = 0.51;
+const double LLL_DEF_EPSILON      = 0.01;
+const int SIZE_RED_FAILURE_THRESH = 5;
+
+// Constraint: 1/2 < eta - theta
+const double HLLL_DEF_THETA = 0.001;
+// Constant for the size reduction.
+const double HLLL_DEF_C = 0.1;
+
+enum RedStatus
+{
+  RED_SUCCESS = 0,
+  // Skips value 1
+  RED_GSO_FAILURE       = 2,
+  RED_BABAI_FAILURE     = 3,
+  RED_LLL_FAILURE       = 4,
+  RED_ENUM_FAILURE      = 5,
+  RED_BKZ_FAILURE       = 6,
+  RED_BKZ_TIME_LIMIT    = 7,
+  RED_BKZ_LOOPS_LIMIT   = 8,
+  RED_HLLL_FAILURE      = 9,
+  RED_HLLL_NORM_FAILURE = 10,
+  RED_HLLL_SR_FAILURE   = 11,
+  RED_STATUS_MAX        = 12
+};
+
+const char *const RED_STATUS_STR[RED_STATUS_MAX] = {"success",
+                                                    "",
+                                                    "infinite number in GSO",
+                                                    "infinite loop in babai",
+                                                    "infinite loop in LLL",
+                                                    "error in SVP solver",
+                                                    "error in BKZ",
+                                                    "time limit exceeded in BKZ",
+                                                    "loops limit exceeded in BKZ",
+                                                    "error in HLLL",
+                                                    "increase of the norm",
+                                                    "error in weak size reduction"};
+
+enum LLLMethod
+{
+  LM_WRAPPER   = 0,
+  LM_PROVED    = 1,
+  LM_HEURISTIC = 2,
+  LM_FAST      = 3
+};
+
+const char *const LLL_METHOD_STR[6] = {"wrapper", "proved", "heuristic", "fast"};
+
+// LM_HEURISTIC is not (yet) an option for HLLL and cannot be called from the fplll binary, then
+// we leave empty the third string.
+const char *const HLLL_METHOD_STR[4] = {"wrapper", "proved", "", "fast"};
+
+enum IntType
+{
+  ZT_MPZ    = 0,
+  ZT_LONG   = 1,
+  ZT_DOUBLE = 2
+};
+
+const char *const INT_TYPE_STR[5] = {"mpz", "long", "double"};
+
+enum FloatType
+{
+  FT_DEFAULT     = 0,
+  FT_DOUBLE      = 1,
+  FT_LONG_DOUBLE = 2,
+  FT_DPE         = 3,
+  FT_DD          = 4,
+  FT_QD          = 5,
+  FT_MPFR        = 6
+};
+
+const char *const FLOAT_TYPE_STR[7] = {"", "double", "long double", "dpe", "dd", "qd", "mpfr"};
+
+enum LLLFlags
+{
+  LLL_VERBOSE   = 1,
+  LLL_EARLY_RED = 2,
+  LLL_SIEGEL    = 4,
+  LLL_DEFAULT   = 0
+};
+
+enum SVPMethod
+{
+  SVPM_FAST   = 0,
+  SVPM_PROVED = 2
+};
+
+enum CVPMethod
+{
+  CVPM_FAST   = 0,
+  CVPM_PROVED = 2
+};
+
+enum SVPFlags
+{
+  SVP_DEFAULT      = 0,
+  SVP_VERBOSE      = 1,
+  SVP_OVERRIDE_BND = 2,
+  SVP_DUAL         = 4
+};
+
+enum CVPFlags
+{
+  CVP_DEFAULT = SVP_DEFAULT,
+  CVP_VERBOSE = SVP_VERBOSE
+};
+
+const double BKZ_DEF_AUTO_ABORT_SCALE        = 1.0;
+const int BKZ_DEF_AUTO_ABORT_MAX_NO_DEC      = 5;
+const double BKZ_DEF_GH_FACTOR               = 1.1;
+const double BKZ_DEF_MIN_SUCCESS_PROBABILITY = 0.5;
+const int BKZ_DEF_RERANDOMIZATION_DENSITY    = 3;
+
+enum BKZFlags
+{
+  BKZ_DEFAULT     = 0,
+  BKZ_VERBOSE     = 1,
+  BKZ_NO_LLL      = 2,
+  BKZ_MAX_LOOPS   = 4,
+  BKZ_MAX_TIME    = 8,
+  BKZ_BOUNDED_LLL = 0x10,
+  BKZ_AUTO_ABORT  = 0x20,
+  BKZ_DUMP_GSO    = 0x40,
+  BKZ_GH_BND      = 0x80,
+  BKZ_SD_VARIANT  = 0x100,
+  BKZ_SLD_RED     = 0x200
+};
+
+enum HKZFlags
+{
+  HKZ_DEFAULT = 0,
+  HKZ_VERBOSE = 1
+};
+
+#ifndef FPLLL_DEFAULT_STRATEGY_PATH
+#define FPLLL_DEFAULT_STRATEGY_PATH ""
+#endif
+
+#ifndef FPLLL_DEFAULT_STRATEGY
+#define FPLLL_DEFAULT_STRATEGY ""
+#endif
+
+enum PrunerMetric
+{
+  PRUNER_METRIC_PROBABILITY_OF_SHORTEST = 0,
+  PRUNER_METRIC_EXPECTED_SOLUTIONS      = 1
+};
+
+enum PrunerFlags
+{
+  PRUNER_CVP =
+      0x1,  // Do not Halve the count of nodes, according to enumeration optimization from symmetry
+  // Descent methods. If several activated, pruner will execute them in the order below.
+  PRUNER_START_FROM_INPUT = 0x2,
+  PRUNER_GRADIENT         = 0x4,  // Activate the gradient descent
+  PRUNER_NELDER_MEAD      = 0x8,
+  // Verbosity
+  PRUNER_VERBOSE = 0x10,
+  // Optimize w.r.t to half of the coefficients (those of even indices)
+  // (by default this is not enabled)
+  PRUNER_HALF = 0x20,
+  // Optimize goal set to single enumeration cost while fixing the probability ~ target. Note that
+  // flags PRUNER_HALF and PRUNER_SINGLE are mutually exclusive.
+  PRUNER_SINGLE = 0x40
+};
+
+#define PRUNER_ZEALOUS (PRUNER_GRADIENT | PRUNER_NELDER_MEAD)
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/enum-parallel/enumeration.h b/fplll/enum-parallel/enumeration.h
new file mode 100644 (file)
index 0000000..71da503
--- /dev/null
@@ -0,0 +1,517 @@
+/*
+MIT License
+
+Copyright (c) 2016 Marc Stevens
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#ifndef ENUMLIB_ENUMERATION_HPP
+#define ENUMLIB_ENUMERATION_HPP
+
+#include "fplll_types.h"
+#include <fplll/threadpool.h>
+
+#include <algorithm>
+#include <array>
+#include <atomic>
+#include <chrono>
+#include <cmath>
+#include <cstdint>
+#include <fstream>
+#include <functional>
+#include <iostream>
+#include <memory>
+#include <mutex>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <thread>
+#include <vector>
+
+#include <fplll/defs.h>
+
+FPLLL_BEGIN_NAMESPACE
+
+namespace enumlib
+{
+
+//#define SINGLE_THREADED
+//#define NOCOUNTS
+#define NOLOCALUPDATE
+
+using namespace std;
+
+typedef fplll_float float_type;
+typedef std::mutex mutex_type;
+typedef std::lock_guard<std::mutex> lock_type;
+
+typedef atomic<float_type> global_A_t;
+typedef array<atomic_int_fast8_t, 256> global_signal_t;
+
+template <int N> struct globals_t
+{
+  typedef array<int, N> introw_t;
+  typedef pair<introw_t, pair<float_type, float_type>> swirl_item_t;
+
+  mutex_type mutex;
+  global_A_t A;
+  global_signal_t signal;
+
+  std::function<extenum_cb_process_sol> process_sol;
+  std::function<extenum_cb_process_subsol> process_subsol;
+
+  vector<vector<swirl_item_t>> swirlys;
+};
+
+extern mutex_type global_mutex;
+
+template <int N, int SWIRLY, int SWIRLY2BUF, int SWIRLY1FRACTION, bool findsubsols = false>
+struct lattice_enum_t
+{
+  typedef array<float_type, N> fltrow_t;
+  typedef array<int, N> introw_t;
+  typedef pair<introw_t, pair<float_type, float_type>> swirl_item_t;
+
+  /* inputs */
+  float_type muT[N][N];
+  fltrow_t risq;
+  fltrow_t pr;
+  fltrow_t pr2;
+
+  /* config */
+  bool activeswirly;
+
+  /* internals */
+  int threadid;
+  globals_t<N> &globals;
+
+  float_type _A;       // overall enumeration bound
+  fltrow_t _AA, _AA2;  // enumeration pruning bounds
+  introw_t _x, _Dx, _D2x;
+  fltrow_t _sol;  // to pass to fplll
+  fltrow_t _c;
+  introw_t _r;
+  array<float_type, N + 1> _l;
+  array<uint64_t, N + 1> _counts;
+
+  float_type _sigT[N][N];
+
+  fltrow_t _subsolL;
+  array<fltrow_t, N> _subsol;
+
+  std::chrono::system_clock::time_point starttime;
+
+  lattice_enum_t(globals_t<N> &globals_)
+      : activeswirly(false), globals(globals_), starttime(std::chrono::system_clock::now())
+  {
+  }
+
+  inline int myround(double a) { return (int)(round(a)); }
+  inline int myround(float a) { return (int)(roundf(a)); }
+  inline int myround(long double a) { return (int)(roundl(a)); }
+
+  inline void _thread_local_update()
+  {
+    if (globals.signal[threadid])
+    {
+      globals.signal[threadid] = 0;
+      _A                       = globals.A;
+      _update_AA();
+    }
+  }
+
+  inline void _update_AA()
+  {
+    for (int k = 0; k < N; ++k)
+      _AA[k] = _A * pr[k];
+    for (int k = 0; k < N; ++k)
+      _AA2[k] = _A * pr2[k];
+  }
+
+  // compile time parameters for enumerate_recur (without ANY runtime overhead)
+  // allows specialization for certain specific cases, e.g., i=0, or i=swirl
+  template <int i, bool svp, int swirl, int swirlid> struct i_tag
+  {
+  };
+
+  template <int i, bool svp, int swirl, int swirlid>
+  inline void enumerate_recur(i_tag<i, svp, swirl, swirlid>)
+  {
+    if (_r[i] > _r[i - 1])
+      _r[i - 1] = _r[i];
+    float_type ci = _sigT[i][i];
+    float_type yi = round(ci);
+    int xi        = (int)(yi);
+    yi            = ci - yi;
+    float_type li = _l[i + 1] + (yi * yi * risq[i]);
+#ifndef NOCOUNTS
+    ++_counts[i];
+#endif
+
+    if (findsubsols && li < _subsolL[i] && li != 0.0)
+    {
+      _subsolL[i]   = li;
+      _subsol[i][i] = xi;
+      for (int j = i + 1; j < N; ++j)
+        _subsol[i][j] = _x[j];
+    }
+    if (li > _AA[i])
+      return;
+
+    _Dx[i] = _D2x[i] = (((int)(yi >= 0) & 1) << 1) - 1;
+    _c[i]            = ci;
+    _x[i]            = xi;
+    _l[i]            = li;
+
+    for (int j = _r[i - 1]; j > i - 1; --j)
+      _sigT[i - 1][j - 1] = _sigT[i - 1][j] - _x[j] * muT[i - 1][j];
+
+#ifndef NOLOCALUPDATE
+    _thread_local_update();
+#endif
+
+    while (true)
+    {
+      enumerate_recur(i_tag<i - 1, svp, swirl, swirlid>());
+
+      if (_l[i + 1] == 0.0)
+      {
+        ++_x[i];
+        _r[i - 1]      = i;
+        float_type yi2 = _c[i] - _x[i];
+        float_type li2 = _l[i + 1] + (yi2 * yi2 * risq[i]);
+        if (li2 > _AA2[i])
+          return;
+        _l[i]               = li2;
+        _sigT[i - 1][i - 1] = _sigT[i - 1][i] - _x[i] * muT[i - 1][i];
+      }
+      else
+      {
+        _x[i] += _Dx[i];
+        _D2x[i]        = -_D2x[i];
+        _Dx[i]         = _D2x[i] - _Dx[i];
+        _r[i - 1]      = i;
+        float_type yi2 = _c[i] - _x[i];
+        float_type li2 = _l[i + 1] + (yi2 * yi2 * risq[i]);
+        if (li2 > _AA2[i])
+          return;
+        _l[i]               = li2;
+        _sigT[i - 1][i - 1] = _sigT[i - 1][i] - _x[i] * muT[i - 1][i];
+      }
+    }
+  }
+
+  template <bool svp, int swirl, int swirlid>
+  inline void enumerate_recur(i_tag<0, svp, swirl, swirlid>)
+  {
+    static const int i = 0;
+    float_type ci      = _sigT[i][i];
+    float_type yi      = round(ci);
+    int xi             = (int)(yi);
+    yi                 = ci - yi;
+    float_type li      = _l[i + 1] + (yi * yi * risq[i]);
+#ifndef NOCOUNTS
+    ++_counts[i];
+#endif
+
+    if (findsubsols && li < _subsolL[i] && li != 0.0)
+    {
+      _subsolL[i]   = li;
+      _subsol[i][i] = xi;
+      for (int j = i + 1; j < N; ++j)
+        _subsol[i][j] = _x[j];
+    }
+    if (li > _AA[i])
+      return;
+
+    _Dx[i] = _D2x[i] = (((int)(yi >= 0) & 1) << 1) - 1;
+    _c[i]            = ci;
+    _x[i]            = xi;
+    _l[i]            = li;
+
+#ifndef NOLOCALUPDATE
+    _thread_local_update();
+#endif
+
+    while (true)
+    {
+      enumerate_recur(i_tag<i - 1, svp, swirl, swirlid>());
+
+      if (_l[i + 1] == 0.0)
+      {
+        ++_x[i];
+        float_type yi2 = _c[i] - _x[i];
+        float_type li2 = _l[i + 1] + (yi2 * yi2 * risq[i]);
+        if (li2 > _AA2[i])
+          return;
+        _l[i] = li2;
+      }
+      else
+      {
+        _x[i] += _Dx[i];
+        _D2x[i]        = -_D2x[i];
+        _Dx[i]         = _D2x[i] - _Dx[i];
+        float_type yi2 = _c[i] - _x[i];
+        float_type li2 = _l[i + 1] + (yi2 * yi2 * risq[i]);
+        if (li2 > _AA2[i])
+          return;
+        _l[i] = li2;
+      }
+    }
+  }
+
+  template <bool svp, int swirl, int swirlid>
+  inline void enumerate_recur(i_tag<-1, svp, swirl, swirlid>)
+  {
+    if (_l[0] > _AA[0] || _l[0] == 0.0)
+      return;
+
+    lock_type lock(globals.mutex);
+
+    for (int j = 0; j < N; ++j)
+      _sol[j] = _x[j];
+    globals.A = globals.process_sol(_l[0], &_sol[0]);
+
+    // if it has changed then signal all threads to update and update ourselves
+    if (globals.A != _A)
+    {
+      for (size_t j = 0; j < globals.signal.size(); ++j)
+        globals.signal[j] = 1;
+
+      _thread_local_update();
+    }
+  }
+
+  template <bool svp, int swirl, int swirlid>
+  inline void enumerate_recur(i_tag<N + 1, svp, swirl, swirlid>)
+  {
+  }
+  template <bool svp, int swirl, int swirlid>
+  inline void enumerate_recur(i_tag<N + 2, svp, swirl, swirlid>)
+  {
+  }
+
+  template <int i, bool svp, int swirlid> inline void enumerate_recur(i_tag<i, svp, i, swirlid>)
+  {
+    if (_r[i] > _r[i - 1])
+      _r[i - 1] = _r[i];
+
+    float_type ci = _sigT[i][i];
+    float_type yi = round(ci);
+    int xi        = (int)(yi);
+    yi            = ci - yi;
+    float_type li = _l[i + 1] + (yi * yi * risq[i]);
+#ifndef NOCOUNTS
+    ++_counts[i];
+#endif
+
+    if (findsubsols && li < _subsolL[i] && li != 0.0)
+    {
+      _subsolL[i]   = li;
+      _subsol[i][i] = xi;
+      for (int j = i + 1; j < N; ++j)
+        _subsol[i][j] = _x[j];
+    }
+    if (li > _AA[i])
+      return;
+    _c[i]  = ci;
+    _x[i]  = xi;
+    _l[i]  = li;
+    _Dx[i] = _D2x[i] = (((int)(yi >= 0) & 1) << 1) - 1;
+
+    for (int j = _r[i - 1]; j > i - 1; --j)
+      _sigT[i - 1][j - 1] = _sigT[i - 1][j] - _x[j] * muT[i - 1][j];
+
+    while (true)
+    {
+      float_type ci2 = _sigT[i - 1][i - 1];
+      int xi2        = myround(ci2);
+      float_type yi2 = ci2 - xi2;
+      float_type li2 = _l[i] + (yi2 * yi2 * risq[i - 1]);
+
+      globals.swirlys[swirlid].emplace_back();
+      for (int j = i; j < N; ++j)
+        globals.swirlys[swirlid].back().first[j] = _x[j];
+      globals.swirlys[swirlid].back().second.first  = _l[i];
+      globals.swirlys[swirlid].back().second.second = li2;
+
+      if (_l[i + 1] == 0.0)
+      {
+        ++_x[i];
+        _r[i - 1]      = i;
+        float_type yi2 = _c[i] - _x[i];
+        float_type li  = _l[i + 1] + (yi2 * yi2 * risq[i]);
+        if (li > _AA2[i])
+          return;
+        _l[i]               = li;
+        _sigT[i - 1][i - 1] = _sigT[i - 1][i] - _x[i] * muT[i - 1][i];
+      }
+      else
+      {
+        _x[i] += _Dx[i];
+        _D2x[i]        = -_D2x[i];
+        _Dx[i]         = _D2x[i] - _Dx[i];
+        _r[i - 1]      = i;
+        float_type yi2 = _c[i] - _x[i];
+        float_type li  = _l[i + 1] + (yi2 * yi2 * risq[i]);
+        if (li > _AA2[i])
+          return;
+        _l[i]               = li;
+        _sigT[i - 1][i - 1] = _sigT[i - 1][i] - _x[i] * muT[i - 1][i];
+      }
+    }
+  }
+
+  template <bool svp = true> void enumerate_recursive()
+  {
+    for (size_t i = 0; i < globals.signal.size(); ++i)
+      globals.signal[i] = 0;
+    threadid = get_threads();
+
+    _A = globals.A;
+    _update_AA();
+
+    for (int j = 0; j < N; ++j)
+    {
+      _x[j] = _Dx[j] = 0;
+      _D2x[j]        = -1;
+      _sol[j]        = 0;
+      _c[j] = _l[j] = 0.0;
+      _subsolL[j]   = risq[j];
+      for (int k = 0; k < N; ++k)
+      {
+        _sigT[j][k]   = 0.0;
+        _subsol[j][k] = 0;
+      }
+      _r[j]      = N - 1;
+      _counts[j] = 0;
+    }
+    _l[N]      = 0.0;
+    _counts[N] = 0;
+
+#ifdef SINGLE_THREADED
+    enumerate_recur(i_tag<N - 1, svp, -2, 0>());
+#else
+    auto &swirlys = globals.swirlys;
+    swirlys.resize(2);
+    swirlys[0].clear();
+    enumerate_recur(i_tag<N - 1, svp, N - SWIRLY, 0>());
+
+    const auto swirl_less = [](const swirl_item_t &l, const swirl_item_t &r) {
+      return l.second.second < r.second.second;
+    };
+    if (activeswirly)
+    {
+      sort(swirlys[0].begin(), swirlys[0].end(), swirl_less);
+    }
+
+    size_t swirly0idx = 0;
+    swirlys[1].clear();
+    while (swirly0idx < swirlys[0].size())
+    {
+      int swirly1newstart = (int)(swirlys[1].size());
+      while (swirly0idx < swirlys[0].size() && swirlys[1].size() < SWIRLY2BUF)
+      {
+        const int i = N - SWIRLY;
+        _x          = swirlys[0][swirly0idx].first;
+        _l[i]       = swirlys[0][swirly0idx].second.first;
+        for (int j = 0; j < N; ++j)
+          _r[j] = N - 1;
+        for (int j = N - 1; j > i - 1; --j)
+          _sigT[i - 1][j - 1] = _sigT[i - 1][j] - _x[j] * muT[i - 1][j];
+
+        enumerate_recur(i_tag<N - SWIRLY - 1, svp, N - 2 * SWIRLY, 1>());
+
+        ++swirly0idx;
+      }
+
+      size_t swirly1end = (int)(swirlys[1].size());
+      if (activeswirly)
+      {
+        // sort the new additions to swirly1
+        sort(swirlys[1].begin() + swirly1newstart, swirlys[1].end(), swirl_less);
+        // merge with previous elms in swirly1
+        inplace_merge(swirlys[1].begin(), swirlys[1].begin() + swirly1newstart, swirlys[1].end(),
+                      swirl_less);
+
+        // process portion of swirly[1] and then add more
+        swirly1end = (SWIRLY2BUF >> SWIRLY1FRACTION);
+        if (swirly1end > swirlys[1].size())
+          swirly1end = swirlys[1].size();
+      }
+
+      auto &swirly_ref = swirlys[1];
+      std::atomic<std::size_t> swirly_i(0);
+      unsigned threadid = 0;
+      auto f            = [this, &swirly_ref, &swirly_i, swirly1end, &threadid]() {
+        auto mylat = *this;
+        {
+          lock_type lock(globals.mutex);
+          mylat.threadid = threadid++;
+        }
+        for (int j = 0; j < N - SWIRLY; ++j)
+          mylat._counts[j] = 0;
+        while (true)
+        {
+          std::size_t idx = swirly_i++;
+          if (idx >= swirly1end)
+            break;
+
+          const int i = N - 2 * SWIRLY;
+          mylat._x    = swirly_ref[idx].first;
+          mylat._l[i] = swirly_ref[idx].second.first;
+          for (int j = 0; j < N; ++j)
+            mylat._r[j] = N - 1;
+          for (int j = N - 1; j > i - 1; --j)
+            mylat._sigT[i - 1][j - 1] = mylat._sigT[i - 1][j] - mylat._x[j] * mylat.muT[i - 1][j];
+
+          mylat._thread_local_update();
+
+          mylat.enumerate_recur(i_tag<N - 2 * SWIRLY - 1, svp, -2, -1>());
+        }
+
+        lock_type lock(globals.mutex);
+        for (int j = 0; j < N - SWIRLY; ++j)
+          this->_counts[j] += mylat._counts[j];
+        for (int j = 0; j < N; ++j)
+          if (mylat._subsolL[j] < this->_subsolL[j])
+          {
+            this->_subsolL[j] = mylat._subsolL[j];
+            this->_subsol[j]  = mylat._subsol[j];
+          }
+      };
+      for (int i = 0; i < ::fplll::get_threads(); ++i)
+        threadpool.push(f);
+      threadpool.wait_work();
+
+      swirlys[1].erase(swirlys[1].begin(), swirlys[1].begin() + swirly1end);
+    }
+#ifndef NOCOUNTS
+//             if (enumlib_loglevel >= 1) cout << "[enumlib] counts: " << _counts << endl;
+#endif
+#endif
+  }
+};
+
+}  // namespace enumlib
+
+FPLLL_END_NAMESPACE
+
+#endif  // ENUMLIB_ENUMERATION_HPP
diff --git a/fplll/enum-parallel/enumlib.cpp b/fplll/enum-parallel/enumlib.cpp
new file mode 100644 (file)
index 0000000..75bed2c
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+MIT License
+
+Copyright (c) 2016 Marc Stevens
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "enumlib.h"
+#include "enumeration.h"
+#include "fplll_types.h"
+#include <iostream>
+
+FPLLL_BEGIN_NAMESPACE
+
+namespace enumlib
+{
+
+using namespace std;
+
+uint64_t enumlib_enumerate(int dim, fplll::enumf maxdist,
+                           std::function<fplll::extenum_cb_set_config> cbfunc,
+                           std::function<fplll::extenum_cb_process_sol> cbsol,
+                           std::function<fplll::extenum_cb_process_subsol> cbsubsol, bool dual,
+                           bool findsubsols);
+
+#define ENUMFUNCNAME(DIM)                                                                          \
+  uint64_t enumerate##DIM(int, float_type, std::function<extenum_cb_set_config>,                   \
+                          std::function<extenum_cb_process_sol>,                                   \
+                          std::function<extenum_cb_process_subsol>, bool, bool);
+
+#if 20 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(20);
+#endif
+#if 30 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(30);
+#endif
+#if 40 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(40);
+#endif
+#if 50 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(50);
+#endif
+#if 60 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(60);
+#endif
+#if 70 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(70);
+#endif
+#if 80 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(80);
+#endif
+#if 90 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(90);
+#endif
+#if 100 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(100);
+#endif
+#if 110 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(110);
+#endif
+#if 120 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(120);
+#endif
+#if 130 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(130);
+#endif
+#if 140 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(140);
+#endif
+#if 150 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(150);
+#endif
+#if 160 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+ENUMFUNCNAME(160);
+#endif
+
+uint64_t enumlib_enumerate(int dim, fplll_float maxdist,
+                           std::function<extenum_cb_set_config> cbfunc,
+                           std::function<extenum_cb_process_sol> cbsol,
+                           std::function<extenum_cb_process_subsol> cbsubsol, bool dual,
+                           bool findsubsols)
+{
+  // dual svp enumeration not supported yet
+  if (dim <= 10 || dual)
+    return ~uint64_t(0);
+
+#if 20 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 20)
+    return enumerate20(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 30 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 30)
+    return enumerate30(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 40 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 40)
+    return enumerate40(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 50 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 50)
+    return enumerate50(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 60 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 60)
+    return enumerate60(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 70 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 70)
+    return enumerate70(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 80 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 80)
+    return enumerate80(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 90 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 90)
+    return enumerate90(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 100 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 100)
+    return enumerate100(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 110 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 110)
+    return enumerate110(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 120 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 120)
+    return enumerate120(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 130 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 130)
+    return enumerate130(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 140 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 140)
+    return enumerate140(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 150 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 150)
+    return enumerate150(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+#if 160 <= FPLLL_MAX_PARALLEL_ENUM_DIM
+  if (dim <= 160)
+    return enumerate160(dim, maxdist, cbfunc, cbsol, cbsubsol, dual, findsubsols);
+#endif
+  return ~uint64_t(0);
+}
+
+}  // namespace enumlib
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/enum-parallel/enumlib.h b/fplll/enum-parallel/enumlib.h
new file mode 100644 (file)
index 0000000..28f40ea
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+MIT License
+
+Copyright (c) 2016 Marc Stevens
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#ifndef ENUMLIB_EXTENUM_HPP
+#define ENUMLIB_EXTENUM_HPP
+
+#include "fplll_types.h"
+#include <fplll/defs.h>
+
+FPLLL_BEGIN_NAMESPACE
+
+namespace enumlib
+{
+
+uint64_t enumlib_enumerate(int dim, ::fplll::enumf maxdist,
+                           std::function<::fplll::extenum_cb_set_config> cbfunc,
+                           std::function<::fplll::extenum_cb_process_sol> cbsol,
+                           std::function<::fplll::extenum_cb_process_subsol> cbsubsol, bool dual,
+                           bool findsubsols);
+
+}  // namespace enumlib
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/enum-parallel/enumlib_dim.100.cpp b/fplll/enum-parallel/enumlib_dim.100.cpp
new file mode 100644 (file)
index 0000000..ece02b3
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 100
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.110.cpp b/fplll/enum-parallel/enumlib_dim.110.cpp
new file mode 100644 (file)
index 0000000..8758b6b
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 110
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.120.cpp b/fplll/enum-parallel/enumlib_dim.120.cpp
new file mode 100644 (file)
index 0000000..5e7c7a7
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 120
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.130.cpp b/fplll/enum-parallel/enumlib_dim.130.cpp
new file mode 100644 (file)
index 0000000..d066dbb
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 130
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.140.cpp b/fplll/enum-parallel/enumlib_dim.140.cpp
new file mode 100644 (file)
index 0000000..a223bbc
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 140
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.150.cpp b/fplll/enum-parallel/enumlib_dim.150.cpp
new file mode 100644 (file)
index 0000000..2568439
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 150
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.160.cpp b/fplll/enum-parallel/enumlib_dim.160.cpp
new file mode 100644 (file)
index 0000000..12373d8
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 160
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.20.cpp b/fplll/enum-parallel/enumlib_dim.20.cpp
new file mode 100644 (file)
index 0000000..6b113e9
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 20
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.30.cpp b/fplll/enum-parallel/enumlib_dim.30.cpp
new file mode 100644 (file)
index 0000000..8de7870
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 30
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.40.cpp b/fplll/enum-parallel/enumlib_dim.40.cpp
new file mode 100644 (file)
index 0000000..20067b6
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 40
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.50.cpp b/fplll/enum-parallel/enumlib_dim.50.cpp
new file mode 100644 (file)
index 0000000..d499ebd
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 50
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.60.cpp b/fplll/enum-parallel/enumlib_dim.60.cpp
new file mode 100644 (file)
index 0000000..8997963
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 60
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.70.cpp b/fplll/enum-parallel/enumlib_dim.70.cpp
new file mode 100644 (file)
index 0000000..4745937
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 70
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.80.cpp b/fplll/enum-parallel/enumlib_dim.80.cpp
new file mode 100644 (file)
index 0000000..2ee70b7
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 80
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.90.cpp b/fplll/enum-parallel/enumlib_dim.90.cpp
new file mode 100644 (file)
index 0000000..4257895
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENUMDIMENSION 90
+#include "enumlib_dim.cpp"
diff --git a/fplll/enum-parallel/enumlib_dim.cpp b/fplll/enum-parallel/enumlib_dim.cpp
new file mode 100644 (file)
index 0000000..98ba2ba
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+MIT License
+
+Copyright (c) 2016 Marc Stevens
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include <fplll/fplll_config.h>
+
+#ifdef ENUMDIMENSION
+#if ENUMDIMENSION <= FPLLL_MAX_PARALLEL_ENUM_DIM
+
+#include "enumeration.h"
+#include "enumlib.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+namespace enumlib
+{
+
+template <int dimension> struct enumerate_traits
+{
+  static const int SWIRLY          = 1 + (dimension / 20);
+  static const int SWIRLY2BUF      = 1 << 10;
+  static const int SWIRLY1FRACTION = 4;
+};
+
+template <int dimension, bool findsubsols>
+uint64_t enumerate_dim_detail(int dim, float_type maxdist,
+                              std::function<extenum_cb_set_config> cb_set_config,
+                              std::function<extenum_cb_process_sol> cb_process_sol,
+                              std::function<extenum_cb_process_subsol> cb_process_subsol, bool dual)
+{
+  static const int SWIRLY          = enumerate_traits<dimension>::SWIRLY;
+  static const int SWIRLY2BUF      = enumerate_traits<dimension>::SWIRLY2BUF;
+  static const int SWIRLY1FRACTION = enumerate_traits<dimension>::SWIRLY1FRACTION;
+  typedef lattice_enum_t<dimension, SWIRLY, SWIRLY2BUF, SWIRLY1FRACTION, findsubsols> lat_t;
+
+  globals_t<dimension> globals;
+  globals.A              = maxdist;
+  globals.process_sol    = cb_process_sol;
+  globals.process_subsol = cb_process_subsol;
+
+  lat_t lat(globals);
+
+  cb_set_config(&lat.muT[0][0], dimension, true, &lat.risq[0], &lat.pr[0]);
+  lat.pr2 = lat.pr;
+
+  lat.activeswirly = false;
+
+  lat.enumerate_recursive();
+
+  if (findsubsols)
+  {
+    for (int j = 0; j < dimension; ++j)
+    {
+      if (lat._subsolL[j] < lat.risq[j])
+      {
+        cb_process_subsol(lat._subsolL[j], &lat._subsol[j][0], j);
+      }
+    }
+  }
+  uint64_t count = 0;
+  for (int j = 0; j <= dimension; ++j)
+    count += lat._counts[j];
+  return count;
+}
+
+template <int dimension>
+uint64_t enumerate_dim(int dim, float_type maxdist,
+                       std::function<extenum_cb_set_config> cb_set_config,
+                       std::function<extenum_cb_process_sol> cb_process_sol,
+                       std::function<extenum_cb_process_subsol> cb_process_subsol, bool dual,
+                       bool findsubsols)
+{
+  if (findsubsols)
+    return enumerate_dim_detail<dimension, true>(dim, maxdist, cb_set_config, cb_process_sol,
+                                                 cb_process_subsol, dual);
+  else
+    return enumerate_dim_detail<dimension, false>(dim, maxdist, cb_set_config, cb_process_sol,
+                                                  cb_process_subsol, dual);
+}
+
+#ifndef ENUMDIMENSION
+#error "ENUMDIMENSION not defined"
+#endif
+#define DIMFUNCNAME(DIM) enumerate##DIM
+#define DIMFUNC(DIM) DIMFUNCNAME(DIM)
+#define GENENUM(d)                                                                                 \
+  case (d):                                                                                        \
+    return enumerate_dim<(d)>(dim, maxdist, cb_set_config, cb_process_sol, cb_process_subsol,      \
+                              dual, findsubsols);                                                  \
+    break;
+
+uint64_t DIMFUNC(ENUMDIMENSION)(int dim, float_type maxdist,
+                                std::function<extenum_cb_set_config> cb_set_config,
+                                std::function<extenum_cb_process_sol> cb_process_sol,
+                                std::function<extenum_cb_process_subsol> cb_process_subsol,
+                                bool dual, bool findsubsols)
+{
+  static const int d = ENUMDIMENSION;
+  switch (dim)
+  {
+    GENENUM(d - 9);
+    GENENUM(d - 8);
+    GENENUM(d - 7);
+    GENENUM(d - 6);
+    GENENUM(d - 5);
+    GENENUM(d - 4);
+    GENENUM(d - 3);
+    GENENUM(d - 2);
+    GENENUM(d - 1);
+    GENENUM(d);
+  }
+
+  cout << "[enumlib] " << ENUMDIMENSION << ":" << dim << " wrong dimension!" << endl;
+  return ~uint64_t(0);
+}
+
+}  // namespace enumlib
+
+FPLLL_END_NAMESPACE
+
+#endif
+#endif
diff --git a/fplll/enum-parallel/fplll_types.h b/fplll/enum-parallel/fplll_types.h
new file mode 100644 (file)
index 0000000..e7e2485
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+MIT License
+
+Copyright (c) 2016 Marc Stevens
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#ifndef EXTENUM_FPLLL_TYPES_HPP
+#define EXTENUM_FPLLL_TYPES_HPP
+
+#include <fplll/defs.h>
+#include <fplll/enum/enumerate_ext.h>
+
+FPLLL_BEGIN_NAMESPACE
+
+namespace enumlib
+{
+
+typedef ::fplll::enumf fplll_float;
+using ::fplll::extenum_cb_process_sol;
+using ::fplll::extenum_cb_process_subsol;
+using ::fplll::extenum_cb_set_config;
+using ::fplll::extenum_fc_enumerate;
+
+}  // namespace enumlib
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/enum/enumerate.cpp b/fplll/enum/enumerate.cpp
new file mode 100644 (file)
index 0000000..563823e
--- /dev/null
@@ -0,0 +1,319 @@
+/* Copyright (C) 2008-2011 Xavier Pujol
+   (C) 2015 Michael Walter.
+   (C) 2016 Marc Stevens. (generic improvements, auxiliary solutions, subsolutions)
+   (C) 2016 Guillaume Bonnoron. (CVP improvements)
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "enumerate.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <typename ZT, typename FT>
+void EnumerationDyn<ZT, FT>::reset(enumf cur_dist, int cur_depth)
+{
+  // FPLLL_TRACE("Reset level " << cur_depth);
+  int new_dim = cur_depth + 1;
+
+  vector<enumxt> partial_sol(d - cur_depth - 1);
+  for (int i = cur_depth + 1; i < d; ++i)
+    partial_sol[i - cur_depth - 1] = x[i];
+
+  FT new_dist = 0.0;
+  for (int i = 0; i < new_dim; i++)
+    new_dist.add(new_dist, _gso.get_r_exp(i, i));
+
+  FastEvaluator<FT> new_evaluator;
+  Enumeration<ZT, FT> enumobj(_gso, new_evaluator, _max_indices);
+  enumobj.enumerate(0, d, new_dist, 0, target, partial_sol, pruning_bounds, false, true);
+
+  if (!new_evaluator.empty())
+  {
+    FT sol_dist2 = new_evaluator.begin()->first;
+    sol_dist2.mul_2si(sol_dist2, -new_evaluator.normExp);
+    enumf sol_dist = sol_dist2.get_d();
+    // FPLLL_TRACE("Recovering sub-solution at level: " << cur_depth <<" soldist: " << sol_dist);
+
+    if (sol_dist + cur_dist < partdistbounds[0])
+    {
+      // FPLLL_TRACE("Saving it.");
+      for (int i = 0; i < new_dim; ++i)
+        x[i] = new_evaluator.begin()->second[i].get_d();
+      process_solution(sol_dist + cur_dist);
+    }
+  }
+}
+
+template <typename ZT, typename FT>
+void EnumerationDyn<ZT, FT>::enumerate(int first, int last, FT &fmaxdist, long fmaxdistexpo,
+                                       const vector<FT> &target_coord,
+                                       const vector<enumxt> &subtree, const vector<enumf> &pruning,
+                                       bool _dual, bool subtree_reset)
+{
+  bool solvingsvp = target_coord.empty();
+  dual            = _dual;
+  pruning_bounds  = pruning;
+  target          = target_coord;
+  if (last == -1)
+    last = _gso.d;
+  d = last - first;
+  fx.resize(d);
+  FPLLL_CHECK(d < maxdim, "enumerate: dimension is too high");
+  FPLLL_CHECK((solvingsvp || !dual), "CVP for dual not implemented! What does that even mean? ");
+  FPLLL_CHECK((subtree.empty() || !dual), "Subtree enumeration for dual not implemented!");
+
+  resetflag = !_max_indices.empty();
+  if (resetflag)
+    reset_depth = _max_indices[last - subtree.size() - 1];
+
+  if (solvingsvp)
+  {
+    for (int i = 0; i < d; ++i)
+      center_partsum[i] = 0.0;
+  }
+  else
+  {
+    for (int i = 0; i < d; ++i)
+      center_partsum[i] = target_coord[i + first].get_d();
+  }
+
+  FT fr, fmu, fmaxdistnorm;
+  long rexpo, normexp = -1;
+  for (int i = 0; i < d; ++i)
+  {
+    fr      = _gso.get_r_exp(i + first, i + first, rexpo);
+    normexp = max(normexp, rexpo + fr.exponent());
+  }
+  // normalization is multiplication by 2^(-normexp). in case of dual, we are normalizing
+  // the inverse of r, so we negate the normalizing exponent
+  if (dual)
+  {
+    normexp *= -1;
+  }
+  fmaxdistnorm.mul_2si(fmaxdist, fmaxdistexpo - normexp);
+  maxdist = fmaxdistnorm.get_d(GMP_RNDU);
+  _evaluator.set_normexp(normexp);
+
+  if (dual)
+  {
+    for (int i = 0; i < d; ++i)
+    {
+      fr = _gso.get_r_exp(i + first, i + first, rexpo);
+      fr.mul_2si(fr, rexpo + normexp);
+      rdiag[d - i - 1] = enumf(1.0) / fr.get_d();
+    }
+    for (int i = 0; i < d; ++i)
+    {
+      for (int j = i + 1; j < d; ++j)
+      {
+        _gso.get_mu(fmu, j + first, i + first);
+        mut[d - j - 1][d - i - 1] = -fmu.get_d();
+      }
+    }
+  }
+  else
+  {
+    for (int i = 0; i < d; ++i)
+    {
+      fr = _gso.get_r_exp(i + first, i + first, rexpo);
+      fr.mul_2si(fr, rexpo - normexp);
+      rdiag[i] = fr.get_d();
+    }
+    for (int i = 0; i < d; ++i)
+    {
+      for (int j = i + 1; j < d; ++j)
+      {
+        _gso.get_mu(fmu, j + first, i + first);
+        mut[i][j] = fmu.get_d();
+      }
+    }
+  }
+
+  subsoldists = rdiag;
+
+  save_rounding();
+  prepare_enumeration(subtree, solvingsvp, subtree_reset);
+  do_enumerate();
+  restore_rounding();
+
+  fmaxdistnorm = maxdist;  // Exact
+
+  fmaxdist.mul_2si(fmaxdistnorm, normexp - fmaxdistexpo);
+
+  if (dual && !_evaluator.empty())
+  {
+    for (auto it = _evaluator.begin(), itend = _evaluator.end(); it != itend; ++it)
+      reverse_by_swap(it->second, 0, d - 1);
+  }
+}
+
+template <typename ZT, typename FT>
+void EnumerationDyn<ZT, FT>::prepare_enumeration(const vector<enumxt> &subtree, bool solvingsvp,
+                                                 bool subtree_reset)
+{
+  is_svp = solvingsvp;
+
+  enumf newdist = 0.0;
+  k_end         = d - subtree.size();
+  for (k = d - 1; k >= 0 && newdist <= maxdist; --k)
+  {
+    enumf newcenter = center_partsum[k];
+    if (k >= k_end)
+    {
+      // use subtree
+      x[k] = subtree[k - k_end];
+
+      if (x[k] != 0)
+        is_svp = false;
+
+      for (int j = 0; j < k; ++j)
+        center_partsum[j] -= x[k] * mut[j][k];
+    }
+    else
+    {
+      if (dual)
+      {
+        for (int j = k + 1; j < k_end; ++j)
+          newcenter -= alpha[j] * mut[k][j];
+      }
+      else
+      {
+        for (int j = k + 1; j < k_end; ++j)
+          newcenter -= x[j] * mut[k][j];
+      }
+      roundto(x[k], newcenter);  // newX = rint(newCenter) / lrint(newCenter)
+      center[k]   = newcenter;
+      partdist[k] = newdist;
+      dx[k] = ddx[k] = (((int)(newcenter >= x[k]) & 1) << 1) - 1;
+    }
+    if (!subtree_reset || k < k_end)
+    {
+      alpha[k] = x[k] - newcenter;
+      newdist += alpha[k] * alpha[k] * rdiag[k];
+    }
+  }
+  if (!is_svp)
+  {
+    k_max = k_end;  // The last non-zero coordinate of x will not stay positive
+  }
+  else
+  {
+    k_max = 0;
+    x[0]  = 1;  // Excludes (0,...,0) from the enumeration
+  }
+  ++k;
+}
+
+template <typename ZT, typename FT> void EnumerationDyn<ZT, FT>::set_bounds()
+{
+  if (pruning_bounds.empty())
+  {
+    fill(&partdistbounds[0] + 0, &partdistbounds[0] + d, maxdist);
+  }
+  else
+  {
+    for (int i = 0; i < d; ++i)
+      partdistbounds[i] = pruning_bounds[i] * maxdist;
+  }
+}
+
+template <typename ZT, typename FT> void EnumerationDyn<ZT, FT>::process_solution(enumf newmaxdist)
+{
+  FPLLL_TRACE("Sol dist: " << newmaxdist << " (nodes:" << nodes << ")");
+  for (int j = 0; j < d; ++j)
+    fx[j] = x[j];
+  _evaluator.eval_sol(fx, newmaxdist, maxdist);
+
+  set_bounds();
+}
+
+template <typename ZT, typename FT>
+void EnumerationDyn<ZT, FT>::process_subsolution(int offset, enumf newdist)
+{
+  for (int j = 0; j < offset; ++j)
+    fx[j] = 0.0;
+  for (int j = offset; j < d; ++j)
+    fx[j] = x[j];
+  _evaluator.eval_sub_sol(offset, fx, newdist);
+}
+
+template <typename ZT, typename FT> void EnumerationDyn<ZT, FT>::do_enumerate()
+{
+  nodes = 0;
+
+  set_bounds();
+
+  if (dual && _evaluator.findsubsols && !resetflag)
+    enumerate_loop<true, true, false>();
+  else if (!dual && _evaluator.findsubsols && !resetflag)
+    enumerate_loop<false, true, false>();
+  else if (dual && !_evaluator.findsubsols && !resetflag)
+    enumerate_loop<true, false, false>();
+  else if (!dual && !_evaluator.findsubsols && !resetflag)
+    enumerate_loop<false, false, false>();
+  else if (!dual && _evaluator.findsubsols && resetflag)
+    enumerate_loop<false, true, true>();
+  else if (!dual && !_evaluator.findsubsols && resetflag)
+    enumerate_loop<false, false, true>();
+}
+
+template class Enumeration<Z_NR<mpz_t>, FP_NR<double>>;
+template class EnumerationDyn<Z_NR<mpz_t>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class Enumeration<Z_NR<mpz_t>, FP_NR<long double>>;
+template class EnumerationDyn<Z_NR<mpz_t>, FP_NR<long double>>;
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class Enumeration<Z_NR<mpz_t>, FP_NR<dd_real>>;
+template class EnumerationDyn<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template class Enumeration<Z_NR<mpz_t>, FP_NR<qd_real>>;
+template class EnumerationDyn<Z_NR<mpz_t>, FP_NR<qd_real>>;
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class Enumeration<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+template class EnumerationDyn<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+#endif
+
+template class Enumeration<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+template class EnumerationDyn<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+
+template class Enumeration<Z_NR<long>, FP_NR<double>>;
+template class EnumerationDyn<Z_NR<long>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class Enumeration<Z_NR<long>, FP_NR<long double>>;
+template class EnumerationDyn<Z_NR<long>, FP_NR<long double>>;
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class Enumeration<Z_NR<long>, FP_NR<dd_real>>;
+template class EnumerationDyn<Z_NR<long>, FP_NR<dd_real>>;
+
+template class Enumeration<Z_NR<long>, FP_NR<qd_real>>;
+template class EnumerationDyn<Z_NR<long>, FP_NR<qd_real>>;
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class Enumeration<Z_NR<long>, FP_NR<dpe_t>>;
+template class EnumerationDyn<Z_NR<long>, FP_NR<dpe_t>>;
+#endif
+
+template class Enumeration<Z_NR<long>, FP_NR<mpfr_t>>;
+template class EnumerationDyn<Z_NR<long>, FP_NR<mpfr_t>>;
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/enum/enumerate.h b/fplll/enum/enumerate.h
new file mode 100644 (file)
index 0000000..7e0e7b4
--- /dev/null
@@ -0,0 +1,116 @@
+/* Copyright (C) 2008-2011 Xavier Pujol
+   (C) 2015 Michael Walter.
+   (C) 2016 Marc Stevens. (generic improvements, auxiliary solutions, subsolutions)
+   (C) 2016 Guillaume Bonnoron. (CVP improvements)
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_ENUMERATE_H
+#define FPLLL_ENUMERATE_H
+
+#include <array>
+#include <fplll/enum/enumerate_base.h>
+#include <fplll/enum/enumerate_ext.h>
+#include <fplll/enum/evaluator.h>
+#include <fplll/gso_interface.h>
+#include <memory>
+
+FPLLL_BEGIN_NAMESPACE
+
+template <typename ZT, typename FT> class EnumerationDyn : public EnumerationBase
+{
+public:
+  EnumerationDyn(MatGSOInterface<ZT, FT> &gso, Evaluator<FT> &evaluator,
+                 const vector<int> &max_indices = vector<int>())
+      : _gso(gso), _evaluator(evaluator)
+  {
+    _max_indices = max_indices;
+  }
+
+  void enumerate(int first, int last, FT &fmaxdist, long fmaxdistexpo,
+                 const vector<FT> &target_coord = vector<FT>(),
+                 const vector<enumxt> &subtree  = vector<enumxt>(),
+                 const vector<enumf> &pruning = vector<enumf>(), bool dual = false,
+                 bool subtree_reset = false);
+
+  inline uint64_t get_nodes() const { return nodes; }
+
+private:
+  MatGSOInterface<ZT, FT> &_gso;
+  Evaluator<FT> &_evaluator;
+  vector<FT> target;
+
+  vector<enumf> pruning_bounds;
+  enumf maxdist;
+  vector<FT> fx;
+
+  void prepare_enumeration(const vector<enumxt> &subtree, bool solvingsvp, bool subtree_reset);
+
+  void do_enumerate();
+
+  void set_bounds();
+  void reset(enumf cur_dist, int cur_depth);
+  virtual void process_solution(enumf newmaxdist);
+  virtual void process_subsolution(int offset, enumf newdist);
+};
+
+template <typename ZT, typename FT> class Enumeration
+{
+public:
+  Enumeration(MatGSOInterface<ZT, FT> &gso, Evaluator<FT> &evaluator,
+              const vector<int> &max_indices = vector<int>())
+      : _gso(gso), _evaluator(evaluator), _max_indices(max_indices), enumdyn(nullptr), _nodes(0)
+  {
+  }
+
+  void enumerate(int first, int last, FT &fmaxdist, long fmaxdistexpo,
+                 const vector<FT> &target_coord = vector<FT>(),
+                 const vector<enumxt> &subtree  = vector<enumxt>(),
+                 const vector<enumf> &pruning = vector<enumf>(), bool dual = false,
+                 bool subtree_reset = false)
+  {
+    // check for external enumerator and use that
+    if (get_external_enumerator() != nullptr && subtree.empty() && target_coord.empty())
+    {
+      if (enumext.get() == nullptr)
+        enumext.reset(new ExternalEnumeration<ZT, FT>(_gso, _evaluator));
+      if (enumext->enumerate(first, last, fmaxdist, fmaxdistexpo, pruning, dual))
+      {
+        _nodes = enumext->get_nodes();
+        return;
+      }
+    }
+    // if external enumerator is not available, not possible or when it fails then fall through to
+    // fplll enumeration
+    if (enumdyn.get() == nullptr)
+      enumdyn.reset(new EnumerationDyn<ZT, FT>(_gso, _evaluator, _max_indices));
+    enumdyn->enumerate(first, last, fmaxdist, fmaxdistexpo, target_coord, subtree, pruning, dual,
+                       subtree_reset);
+    _nodes = enumdyn->get_nodes();
+  }
+
+  inline uint64_t get_nodes() const { return _nodes; }
+
+private:
+  MatGSOInterface<ZT, FT> &_gso;
+  Evaluator<FT> &_evaluator;
+  vector<int> _max_indices;
+  std::unique_ptr<EnumerationDyn<ZT, FT>> enumdyn;
+  std::unique_ptr<ExternalEnumeration<ZT, FT>> enumext;
+  uint64_t _nodes;
+};
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/enum/enumerate_base.cpp b/fplll/enum/enumerate_base.cpp
new file mode 100644 (file)
index 0000000..50382dd
--- /dev/null
@@ -0,0 +1,265 @@
+/* Copyright (C) 2008-2011 Xavier Pujol
+   (C) 2015 Michael Walter.
+   (C) 2016 Marc Stevens. (generic improvements, auxiliary solutions, subsolutions)
+   (C) 2016 Guillaume Bonnoron. (CVP improvements)
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "enumerate_base.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+#ifdef FPLLL_WITH_RECURSIVE_ENUM
+template <int kk, int kk_start, bool dualenum, bool findsubsols, bool enable_reset>
+inline void EnumerationBase::enumerate_recursive(
+    EnumerationBase::opts<kk, kk_start, dualenum, findsubsols, enable_reset>)
+{
+  enumf alphak  = x[kk] - center[kk];
+  enumf newdist = partdist[kk] + alphak * alphak * rdiag[kk];
+
+  if (!(newdist <= partdistbounds[kk]))
+    return;
+  ++nodes;
+
+  alpha[kk] = alphak;
+  if (findsubsols && newdist < subsoldists[kk] && newdist != 0.0)
+  {
+    subsoldists[kk] = newdist;
+    process_subsolution(kk, newdist);
+  }
+
+  if (kk == 0)
+  {
+    if (newdist > 0.0 || !is_svp)
+      process_solution(newdist);
+  }
+  else if (enable_reset &&
+           kk < reset_depth)  // in CVP, below the max GS vector, we reset the partial distance
+  {
+    reset(newdist, kk);
+    return;
+  }
+  else
+  {
+    partdist[kk - 1] = newdist;
+    if (dualenum)
+    {
+      for (int j = center_partsum_begin[kk]; j > kk - 1; --j)
+        center_partsums[kk - 1][j] = center_partsums[kk - 1][j + 1] - alpha[j] * mut[kk - 1][j];
+    }
+    else
+    {
+      for (int j = center_partsum_begin[kk]; j > kk - 1; --j)
+        center_partsums[kk - 1][j] = center_partsums[kk - 1][j + 1] - x[j] * mut[kk - 1][j];
+    }
+    if (center_partsum_begin[kk] > center_partsum_begin[kk - 1])
+      center_partsum_begin[kk - 1] = center_partsum_begin[kk];
+    center_partsum_begin[kk] = kk;
+    center[kk - 1]           = center_partsums[kk - 1][kk];
+    roundto(x[kk - 1], center[kk - 1]);
+    dx[kk - 1] = ddx[kk - 1] = (((int)(center[kk - 1] >= x[kk - 1]) & 1) << 1) - 1;
+  }
+
+  while (true)
+  {
+    FPLLL_TRACE("Level k=" << kk << " dist_k=" << partdist[kk] << " x_k=" << x[kk]
+                           << " newdist=" << newdist << " partdistbounds_k=" << partdistbounds[kk]);
+    enumerate_recursive(opts<kk - 1, kk_start, dualenum, findsubsols, enable_reset>());
+
+    if (partdist[kk] != 0.0)
+    {
+      x[kk] += dx[kk];
+      ddx[kk] = -ddx[kk];
+      dx[kk]  = ddx[kk] - dx[kk];
+
+      enumf alphak2  = x[kk] - center[kk];
+      enumf newdist2 = partdist[kk] + alphak2 * alphak2 * rdiag[kk];
+      if (!(newdist2 <= partdistbounds[kk]))
+        return;
+      ++nodes;
+      alpha[kk] = alphak2;
+      if (kk == 0)
+      {
+        if (newdist2 > 0.0 || !is_svp)
+          process_solution(newdist2);
+      }
+      else
+      {
+        partdist[kk - 1] = newdist2;
+        if (dualenum)
+          center_partsums[kk - 1][kk - 1 + 1] =
+              center_partsums[kk - 1][kk - 1 + 1 + 1] - alpha[kk - 1 + 1] * mut[kk - 1][kk - 1 + 1];
+        else
+          center_partsums[kk - 1][kk - 1 + 1] =
+              center_partsums[kk - 1][kk - 1 + 1 + 1] - x[kk - 1 + 1] * mut[kk - 1][kk - 1 + 1];
+        if (kk > center_partsum_begin[kk - 1])
+          center_partsum_begin[kk - 1] = kk;
+        center[kk - 1] = center_partsums[kk - 1][kk - 1 + 1];
+        roundto(x[kk - 1], center[kk - 1]);
+        dx[kk - 1] = ddx[kk - 1] = (((int)(center[kk - 1] >= x[kk - 1]) & 1) << 1) - 1;
+      }
+    }
+    else
+    {
+      ++x[kk];
+
+      enumf alphak2  = x[kk] - center[kk];
+      enumf newdist2 = partdist[kk] + alphak2 * alphak2 * rdiag[kk];
+      if (!(newdist2 <= partdistbounds[kk]))
+        return;
+      ++nodes;
+      alpha[kk] = alphak2;
+      if (kk == 0)
+      {
+        if (newdist2 > 0.0 || !is_svp)
+          process_solution(newdist2);
+      }
+      else
+      {
+        partdist[kk - 1] = newdist2;
+        if (dualenum)
+          center_partsums[kk - 1][kk - 1 + 1] =
+              center_partsums[kk - 1][kk - 1 + 1 + 1] - alpha[kk - 1 + 1] * mut[kk - 1][kk - 1 + 1];
+        else
+          center_partsums[kk - 1][kk - 1 + 1] =
+              center_partsums[kk - 1][kk - 1 + 1 + 1] - x[kk - 1 + 1] * mut[kk - 1][kk - 1 + 1];
+        if (kk > center_partsum_begin[kk - 1])
+          center_partsum_begin[kk - 1] = kk;
+        center[kk - 1] = center_partsums[kk - 1][kk - 1 + 1];
+        roundto(x[kk - 1], center[kk - 1]);
+        dx[kk - 1] = ddx[kk - 1] = (((int)(center[kk - 1] >= x[kk - 1]) & 1) << 1) - 1;
+      }
+    }
+  }
+}
+
+#define ENUM_TABLE_FILL8(a)                                                                        \
+  &EnumerationBase::enumerate_recursive_wrapper<a + 0, dualenum, findsubsols, enable_reset>,       \
+      &EnumerationBase::enumerate_recursive_wrapper<a + 1, dualenum, findsubsols, enable_reset>,   \
+      &EnumerationBase::enumerate_recursive_wrapper<a + 2, dualenum, findsubsols, enable_reset>,   \
+      &EnumerationBase::enumerate_recursive_wrapper<a + 3, dualenum, findsubsols, enable_reset>,   \
+      &EnumerationBase::enumerate_recursive_wrapper<a + 4, dualenum, findsubsols, enable_reset>,   \
+      &EnumerationBase::enumerate_recursive_wrapper<a + 5, dualenum, findsubsols, enable_reset>,   \
+      &EnumerationBase::enumerate_recursive_wrapper<a + 6, dualenum, findsubsols, enable_reset>,   \
+      &EnumerationBase::enumerate_recursive_wrapper<a + 7, dualenum, findsubsols, enable_reset>
+#define ENUM_TABLE_FILL64(a)                                                                       \
+  ENUM_TABLE_FILL8(a)                                                                              \
+  , ENUM_TABLE_FILL8(a + 8), ENUM_TABLE_FILL8(a + 16), ENUM_TABLE_FILL8(a + 24),                   \
+      ENUM_TABLE_FILL8(a + 32), ENUM_TABLE_FILL8(a + 40), ENUM_TABLE_FILL8(a + 48),                \
+      ENUM_TABLE_FILL8(a + 56)
+#define ENUM_TABLE_FILL256(a)                                                                      \
+  ENUM_TABLE_FILL64(a)                                                                             \
+  , ENUM_TABLE_FILL64(a + 64), ENUM_TABLE_FILL64(a + 128), ENUM_TABLE_FILL64(a + 192)
+
+template <bool dualenum, bool findsubsols, bool enable_reset>
+inline void EnumerationBase::enumerate_recursive_dispatch(int kk)
+{
+  typedef void (EnumerationBase::*enum_recur_type)();
+  static const enum_recur_type lookup[] = {
+      ENUM_TABLE_FILL256(0),    ENUM_TABLE_FILL256(256),  ENUM_TABLE_FILL256(512),
+      ENUM_TABLE_FILL256(768),  ENUM_TABLE_FILL256(1024), ENUM_TABLE_FILL256(1280),
+      ENUM_TABLE_FILL256(1536), ENUM_TABLE_FILL256(1792),
+  };
+  (this->*lookup[kk])();
+}
+
+#endif
+
+template <bool dualenum, bool findsubsols, bool enable_reset> void EnumerationBase::enumerate_loop()
+{
+  if (k >= k_end)
+    return;
+
+  center_partsum_begin[0] = 0;
+  for (int i = 0; i < k_end; ++i)
+  {
+    center_partsum_begin[i + 1] = k_end - 1;
+    center_partsums[i][k_end]   = center_partsum[i];
+  }
+
+  partdist[k_end] = 0.0;  // needed to make next_pos_up() work properly
+
+  nodes -= k_end - k;
+  k = k_end - 1;
+
+#ifdef FPLLL_WITH_RECURSIVE_ENUM
+  enumerate_recursive_dispatch<dualenum, findsubsols, enable_reset>(k);
+  return;
+#endif
+
+  finished = false;
+  while (!finished)
+  {
+    enumf alphak  = x[k] - center[k];
+    enumf newdist = partdist[k] + alphak * alphak * rdiag[k];
+    FPLLL_TRACE("Level k=" << k << " dist_k=" << partdist[k] << " x_k=" << x[k]
+                           << " newdist=" << newdist << " partdistbounds_k=" << partdistbounds[k]);
+    if (newdist <= partdistbounds[k])
+    {
+      ++nodes;
+      alpha[k] = alphak;
+      if (findsubsols && newdist < subsoldists[k] && newdist != 0.0)
+      {
+        subsoldists[k] = newdist;
+        process_subsolution(k, newdist);
+      }
+      --k;
+      if (k < 0)
+      {
+        if (newdist > 0.0 || !is_svp)
+          process_solution(newdist);
+        finished = !next_pos_up();
+        continue;
+      }
+      if (enable_reset &&
+          k < reset_depth)  // in CVP, below the max GS vector, we reset the partial distance
+      {
+        reset(newdist, k);
+        finished = !next_pos_up();
+        continue;
+      }
+      if (dualenum)
+      {
+        for (int j = center_partsum_begin[k + 1]; j > k; --j)
+          center_partsums[k][j] = center_partsums[k][j + 1] - alpha[j] * mut[k][j];
+      }
+      else
+      {
+        for (int j = center_partsum_begin[k + 1]; j > k; --j)
+          center_partsums[k][j] = center_partsums[k][j + 1] - x[j] * mut[k][j];
+      }
+      center_partsum_begin[k]     = max(center_partsum_begin[k], center_partsum_begin[k + 1]);
+      center_partsum_begin[k + 1] = k + 1;
+
+      enumf newcenter = center_partsums[k][k + 1];
+      center[k]       = newcenter;
+      partdist[k]     = newdist;
+      roundto(x[k], newcenter);
+      dx[k] = ddx[k] = (((int)(newcenter >= x[k]) & 1) << 1) - 1;
+    }
+    else
+    {
+      finished = !next_pos_up();
+    }
+  }
+}
+
+template void EnumerationBase::enumerate_loop<false, false, true>();
+template void EnumerationBase::enumerate_loop<false, true, true>();
+template void EnumerationBase::enumerate_loop<false, false, false>();
+template void EnumerationBase::enumerate_loop<false, true, false>();
+template void EnumerationBase::enumerate_loop<true, false, false>();
+template void EnumerationBase::enumerate_loop<true, true, false>();
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/enum/enumerate_base.h b/fplll/enum/enumerate_base.h
new file mode 100644 (file)
index 0000000..a7649ad
--- /dev/null
@@ -0,0 +1,157 @@
+/* Copyright (C) 2008-2011 Xavier Pujol
+   (C) 2015 Michael Walter.
+   (C) 2016 Marc Stevens. (generic improvements, auxiliary solutions, subsolutions)
+   (C) 2016 Guillaume Bonnoron. (CVP improvements)
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_ENUMERATE_BASE_H
+#define FPLLL_ENUMERATE_BASE_H
+
+#include "fplll/fplll_config.h"
+#include "fplll/nr/nr.h"
+#include <array>
+#include <cfenv>
+#include <cmath>
+#include <vector>
+
+FPLLL_BEGIN_NAMESPACE
+
+inline void roundto(int &dest, const double &src) { dest = (int)round(src); }
+inline void roundto(double &dest, const double &src) { dest = round(src); }
+
+/* config */
+#define MAXTEMPLATEDDIMENSION 80  // unused
+//#define FORCE_ENUM_INLINE // not recommended
+/* end config */
+
+#ifndef __has_attribute
+#define __has_attribute(x) 0  // Compatibility with non - GCC/clang compilers.
+#endif
+#if __has_attribute(always_inline)
+#define ALWAYS_INLINE __attribute__((always_inline))
+#else
+#define ALWAYS_INLINE
+#endif
+
+#ifndef FORCE_ENUM_INLINE
+#define ENUM_ALWAYS_INLINE
+#else
+#define ENUM_ALWAYS_INLINE ALWAYS_INLINE
+#endif
+
+class EnumerationBase
+{
+public:
+  static const int maxdim = FPLLL_MAX_ENUM_DIM;
+
+  inline uint64_t get_nodes() const { return nodes; }
+  virtual ~EnumerationBase() {}
+
+protected:
+  /* configuration */
+  bool dual;
+  bool is_svp;
+  bool resetflag;
+
+  /* enumeration input */
+  enumf mut[maxdim][maxdim];
+  array<enumf, maxdim> rdiag, partdistbounds;
+  int d, k_end;  // dimension, subtreelevel
+
+  /* partial sum cache */
+  enumf center_partsums[maxdim][maxdim];
+  array<enumf, maxdim> center_partsum;
+  array<int, maxdim> center_partsum_begin;
+
+  /* enumeration data for each level */
+  array<enumf, maxdim> partdist, center, alpha;
+  array<enumxt, maxdim> x, dx, ddx;
+  array<enumf, maxdim> subsoldists;
+
+  /* CVP reset informations */
+  vector<int> _max_indices;
+  int reset_depth;
+
+  int k, k_max;
+  bool finished;
+
+  /* nodes count */
+  uint64_t nodes;
+
+  template <int kk, int kk_start, bool dualenum, bool findsubsols, bool enable_reset> struct opts
+  {
+  };
+
+  /* need templated function argument for support of integer specialization for kk==-1 */
+  template <int kk, int kk_start, bool dualenum, bool findsubsols, bool enable_reset>
+  inline void enumerate_recursive(opts<kk, kk_start, dualenum, findsubsols, enable_reset>)
+      ENUM_ALWAYS_INLINE;
+  template <int kk_start, bool dualenum, bool findsubsols, bool enable_reset>
+  inline void enumerate_recursive(opts<-1, kk_start, dualenum, findsubsols, enable_reset>)
+  {
+  }
+
+  /* simple wrapper with no function argument as helper for dispatcher */
+  template <int kk, bool dualenum, bool findsubsols, bool enable_reset>
+  void enumerate_recursive_wrapper()
+  {
+    // kk < maxdim-1:
+    // kk < kk_end                         (see enumerate_loop(), enumerate_base.cpp)
+    // kk_end = d - subtree.size() <= d    (see prepare_enumeration(), enumerate.cpp)
+    // d < maxdim                          (see enumerate(), enumerate.cpp)
+    enumerate_recursive(
+        opts<(kk < (maxdim - 1) ? kk : -1), 0, dualenum, findsubsols, enable_reset>());
+  }
+
+  template <bool dualenum, bool findsubsols, bool enable_reset>
+  inline void enumerate_recursive_dispatch(int kk);
+
+  template <bool dualenum, bool findsubsols, bool enable_reset> void enumerate_loop();
+
+  virtual void reset(enumf, int)                              = 0;
+  virtual void process_solution(enumf newmaxdist)             = 0;
+  virtual void process_subsolution(int offset, enumf newdist) = 0;
+
+  int rounding_backup;
+  void save_rounding()
+  {
+    rounding_backup = std::fegetround();
+    std::fesetround(FE_TONEAREST);
+  }
+  void restore_rounding() { std::fesetround(rounding_backup); }
+
+  inline bool next_pos_up()
+  {
+    ++k;
+    if (partdist[k] != 0.0)
+    {
+      x[k] += dx[k];
+      ddx[k] = -ddx[k];
+      dx[k]  = ddx[k] - dx[k];
+    }
+    else
+    {
+      if (k >= k_end)
+        return false;
+      k_max = k;
+      ++x[k];
+    }
+    return true;
+  }
+};
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/enum/enumerate_ext.cpp b/fplll/enum/enumerate_ext.cpp
new file mode 100644 (file)
index 0000000..88ca644
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+   (C) 2016 Marc Stevens.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "enumerate_ext.h"
+#include <fplll/defs.h>
+
+#if FPLLL_MAX_PARALLEL_ENUM_DIM != 0
+#include "../enum-parallel/enumlib.h"
+#endif
+
+FPLLL_BEGIN_NAMESPACE
+
+// set & get external enumerator (nullptr => disabled)
+#if FPLLL_MAX_PARALLEL_ENUM_DIM != 0
+std::function<extenum_fc_enumerate> fplll_extenum = enumlib::enumlib_enumerate;
+#else
+std::function<extenum_fc_enumerate> fplll_extenum = nullptr;
+#endif
+
+void set_external_enumerator(std::function<extenum_fc_enumerate> extenum)
+{
+  fplll_extenum = extenum;
+}
+
+std::function<extenum_fc_enumerate> get_external_enumerator() { return fplll_extenum; }
+
+template <typename ZT, typename FT>
+bool ExternalEnumeration<ZT, FT>::enumerate(int first, int last, FT &fmaxdist, long fmaxdistexpo,
+                                            const vector<enumf> &pruning, bool dual)
+{
+  using namespace std::placeholders;
+  if (fplll_extenum == nullptr)
+    return false;
+  if (last == -1)
+    last = _gso.d;
+
+  _first   = first;
+  _dual    = dual;
+  _pruning = pruning;
+  _d       = last - _first;
+  _fx.resize(_d);
+
+  FPLLL_CHECK(_pruning.empty() || int(_pruning.size()) == _d,
+              "ExternalEnumeration: non-empty pruning vector dimension does not match");
+
+  FT fr, fmu, fmaxdistnorm;
+  long rexpo;
+  _normexp = -1;
+  for (int i = 0; i < _d; ++i)
+  {
+    fr       = _gso.get_r_exp(i + first, i + first, rexpo);
+    _normexp = max(_normexp, rexpo + fr.exponent());
+  }
+  fmaxdistnorm.mul_2si(fmaxdist, dual ? _normexp - fmaxdistexpo : fmaxdistexpo - _normexp);
+
+  _maxdist = fmaxdistnorm.get_d(GMP_RNDU);
+  _evaluator.set_normexp(_normexp);
+
+  // clang-format off
+  _nodes = fplll_extenum(_d, _maxdist,
+                         std::bind(&ExternalEnumeration<ZT,FT>::callback_set_config, this, _1, _2, _3, _4, _5),
+                         std::bind(&ExternalEnumeration<ZT,FT>::callback_process_sol, this, _1, _2),
+                         std::bind(&ExternalEnumeration<ZT,FT>::callback_process_subsol, this, _1, _2, _3),
+               _dual, _evaluator.findsubsols
+               );
+  // clang-format on
+  return _nodes != ~uint64_t(0);
+}
+
+template <typename ZT, typename FT>
+void ExternalEnumeration<ZT, FT>::callback_set_config(enumf *mu, size_t mudim, bool mutranspose,
+                                                      enumf *rdiag, enumf *pruning)
+{
+
+  FT fr, fmu;
+  long rexpo;
+  // Copy over the squared norms for the Gram-Schmidt vectors.
+  // Note that these norms are normalised.
+  for (int i = 0; i < _d; ++i)
+  {
+    fr = _gso.get_r_exp(i + _first, i + _first, rexpo);
+    fr.mul_2si(fr, rexpo - _normexp);
+    rdiag[i] = fr.get_d();
+  }
+
+  // Now we copy the mu values from the gso matrix.
+  if (mutranspose)
+  {
+
+    size_t offs = 0;
+    for (int i = 0; i < _d; ++i, offs += mudim)
+    {
+      for (int j = i + 1; j < _d; ++j)
+      {
+        _gso.get_mu(fmu, j + _first, i + _first);
+        /* mu[i][j]= */
+        mu[offs + j] = fmu.get_d();
+      }
+    }
+  }
+  else
+  {
+    size_t offs = 0;
+    for (int j = 0; j < _d; ++j, offs += mudim)
+    {
+      for (int i = 0; i < _d; ++i)
+      {
+        _gso.get_mu(fmu, j + _first, i + _first);
+        /* mu[j][i] = */
+        mu[offs + i] = fmu.get_d();
+      }
+    }
+  }
+
+  // if there's no pruning enabled then we just fill pruning with 1s
+  if (_pruning.empty())
+  {
+    for (int i = 0; i < _d; ++i)
+      pruning[i] = 1.0;
+  }
+  else
+  {
+    // Otherwise we just copy over the pruning parameters
+    for (int i = 0; i < _d; ++i)
+      pruning[i] = _pruning[i];
+  }
+}
+
+template <typename ZT, typename FT>
+enumf ExternalEnumeration<ZT, FT>::callback_process_sol(enumf dist, enumf *sol)
+{
+  for (int i = 0; i < _d; ++i)
+    _fx[i] = sol[i];
+  _evaluator.eval_sol(_fx, dist, _maxdist);
+  return _maxdist;
+}
+
+template <typename ZT, typename FT>
+void ExternalEnumeration<ZT, FT>::callback_process_subsol(enumf dist, enumf *subsol, int offset)
+{
+  for (int i = 0; i < offset; ++i)
+    _fx[i] = 0.0;
+  for (int i = offset; i < _d; ++i)
+    _fx[i] = subsol[i];
+  _evaluator.eval_sub_sol(offset, _fx, dist);
+}
+
+template class ExternalEnumeration<Z_NR<mpz_t>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class ExternalEnumeration<Z_NR<mpz_t>, FP_NR<long double>>;
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class ExternalEnumeration<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template class ExternalEnumeration<Z_NR<mpz_t>, FP_NR<qd_real>>;
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class ExternalEnumeration<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+#endif
+
+template class ExternalEnumeration<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+
+template class ExternalEnumeration<Z_NR<long>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class ExternalEnumeration<Z_NR<long>, FP_NR<long double>>;
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class ExternalEnumeration<Z_NR<long>, FP_NR<dd_real>>;
+
+template class ExternalEnumeration<Z_NR<long>, FP_NR<qd_real>>;
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class ExternalEnumeration<Z_NR<long>, FP_NR<dpe_t>>;
+#endif
+
+template class ExternalEnumeration<Z_NR<long>, FP_NR<mpfr_t>>;
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/enum/enumerate_ext.h b/fplll/enum/enumerate_ext.h
new file mode 100644 (file)
index 0000000..efd0701
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+   (C) 2016 Marc Stevens.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_ENUMERATE_EXT_H
+#define FPLLL_ENUMERATE_EXT_H
+
+#include <array>
+#include <fplll/enum/enumerate_base.h>
+#include <fplll/enum/evaluator.h>
+#include <fplll/gso_interface.h>
+#include <functional>
+#include <memory>
+
+FPLLL_BEGIN_NAMESPACE
+
+/* function callback API for external enumeration library (extenum) */
+
+/**
+ * Callback function given to external enumeration library.
+ *
+ * @param[out] mu - this is a pointer to an array 'enumf mu[mudim][mudim]'.
+ *            Upon return, this array will contain
+ *            the mu values for the lattice basis.
+ *            Note that the array pointed to by this argument needs to be contiguous,
+ *            otherwise there will be write errors.
+ *            This means that the only acceptable arguments are pointers to
+ *            variable-length arrays, 1D std::vector of dimension mudim*mudim, or
+ *            1D raw(resp. std::array) arrays of dimension mudim*mudim.
+ * @param[in]  mudim - the number of rows(resp. columns) in the mu array.
+ * @param[out] mutranspose - when true, mutranspose is stored in the mu param.
+ *                           Otherwise, mu is stored in the mu param.
+ *                     Storing mutranspose allows for more efficient memory access, as accesses
+ * will be contiguous.
+ * @param[out] rdiag - a pointer to an array 'enumf rdiag[mudim]'.
+ *                    Upon return, this will contain the squared norms of the Gram-Schmidt vectors.
+ * @param[out] pruning - a pointer to an array 'enumf pruning[mudim]'. Upon return, this will
+ * contain the pruning coefficients for enumeration. In rigorous enumeration, this array will
+ * consist solely of 1's.
+ */
+typedef void(extenum_cb_set_config)(enumf *mu, size_t mudim, bool mutranspose, enumf *rdiag,
+                                    enumf *pruning);
+
+/**
+ * Callback function given to external enumeration library.
+ * Passes a new solution and its length to Evaluator, returning the new enumeration bound.
+ * @param[in] dist - the norm of the new solution.
+ * @param[in] sol - a pointer to the new solution.
+ * @return The new enumeration bound.
+ */
+typedef enumf(extenum_cb_process_sol)(enumf dist, enumf *sol);
+
+/**
+ * Callback function given to external enumeration library.
+ *
+ * Pass a subsolution and its partial length to Evaluator.
+ */
+typedef void(extenum_cb_process_subsol)(enumf dist, enumf *subsol, int offset);
+
+/**
+ * External enumeration function prototype.
+ *
+ * @param dim         enumeration dimension.
+ * @param maxdist     initial enumeration bound.
+ * @param cbfunc      given callback function to get mu, rdiag, pruning
+ * @param cbsol       given callback function to pass solution and its length to Evaluator,
+ *                    it returns new enumeration bound
+ * @param cbsubsol    given callback function to pass subsolution and its length to Evaluator
+ * @param dual        do dual SVP enumeration
+ * @param findsubsols find subsolutions and pass them to Evaluator
+ * @return number of nodes visited.
+ *         Or ~uint64_t(0) when instance is not supported
+ *         in which case fplll falls back to its own enumeration.
+ */
+typedef uint64_t(extenum_fc_enumerate)(const int dim, enumf maxdist,
+                                       std::function<extenum_cb_set_config> cbfunc,
+                                       std::function<extenum_cb_process_sol> cbsol,
+                                       std::function<extenum_cb_process_subsol> cbsubsol,
+                                       bool dual /*=false*/, bool findsubsols /*=false*/
+);
+
+/* set & get external enumerator. If extenum = nullptr then this interface is disabled,
+                                  and fplll will use the internal enumerator.
+                                  Otherwise, fplll will use the enumeration function pointed to
+                                  by extenum.
+*/
+void set_external_enumerator(std::function<extenum_fc_enumerate> extenum = nullptr);
+std::function<extenum_fc_enumerate> get_external_enumerator();
+
+template <typename ZT, typename FT> class ExternalEnumeration
+{
+public:
+  ExternalEnumeration(MatGSOInterface<ZT, FT> &gso, Evaluator<FT> &evaluator)
+      : _gso(gso), _evaluator(evaluator)
+  {
+  }
+
+  bool enumerate(int first, int last, FT &fmaxdist, long fmaxdistexpo,
+                 const vector<enumf> &pruning = vector<enumf>(), bool dual = false);
+
+  // get_nodes. This returns the number of nodes visited by the external enumeration process.
+  // If this returns 0, then fplll will fall back to the internal enumerator.
+  inline uint64_t get_nodes() const { return _nodes; }
+
+private:
+  void callback_set_config(enumf *mu, size_t mudim, bool mutranspose, enumf *rdiag, enumf *pruning);
+
+  enumf callback_process_sol(enumf dist, enumf *sol);
+
+  void callback_process_subsol(enumf dist, enumf *subsol, int offset);
+
+  MatGSOInterface<ZT, FT> &_gso;
+  Evaluator<FT> &_evaluator;
+  vector<enumf> _pruning;
+  long _normexp;
+
+  uint64_t _nodes;
+  bool _dual;
+  int _d, _first;
+  enumf _maxdist;
+  vector<FT> _fx;
+};
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/enum/evaluator.cpp b/fplll/enum/evaluator.cpp
new file mode 100644 (file)
index 0000000..d1ae961
--- /dev/null
@@ -0,0 +1,357 @@
+/* Copyright (C) 2008-2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "evaluator.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+void ErrorBoundedEvaluator::init_delta_def(int prec, double rho, bool withRoundingToEnumf)
+{
+  /* Computes error bounds on GSO
+      For all 0 <= i < d and 0 <= j <= i we have:
+      |r~_i - r_i| / r_i <= maxRelDR = d * rho ^ (i + 1) * 2 ^ (2 - prec)
+      |mu~_(i,j) - mu_(i,j)| <= d * rho ^ (i + 1) * 2 ^ (4 - prec)
+      The following formula is used to bound absolute error on r_i:
+      |r~_i - r_i| <= r_i * maxRelDR <= (r~_i + |r~_i - r_i| * maxRelDR)
+      ==> |r~_i - r_i| <= r~_i * maxRelDR / (1 - maxRelDR)  */
+  FP_NR<mpfr_t> rhoPow, maxRelDR, ftmp1;
+  input_error_defined = true;
+  for (int j = 0; j < d; j++)
+  {
+    rhoPow = rho;
+    rhoPow.pow_si(rhoPow, j + 1, GMP_RNDU);  // >= rho ^ (j + 1)
+    ftmp1 = d;
+    ftmp1.mul_2si(ftmp1, 2 - prec);         // = d * 2 ^ (2 - prec)
+    maxRelDR.mul(ftmp1, rhoPow, GMP_RNDU);  // >= |r~_j - r_j| / r_j
+    ftmp1 = 1.0;
+    ftmp1.sub(ftmp1, maxRelDR, GMP_RNDD);  // <= 1 - maxRelDR
+    ftmp1.div(maxRelDR, ftmp1, GMP_RNDU);  // >= maxRelDR/(1-maxRelDR)
+    ftmp1.mul(ftmp1, r(j, j));             // >= |r~_j - r_j|
+    max_dr_diag[j] = ftmp1;
+
+    ftmp1 = d;
+    ftmp1.mul_2si(ftmp1, 4 - prec);      // = d * 2 ^ (4 - prec)
+    ftmp1.mul(ftmp1, rhoPow, GMP_RNDU);  // >= |mu~_(?,j) - mu_(?,j)|
+    max_dm_u[j] = ftmp1;
+  }
+  if (withRoundingToEnumf)
+  {
+    FP_NR<mpfr_t> halfULP;
+    halfULP = numeric_limits<double>::epsilon() * 0.5;
+    for (int j = 0; j < d; j++)
+    {
+      max_dr_diag[j].addmul(r(j, j), halfULP, GMP_RNDU);  // >= |double(r~_j) - r_j|
+      max_dm_u[j].add(max_dm_u[j], halfULP, GMP_RNDU);
+    }
+  }
+}
+
+/* Main function for error evaluation
+   Returns maxDE such that in each loop of the enumeration, if
+     exact_squared_norm(vector) <= max_dist (when boundOnExactVal = true)
+   or
+     computed_squared_norm(vector) <= max_dist (when boundOnExactVal = false)
+   then
+     |exact_squared_norm(vector) - computed_squared_norm(vector)| <= maxDE
+   (computed_squared_norm(vector) is the variable 'new_dist' is enumerateLoop)
+
+   In the following comments:
+   - The symbols +~ and *~ represent rounded fp addition and multiplication
+   - a,b,c,... represent exact values
+   - a~,b~,c~,... are approx. values used or computed by the fp algorithm */
+
+bool ErrorBoundedEvaluator::get_max_error_aux(const FP_NR<mpfr_t> &max_dist, bool boundOnExactVal,
+                                              FP_NR<mpfr_t> &maxDE)
+{
+
+  FPLLL_CHECK(input_error_defined,
+              "Evaluator: error evaluation failed because the input error is undefined");
+
+  FP_NR<mpfr_t> ulp, halfULP, K, tmp1, tmp2;
+  FP_NR<mpfr_t> rdiagTilde, minRDiag, maxRDiag, muTilde, maxMu, maxMuTildeX;
+  FP_NR<mpfr_t> maxC, maxCTilde, maxY, maxYTilde, maxY2Tilde, maxRY2Tilde;
+  FP_NR<mpfr_t> maxDC, maxDY, maxDY2, maxDRY2;
+  vector<FP_NR<mpfr_t>> maxX(d);
+
+  ulp = numeric_limits<double>::epsilon();
+  halfULP.mul_2si(ulp, -1);
+  K = 1.0;
+  K.add(K, halfULP, GMP_RNDU);
+  maxDE = 0.0;
+
+  for (int i = d - 1; i >= 0; i--)
+  {
+    maxC      = 0.0;
+    maxCTilde = 0.0;
+    maxDC     = 0.0;
+
+    long rdiagExp = r(i, i).exponent();
+    tmp1.mul_2si(r(i, i), -rdiagExp);
+    tmp1 = tmp1.get_d();
+    rdiagTilde.mul_2si(tmp1, rdiagExp);  // = r~_i
+
+    /* Computes bounds on:
+       C = mu(d-1,i) * x_(d-1) + ... + mu(j,i) * x_j
+       C~ = mu~(d-1,i) *~ x_(d-1) +~ ... +~ mu~(j,i) *~ x_j
+       DC = |C - C~|  */
+    for (int j = d - 1; j > i; j--)
+    {
+      maxMu.abs(mu(j, i));
+      maxMu.add(maxMu, max_dm_u[i], GMP_RNDU);  // >= |mu(j,i)|
+      maxC.addmul(maxMu, maxX[j], GMP_RNDU);
+      // now maxC >= |mu(d-1,i)| * |x_(d-1)| + ... + |mu(j,i)| * |x_j|
+      muTilde = fabs(mu(j, i).get_d());              // = |mu~(j,i)|
+      maxMuTildeX.mul(muTilde, maxX[j], GMP_RNDU);   // >= mu~(j,i) * x_j
+      maxDC.addmul(max_dm_u[i], maxX[j]);            // err1: initial error on mu
+      maxDC.addmul(maxMuTildeX, halfULP, GMP_RNDU);  // err2: rounding after *
+      maxMuTildeX.mul(maxMuTildeX, K, GMP_RNDU);     // >= mu~(j,i) *~ x_j
+      maxCTilde.addmul(maxMuTildeX, K, GMP_RNDU);
+      // now maxCTilde >= |mu(d-1,i)| *~ |x_(d-1)| +~ ... + |mu(j,i)| *~ |x_j|
+      maxDC.addmul(maxCTilde, halfULP, GMP_RNDU);  // err3: rounding after +
+      maxCTilde.mul(maxCTilde, K, GMP_RNDU);
+      // now maxCTilde >= |mu(d-1,i)| *~ |x_(d-1)| +~ ... +~ |mu(j,i)| *~ |x_j|
+    }
+
+    if (boundOnExactVal)
+    {
+      // We have dist <= max_dist
+      minRDiag.sub(r(i, i), max_dr_diag[i], GMP_RNDD);  // <= r_i
+      if (minRDiag <= 0.0)
+        return false;
+      tmp1.div(max_dist, minRDiag, GMP_RNDU);  // >= dist / r_i
+      maxY.sqrt(tmp1, GMP_RNDU);               // >= |y_i|
+                                               /* DY = |y_i - y~_i|
+                                                     <= DC + |x_i - C~| * halfULP
+                                                     <= DC + (|x_i - C| + DC) * halfULP
+                                                     = DC * K + y * halfULP  */
+      maxDY.mul(maxY, halfULP, GMP_RNDU);
+      maxDY.addmul(maxDC, K, GMP_RNDU);      // >= |y_i - y~_i|
+      maxYTilde.add(maxY, maxDY, GMP_RNDU);  // >= |y~_i|
+      tmp1.add(maxY, maxC, GMP_RNDD);        // >= |x_i|
+      maxX[i].floor(tmp1);                   // x_i is an integer
+      tmp1 = maxY;
+    }
+    else
+    {
+      // We have dist~ <= max_dist
+      /* dist~ >= (y~_i *~ y~_i) *~ r~_i
+               >= (y~_i *~ y~_i) * r~_i - dist~ * halfULP
+         ==> y~_i *~ y~_i <= dist~ * K / r~_i  */
+      tmp1.mul(max_dist, K, GMP_RNDU);
+      tmp1.div(tmp1, rdiagTilde, GMP_RNDU);  // >= y~_i *~ y~_i
+                                             /* tmp1 >= y~_i *~ y~_i >= y~_i * y~_i - tmp1 * halfULP
+                                                ==> y~_i <= sqrt(tmp1 * K)   */
+      tmp1.mul(tmp1, K, GMP_RNDU);
+      maxYTilde.sqrt(tmp1, GMP_RNDU);           // >= y~_i
+      maxDY.mul(maxYTilde, halfULP, GMP_RNDU);  // err2: rounding after +
+      maxDY.add(maxDY, maxDC, GMP_RNDU);        // err1: initial error on C
+                                                // now maxDY >= |y_i - y~_i|
+      /* maxYTilde >= |C~_i -~ x_i| >= |C~_i - x_i| - maxYTilde * halfULP
+         ==> |x_i| <= C~_i + maxYTilde * K  */
+      tmp1 = maxCTilde;
+      tmp1.addmul(maxYTilde, K, GMP_RNDD);  // >= |x_i|
+      maxX[i].floor(tmp1);                  // x_i is an integer
+      tmp1 = maxYTilde;
+    }
+
+    maxDY2.mul(maxDY, tmp1);
+    maxDY2.mul_2si(maxDY2, 1);
+    maxDY2.addmul(maxDY, maxDY, GMP_RNDU);
+    /* now, we have maxDY2 <= |y~_i * y~_i - y_i * y_i|
+       Case 1: tmp1 = maxY
+         |y~_i * y~_i - y_i * y_i| <= (maxY + maxDY) ^ 2 - maxY ^ 2
+       Case 2: tmp1 = maxY~
+         |y~_i * y~_i - y_i * y_i| <= (maxY~ + maxDY) ^ 2 - maxY~ ^ 2  */
+    maxY2Tilde.mul(maxYTilde, maxYTilde, GMP_RNDU);  // >= y~_i * y~_i
+    maxDY2.addmul(maxY2Tilde, halfULP, GMP_RNDU);
+    /* now, we have maxDY2 <= |y~_i *~ y~_i - y_i * y_i| */
+    maxY2Tilde.mul(maxY2Tilde, K, GMP_RNDU);            // >= y~_i *~ y~_i
+    maxRDiag.add(r(i, i), max_dr_diag[i], GMP_RNDU);    // >= r_i
+    maxRY2Tilde.mul(rdiagTilde, maxY2Tilde, GMP_RNDU);  // >= y~_i *~ y~_i * r~_i
+
+    maxDRY2.mul(maxRDiag, maxDY2, GMP_RNDU);
+    maxDRY2.addmul(maxY2Tilde, max_dr_diag[i], GMP_RNDU);
+    maxDRY2.addmul(maxRY2Tilde, halfULP, GMP_RNDU);
+    /* now maxDRY2 >= |y~_i *~ y~_i - y_i * y_i| * r_i +
+                      |y~_i *~ y~_i| * |r~_i - r_i| +
+                      y~_i *~ y~_i * r~_i * halfULP
+                   >= |y~_i *~ y~_i * r~_i - y_i * y_i * r_i| +
+                      y~_i *~ y~_i * r~_i * halfULP  */
+
+    /* Let u = dist_(i+1), u~ = dist~_(i+1), v = y_i * y_i * r_i and
+       v~ = y~_i *~ y~_i *~ r~_i. We have:
+         |dist_i - dist~_i| = |(u~ +~ v~) - (u + v)|
+                            <= |u~ +~ v~) - (u~ + v~)| + |(u~ + v~) - (u + v)|
+       Case 1: dist <= max_dist
+         |dist_i - dist~_i| <= (u~ + v~) * halfULP + |(u~ + v~) - (u + v)|
+                            <= (u + v) * halfULP + K * |(u~ + v~) - (u + v)|
+                            <= max_dist * halfULP + K * |(u~ + v~) - (u + v)|
+       Case 2: dist~ <= max_dist
+         |dist_i - dist~_i| <= (u~ +~ v~) * halfULP + |(u~ + v~) - (u + v)|
+                            <= (u~ +~ v~) * halfULP + K * |(u~ + v~) - (u + v)|
+                            <= max_dist * halfULP + K * |(u~ + v~) - (u + v)|  */
+    maxDE.add(maxDE, maxDRY2, GMP_RNDU);
+    maxDE.mul(maxDE, K, GMP_RNDU);
+    maxDE.addmul(max_dist, halfULP, GMP_RNDU);
+  }
+
+  return true;
+}
+
+void FastErrorBoundedEvaluator::eval_sol(const vector<FP_NR<mpfr_t>> &new_sol_coord,
+                                         const enumf &new_partial_dist, enumf &max_dist)
+{
+  // Assumes that the solution is valid
+  if (eval_mode == EVALMODE_SV)
+  {
+    FP_NR<mpfr_t> dist(new_partial_dist);
+    dist.mul_2si(dist, normExp);
+    this->process_sol(dist, new_sol_coord, max_dist);
+  }
+  else if (eval_mode == EVALMODE_PRINT)
+  {
+    std::cout << new_sol_coord << "\n";
+  }
+}
+
+void FastErrorBoundedEvaluator::eval_sub_sol(int offset,
+                                             const vector<FP_NR<mpfr_t>> &new_sub_sol_coord,
+                                             const enumf &sub_dist)
+{
+  FP_NR<mpfr_t> dist = sub_dist;
+  dist.mul_2si(dist, normExp);
+
+  sub_solutions.resize(std::max(sub_solutions.size(), std::size_t(offset + 1)));
+
+  if (sub_solutions[offset].second.empty() || dist < sub_solutions[offset].first)
+  {
+    sub_solutions[offset].first  = dist;
+    sub_solutions[offset].second = new_sub_sol_coord;
+    for (int i = 0; i < offset; ++i)
+      sub_solutions[offset].second[i] = 0.0;
+  }
+}
+
+bool FastErrorBoundedEvaluator::get_max_error(FP_NR<mpfr_t> &max_error,
+                                              const FP_NR<mpfr_t> &last_partial_dist)
+{
+  FP_NR<mpfr_t> maxE, maxDE, maxOptDE, minOptE, one;
+
+  if (solutions.empty() || !input_error_defined)
+    return false;
+  if (!get_max_error_aux(last_partial_dist, false, maxDE))
+    return false;
+
+  // Exact norm of an optimal solution <= Exact norm of the result <= maxE
+  maxE.add(last_partial_dist, maxDE, GMP_RNDU);
+  // Error on the norm of an optimal solution <= maxOptDE
+  if (!get_max_error_aux(maxE, true, maxOptDE))
+    return false;
+  // Approx. norm of an optimal solution >= minOptE
+  minOptE.sub(last_partial_dist, maxOptDE, GMP_RNDD);
+
+  one = 1.0;
+  max_error.div(maxE, minOptE, GMP_RNDU);
+  max_error.sub(max_error, one, GMP_RNDU);
+  return true;
+}
+
+bool ExactErrorBoundedEvaluator::get_max_error(FP_NR<mpfr_t> &max_error, const FP_NR<mpfr_t> &)
+{
+  max_error = 0.0;
+  return true;
+}
+
+void ExactErrorBoundedEvaluator::eval_sol(const vector<FP_NR<mpfr_t>> &new_sol_coord, const enumf &,
+                                          enumf &max_dist)
+{
+  int n = gso.get_cols_of_b();
+
+  Z_NR<mpz_t> new_sol_dist;
+  vector<Z_NR<mpz_t>> new_sol, coord;
+
+  gen_zero_vect(new_sol, n);
+  gen_zero_vect(coord, n);
+  new_sol_dist = 0;
+
+  // Computes the distance between x and zero
+  for (int i = 0; i < d; i++)
+  {
+    coord[i].set_f(new_sol_coord[i]);
+  }
+  gso.sqnorm_coordinates(new_sol_dist, coord);
+
+  if (int_max_dist < 0 || new_sol_dist <= int_max_dist)
+  {
+    if (eval_mode == EVALMODE_SV)
+    {
+      int_max_dist = new_sol_dist;
+
+      this->process_sol(int_dist2Float(int_max_dist), new_sol_coord, max_dist);
+    }
+    else if (eval_mode == EVALMODE_PRINT)
+    {
+      cout << new_sol_coord << "\n";
+    }
+  }
+}
+
+void ExactErrorBoundedEvaluator::eval_sub_sol(int offset,
+                                              const vector<FP_NR<mpfr_t>> &new_sub_sol_coord,
+                                              const enumf &)
+{
+  Z_NR<mpz_t> minusone;
+  minusone = -1;
+
+  int n = gso.get_cols_of_b();
+  Z_NR<mpz_t> new_sol_dist;
+  vector<Z_NR<mpz_t>> new_sol, coord;
+
+  gen_zero_vect(new_sol, n);
+  gen_zero_vect(coord, n);
+  new_sol_dist = 0;
+
+  // Computes the distance between x[[offset,d)] and zero
+  for (int i = offset; i < d; i++)
+  {
+    coord[i].set_f(new_sub_sol_coord[i]);
+  }
+  gso.sqnorm_coordinates(new_sol_dist, coord);
+
+  FP_NR<mpfr_t> subdist = int_dist2Float(new_sol_dist);
+
+  sub_solutions.resize(std::max(sub_solutions.size(), std::size_t(offset + 1)));
+  if (sub_solutions[offset].second.empty() || subdist <= sub_solutions[offset].first)
+  {
+    sub_solutions[offset].first  = subdist;
+    sub_solutions[offset].second = new_sub_sol_coord;
+    for (int i = 0; i < offset; ++i)
+      sub_solutions[offset].second[i] = 0.0;
+  }
+}
+
+FP_NR<mpfr_t> ExactErrorBoundedEvaluator::int_dist2Float(Z_NR<mpz_t> int_dist)
+{
+  FP_NR<mpfr_t> fMaxDist, maxDE;
+  fMaxDist.set_z(int_dist, GMP_RNDU);
+  bool result = get_max_error_aux(fMaxDist, true, maxDE);
+  FPLLL_CHECK(result, "ExactEvaluator: error cannot be bounded");
+  FPLLL_CHECK(maxDE <= r(0, 0), "ExactEvaluator: max error is too large");
+  fMaxDist.add(fMaxDist, maxDE);
+  //  fMaxDist.mul_2si(fMaxDist, -normExp);
+  return fMaxDist;
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/enum/evaluator.h b/fplll/enum/evaluator.h
new file mode 100644 (file)
index 0000000..5d7f4b6
--- /dev/null
@@ -0,0 +1,377 @@
+/* Copyright (C) 2008-2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_EVALUATOR_H
+#define FPLLL_EVALUATOR_H
+
+#include <cassert>
+#include <fplll/gso_interface.h>
+#include <fplll/util.h>
+#include <functional>
+#include <map>
+#include <queue>
+
+FPLLL_BEGIN_NAMESPACE
+
+enum EvaluatorMode
+{
+  EVALMODE_SV    = 0,
+  EVALMODE_CV    = 0,
+  EVALMODE_COUNT = 1,
+  EVALMODE_PRINT = 2
+};
+
+enum EvaluatorStrategy
+{
+  /*
+   * Strategies for updating the enumeration bound as solutions are found.
+   * Possible values are:
+   *
+   * EVALSTRATEGY_BEST_N_SOLUTIONS
+   *   Starting with the max_sols-th solution, every time a new solution is found
+   *   the enumeration bound is updated to the length of the longest solution. If
+   *   more than max_sols were found, the longest is dropped.
+   * EVALSTRATEGY_OPPORTUNISTIC_N_SOLUTIONS
+   *   Every time a solution is found, update the enumeration distance to the length
+   *   of the solution. If more than max_sols were found, the longest is dropped.
+   * EVALSTRATEGY_FIRST_N_SOLUTIONS
+   *   The enumeration bound is not updated. As soon as max_sols are found, enumeration
+   *   stops.
+   */
+  EVALSTRATEGY_BEST_N_SOLUTIONS          = 0,
+  EVALSTRATEGY_OPPORTUNISTIC_N_SOLUTIONS = 1,
+  EVALSTRATEGY_FIRST_N_SOLUTIONS         = 2
+};
+
+/**
+ * Evaluator stores the solutions found by enumerate, and updates the enumeration bound
+ * It thus provides an interface to the enumerator,
+ * as well as a basic interface to return solutions.
+ * Specializations will implement specific behaviour and additional interfaces.
+ */
+
+template <class FT> class Evaluator
+{
+public:
+  Evaluator(size_t nr_solutions               = 1,
+            EvaluatorStrategy update_strategy = EVALSTRATEGY_BEST_N_SOLUTIONS,
+            bool find_subsolutions            = false)
+      : max_sols(nr_solutions), strategy(update_strategy), findsubsols(find_subsolutions),
+        sol_count(0)
+  {
+    FPLLL_CHECK(nr_solutions > 0, "Evaluator: nr_solutions must be strictly positive!");
+    FPLLL_CHECK(strategy <= 2, "Evaluator: invalid strategy");
+  }
+  virtual ~Evaluator() {}
+
+  /** configuration */
+  size_t max_sols;
+  EvaluatorStrategy strategy;
+  bool findsubsols;
+
+  /** Solutions found in the lattice */
+  // multimap storing solutions mapped by their length
+  // the longest solution is the first, the shortest solution last
+  typedef std::multimap<FT, std::vector<FT>, std::greater<FT>> container_t;
+  container_t solutions;
+  size_t sol_count;
+
+  /** Subsolutions found in the lattice */
+  std::vector<std::pair<FT, std::vector<FT>>> sub_solutions;
+
+  /** interface to resulting solutions */
+  typename container_t::const_reverse_iterator begin() const { return solutions.rbegin(); }
+  typename container_t::const_reverse_iterator end() const { return solutions.rend(); }
+  typename container_t::reverse_iterator begin() { return solutions.rbegin(); }
+  typename container_t::reverse_iterator end() { return solutions.rend(); }
+  size_t size() const { return solutions.size(); }
+  bool empty() const { return solutions.empty(); }
+
+  /** interface for the enumerator */
+  virtual void eval_sol(const vector<FT> &new_sol_coord, const enumf &new_partial_dist,
+                        enumf &max_dist) = 0;
+
+  virtual void eval_sub_sol(int offset, const vector<FT> &new_sub_sol_coord,
+                            const enumf &sub_dist) = 0;
+
+  virtual void set_normexp(long norm_exp) { normExp = norm_exp; }
+  long normExp;
+
+protected:
+  /** calculate enumeration bound based on dist */
+  virtual enumf calc_enum_bound(const FT &dist) const
+  {
+    FT tmp;
+    tmp.mul_2si(dist, -normExp);
+    return tmp.get_d(GMP_RNDU);
+  }
+
+  /** processes solution into multimap and adjusts max_dist according to strategy */
+  void process_sol(const FT &dist, const vector<FT> &coord, enumf &max_dist)
+  {
+    ++sol_count;
+    solutions.emplace(dist, coord);
+    switch (strategy)
+    {
+    case EVALSTRATEGY_BEST_N_SOLUTIONS:
+      if (solutions.size() < max_sols)
+        return;
+      // remove the longest solution, and use the new longest dist to update max_dist
+      if (solutions.size() > max_sols)
+        solutions.erase(solutions.begin());
+      max_dist = calc_enum_bound(solutions.begin()->first);
+      break;
+
+    case EVALSTRATEGY_OPPORTUNISTIC_N_SOLUTIONS:
+      // always use dist to update max_dist
+      max_dist = calc_enum_bound(dist);
+      if (solutions.size() <= max_sols)
+        return;
+      // remove longest solution
+      solutions.erase(solutions.begin());
+      break;
+
+    case EVALSTRATEGY_FIRST_N_SOLUTIONS:
+      if (solutions.size() < max_sols)
+        return;
+      // when desired nr of solutions has been reached, set enum bound to zero
+      max_dist = 0;
+      break;
+
+    default:
+      FPLLL_CHECK(false, "Evaluator: invalid strategy switch!");
+    }
+  }
+};
+
+/**
+ * Simple solution evaluator which provides a result without error bound.
+ * The same instance can be used for several calls to enumerate on different
+ * problems.
+ */
+template <class FT> class FastEvaluator : public Evaluator<FT>
+{
+public:
+  using Evaluator<FT>::max_sols;
+  using Evaluator<FT>::strategy;
+  using Evaluator<FT>::findsubsols;
+  using Evaluator<FT>::normExp;
+  using Evaluator<FT>::sub_solutions;
+
+  FastEvaluator(size_t nr_solutions               = 1,
+                EvaluatorStrategy update_strategy = EVALSTRATEGY_BEST_N_SOLUTIONS,
+                bool find_subsolutions            = false)
+      : Evaluator<FT>(nr_solutions, update_strategy, find_subsolutions)
+  {
+  }
+  virtual ~FastEvaluator() {}
+
+  virtual void eval_sol(const vector<FT> &new_sol_coord, const enumf &new_partial_dist,
+                        enumf &max_dist)
+  {
+    FT dist = new_partial_dist;
+    dist.mul_2si(dist, normExp);
+
+    // store solution and update max_dist according to strategy
+    this->process_sol(dist, new_sol_coord, max_dist);
+  }
+
+  virtual void eval_sub_sol(int offset, const vector<FT> &new_sub_sol_coord, const enumf &sub_dist)
+  {
+    FT dist = sub_dist;
+    dist.mul_2si(dist, normExp);
+
+    sub_solutions.resize(std::max(sub_solutions.size(), std::size_t(offset + 1)));
+
+    if (sub_solutions[offset].second.empty() || dist < sub_solutions[offset].first)
+    {
+      sub_solutions[offset].first  = dist;
+      sub_solutions[offset].second = new_sub_sol_coord;
+      for (int i = 0; i < offset; ++i)
+        sub_solutions[offset].second[i] = 0.0;
+    }
+  }
+};
+
+/**
+   @brief Callback function used by CallbackEvaluator.
+
+ */
+
+typedef bool(callback_evaluator_callback)(size_t n, enumf *new_sol_coord, void *ctx);
+
+/**
+   @brief A FastEvaluator which additionally checks whether the predicate ``callbackf(solution,
+   ctx)`` accepts or rejects.
+
+   @example tests/test_enum.cpp
+
+ */
+template <class FT> class CallbackEvaluator : public FastEvaluator<FT>
+{
+
+  std::function<callback_evaluator_callback> callbackf;
+  void *ctx;
+  enumf new_sol_coordf[FPLLL_MAX_ENUM_DIM];
+
+public:
+  using FastEvaluator<FT>::max_sols;
+  using FastEvaluator<FT>::strategy;
+  using FastEvaluator<FT>::findsubsols;
+  using FastEvaluator<FT>::normExp;
+  using FastEvaluator<FT>::sub_solutions;
+
+  CallbackEvaluator(std::function<callback_evaluator_callback> callbackf, void *ctx = NULL,
+                    size_t nr_solutions               = 1,
+                    EvaluatorStrategy update_strategy = EVALSTRATEGY_BEST_N_SOLUTIONS,
+                    bool find_subsolutions            = false
+
+                    )
+      : FastEvaluator<FT>(nr_solutions, update_strategy, find_subsolutions), callbackf(callbackf),
+        ctx(ctx)
+  {
+  }
+  virtual ~CallbackEvaluator() {}
+
+  virtual void eval_sol(const vector<FT> &new_sol_coord, const enumf &new_partial_dist,
+                        enumf &max_dist)
+  {
+    assert(new_sol_coord.size() <= FPLLL_MAX_ENUM_DIM);
+    for (size_t i = 0; i < new_sol_coord.size(); i++)
+    {
+      new_sol_coordf[i] = new_sol_coord[i].get_d();
+    }
+    if (!callbackf(new_sol_coord.size(), new_sol_coordf, this->ctx))
+      return;
+
+    FastEvaluator<FT>::eval_sol(new_sol_coord, new_partial_dist, max_dist);
+  }
+};
+
+/**
+ * ErrorBoundEvaluator provides an extra interface to provide
+ * information about the accuracy of solutions.
+ */
+class ErrorBoundedEvaluator : public Evaluator<FP_NR<mpfr_t>>
+{
+public:
+  ErrorBoundedEvaluator(int dim, const Matrix<FP_NR<mpfr_t>> &mmu, const Matrix<FP_NR<mpfr_t>> &mr,
+                        EvaluatorMode evalmode, size_t nr_solutions = 1,
+                        EvaluatorStrategy update_strategy = EVALSTRATEGY_BEST_N_SOLUTIONS,
+                        bool find_subsolutions            = false)
+      : Evaluator(nr_solutions, update_strategy, find_subsolutions), eval_mode(evalmode), d(dim),
+        mu(mmu), r(mr), input_error_defined(false)
+  {
+    max_dr_diag.resize(d);
+    max_dm_u.resize(d);
+  }
+
+  virtual ~ErrorBoundedEvaluator() {}
+
+  /** Configuration */
+  EvaluatorMode eval_mode;
+  int d;
+  const Matrix<FP_NR<mpfr_t>> &mu;
+  const Matrix<FP_NR<mpfr_t>> &r;
+
+  /* To enable error estimation, the caller must set
+  input_error_defined=true and fill max_dr_diag and max_dm_u */
+  bool input_error_defined;
+  vector<FP_NR<mpfr_t>> max_dr_diag, max_dm_u;  // Error bounds on input parameters
+  //  FP_NR<mpfr_t> last_partial_dist;          // Approx. squared norm of the last solution
+
+  void init_delta_def(int prec, double rho, bool withRoundingToEnumf);
+
+  /**
+   * Computes max_error such that
+   * normOfSolution^2 <= (1 + max_error) * lambda_1(L)^2.
+   * The default implementation might fail (i.e. return false).
+   */
+  virtual bool get_max_error(FP_NR<mpfr_t> &max_error, const FP_NR<mpfr_t> &sol_dist) = 0;
+
+  // Internal use
+  bool get_max_error_aux(const FP_NR<mpfr_t> &max_dist, bool boundOnExactVal, FP_NR<mpfr_t> &maxDE);
+};
+
+/**
+ * Simple solution evaluator which provides a non-certified result, but can
+ * give an error bound.
+ * The same object can be used for several calls to enumerate on different
+ * instances.
+ */
+class FastErrorBoundedEvaluator : public ErrorBoundedEvaluator
+{
+public:
+  FastErrorBoundedEvaluator(int d = 0, const Matrix<FP_NR<mpfr_t>> &mu = Matrix<FP_NR<mpfr_t>>(),
+                            const Matrix<FP_NR<mpfr_t>> &r = Matrix<FP_NR<mpfr_t>>(),
+                            EvaluatorMode eval_mode = EVALMODE_SV, size_t nr_solutions = 1,
+                            EvaluatorStrategy update_strategy = EVALSTRATEGY_BEST_N_SOLUTIONS,
+                            bool find_subsolutions            = false)
+      : ErrorBoundedEvaluator(d, mu, r, eval_mode, nr_solutions, update_strategy, find_subsolutions)
+  {
+  }
+  virtual ~FastErrorBoundedEvaluator() {}
+
+  virtual bool get_max_error(FP_NR<mpfr_t> &max_error, const FP_NR<mpfr_t> &sol_dist);
+  virtual void eval_sol(const vector<FP_NR<mpfr_t>> &new_sol_coord, const enumf &new_partial_dist,
+                        enumf &max_dist);
+  virtual void eval_sub_sol(int offset, const vector<FP_NR<mpfr_t>> &new_sub_sol_coord,
+                            const enumf &sub_dist);
+};
+
+/**
+ * ExactEvaluator stores the best solution found by enumerate.
+ * The result is guaranteed, but the the evaluation of new solutions is longer.
+ */
+class ExactErrorBoundedEvaluator : public ErrorBoundedEvaluator
+{
+public:
+  ExactErrorBoundedEvaluator(int d, MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &_gso,
+                             EvaluatorMode eval_mode, size_t nr_solutions = 1,
+                             EvaluatorStrategy update_strategy = EVALSTRATEGY_BEST_N_SOLUTIONS,
+                             bool find_subsolutions            = false)
+      : ErrorBoundedEvaluator(d, _gso.get_mu_matrix(), _gso.get_r_matrix(), eval_mode, nr_solutions,
+                              update_strategy, find_subsolutions),
+        gso(_gso)
+  {
+    int_max_dist = -1;
+  }
+
+  virtual ~ExactErrorBoundedEvaluator() {}
+
+  /**
+   * Sets max_error to 0: the result is guaranteed.
+   */
+  virtual bool get_max_error(FP_NR<mpfr_t> &max_error, const FP_NR<mpfr_t> &sol_dist);
+
+  virtual void eval_sol(const vector<FP_NR<mpfr_t>> &new_sol_coord, const enumf &new_partial_dist,
+                        enumf &max_dist);
+
+  virtual void eval_sub_sol(int offset, const vector<FP_NR<mpfr_t>> &new_sub_sol_coord,
+                            const enumf &sub_dist);
+
+  Z_NR<mpz_t> int_max_dist;  // Exact norm of the last vector
+
+  Z_NR<mpz_t> exact_sol_dist(const vector<FP_NR<mpfr_t>> &sol_coord);
+  Z_NR<mpz_t> exact_subsol_dist(int offset, const vector<FP_NR<mpfr_t>> &sol_coord);
+
+private:
+  FP_NR<mpfr_t> int_dist2Float(Z_NR<mpz_t> int_dist);
+  MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso;
+};
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/enum/topenum.cpp b/fplll/enum/topenum.cpp
new file mode 100644 (file)
index 0000000..d1be94f
--- /dev/null
@@ -0,0 +1,110 @@
+/* Copyright (C) 2008-2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "topenum.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+Enumerator::Enumerator(int d, const Matrix<FP_NR<mpfr_t>> &mu, const Matrix<FP_NR<mpfr_t>> &r,
+                       double argMaxVolume, int min_level)
+    : mu(mu), r(r), kmin(min_level), d(d)
+{
+  max_volume = argMaxVolume > 0 ? argMaxVolume : ENUM_MAX_VOLUME;
+  gen_zero_vect(center, d);
+  gen_zero_vect(dist, d);
+  gen_zero_vect(x, d);
+  gen_zero_vect(dx, d);
+  gen_zero_vect(ddx, d);
+  svp_init_needed = true;
+}
+
+bool Enumerator::enum_next(const FP_NR<mpfr_t> &max_sqr_length)
+{
+  FP_NR<mpfr_t> newdist, newcenter, y, volume, rtmp1;
+  bool notFound = true;
+
+  if (svp_init_needed)
+  {
+    for (k = d - 1; k > kmin; k--)
+    {
+      cost_estimate(volume, max_sqr_length, r, k - 1);
+      if (volume <= max_volume)
+        break;
+    }
+    kmax            = k;
+    svp_init_needed = false;
+  }
+  if (k >= d)
+    return false;
+
+  while (notFound)
+  {
+    // FPLLL_TRACE("Level k=" << k << " dist_k=" << dist[k] << " x_k=" << x[k]);
+    y.sub(center[k], x[k]);
+    newdist.mul(y, y);
+    newdist.mul(newdist, r(k, k));
+    newdist.add(newdist, dist[k]);
+
+    if (newdist <= max_sqr_length)
+    {
+      rtmp1.sub(max_sqr_length, newdist);
+      cost_estimate(volume, rtmp1, r, k - 1);
+      if (k > kmin && volume >= max_volume)
+      {
+        k--;
+        // FPLLL_TRACE("  Go down, newdist=" << newdist);
+
+        newcenter = 0.0;
+        for (int j = d - 1; j > k; j--)
+          newcenter.submul(x[j], mu(j, k));
+
+        center[k] = newcenter;
+        dist[k]   = newdist;
+        x[k].rnd(newcenter);
+        dx[k]  = 0.0;
+        ddx[k] = newcenter >= x[k] ? -1.0 : 1.0;
+        continue;
+      }
+      sub_tree.resize(d - k);
+      for (size_t j = 0; j < sub_tree.size(); j++)
+        sub_tree[j] = enumxt(x[j + k].get_d());
+      // FPLLL_TRACE("  SubTree approx_size=" << volume << " coord=" << sub_tree);
+      notFound = false;
+    }
+    else
+    {
+      // FPLLL_TRACE("  Go up");
+      k++;
+    }
+    if (k < kmax)
+    {
+      ddx[k].neg(ddx[k]);
+      dx[k].sub(ddx[k], dx[k]);
+      x[k].add(x[k], dx[k]);
+    }
+    else
+    {
+      if (k >= d)
+        break;
+      kmax  = k;
+      rtmp1 = 1.0;
+      x[k].add(x[k], rtmp1);
+    }
+    // FPLLL_TRACE("  x[" << k << "]=" << x[k]);
+  }
+  return !notFound;
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/enum/topenum.h b/fplll/enum/topenum.h
new file mode 100644 (file)
index 0000000..e777ebf
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright (C) 2008-2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_TOP_ENUM_H
+#define FPLLL_TOP_ENUM_H
+
+#include "../util.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+const double ENUM_MAX_VOLUME = 20000000;
+const int ENUM_MIN_LEVEL     = 20;
+
+class Enumerator
+{
+public:
+  Enumerator(int d, const Matrix<FP_NR<mpfr_t>> &mu, const Matrix<FP_NR<mpfr_t>> &r,
+             double max_volume = ENUM_MAX_VOLUME, int min_level = ENUM_MIN_LEVEL);
+  bool enum_next(const FP_NR<mpfr_t> &max_sqr_length);
+  inline const vector<enumxt> &get_sub_tree() { return sub_tree; }
+
+private:
+  const Matrix<FP_NR<mpfr_t>> &mu;
+  const Matrix<FP_NR<mpfr_t>> &r;
+  int k, kmin, kmax, d;
+  vector<FP_NR<mpfr_t>> center, dist;
+  vector<FP_NR<mpfr_t>> x, dx, ddx;
+  //  vector<FP_NR<mpfr_t>> sub_tree;
+  vector<enumxt> sub_tree;
+  FP_NR<mpfr_t> max_volume;
+  bool svp_init_needed;
+};
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/factorial.const b/fplll/factorial.const
new file mode 100644 (file)
index 0000000..327871c
--- /dev/null
@@ -0,0 +1,2050 @@
+const char* pre_factorial[2048] ={
+"1.0000000000000000000000000000000000000000000000",
+"1.0000000000000000000000000000000000000000000000",
+"2.0000000000000000000000000000000000000000000000",
+"6.0000000000000000000000000000000000000000000000",
+"24.000000000000000000000000000000000000000000000",
+"120.00000000000000000000000000000000000000000000",
+"720.00000000000000000000000000000000000000000000",
+"5040.0000000000000000000000000000000000000000000",
+"40320.000000000000000000000000000000000000000000",
+"362880.00000000000000000000000000000000000000000",
+"3.6288000000000000000000000000000000000000000000e6",
+"3.9916800000000000000000000000000000000000000000e7",
+"4.7900160000000000000000000000000000000000000000e8",
+"6.2270208000000000000000000000000000000000000000e9",
+"8.7178291200000000000000000000000000000000000000e10",
+"1.3076743680000000000000000000000000000000000000e12",
+"2.0922789888000000000000000000000000000000000000e13",
+"3.5568742809600000000000000000000000000000000000e14",
+"6.4023737057280000000000000000000000000000000000e15",
+"1.2164510040883200000000000000000000000000000000e17",
+"2.4329020081766400000000000000000000000000000000e18",
+"5.1090942171709440000000000000000000000000000000e19",
+"1.1240007277776076800000000000000000000000000000e21",
+"2.5852016738884976640000000000000000000000000000e22",
+"6.2044840173323943936000000000000000000000000000e23",
+"1.5511210043330985984000000000000000000000000000e25",
+"4.0329146112660563558400000000000000000000000000e26",
+"1.0888869450418352160768000000000000000000000000e28",
+"3.0488834461171386050150400000000000000000000000e29",
+"8.8417619937397019545436160000000000000000000000e30",
+"2.6525285981219105863630848000000000000000000000e32",
+"8.2228386541779228177255628800000000000000000000e33",
+"2.6313083693369353016721801216000000000000000000e35",
+"8.6833176188118864955181944012800000000000000000e36",
+"2.9523279903960414084761860964352000000000000000e38",
+"1.0333147966386144929666651337523200000000000000e40",
+"3.7199332678990121746799944815083520000000000000e41",
+"1.3763753091226345046315979581580902400000000000e43",
+"5.2302261746660111176000722410007429120000000000e44",
+"2.0397882081197443358640281739902897356800000000e46",
+"8.1591528324789773434561126959611589427200000000e47",
+"3.3452526613163807108170062053440751665152000000e49",
+"1.4050061177528798985431426062445115699363840000e51",
+"6.0415263063373835637355132068513997507264512000e52",
+"2.6582715747884487680436258110146158903196385280e54",
+"1.1962222086548019456196316149565771506438373376e56",
+"5.5026221598120889498503054288002548929616517529e57",
+"2.5862324151116818064296435515361197996919763238e59",
+"1.2413915592536072670862289047373375038521486354e61",
+"6.0828186403426756087225216332129537688755283137e62",
+"3.0414093201713378043612608166064768844377641568e64",
+"1.5511187532873822802242430164693032110632597200e66",
+"8.0658175170943878571660636856403766975289505440e67",
+"4.2748832840600255642980137533893996496903437883e69",
+"2.3084369733924138047209274268302758108327856457e71",
+"1.2696403353658275925965100847566516959580321051e73",
+"7.1099858780486345185404564746372494973649797888e74",
+"4.0526919504877216755680601905432322134980384796e76",
+"2.3505613312828785718294749105150746838288623181e78",
+"1.3868311854568983573793901972038940634590287677e80",
+"8.3209871127413901442763411832233643807541726063e81",
+"5.0758021387722479880085681217662522722600452898e83",
+"3.1469973260387937525653122354950764088012280797e85",
+"1.9826083154044400641161467083618981375447736902e87",
+"1.2688693218588416410343338933516148080286551617e89",
+"8.2476505920824706667231703067854962521862585513e90",
+"5.4434493907744306400372924024784275264429306438e92",
+"3.6471110918188685288249859096605464427167635314e94",
+"2.4800355424368305996009904185691715810473992013e96",
+"1.7112245242814131137246833888127283909227054489e98",
+"1.1978571669969891796072783721689098736458938142e100",
+"8.5047858856786231752116764423992601028858460812e101",
+"6.1234458376886086861524070385274672740778091784e103",
+"4.4701154615126843408912571381250511100768007002e105",
+"3.3078854415193864122595302822125378214568325182e107",
+"2.4809140811395398091946477116594033660926243886e109",
+"1.8854947016660502549879322608611465582303945353e111",
+"1.4518309202828586963407078408630828498374037922e113",
+"1.1324281178206297831457521158732046228731749579e115",
+"8.9461821307829752868514417153983165206980821677e116",
+"7.1569457046263802294811533723186532165584657342e118",
+"5.7971260207473679858797342315781091054123572447e120",
+"4.7536433370128417484213820698940494664381329406e122",
+"3.9455239697206586511897471180120610571436503407e124",
+"3.3142401345653532669993875791301312880006662862e126",
+"2.8171041143805502769494794422606115948005663433e128",
+"2.4227095383672732381765523203441259715284870552e130",
+"2.1077572983795277172136005186993895952297837380e132",
+"1.8548264225739843911479684564554628438022096894e134",
+"1.6507955160908461081216919262453619309839666236e136",
+"1.4857159644817614973095227336208257378855699612e138",
+"1.3520015276784029625516656875949514214758686647e140",
+"1.2438414054641307255475324325873553077577991715e142",
+"1.1567725070816415747592051623062404362147532295e144",
+"1.0873661566567430802736528525678660100418680358e146",
+"1.0329978488239059262599702099394727095397746340e148",
+"9.9167793487094968920957140154189380115818364865e149",
+"9.6192759682482119853328425949563698712343813919e151",
+"9.4268904488832477456261857430572424738096937640e153",
+"9.3326215443944152681699238856266700490715968264e155",
+"9.3326215443944152681699238856266700490715968264e157",
+"9.4259477598383594208516231244829367495623127947e159",
+"9.6144667150351266092686555869725954845535590505e161",
+"9.9029007164861804075467152545817733490901658221e163",
+"1.0299016745145627623848583864765044283053772454e166",
+"1.0813967582402909005041013058003296497206461077e168",
+"1.1462805637347083545343473841483494287038848742e170",
+"1.2265202031961379393517517010387338887131568154e172",
+"1.3246418194518289744998918371218325998102093606e174",
+"1.4438595832024935822048821024627975337931282031e176",
+"1.5882455415227429404253703127090772871724410234e178",
+"1.7629525510902446638721610471070757887614095360e180",
+"1.9745068572210740235368203727599248834127786803e182",
+"2.2311927486598136465966070212187151182564399087e184",
+"2.5435597334721875571201320041893352348123414960e186",
+"2.9250936934930156906881518048177355200341927204e188",
+"3.3931086844518982011982560935885732032396635556e190",
+"3.9699371608087208954019596294986306477904063601e192",
+"4.6845258497542906565743123628083841643926795049e194",
+"5.5745857612076058813234317117419771556272886109e196",
+"6.6895029134491270575881180540903725867527463331e198",
+"8.0942985252734437396816228454493508299708230630e200",
+"9.8750442008336013624115798714482080125644041369e202",
+"1.2146304367025329675766243241881295855454217088e205",
+"1.5061417415111408797950141619932806860763229189e207",
+"1.8826771768889260997437677024916008575954036487e209",
+"2.3721732428800468856771473051394170805702085973e211",
+"3.0126600184576595448099770775270596923241649186e213",
+"3.8562048236258042173567706592346364061749310959e215",
+"4.9745042224772874403902341504126809639656611137e217",
+"6.4668554892204736725073043955364852531553594478e219",
+"8.4715806908788205109845687581527956816335208766e221",
+"1.1182486511960043074499630760761690299756247557e224",
+"1.4872707060906857289084508911813048098675809251e226",
+"1.9929427461615188767373241941829484452225584396e228",
+"2.6904727073180504835953876621469804010504538935e230",
+"3.6590428819525486576897272205198933454286172951e232",
+"5.0128887482749916610349262921122538832372056943e234",
+"6.9177864726194884922281982831149103588673438582e236",
+"9.6157231969410890041971956135297253988256079629e238",
+"1.3462012475717524605876073858941615558355851148e241",
+"1.8981437590761709694285264141107677937281750118e243",
+"2.6953641378881627765885075080372902670940085168e245",
+"3.8543707171800727705215657364933250819444321791e247",
+"5.5502938327393047895510546605503881179999823379e249",
+"8.0479260574719919448490292577980627710999743900e251",
+"1.1749972043909108239479582716385171645805962609e254",
+"1.7272458904546389112034986593086202319334765035e256",
+"2.5563239178728655885811780157767579432615452253e258",
+"3.8089226376305697269859552435073693354597023857e260",
+"5.7133839564458545904789328652610540031895535786e262",
+"8.6272097742332404316231886265441915448162259036e264",
+"1.3113358856834525456067246712347171148120663373e267",
+"2.0063439050956823947782887469891171856624614961e269",
+"3.0897696138473508879585646703632404659201907040e271",
+"4.7891429014633938763357752390630227221762955913e273",
+"7.4710629262828944470838093729383154465950211224e275",
+"1.1729568794264144281921580715513155251154183162e278",
+"1.8532718694937347965436097530510785296823609396e280",
+"2.9467022724950383265043395073512148621949538940e282",
+"4.7147236359920613224069432117619437795119262304e284",
+"7.5907050539472187290751785709367294850142012310e286",
+"1.2296942187394494341101789284917501765723005994e289",
+"2.0044015765453025775995916534415527878128499770e291",
+"3.2872185855342962272633303116441465720130739623e293",
+"5.4239106661315887749844950142128418438215720379e295",
+"9.0036917057784373664742617235933174607438095829e297",
+"1.5036165148649990402012017078400840159442162003e300",
+"2.5260757449731983875380188691713411467862832166e302",
+"4.2690680090047052749392518888995665380688186360e304",
+"7.2574156153079989673967282111292631147169916812e306",
+"1.2410180702176678234248405241031039926166055775e309",
+"2.1345510807743886562907257014573388673005615933e311",
+"3.6927733697396923753829554635211962404299715564e313",
+"6.4254256633470647331663425065268814583481505081e315",
+"1.1244494910857363283041099386422042552109263389e318",
+"1.9790311043108959378152334920102794891712303565e320",
+"3.5028850546302858099329632808581946958330777310e322",
+"6.2351353972419087416806746399275865585828783612e324",
+"1.1160892361063016647608407605470379939863352266e327",
+"2.0089606249913429965695133689846683891754034079e329",
+"3.6362187312343308237908191978622497844074801684e331",
+"6.6179180908464820992992909401092946076216139065e333",
+"1.2110790106249062241717702420400009131947553449e336",
+"2.2283853795498274524760572453536016802783498346e338",
+"4.1225129521671807870807059039041631085149471940e340",
+"7.6678740910309562639701129812617433818378017809e342",
+"1.4338924550227888213624111274959460124036689330e345",
+"2.6957178154428429841613329196923785033188975941e347",
+"5.0949066711869732400649192182185953712727164528e349",
+"9.6803226752552491561233465146153312054181612604e351",
+"1.8489416309737525888195591842915282602348688007e354",
+"3.5499679314696049705335536338397342596509480974e356",
+"6.8514381077363375931297585133106871211263298280e358",
+"1.3291789929008494930671731515822733014985079866e361",
+"2.5918990361566565114809876455854329379220905739e363",
+"5.0801221108670467625027357853474485583272975249e365",
+"1.0007840558408082122130389497134473659904776124e368",
+"1.9815524305648002601818171204326257846611456725e370",
+"3.9432893368239525177618160696609253114756798884e372",
+"7.8865786736479050355236321393218506229513597768e374",
+"1.5852023134032289121402500600036919752132233151e377",
+"3.2021086730745224025233051212074577899307110966e379",
+"6.5002806063412804771223093960511393135593435261e381",
+"1.3260572436936212173329511167944324199661060793e384",
+"2.7184173495719234955325497894285864609305174626e386",
+"5.5999397401181624007970525662228881095168659729e388",
+"1.1591875262044596169649898812081378386699912564e391",
+"2.4111100545052760032871789529129267044335818133e393",
+"5.0392200139160268468702040115880168122661859898e395",
+"1.0582362029223656378427428424334835305758990578e398",
+"2.2328783881661914958481873975346502495151470121e400",
+"4.7337021829123259711981572827734585289721116656e402",
+"1.0082785649603254318652075012307466666710597847e405",
+"2.1577161290150964241915440526337978666760679394e407",
+"4.6390896773824573120118197131626654133535460698e409",
+"1.0020433703146107793945530580431357292843659510e412",
+"2.1744341135827053912861801359536045325470741138e414",
+"4.7402663676102977530038726963788578809526215681e416",
+"1.0381183345066552079078481205069698759286241234e419",
+"2.2838603359146414573972658651153337270429730715e421",
+"5.0473313423713576208479575619048875367649704881e423",
+"1.1205075580064413918282465787428850331618234483e426",
+"2.4987318543543643037769898705966336239508662898e428",
+"5.5971593537537760404604573101364593176499404892e430",
+"1.2593608545945996091036028947807033464712366100e433",
+"2.8461555313837951165741425422043895630249947387e435",
+"6.4607730562412149146233035708039643080667380570e437",
+"1.4730562568229970005341132141433038622392162770e440",
+"3.3732988281246631312231192603881658445278052743e442",
+"7.7585873046867252018131742988927814424139521309e444",
+"1.7922336673826335216188432630442325131976229422e447",
+"4.1579821083277097701557163702626194306184852260e449",
+"9.6880983124035637644628191427119032733410705766e451",
+"2.2670150051024339208842996793945853659618105149e454",
+"5.3274852619907197140781042465772756100102547101e456",
+"1.2572865218298098525224326021922370439624201115e459",
+"2.9797690567366493504781652671956017941909356644e461",
+"7.0918503550332254541380333359255322701744268814e463",
+"1.6949522348529408835389899672862022125716880246e466",
+"4.0678853636470581204935759214868853101720512591e468",
+"9.8036037263894100703895179707833935975146435346e470",
+"2.3724721017862372370342633489295812505985437353e473",
+"5.7651072073405564859932599378988824389544612769e475",
+"1.4066861585910957825823554248473273151048885515e478",
+"3.4463810885481846673267707908759519220069769513e480",
+"8.4780974778285342816238561455548417281371633003e482",
+"2.0940900770236479675610924679520459068498793351e485",
+"5.1933433910186469595515093205210738489877007512e487",
+"1.2931425043636430929283258208097473883979374870e490",
+"3.2328562609091077323208145520243684709948437176e492",
+"8.1144692148818604081252445255811648621970577313e494",
+"2.0448462421502288228475616204464535452736585483e497",
+"5.1734609926400789218043308997295274695423561272e499",
+"1.3140590921305800461383000485312999772637584563e502",
+"3.3508506849329791176526651237548149420225840635e504",
+"8.5781777534284265411908227168123262515778152027e506",
+"2.2045916826311056210860414382207678466554985071e509",
+"5.6878465411882525024019869106095810443711861483e511",
+"1.4731522541677573981221146098478814904921372124e514",
+"3.8301958608361692351174979856044918752795567523e516",
+"9.9968111967824017036566697424277237944796431235e518",
+"2.6191645335569892463580474725160636341536664983e521",
+"6.8884027232548817179216648527172473578241428906e523",
+"1.8185383189392887735313195211173533024655737231e526",
+"4.8191265451891152498579967309609862515337703663e528",
+"1.2818876610203046564622271304356223429079829174e531",
+"3.4226400549242134327541464382631116555643143895e533",
+"9.1726753471968919997811124545451392369123625640e535",
+"2.4674496683959639479411192502726424547294255297e538",
+"6.6621141046691026594410219757361346277694489302e540",
+"1.8054329223653268207085169554244924841255206601e543",
+"4.9107775488336889523271661187546195568214161954e545",
+"1.3406422708315970839853163504200111390122466213e548",
+"3.6733598220785760101197668001508305208935557425e550",
+"1.0101739510716084027829358700414783932457278292e553",
+"2.7880801049576391916809030013144803653582088085e555",
+"7.7229818907326605609561013136411106120422383998e557",
+"2.1469889656236796359457961651922287501477422751e560",
+"5.9900992140900661842887713008863182129122009476e562",
+"1.6772277799452185316008559642481690996154162653e565",
+"4.7130100616460640737984052595373551699193197056e567",
+"1.3290688373841900688111502831895341579172481569e570",
+"3.7612648097972578947355553014263816669058122842e572",
+"1.0681992059824212421048977056050923934012506887e575",
+"3.0443677370499005399989584609745133211935644628e577",
+"8.7068917279627155443970211983871080986135943638e579",
+"2.4988779259252993612419450839371000243021015824e582",
+"7.1967684266648621603768018417388480699900525573e584",
+"2.0798660753061451643488957322625270922271251890e587",
+"6.0316116183878209766117976235613285674586630483e589",
+"1.7551989809508559041940331084563466131304709470e592",
+"5.1251810243764992402465766766925321103409751654e594",
+"1.5016780401423142773922469662709119083299057234e597",
+"4.4149334380184039755332060808364810104899228270e599",
+"1.3024053642154291727822957938467618980945272339e602",
+"3.8551198780776703514355955497864152183598006125e604",
+"1.1449706037890680943763718782865653198528607819e607",
+"3.4120123992914229212415881972939646531615251301e609",
+"1.0201917073881354534512348709908954312952960139e612",
+"3.0605751221644063603537046129726862938858880417e614",
+"9.2123311177148631446646508850477857445965230056e616",
+"2.7821239975498886696887245672844312948681499476e619",
+"8.4298357125761626691568354388718268234504943415e621",
+"2.5626700566231534514236779734170353543289502798e624",
+"7.8161436727006180268422178189219578307032983534e626",
+"2.3917399638463891162137186525901190961952092961e629",
+"7.3426416890084145867761162634516656253192925392e631",
+"2.2615336402145916927270438091431130125983421020e634",
+"6.9881389482630883305265653702522192089288770954e636",
+"2.1663230739615573824632352647781879547679518995e639",
+"6.7372647600204434594606616734601645393283304076e641",
+"2.1020266051263783593517264421195713362704390872e644",
+"6.5793432740455642647709037638342582825264743429e646",
+"2.0659137880503071791380637818439571007133129436e649",
+"6.5076284323584676142849009128084648672469357725e651",
+"2.0564105846252757661140286884474748980500317041e654",
+"6.5188215532621241785814709423784954268186005021e656",
+"2.0729852539373554887889077596763615457283149596e659",
+"6.6128229600601640092366157533675933308733247213e661",
+"2.1161033472192524829557170410776298658794639108e664",
+"6.7926917445738004702878517018591918694730791537e666",
+"2.1872467417527637514326882479986597819703314875e669",
+"7.0648069758614269171275830410356710957641707046e671",
+"2.2889974601791023211493369052955574350275913083e674",
+"7.4392417455820825437353449422105616638396717520e676",
+"2.4251928090597589092577224511606431024117329911e679",
+"7.9303804856254116332727524152953029448863668811e681",
+"2.6011647992851350157134627922168593659227283370e684",
+"8.5578321896480942016972925863934673138857762287e686",
+"2.8240846225838710865601065535098442135823061554e689",
+"9.3477201007526132965139526921175843469574333746e691",
+"3.1034430734498676144426322937830380031898678803e694",
+"1.0334465434588059156093965538297516550622260041e697",
+"3.4517114551524117581353844897913705279078348539e699",
+"1.1563233374760579389753538040801091268491246760e702",
+"3.8852464139195546749571887817091666662130589115e704",
+"1.3093280414908899254605726194359891665138008532e707",
+"4.4255287802392079480567354536936433828166468838e709",
+"1.5002542565010914943912333188021451067748432936e712",
+"5.1008644721037110809301932839272933630344671982e714",
+"1.7393947849873654785971959098192070367947533146e717",
+"5.9487301646567899368024100115816880658380563359e719",
+"2.0404144464772789483232266339725190065824533232e722",
+"7.0190256958818395822318996208654653826436394319e724",
+"2.4215638650792346558700053691985855570120556040e727",
+"8.3786109731741519093102185774271060272617123899e729",
+"2.9073780076914307125306458463672057914598141993e732",
+"1.0117675466766178879606647545357876154280153413e735",
+"3.5310687379013964289827199933298987778437735413e737",
+"1.2358740582654887501439519976654645722453207394e740",
+"4.3379179445118655130052715118057806485810757955e742",
+"1.5269471164681766605778555721556347883005386800e745",
+"5.3901233211326636118398301697093908027009015405e747",
+"1.9081036556809629185912998800771243441561191453e750",
+"6.7737679776674183609991145742737914217542229659e752",
+"2.4114614000496009365156847884414697461445033758e755",
+"8.6089171981770753433609946947360469937358770518e757",
+"3.0819923569473929729232361007155048237574439845e760",
+"1.1064352561441140772794417601568662317289223904e763",
+"3.9831669221188106782059903365647184342241206056e765",
+"1.4379232588848906548323625114998633547549075386e768",
+"5.2052821971633041704931522916295053442127652898e770",
+"1.8895174375702794138890142818615104399492338002e773",
+"6.8778434727558170665560119859758980014152110328e775",
+"2.5104128675558732292929443748812027705165520269e778",
+"9.1881110952544960192121764120652021400905804187e780",
+"3.3720367719584000390508687432279291854132430136e783",
+"1.2409095320806912143707196975078779402320734290e786",
+"4.5789561733777505810279556838040695994563509531e788",
+"1.6942137841497677149803436030075057517988498526e791",
+"6.2855331391956382225770747671578463391737329533e793",
+"2.3382183277807774187986718133827188381726286586e796",
+"8.7215543626222997721190458639175412663839048968e798",
+"3.2618613316207401147725231531051604336275804314e801",
+"1.2231979993577775430396961824144351626103426617e804",
+"4.5992244775852435618292576458782762114148884082e806",
+"1.7339076280496368228096301324961101317034129299e809",
+"6.5541708340276271902204019008352962978389008751e811",
+"2.4840307460964707050935323204165772968809434316e814",
+"9.4393168351665886793554228175829937281475850403e816",
+"3.5963797141984702868344160934991206104242299003e819",
+"1.3738170508238156495707469477166640731820558219e822",
+"5.2617193046552139378559608097548234002872737980e824",
+"2.0205002129876021521366889509458521857103131384e827",
+"7.7789258200022682857262524611415309149847055830e829",
+"3.0026653665208755582903334500006309331840963550e832",
+"1.1620314968435788410583590451502441711422452894e835",
+"4.5086822077530859033064330951829473840319117228e837",
+"1.7538773788159504163862024740261665323884136601e840",
+"6.8401217773822066239061896487020494763148132747e842",
+"2.6744876149564427899473201526425013452390919904e845",
+"1.0483991450629255736593494998358605273337240602e848",
+"4.1202086400972975044812435343549318724215355567e850",
+"1.6233622041983352167656099525358431577340850093e853",
+"6.4122807065834241062241593125165804730496357870e855",
+"2.5392631598070359460647670877565658673276557716e858",
+"1.0080874744433932705877125338393566493290793413e861",
+"4.0121881482847052169390958846806394643297357785e863",
+"1.6008630711655973815586992579875751462675645756e866",
+"6.4034522846623895262347970319503005850702583026e868",
+"2.5677843661496182000201536098120705346131735793e871",
+"1.0322493151921465164081017511444523549144957788e874",
+"4.1599647402243504611246500571121429903054179889e876",
+"1.6806257550506375862943586230733057680833888675e879",
+"6.8065343079550822244921524234468883607377249135e881",
+"2.7634529290297633831438138839194366744595163148e884",
+"1.1247253421151136969395322507552107265050231401e887",
+"4.5888793958296638835132915830812597641404944118e889",
+"1.8768516728943325283569362574802352435334622144e892",
+"7.6950918588667633662634386556689644984871950792e894",
+"3.1626827539942397435342732874799444088782371775e897",
+"1.3030252946456267743361205944417370964578337171e900",
+"5.3814944668864385780081780550443742083708532518e902",
+"2.2279387092909855712953857147883709222655332462e905",
+"9.2459456435575901208758507163717393274019629720e907",
+"3.8463133877199574902843538980106435601992165963e910",
+"1.6039126826792222734485755754704383646030733206e913",
+"6.7043550135991491030150459054664323640408464804e915",
+"2.8091247506980434741633042343904351605331146753e918",
+"1.1798323952931782591485877784439827674239081636e921",
+"4.9670943841842804710155545472491674508546533688e923",
+"2.0961138301257663587685640189391486642606637216e926",
+"8.8665615014319916975910258001125988498226075426e928",
+"3.7594220766071644797785949392477419123247855980e931",
+"1.5977543825580449039059028491802903127380338791e934",
+"6.8064336696972712906391461375080367322640243253e936",
+"2.9063471769607348411029154007159316846767383869e939",
+"1.2439165917391945119920477915064187610416440296e942",
+"5.3364021785611444564458850255625364848686528869e944",
+"2.2946529367812921162717305609918906884935207414e947",
+"9.8899541575273690211311587178750488674070743954e949",
+"4.2724601960518234171286605661220211107198561388e952",
+"1.8499752648904395396167100251308351409416977081e955",
+"8.0288926496245076019365215090678245116869680532e957",
+"3.4925683025866608068423868564445036625838311031e960",
+"1.5227597799277841117832806694098035968865503609e963",
+"6.6544602382844165684929365253208417183942250774e965",
+"2.9146535843685744569999061980905286726566705839e968",
+"1.2795329235378041866229588209617420872962783863e971",
+"5.6299448635663384211410188122316651841036248999e973",
+"2.4828056848327552437231892961941643461896985808e976",
+"1.0974001126960778177256496689178206410158467727e979",
+"4.8614824992436247325246280333059454397002012032e981",
+"2.1584982296641693812409348467878397752268893342e984",
+"9.6053171220055537465221600682058869997596575373e986",
+"4.2839714364144769709488833904198256018928072616e989",
+"1.9149352320772712060141508755176620440460848459e992",
+"8.5789098397061750029433959223191259573264601099e994",
+"3.8519305180280725763215847691212875548395805893e997",
+"1.7333687331126326593447131461045793996778112652e1000",
+"7.8174929863379732936446562889316530925469288060e1002",
+"3.5335068298247639287273846425971071978312118203e1005",
+"1.6006785939106180597135052430964895606175389546e1008",
+"7.2670808163542059910993138036580626052036268539e1010",
+"3.3065217714411637259501877806644184853676502185e1013",
+"1.5077739277771706590332856279829748293276484996e1016",
+"6.8905268499416699117821153198821949700273536434e1018",
+"3.1558612972732848195962088165060452962725279687e1021",
+"1.4485403354484377321946598467762747909890903376e1024",
+"6.6632855430628135680954352951708640385498155531e1026",
+"3.0717746353519570548919956710737683217714649699e1029",
+"1.4191598815326041593601020000360809646584168161e1032",
+"6.5707102514959572578372722601670548663684698587e1034",
+"3.0488095566941241676364943287175134579949700144e1037",
+"1.4176964438627677379509698628536437579676610567e1040",
+"6.6064654284004976588515195608979799121293005242e1042",
+"3.0852193550630324066836596349393566189643833448e1045",
+"1.4438826581694991663279527091516188976753314053e1048",
+"6.7718096668149510900780982059210926300973042912e1050",
+"3.1827505434030270123367061567829135361457330168e1053",
+"1.4990755059428257228105885998447522755246402509e1056",
+"7.0756363880501374116659781912672307404763019845e1058",
+"3.3467760115477149957180076844694001402452908386e1061",
+"1.5863718294736169079703356424384956664762678575e1064",
+"7.5352661899996803128590943015828544157622723232e1066",
+"3.5867867064398478289209288875534387019028416258e1069",
+"1.7108972589718074143952830793629902608076554555e1072",
+"8.1780888978852394408094531193550934466605930775e1074",
+"3.9173045820870296921477280441710897609504240841e1077",
+"1.8803061994017742522309094612021230852562035603e1080",
+"9.0442728191225341532306745083822120400823391254e1082",
+"4.3593394988170614618571851130402262033196874584e1085",
+"2.1055609779286406860770204095984292562034090424e1088",
+"1.0190915133174620920612778782456397600024499765e1091",
+"4.9425938395896911464971977094913528360118823862e1093",
+"2.4021006060405898971976380868127974783017748396e1096",
+"1.1698229951417672799352497482778323719329643469e1099",
+"5.7087362162918243260840187715958219750328660130e1101",
+"2.7915720097667020954550851793103569457910714803e1104",
+"1.3678702847856840267729917378620749034376250253e1107",
+"6.7162430982977085714553894329027877758787388746e1109",
+"3.3043916043624726171560516009881715857323395263e1112",
+"1.6290650609506990002579334392871685917660433864e1115",
+"8.0475814010964530612741911900786128433242543291e1117",
+"3.9835527935427442653307246390889133574455058929e1120",
+"1.9758421855972011556040394209881010252929709229e1123",
+"9.8199356624180897433520759223108620957060654868e1125",
+"4.8903279598842086921893338093108093236616206124e1128",
+"2.4402736519822201374024775708460938525071486856e1131",
+"1.2201368259911100687012387854230469262535743428e1134",
+"6.1128854982154614441932063149694651005304074574e1136",
+"3.0686685201041616449849895701146714804662645436e1139",
+"1.5435402656123933074274497537676797546745310654e1142",
+"7.7794429386864622694343467589891059635596365698e1144",
+"3.9286186840366634460643451132894985115976164677e1147",
+"1.9878810541225517037085586273244862468683939326e1150",
+"1.0078556944401337137802392240535145271622757238e1153",
+"5.1199069277558792660036152581918537979843606772e1155",
+"2.6060326262277425463958401664196535831740395847e1158",
+"1.3290766393761486986618784848740233274187601882e1161",
+"6.7915816272121198501621990577062592031098645618e1163",
+"3.4772897931326053632830459175456047119922506556e1166",
+"1.7838496638770265513642025557008952172520245863e1169",
+"9.1689872723279164740120011363026014166754063738e1171",
+"4.7220284452488769841161805851958397295878342825e1174",
+"2.4365666777484205238039491819610533004673224897e1177",
+"1.2597049723959334108066417270738645563416057272e1180",
+"6.5252717570109350679784041462426184018495176669e1182",
+"3.3866160418886753002807917518999189505598996691e1185",
+"1.7610403417821111561460117109879578542911478279e1188",
+"9.1750201806847991235207210142472604208568801836e1190",
+"4.7893605343174651424778163694370699396872914558e1193",
+"2.5048355594480342695158979612155875784564534314e1196",
+"1.3125338331507699572263305316769678911111815980e1199",
+"6.8908026240415422754382352913040814283337033898e1201",
+"3.6245621802458512368805117632259468313035279830e1204",
+"1.9101442689895636018360296992200739800969592470e1207",
+"1.0085561740264895817694236811881990614911944824e1210",
+"5.3352621606001298875602512734855730352884188121e1212",
+"2.8276889451180688404069331749473537087028619704e1215",
+"1.5015028298576945542560815158970448193212197063e1218",
+"7.9879950548429350286423536645722784387888888375e1220",
+"4.2576013642312843702663745032170244078744777504e1223",
+"2.2735591284995058537222439847178910338049711187e1226",
+"1.2163541337472356317414005318240717030856595485e1229",
+"6.5196581568851829861339068505770243285391351800e1231",
+"3.5010564302473432635539079787598620644255155917e1234",
+"1.8835683594730706757920024925728057906609273883e1237",
+"1.0152433457559850942518893434967423211662398623e1240",
+"5.4823140670823195089602024548824085342976952564e1242",
+"2.9659319102915348543474695280913830170550531337e1245",
+"1.6075350953780118910563284842255295952438387984e1248",
+"8.7289155679026045684358636693446257021740446758e1250",
+"4.7485300689390168852291098361234763819826803036e1253",
+"2.5879488875717642024498648606872946281805607654e1256",
+"1.4130200926141832545376262139352628669865861779e1259",
+"7.7292199065995824023208153902258878824166263934e1261",
+"4.2356125088165711564718068338437865595643112636e1264",
+"2.3253512673402975649030219517802388212008068837e1267",
+"1.2789431970371636606966620734791313516604437860e1270",
+"7.0469770156747717704386080248700137476490452611e1272",
+"3.8899313126524740172821116297282475887022729841e1275",
+"2.1511320158968181315570077312397209165523569602e1278",
+"1.1917271368068372448825822831068053877700057559e1281",
+"6.6140856092779467090983316712427699021235319456e1283",
+"3.6774315987585383702586724092109800655806837617e1286",
+"2.0483294005085058722340805319305158965284408553e1289",
+"1.1429678054837462767066169368172278702628699972e1292",
+"6.3891900326541416867899886768083037947694432846e1294",
+"3.5779464182863193446023936590126501250708882394e1297",
+"2.0072279406586251523219428427060967201647683023e1300",
+"1.1280621026501473356049318776008263567325997858e1303",
+"6.3509896379203294994557664708926523884045367946e1305",
+"3.5819581557870658376930522895834559470601587521e1308",
+"2.0238063580196921982965745436146526100889896949e1311",
+"1.1454743986391457842358611916858933773103681673e1314",
+"6.4948398402839565966173329568590154493497875088e1316",
+"3.6890690292812873468786451194959207752306793050e1319",
+"2.0990802776610525003739490729931789211062565245e1322",
+"1.1964757582667999252131509716061119850305662190e1325",
+"6.8318765797034275729670920478708994345245331105e1327",
+"3.9078334035903605717371766513821544765480329392e1330",
+"2.2391885402572766076054022212419745150620228741e1333",
+"1.2852942221076767727655008749928933716456011297e1336",
+"7.3904417771191414434016300312091368869622064962e1338",
+"4.2568944636206254713993388979764628468902309418e1341",
+"2.4562281055091008969974185441324190626556632534e1344",
+"1.4196998449842603184645079185085382182149733604e1347",
+"8.2200621024588672439095008481644362834646957571e1349",
+"4.7676360194261430014675104919353730444095235391e1352",
+"2.7699965272865890838526235958144517388019331762e1355",
+"1.6121379788807948468022269327640109119827251085e1358",
+"9.3987644168750339568569830180141836168592873830e1360",
+"5.4888784194550198308044780825202832322458238316e1363",
+"3.2109938753811866010206196782743656908638069415e1366",
+"1.8816424109733753481980831314687782948461908677e1369",
+"1.1045240952413713293922747981721728590747140393e1372",
+"6.4946016800192634168265758132523764113593185514e1374",
+"3.8253203895313461525108531540056497062906386268e1377",
+"2.2569390298234942299814033608633333267114767898e1380",
+"1.3338509666256850899190093862702299960864827827e1383",
+"7.8963977224240557323205355667197615768319780740e1385",
+"4.6825638493974650492660775910648186150613629979e1388",
+"2.7814429265420942392640500890925022573464496207e1391",
+"1.6549585412925460723621098030100388431211375243e1394",
+"9.8635529061035745912781744259398315050019796451e1396",
+"5.8885410849438340309930701322860794084861818481e1399",
+"3.5213475687964127505338559391070754862747367452e1402",
+"2.1092871937090512375697797075251382162785673103e1405",
+"1.2655723162254307425418678245150829297671403862e1408",
+"7.6060896205148387626766256253356484079005137212e1410",
+"4.5788659515499329351313286264520603415561092601e1413",
+"2.7610561687846095598841911617505923859583338838e1416",
+"1.6676779259459041741700514616973578011188336658e1419",
+"1.0089451451972720253728811343269014696768943678e1422",
+"6.1142075798954684737596596740210229062419798691e1424",
+"3.7113240009965493635721134221307609040888817805e1427",
+"2.2564849926059020130518449606555026296860401225e1430",
+"1.3741993604969943259485735810392011014787984346e1433",
+"8.3826160990316653882862988443391267190206704514e1435",
+"5.1217784365083475522429285938912064253216296458e1438",
+"3.1345284031431087019726722994614183322968373432e1441",
+"1.9214659111267256343092481195698494376979612914e1444",
+"1.1797800694318095394658783454158875547465482329e1447",
+"7.2556474270056286677151518243077084616912716324e1449",
+"4.4694788150354672593125335237735484124018233256e1452",
+"2.7576684288768832989958331841682793704519249919e1455",
+"1.7042390890459138787794249078159966509392896449e1458",
+"1.0549239961194206909644640179381019269314202902e1461",
+"6.5405287759404082839796769112162319469748057995e1463",
+"4.0616683698589935443513793618652800390713544015e1466",
+"2.5263577260522939845865579630802041843023824377e1469",
+"1.5739208633305791523974256109989672068203842587e1472",
+"9.8212661871828139109599358126335553705591977744e1474",
+"6.1382913669892586943499598828959721065994986090e1477",
+"3.8425703957352759426630748866928785387312861292e1480",
+"2.4092916381260180160497479539564348437845164030e1483",
+"1.5130351487431393140792417150846410818966763011e1486",
+"9.5169910855943462855584303878823924051300939339e1488",
+"5.9957043839244381599018111443659072152319591783e1491",
+"3.7832894662563204788980428320948874528113662415e1494",
+"2.3910389426739945426635630698839688701767834646e1497",
+"1.5135276507126385455060354232365522948219039331e1500",
+"9.5957653055181283785082645833197415491708709360e1502",
+"6.0933109690040115203527480104080358837235030444e1505",
+"3.8753457762865513269443477346195108220481479362e1508",
+"2.4685952594945331952635495069526283936446702353e1511",
+"1.5749637755575121785781445854357769151452996101e1514",
+"1.0064018525812502821114343900934614487778464509e1517",
+"6.4409718565200018055131800965981532721782172857e1519",
+"4.1286629600293211573339484419194162474662372801e1522",
+"2.6506016203388241830083948997122652308733243338e1525",
+"1.7043368418778639496743979205149865434515475466e1528",
+"1.0975929261693443835903122608116513339827966200e1531",
+"7.0794743737922712741575140822351511041890381994e1533",
+"4.5733404454698072431057540971239076133061186768e1536",
+"2.9589512682189652862894229008391682258090587839e1539",
+"1.9174004218058895055155460397437810103242700919e1542",
+"1.2443928737520222890795893797937138757004512896e1545",
+"8.0885536793881448790173309686591401920529333829e1547",
+"5.2656484452816823162402824605971002650264596323e1550",
+"3.4332027863236568701886641643093093727972516802e1553",
+"2.2418814194693479362331976992939790204366053472e1556",
+"1.4661904483329535502965112953382622793655398970e1559",
+"9.6035474365808457544421489844656179298442863258e1561",
+"6.2999271183970348149140497338094453619778518297e1564",
+"4.1390521167868518733985306751128056028194486521e1567",
+"2.7234962928457485326962331842242260866551972131e1570",
+"1.7947840569853482830468176684037649911057749634e1573",
+"1.1845574776103298668108996611464848941298114758e1576",
+"7.8299249270042804196200467601782651501980538555e1578",
+"5.1834103016768336377884709552380115294311116523e1581",
+"3.4366010300117407018537562433228016440128270255e1584",
+"2.2819030839277958260308941455663402916245171449e1587",
+"1.5174655508119842243105446068016162939303039013e1590",
+"1.0106320568407814933908227081298764517575823983e1593",
+"6.7409158191280125609167874632262759332230745968e1595",
+"4.5029317671775123906924140254351523233930138306e1598",
+"3.0124613522417557893732249830161169043499262527e1601",
+"2.0183491060019763788800607386207983259144505893e1604",
+"1.3543122501273261502285207556145556766885963454e1607",
+"9.1009783208556317295356594777298141473473674413e1609",
+"6.1249584099358401539774988285121649211647782880e1612",
+"4.1282219682967562637808342104171991568650605661e1615",
+"2.7865498286003104780520630920316094308839158821e1618",
+"1.8837076841338098831631946502133679752775271363e1621",
+"1.2752701021585892909014827781944501192628858712e1624",
+"8.6463312926352353923120532361583718086023662073e1626",
+"5.8708589476993248313798841473515344580410066547e1629",
+"3.9921840844355408853383212201990434314678845252e1632",
+"2.7186773615006033429153967509555485768296293616e1635",
+"1.8541379605434114798683005841516841293978072246e1638",
+"1.2663762270511500407500492989756002603787023344e1641",
+"8.6620133930298662787303372049931057809903239676e1643",
+"5.9334791742254584009302809854202774599783719178e1646",
+"4.0703667135186644630381727559983103375451631356e1649",
+"2.7963419321873224861072246833708392018935270741e1652",
+"1.9238832493448778704417705821591373709027466270e1655",
+"1.3255555587986208527343799311076456485519924260e1658",
+"9.1463333557104838838672215246427549750087477396e1660",
+"6.3201163487959443637522500735281436877310446880e1663",
+"4.3735205133667934997165570508814754319098829241e1666",
+"3.0308497157631878953035740362608624743135488664e1669",
+"2.1034097027396523993406803811650385571736029133e1672",
+"1.4618697434040584175417728649097017972356540247e1675",
+"1.0174613414092246586090739139771524508760152012e1678",
+"7.0917055496222958705052451804207525826058259525e1680",
+"4.9500104736363625176126611359336853026588665148e1683",
+"3.4600573210718173998112501340176460265585476938e1686",
+"2.4220401247502721798678750938123522185909833857e1689",
+"1.6978501274499407980873804407624589052322793533e1692",
+"1.1918907894698584402573410694152461514730601060e1695",
+"8.3789922499731048350091077179891804448556125457e1697",
+"5.8988105439810658038464118334643830331783512322e1700",
+"4.1586614335066513917117203425923900383907376187e1703",
+"2.9360149720556958825484745618702273671038607588e1706",
+"2.0757625852433769889617715152422507485424295564e1709",
+"1.4696399103523109081849342327915135299680401259e1712",
+"1.0419746964397884339031183710491830927473404493e1715",
+"7.3980203447224978807121404344491999585061171902e1717",
+"5.2599924650976959931863318488933811704978493222e1720",
+"3.7451146351495595471486682764120873933944687174e1723",
+"2.6702667348616359571170004810818183114902561955e1726",
+"1.9065704486912080733815383434924182744040429236e1729",
+"1.3631978708142137724677999155970790661988906903e1732",
+"9.7604967550297706108694473956750861139840573431e1734",
+"6.9982761733563455279933937826990367437265691150e1737",
+"5.0247622924698560890992567359779083819956766245e1740",
+"3.6128040882858265280623655931681161266548914930e1743",
+"2.6012189435657951002049032270810436111915218750e1746",
+"1.8754788583109382672477352267254324436690872718e1749",
+"1.3540957357004974289528648336957622243290810103e1752",
+"9.7901121691145964113292127476203608818992557044e1754",
+"7.0880412104389678018023500292771412784950611300e1757",
+"5.1388298775682516563067037712259274269089193192e1760",
+"3.7307904911145507024786669379100233119358754258e1763",
+"2.7122846870402783607019908638605869477773814345e1766",
+"1.9745432521653226465910493488905072979819336843e1769",
+"1.4394420308285202093648749753411798202288296558e1772",
+"1.0507926825048197528363587319990612687670456488e1775",
+"7.6812945091102323932337823309131378746871036927e1777",
+"5.6227075806686901118471286662284169242709599031e1780",
+"4.1214446566301498519839453123454296054906136089e1783",
+"3.0251403779665299913562158592615453304301103889e1786",
+"2.2234781778053995436468186565572358178661311359e1789",
+"1.6364799388647740641240585312261255619494725160e1792",
+"1.2060857149433384852594311375136545391567612443e1795",
+"8.9009125762818380212146017948507704989768979830e1797",
+"6.5777743938722782976775907263947193987439276094e1800",
+"4.8675530514654859402814171375320923550705064309e1803",
+"3.6068568111359250817485300989112804351072452653e1806",
+"2.6762877538628564106574093333921700828495759869e1809",
+"1.9884818011201023131184551347103823715572349582e1812",
+"1.4794304600333561209601306202245244844385828089e1815",
+"1.1021756927248503101152973120672707409067441926e1818",
+"8.2222306677273833134601179480218397271643116773e1820",
+"6.1420063087923553351547081071723142761917408229e1823",
+"4.5942207189766817906957216641648910785914221355e1826",
+"3.4410713185135346612310955264595034178649751795e1829",
+"2.5808034888851509959233216448446275633987313846e1832",
+"1.9381834201527483979384145552783153001124472698e1835",
+"1.4575139319548667952496877455692931056845603469e1838",
+"1.0975079907620146968230148724136777085804739412e1841",
+"8.2752102503455908140455321379991299226967735170e1843",
+"6.2477837390109210646043767641893430916360640053e1846",
+"4.7233245066922563248409088337271433772768643880e1849",
+"3.5755566515660380379045679871314475365985863417e1852",
+"2.7102719418870568327316625342456372327417284470e1855",
+"2.0570964038922761360433318634924386596509718913e1858",
+"1.5633932669581298633929322162542533813347386373e1861",
+"1.1897422761551368260420214165694868231957361030e1864",
+"9.0658361443021426144402031942594895927515091053e1866",
+"6.9172329781025348148178750372199905592694014473e1869",
+"5.2847659952703365985208565284360727872818227057e1872",
+"4.0428459863818074978684552442535956822705943699e1875",
+"3.0968200255684645433672367170982542926192752873e1878",
+"2.3752609596110123047626705620143610424389841454e1881",
+"1.8242004169812574500577309916270292805931398236e1884",
+"1.4028101206585869790943951325611855167761245244e1887",
+"1.0801637929071119739026842520721128479176158837e1890",
+"8.3280628433138333187896955834759900574448184640e1892",
+"6.4292645150382793221056449904434643243473998542e1895",
+"4.9698214701245899159876635776127979227205400873e1898",
+"3.8466418178764325949744516090723055921856980275e1901",
+"2.9811474088542352611051999970310368339439159713e1904",
+"2.3133703892708865626176351976960845831404787937e1907",
+"1.7974887924634788591539025486098577211001520227e1910",
+"1.3984462805365865524217361828184693070159182737e1913",
+"1.0893896525380009243365324864155875901654003352e1916",
+"8.4972392897964072098249533940415832032901226147e1918",
+"6.6363438853309940308732886007464764817695857621e1921",
+"5.1896209183288373321429116857837446087438160659e1924",
+"4.0634731790514796310678998499686720286464079796e1927",
+"3.1857629723763600307572334823754388704587838560e1930",
+"2.5008239333154426241444282836647195133101453270e1933",
+"1.9656476115859379025775206309604695374617742270e1936",
+"1.5469646703181331293285087365658895259824163166e1939",
+"1.2190081602106889059108648844139209464741440575e1942",
+"9.6179743840623354676367239380258362676809966139e1944",
+"7.5981997634092450194330119110404106514679873250e1947",
+"6.0101760128567128103715124216329648253111779740e1950",
+"4.7600594021825165458142378379333081416464529554e1953",
+"3.7747271059307356208306906054811133563256371936e1956",
+"2.9971333221090040829395683407520040049225559317e1959",
+"2.3827209910766582459369568308978431839134319657e1962",
+"1.8966459088970199637658176373946831743950918447e1965",
+"1.5116267893909249111213566570035624899928882002e1968",
+"1.2062781779339580790748426122888428670143247838e1971",
+"9.6381626416923250518079924721878545074444550227e1973",
+"7.7105301133538600414463939777502836059555640181e1976",
+"6.1761346207964418931985615761779771683704067785e1979",
+"4.9532599658787463983452463840947376890330662363e1982",
+"3.9774677526006333578712328464280743642935521878e1985",
+"3.1978840730909092197284712085281717888920159590e1988",
+"2.5742966788381819218814193228651782900580728470e1991",
+"2.0748831231435746290364239742293337017868067146e1994",
+"1.6744306803768647256323941472030722973419530187e1997",
+"1.3529399897445066983109744709400824162522980391e2000",
+"1.0945284517033059189335783469905266747481091136e2003",
+"8.8656804587967779433619846106232660654596838207e2005",
+"7.1900668520841869120665695192154687790878035786e2008",
+"5.8383342838923597725980544496029606486192965058e2011",
+"4.7465657728044884951222182675272070073274880592e2014",
+"3.8637045390628536350294856697671465039645752802e2017",
+"3.1489191993362257125490308208602244007311288533e2020",
+"2.5695180666583601814400091498219431109966011443e2023",
+"2.0992962604598802682364874754045275216842231349e2026",
+"1.7172243410561820594174467548809035127376945243e2029",
+"1.4064067353250131066628888922474599769321718154e2032",
+"1.1532535229665107474635688916429171810843808886e2035",
+"9.4682114235550532366759006003883500567027670961e2037",
+"7.7828697901622537605475902935192237466096745530e2040",
+"6.4053018373035348449306668115663211434597621571e2043",
+"5.2779687139381127122228694527306486222108440174e2046",
+"4.3543241889989429875838672985027851133239463144e2049",
+"3.5966717801131269077442743885633005036055796557e2052",
+"2.9744475621535559527045149193418495164818143752e2055",
+"2.4628425814631443288393383532150513996469423027e2058",
+"2.0416965000329466486078114948152776103073151689e2061",
+"1.6946080950273457183444835406966804165550715902e2064",
+"1.4082193269677242919442658223189414261572644914e2067",
+"1.1716384800371466108976291641693592665628440569e2070",
+"9.7597485387094312687772509375307626904684909941e2072",
+"8.1396302812836656781602272819006560838507214890e2075",
+"6.7965912848718608412637897803870478300153524433e2078",
+"5.6819503141528756632965282564035719858928346426e2081",
+"4.7557924129459569301791941506097897521923025959e2084",
+"3.9853540420487119074901646982110038123371495753e2087",
+"3.3437120412788692903842481817990321985508684937e2090",
+"2.8087181146742502039227684727111870467827295347e2093",
+"2.3621319344410444214990482855501083063442755387e2096",
+"1.9889150887993594029021986564331911939418800036e2099",
+"1.6766554198578599766465534673731801764930048430e2102",
+"1.4150971743600338202896911264629640689600960875e2105",
+"1.1957571123342285781447890018612046382712811939e2108",
+"1.0116105170347573771104914955745791239775038900e2111",
+"8.5683410792843949841258629675166851800894579490e2113",
+"7.2659532352331669465387317964541490327158603407e2116",
+"6.1687942967129587376113832951895725287757654293e2119",
+"5.2434751522060149269696758009111366494594006149e2122",
+"4.4621973545273187028511941065753772886899499233e2125",
+"3.8017921460572755348292173788022214499638373346e2128",
+"3.2429287005868560312093224241182948968191532464e2131",
+"2.7694611103011750506527613501970238418835568724e2134",
+"2.3678892493075046683081109544184553848104411259e2137",
+"2.0269131974072239960717429769821978093977376038e2140",
+"1.7370646101779909646334837312737435226538611264e2143",
+"1.4904014355327162476555290414328719424370128465e2146",
+"1.2802548331226032567360994465908369985533940351e2149",
+"1.1010191564854388007930455240681198187559188702e2152",
+"9.4797749373396280748281219622265116394884614727e2154",
+"8.1715659959867594005018411314392530332390537895e2157",
+"7.0520614545365733626330888964320753676853034203e2160",
+"6.0929810967195993853149888065173131176801021551e2163",
+"5.2704286486624534682974653176374758467932883642e2166",
+"4.5641912097416847035456049650740540833229877234e2169",
+"3.9571537788460406379740395047192048902410303562e2172",
+"3.4348094800383632737614662900962698447292143491e2175",
+"2.9848494381533376848987142060936584950696872694e2178",
+"2.5968190111934037858618813593014828907106279244e2181",
+"2.2618293587494546974856986639515915978089569221e2184",
+"1.9723152008295244962075292349657878732894104361e2187",
+"1.7218311703241748851891730221251328133816553107e2190",
+"1.5048804428633288496553372213373660788955667415e2193",
+"1.3167703875054127434484200686701953190336208988e2196",
+"1.1534908594547415632608159801550910994734519074e2199",
+"1.0116114837418083509797356145960148942382173228e2202",
+"8.8819488272530773216020786961530107714115480943e2204",
+"7.8072330191554549656882271739184964680707507748e2207",
+"6.8703650568568003698056399130482768919022606819e2210",
+"6.0527916150908411257987687633955319417658916607e2213",
+"5.3385622045101218729545140493148591726375164447e2216",
+"4.7139504265824376138188359055450206494389270207e2219",
+"4.1671321770988748506158509405017982541040114863e2222",
+"3.6879119767325042427950280823440914548820501654e2225",
+"3.2674900113849987591163948809568650290254964465e2228",
+"2.8982636400984938993362422594087392807456153480e2231",
+"2.5736581124074625826105831263549604813021064291e2234",
+"2.2879820619302342359408083993295598678775726154e2237",
+"2.0363040351179084699873194754033082824110396277e2240",
+"1.8143468952900564467587016525843476796282363083e2243",
+"1.6183974305987303505087618741052381302283867870e2246",
+"1.4452289055246662030043243535759776502939494008e2249",
+"1.2920346415390515854858659720969240193627907643e2252",
+"1.1563710041774511690098500450267469973296977340e2255",
+"1.0361084197429962474328256403439653096074091697e2258",
+"9.2938925250946763394724459938853688271784602525e2260",
+"8.3459154875350193528462565025090612068062573068e2263",
+"7.5029780232939823982087845957556460249188253188e2266",
+"6.7526802209645841583879061361800814224269427869e2269",
+"6.0841648790890903267075034286982533616066754510e2272",
+"5.4879167209383594746901680926858245321692212568e2275",
+"4.9555887990073386056452217876952995525488067949e2278",
+"4.4798522743026340995032804960765507955041213426e2281",
+"4.0542663082438838600504688489492784699312298150e2284",
+"3.6731652752689587772057247771480462937576942124e2287",
+"3.3315609046689456109255923728732779884382286506e2290",
+"3.0250573014394026147204378745689364135019116148e2293",
+"2.7497770870084169767808780279831631998732376578e2296",
+"2.5022971491776594488705990054646785118846462686e2299",
+"2.2795927029008477579211156939783221243269127507e2302",
+"2.0789885450455731552240575129082297773861444286e2305",
+"1.8981165416266082907195645092852137867535498633e2308",
+"1.7348785190467199777176819614866854010927445751e2311",
+"1.5874138449277487796116789947603171419998612862e2314",
+"1.4540710819538178821242979592004505020718729382e2317",
+"1.3333831821516509979079812285868131103999074843e2320",
+"1.2240457612152156160795267678426944353471150706e2323",
+"1.1248980545567831511770850996474361860839987499e2326",
+"1.0349062101922404990829182916756412911972788499e2329",
+"9.5314861958705349965536774663326562919269382076e2331",
+"8.7880302725926332668224906239587091011566370274e2334",
+"8.1113519416030005052771588459138885003675759763e2337",
+"7.4948891940411724668760947736244329743396402021e2340",
+"6.9327725044880845318603876656026005012641671870e2343",
+"6.4197473391559662765027189783480080641706188151e2346",
+"5.9511057833975807383180204929286034754861636416e2349",
+"5.5226261669929549251591230174377440252511598594e2352",
+"5.1305197091364551254728252831996641994583275094e2355",
+"4.7713833294969032666897275133756877054962445837e2358",
+"4.4421578797616169412881363149527652538170037074e2361",
+"4.1400911439378269892805430455359772165574474553e2364",
+"3.8627050372939925809987466614850667430480984758e2367",
+"3.6077665048325890706528293818270523380069239764e2370",
+"3.3732616820184707810603954720082939360364739179e2373",
+"3.1573729343692886510725301617997631241301395872e2376",
+"2.9584584395040234660549607616063780473099407932e2379",
+"2.7750340162547740111595531943867826083767244640e2382",
+"2.6057569412632327964788204495291888692657442717e2385",
+"2.4494115247874388286900912225574375371097996154e2388",
+"2.3048962448249799377973758404265487224203214381e2391",
+"2.1712122626251311014051280416818088965199427947e2394",
+"2.0474531636554986286250357433059457894183060554e2397",
+"1.9327957864907907054220337416808128252108809163e2400",
+"1.8264920182337972166238218858883681198242824659e2403",
+"1.7278614492491721669261355040503962413537712127e2406",
+"1.6362847924389660420790503223357252405620213384e2409",
+"1.5511979832321398078909397055742675280527962288e2412",
+"1.4720868860873006776885017805899798841221036212e2415",
+"1.3984825417829356438040766915604808899159984401e2418",
+"1.3299568972355717972576769336740173263101145165e2421",
+"1.2661189661682643509893084408576644946472290197e2424",
+"1.2066113747583559264928109441373542633988092558e2427",
+"1.1511072515194715538741416407070359672824640300e2430",
+"1.0993074252010953339498052668752193487547531487e2433",
+"1.0509378984922471392560138351327096974095440101e2436",
+"1.0057475688570805122680052402220031804209336177e2439",
+"9.6350617096508313075274902013267904684325440580e2441",
+"9.2400241795551472239188631030723920592268097517e2444",
+"8.8704232123729413349621085789494963768577373616e2447",
+"8.5244767070903966228985863443704660181602856045e2450",
+"8.2005465922209615512284400632843883094701947515e2453",
+"7.8971263683087859738329877809428659420197975457e2456",
+"7.6128298190496696787750002208289227681070848341e2459",
+"7.3463807753829312400178752130999104712233368649e2462",
+"7.0966038290199115778572674558545135152017434115e2465",
+"6.8624159026622544957879776298113145692000858789e2468",
+"6.6428185937770623519227623456573525029856831308e2471",
+"6.4368912173699734190131567129419745753931269537e2474",
+"6.2437844808488742164427620115537153381313331451e2477",
+"6.0627147309042568641659219132186575933255244839e2480",
+"5.8929587184389376719692760996485351807124097983e2483",
+"5.7338488330410863548261056449580247308331747338e2486",
+"5.5847687633820181096006268981891160878315121907e2489",
+"5.4451495442974676568606112257343881856357243859e2492",
+"5.3144659552343284330959565563167628691804670007e2495",
+"5.1922332382639388791347495555214773231893162596e2498",
+"5.0780041070221322237937850653000048220791513019e2501",
+"4.9713660207746674470941155789287047208154891246e2504",
+"4.8719387003591740981522332673501306263991793421e2507",
+"4.7793718650523497902873408352704781444975949346e2510",
+"4.6933431714814074940621687002356095378966382258e2513",
+"4.6135563375662235666631118323316041757523953759e2516",
+"4.5397394361651639895965020430142985089403570499e2519",
+"4.4716433446226865297525545123690840313062516942e2522",
+"4.4090403377979689183360187491959168548679641704e2525",
+"4.3517228134065953223976505054563699357546806362e2528",
+"4.2995021396457161785288786993908934965256244686e2531",
+"4.2522076161096133005650610336975936680638425994e2534",
+"4.2096855399485171675594104233606177313832041734e2537",
+"4.1717983700889805130513757295503721718007553359e2540",
+"4.1384239831282686689469647237139691944263492932e2543",
+"4.1094550152463707882643359706479714100653648481e2546",
+"4.0847982851548925635347499548240835816049726591e2549",
+"4.0643742937291181007170762050499631636969477958e2552",
+"4.0481167965542016283142079002297633110421600046e2555",
+"4.0359724461645390234292652765290740211090335246e2558",
+"4.0279005012722099453824067459760158730668154575e2561",
+"4.0238726007709377354370243392300398571937486421e2564",
+"4.0238726007709377354370243392300398571937486421e2567",
+"4.0278964733717086731724613635692698970509423907e2570",
+"4.0359522663184520905188062862964084368450442755e2573",
+"4.0480601231174074467903627051552976621555794083e2576",
+"4.0642523636098770765775241559759188528042017259e2579",
+"4.0845736254279264619604117767557984470682227346e2582",
+"4.1090810671804940207321742474163332377506320710e2585",
+"4.1378446346507574788772994671482475704148864955e2588",
+"4.1709473917279635387083178628854335509782055874e2591",
+"4.2084859182535152105566927236514024529370094377e2594",
+"4.2505707774360503626622596508879164774663795321e2597",
+"4.2973270559878469166515445070476835587185097070e2600",
+"4.3488949806597010796513630411322557614231318234e2603",
+"4.4054306154082771936868307606669750863216325371e2606",
+"4.4671066440239930743984463913163127375301353927e2609",
+"4.5341132436843529705144230871860574285930874236e2612",
+"4.6066590555833026180426538565810343474505768223e2615",
+"4.6849722595282187625493789721429119313572366283e2618",
+"4.7693017601997267002752677936414843461216668876e2621",
+"4.8599184936435215075804978817206725486979785585e2624",
+"4.9571168635163919377321078393550859996719381297e2627",
+"5.0612163176502361684244821039815428056650488304e2630",
+"5.1725630766385413641298207102691367473896799047e2633",
+"5.2915320274012278155048065866053268925796425425e2636",
+"5.4185287960588572830769219446838547380015539635e2639",
+"5.5539920159603287151538449933009511064515928126e2642",
+"5.6983958083752972617478449631267758352193342257e2645",
+"5.8522524952014302878150367771311987827702562498e2648",
+"6.0161155650670703358738578068908723486878234248e2651",
+"6.1905829164540153756141996832907076467997703041e2654",
+"6.3763004039476358368826256737894288762037634132e2657",
+"6.5739657164700125478259870696769011713660800791e2660",
+"6.7843326193970529493564186559065620088497946416e2663",
+"7.0082155958371556966851804715514785551418378648e2666",
+"7.2464949260956189903724766075842288260166603522e2669",
+"7.5001222485089656550355132888496768349272434645e2672",
+"7.7701266494552884186167917672482652009846242292e2675",
+"8.0576213354851340901056130626364510134210553257e2678",
+"8.3638109462335691855296263590166361519310554281e2681",
+"8.6899995731366783837652817870182849618563665898e2684",
+"9.0375995560621455191158930584990163603306212534e2687",
+"9.4081411378606934853996446738974760311041767248e2690",
+"9.8032830656508426117864297502011700244105521472e2693",
+"1.0224824237473828844093246229459820335460205889e2697",
+"1.0674716503922677313233349063556052430220454948e2700",
+"1.1155078746599197792328849771416074789580375421e2703",
+"1.1668212368942760890775976860901214229901072690e2706",
+"1.2216618350283070652642447773363571298706423107e2709",
+"1.2803016031096658043969285266485022721044331416e2712",
+"1.3430363816620394288123780244542788834375503655e2715",
+"1.4101882007451414002529969256769928276094278838e2718",
+"1.4821077989831436116658997688865194618175087059e2721",
+"1.5591774045302670794725265568686184738320191586e2724",
+"1.6418138069703712346845704643826552529451161740e2727",
+"1.7304717525467712813575372694593186366041524474e2730",
+"1.8256476989368437018322018192795811616173808320e2733",
+"1.9278839700773069491348051211592377066679541586e2736",
+"2.0377733563717134452354890130653142559480275457e2739",
+"2.1559642110412728250591473758231024827930131433e2742",
+"2.2831660994927079217376370709966655292778009188e2745",
+"2.4201560654622703970418952952564654610344689739e2748",
+"2.5677855854554688912614509082671098541575715813e2751",
+"2.7269882917537079625196608645796706651153410193e2754",
+"2.8987885541341915641583994990481899170176075036e2757",
+"3.0843110215987798242645370669872740717067343838e2760",
+"3.2847912380027005128417319763414468863676721187e2763",
+"3.5015874597108787466892862867799823808679384786e2766",
+"3.7361938195115076227174684679942412003860903567e2769",
+"3.9902549992382901410622563238178496020123445009e2772",
+"4.2655825941857321607955520101612812245511962715e2775",
+"4.5641733757787334120512406508725709102697800105e2778",
+"4.8882296854590234843068787370845234448989343912e2781",
+"5.2401822228120731751769740061546091329316576674e2784",
+"5.6227155250773545169648931086038955996356686771e2787",
+"6.0387964739330787512202951986405838740087081592e2790",
+"6.4917062094780596575618173385386276645593612712e2793",
+"6.9850758813983921915365154562675633670658727278e2796",
+"7.5229267242660683902848271464001657463299449278e2799",
+"8.1097150087588217247270436638193786745436806322e2802",
+"8.7503824944507686409804801132611095898326314022e2805",
+"9.4504130940068301322589185223219983570192419144e2808",
+"1.0215896554621383372971890922630080223937800509e2812",
+"1.1053600072100336809555585978285746802300700151e2815",
+"1.1971048878084664764748699614483463786891658263e2818",
+"1.2976616983843776604987590382100074744990557557e2821",
+"1.4079629427470497616411535564578581098314754950e2824",
+"1.5290477558232960411422927623132339072769823876e2827",
+"1.6620749105799227967216722326344852572100798553e2830",
+"1.8083375027109560028331793891063199598445668826e2833",
+"1.9692795404522310870853323547367824362707333351e2836",
+"2.1465146990929318849230122666630928555350993353e2839",
+"2.3418475367103886864510063829294343053887933748e2842",
+"2.5572975100877444456044989701589422614845623653e2845",
+"2.7951261785259046790457173743837238918026266652e2848",
+"3.0578680393073397188760148075757939376320735718e2851",
+"3.3483655030415369921692362142954943617071205611e2854",
+"3.6698085913335245434174828908678618204310041350e2857",
+"4.0257800246928764241289787312820444170128115361e2860",
+"4.4203064671127783136936186469476847698800670666e2863",
+"4.8579168073569433667492868929955055620981937062e2866",
+"5.3437084880926377034242155822950561183080130768e2869",
+"5.8834230453899941114700613561068567862571223976e2872",
+"6.4835321960197735108400076144297561784553488822e2875",
+"7.1513360122098101824565283987160210648362498170e2878",
+"7.8950749574796304414320073521824872555792197980e2881",
+"8.7240578280149916377823681241616484174150378768e2884",
+"9.6488079577845807513872991453227831496610318917e2887",
+"1.0681230409267530891785740153872320946674762304e2891",
+"1.1834803293468424228098600090490531608915636633e2894",
+"1.3124796852456482468961347500353999554287441026e2897",
+"1.4568524506226695540547095725392939505259059538e2900",
+"1.6185630726417858745547823350911555790342815147e2903",
+"1.7998421367776658925049179566213650038861210444e2906",
+"2.0032242982335421383579736857195792493252527224e2909",
+"2.2315918682321659421307826858916112837483315328e2912",
+"2.4882249330788650254758226947691465813793896590e2915",
+"2.7768590253160133684310181273623675848193988595e2918",
+"3.1017515312779869325374472482637645922432685261e2921",
+"3.4677582119687893905768660235588888141279742121e2924",
+"3.8804214391930753280555130803623965830092031434e2927",
+"4.3460720118962443674221746500058841729703075206e2930",
+"4.8719467253356899358802577826565961578997147306e2933",
+"5.4663242258266441080576492321407008891634799277e2936",
+"6.1386821056033213333487400876940070985305879589e2939",
+"6.8998786866981331786839838585680639787483808658e2942",
+"7.7623635225353998260194818408890719760919284740e2945",
+"8.7404213263748602040979365528410950450795114617e2948",
+"9.8504548348244674500183744950519141158046094174e2951",
+"1.1111313053681999283620726430418559122627599422e2955",
+"1.2544672437606977191207800139942553249446559748e2958",
+"1.4175479854495884226064814158135085171874612515e2961",
+"1.6032467715434845059679304812850781329390186755e2964",
+"1.8148753453872244607556973048147084464869691406e2967",
+"2.0562537663237253140362050463550646698697360364e2970",
+"2.3317917710111045061170565225666433356322806652e2973",
+"2.6465836600976036144428591531131401859426385550e2976",
+"3.0065190378708777060070879979365272512308373985e2979",
+"3.4184121460591879517300590536538314846494621221e2982",
+"3.8901530222153558890688072030580602295310878950e2985",
+"4.4308842923032903576493714042831306014359091124e2988",
+"5.0512080932257510077202834008827688856369363882e2991",
+"5.7634284343705818998088433604072392985117444189e2994",
+"6.5818352720512045295816991175850672789004121264e2997",
+"7.5230377159545267773118820913997318997831710605e3000",
+"8.6063551470519786332447931125612932933519476932e3003",
+"9.8542766433745155350652881138826808208879801087e3006",
+"1.1293001033307194803184820178509552220737625204e3010",
+"1.2953072185203352439252988744750456397186056109e3013",
+"1.4870126868613448600262431078973523943969592413e3016",
+"1.7085775772036852441701533309740579011621061683e3019",
+"1.9648642137842380307956763306201665863364220936e3022",
+"2.2615587100656579734458234565438117408732218297e3025",
+"2.6053156339956379854095886219384711254859515478e3028",
+"3.0039289259969705971772556810950572076853021347e3031",
+"3.4665339806005040691425530559836960176688386634e3034",
+"4.0038467475935821998596487796611689004075086562e3037",
+"4.6284468402181810230377539892883112488710800066e3040",
+"5.3551129941324354436546813656065761149438395677e3043",
+"6.2012208472053602437521210213724151411049662194e3046",
+"7.1872149619110125225087082637706291485406558482e3049",
+"8.3371693558167745261101015859739298123071607840e3052",
+"9.6794536221032752248138279413157325120886136702e3055",
+"1.1247525108884005811233668067808881179046969084e3059",
+"1.3080871701632098758464755962861728811231625045e3062",
+"1.5226134660699762954852975940771052336273611553e3065",
+"1.7738446879715223842403716970998275971758757459e3068",
+"2.0683029061747951000242733988183989783070711197e3071",
+"2.4137094915059858817283270564210716076843519967e3074",
+"2.8192126860789915098586860018998116377753231322e3077",
+"3.2956596300263410750248039362208798045593527415e3080",
+"3.8559217671308190577790206053784293713344427076e3083",
+"4.5152843893101891166592331288981407938326324106e3086",
+"5.2919133042715416447246212270686210103718451852e3089",
+"6.2074143059105183492619806993514924451661744023e3092",
+"7.2875043951389485420335653410386521306250887483e3095",
+"8.5628176642882645368894392757204162534844792792e3098",
+"1.0069873573202999095381980588247209514097747632e3102",
+"1.1852241195659929935264591152366965598093048963e3105",
+"1.3961940128487397463741688377488285474553611678e3108",
+"1.6461127411486641609751450597058688574498708169e3111",
+"1.9424130345554237099506711704529252517908475639e3114",
+"2.2939897938099554014517426523049047223649909730e3117",
+"2.7114959362833672845159598150243973818354193301e3120",
+"3.2076996926232234975823804611738621027113010675e3123",
+"3.7979164360658966211375384660298527296101804640e3126",
+"4.5005309767380874960479830822453754845880638498e3129",
+"5.3376297384113717703129079355430153247214437259e3132",
+"6.3357664994942982913614217194895591904443537027e3135",
+"7.5268906013992263701373690027535963182478921988e3138",
+"8.9494729250636801540933317442740260223967438243e3141",
+"1.0649872780825779383371064775686090966652125151e3145",
+"1.2683998481963503245594938147842134341282681054e3148",
+"1.5119326190500495868749166272227824134808955817e3151",
+"1.8037356145267091571417755362767794192827084290e3154",
+"2.1536603237448907336272799903144746266235538642e3157",
+"2.5736240868751444266845995884257971788151468677e3160",
+"3.0780544079026727343147811077572534258629156538e3163",
+"3.6844311262594992629747929859854323507579100376e3166",
+"4.4139484892588801170438019972105479562079762251e3169",
+"5.2923242386213972603355185946554469994933634939e3172",
+"6.3507890863456767124026223135865363993920361927e3175",
+"7.6272976927011577315955493986174302156698354674e3178",
+"9.1680118266267915933778503771381511192351422318e3181",
+"1.1029118227432030286833554003697195796439876104e3185",
+"1.3279058345828164465347599020451423738913610830e3188",
+"1.6001265306722938180743856819643965605390901050e3191",
+"1.9297525959907863445977091324490622520101426666e3194",
+"2.3292113833608791179294349228660181381762421987e3197",
+"2.8136873510999419744587573868221499109169005760e3200",
+"3.4017480074798298471206376806679792422985327964e3203",
+"4.1161150890505941150159715936082548831812246836e3206",
+"4.9846153728402694732843415998595966635324630919e3209",
+"6.0413538318824066016206220190298311562013452674e3212",
+"7.3281621980733592077658145090831851924722318093e3215",
+"8.8963889084610580782276988140269868236612894165e3218",
+"1.0809112523780185565046654059042788990748466641e3222",
+"1.3143880828916705647096731335796031412750135435e3225",
+"1.5996102968791630772516722035663770229316914825e3228",
+"1.9483253415988206280925367439438472139308002257e3231",
+"2.3750085914089623456448022908675497537816454751e3234",
+"2.8975104815189340616866587948584106996136074796e3237",
+"3.5378602979346184893194103885221194642282147326e3240",
+"4.3232652840761037939483194947740299852868784033e3243",
+"5.2873534424250749399987947421086386720058522872e3246",
+"6.4717206135282917265585247643409737345351631996e3249",
+"7.9278577515721573650341928363176928248055749195e3252",
+"9.7195536034274649295319204173254914032116348513e3255",
+"1.1925892271405499468535666352058377951740675962e3259",
+"1.4644995709285953347361798280327688124737550082e3262",
+"1.7998699726712436663907650086522728705302449050e3265",
+"2.2138400663856297096606409606422956307522012332e3268",
+"2.7252371217207101725922490225506659214559597181e3271",
+"3.3574921339599149326336507957824204152337423727e3274",
+"4.1397878011725751119372914311997243719832043455e3277",
+"5.1084981466469576881306176261004598750272741624e3280",
+"6.3089952111089927448413127682340679456586835906e3283",
+"7.7979180809307150326238625815373079808341329180e3286",
+"9.6460246661112944953557180133616499722918224196e3289",
+"1.1941778536645782585250378900541722665697276155e3293",
+"1.4795863606904124623125219457771194382798925156e3296",
+"1.8346870872561114532675272127636281034670667194e3299",
+"2.2768466752848343135050012710396624764026297988e3302",
+"2.8278435707037642173732115786312607956920662101e3305",
+"3.5150095583847789221949019922386571690452382991e3308",
+"4.3726718906306649792104580783448895182922764441e3311",
+"5.4439765038351778991170203075393874502738841729e3314",
+"6.7831947237786316622998073031940767630412596795e3317",
+"8.4586438205519536828878597070830137235124508203e3320",
+"1.0556387488048838196244048914439601126943538623e3324",
+"1.3184927972572998907108817094135061807552479741e3327",
+"1.6481159965716248633886021367668827259440599676e3330",
+"2.0617931117111027040991412730953702901560190195e3333",
+"2.5813649758623005855321248739154036032753358124e3336",
+"3.2344503147554626336717524670160007149039957730e3339",
+"4.0560006947033501426243775936380648964896106993e3342",
+"5.0902808718527044289935938800157714450944614276e3345",
+"6.3933927750469967628159539132998089350386435531e3348",
+"8.0364947182340749308596540690178598313435749463e3351",
+"1.0109910355538466263021444818824467667830217282e3355",
+"1.2728377137622929025143999026900004793798243558e3358",
+"1.6037755193404890571681438773894006040185786883e3361",
+"2.0223609298883567010890294293880341616674277260e3364",
+"2.5522194935191061567743551398876991120242937902e3367",
+"3.2234532203146310760060105416781639784866830571e3370",
+"4.0744448704776936800715973246811992688071673842e3373",
+"5.1541727611542825052905706157217170750410667410e3376",
+"6.5251827156213216516978623995036938170019904941e3379",
+"8.2674065006922145327011916601711800661415219560e3382",
+"1.0483071442877728027465111025097056323867449840e3386",
+"1.3303017661011836866853225890848164474987793847e3389",
+"1.6894832429485032820903596881377168883234498186e3392",
+"2.1473332017875476715368471636230381650591047194e3395",
+"2.7314078326737606381948695921285045459551812031e3398",
+"3.4770821709936972924220689907795862870009456716e3401",
+"4.4298026858459703505457158942531929296392047856e3404",
+"5.6479984244536121969457877651728209852899861016e3407",
+"7.2068459896028091633028251883605195772300222657e3410",
+"9.2031423287227873015377077655363835001227384333e3413",
+"1.1761615896107722171365190524355498113156859717e3417",
+"1.5043106731121776657176078680650682086727623579e3420",
+"1.9255176615835874121185380711232873071011358181e3423",
+"2.4665881244885754749238472691089310403965549830e3426",
+"3.1621659755943537588523721989976495937883834882e3429",
+"4.0570589466875558726075935313139844288304960153e3432",
+"5.2092636875468217404281500942071560066183568837e3435",
+"6.6939038384976659364501728710561954685045885956e3438",
+"8.6083603363079983942749223121782673724969009339e3441",
+"1.1078959752828393933431825015773430108403511502e3445",
+"1.4269700161642971386260190620316177979623722814e3448",
+"1.8393643508357790116889385709587553415734978708e3451",
+"2.3727800125781549250787307565367943906298122533e3454",
+"3.0632589962383980082766414066890015583030876190e3457",
+"3.9577306231400102266934206974421900133275892038e3460",
+"5.1173456957200332231145929617927516872325728405e3463",
+"6.6218453302617229907102832925598206832789492556e3466",
+"8.5752897026889312729698168638649677848462392861e3469",
+"1.1113575454684854929768882655568998249160726114e3473",
+"1.4414307364726256843910240804272990729161461770e3476",
+"1.8709770959414681383395492563946341966451577378e3479",
+"2.4303992476279671117030744840566298214420599014e3482",
+"3.1595190219163572452139968292736187678746778719e3485",
+"4.1105342475131807760234098748849780170049559113e3488",
+"5.3519155902621613703824796571002413781404525966e3491",
+"6.9735460141115962656083709932016145157170097333e3494",
+"9.0935040024015215303533157751349053284949806923e3497",
+"1.1867022723133985597111077086551051453685949803e3501",
+"1.5498331676412985189827066675035673198513850443e3504",
+"2.0256319501071771643103976144271624870457602529e3507",
+"2.6495265907401877309180000796707285330558544108e3510",
+"3.4682303072789057397716621042889836497701134238e3513",
+"4.5433817025353665191008773566185685811988485851e3516",
+"5.9563734120238655065412502145269434099516904951e3519",
+"7.8147619165753115445821202814593497538566179296e3522",
+"1.0260782396463384058036323929556126226813739341e3526",
+"1.3482668068952886652259729643436749862033253494e3529",
+"1.7729708510673045947721544481119326068573728345e3532",
+"2.3332296400045728467201552537153033106243026503e3535",
+"3.0728634358860224391304444691430544600922065904e3538",
+"4.0500340084977775747739258103305457784015282862e3541",
+"5.3419948572085686211268081438259898817116158095e3544",
+"7.0514332115153105798873867498503066438593328685e3547",
+"9.3149432724117252760312378965522550765381787194e3550",
+"1.2314355006128300814913296499242081211183472267e3554",
+"1.6291891673107741978130291268497273442395733809e3557",
+"2.1570464575194650379044505639490390037731951563e3560",
+"2.8580865562132911752233969972324766799994835821e3563",
+"3.7898227735388240983462244183302640776793152299e3566",
+"5.0290948204860195785054398031242604310804513101e3569",
+"6.6786379216054340002552240585490178524748393398e3572",
+"8.8759097978136217863391927738116447259390614827e3575",
+"1.1804960031092116975831126389169487485498951771e3579",
+"1.5712401801383607694831229223984587843199104808e3582",
+"2.0928919199442965449515197326347471007141207604e3585",
+"2.7898249292857472944203758036021178852519229737e3588",
+"3.7216264556671868907567813220052252589260652469e3591",
+"4.9683713183156944991603030648769757206662971047e3594",
+"6.6377440812697678508781648946756395628101729318e3597",
+"8.8746638366576796166241064641813300954772012099e3600",
+"1.1874300213447975327043054449074619667748495218e3604",
+"1.5899687985806838962910649907310915735115235098e3607",
+"2.1305581900981164210300270875796627085054415031e3610",
+"2.8570785329215741206012663244443276921057970557e3613",
+"3.8341993911807524698468994074042877628059796487e3616",
+"5.1493297823557505670043859041439584654484306683e3619",
+"6.9206992274861287620538946551694801775626908181e3622",
+"9.3083404609688431849624883112029508388218191504e3625",
+"1.2529026260464062926959509266879171829054168576e3629",
+"1.6876598372845092762614458982486244453735965072e3632",
+"2.2749654606595185044004290708391457523636080917e3635",
+"3.0689284064296904624361788165620076199385073158e3638",
+"4.1430533486800821242888414023587102869169848763e3641",
+"5.5972650740667909499142247345866175976248465679e3644",
+"7.5675023801383013642840318411611069919887925598e3647",
+"1.0238830720327121745876295081090977760160836333e3651",
+"1.3863376795322922843916503539797183887257772395e3654",
+"1.8784875557662560453506862296425184167234281596e3657",
+"2.5472291256190431974955305273952549730769685844e3660",
+"3.4565899234650416190014349256753609984654463690e3663",
+"4.6940491160655265186039486290671402359160761691e3666",
+"6.3792127487330505387827661869022435806099475139e3669",
+"8.6757293382769487327445620141870512696295286189e3672",
+"1.1807667629394927225265348901308576777965788450e3676",
+"1.6082043311235890880811405203582281571589403869e3679",
+"2.1919825033214519270545945292482649782076357473e3682",
+"2.9898641345304604285024669378946334302752151594e3685",
+"4.0811645436340784849058673702261746323256686926e3688",
+"5.5748707666041512103814148277289545477568634341e3691",
+"7.6208483379478747045913940695054808667836323144e3694",
+"1.0425320526312692595881027087083497825760009006e3698",
+"1.4272263800522076163761126082217308523465452329e3701",
+"1.9553001406715244344352742732637712677147669691e3704",
+"2.6807164928606599996107610286446304080369455146e3707",
+"3.6779430282048255194659641313004329198266892461e3710",
+"5.0498157777252254382267687522754943989220443349e3713",
+"6.9384468785944597521235802656265293041188889162e3716",
+"9.5403644580673821591699228652364777931634722598e3719",
+"1.3127541494300717851017813862565393443392937829e3723",
+"1.8076624637652088480851529688752546771552075391e3726",
+"2.4909588750684577926613407911101009451198759889e3729",
+"3.4350322887194032960799889509408292033203089887e3732",
+"4.7403445584327765485903847522983443005820264044e3735",
+"6.5464158351956644136033213429240134791037784645e3738",
+"9.0471466842404082195997900959209866281214218379e3741",
+"1.2512203864304484567706509702658724506691926401e3745",
+"1.7316890148197406641705809428479674717261626140e3748",
+"2.3983892855253408198762546058444349483407352204e3751",
+"3.3241675497381223763484888837003868384002590155e3754",
+"4.6106203914867757359953540816924365448611592545e3757",
+"6.3995411033836447215615514653891019242672890452e3760",
+"8.8889625925998825182489949854254625728072644838e3763",
+"1.2355658003713836700366103029741392976202097632e3767",
+"1.7186720283165946850209249314370277629897117806e3770",
+"2.3923914634166998015491275045603426460816787987e3773",
+"3.3326013085394628235579346138525573059917785666e3776",
+"4.6456462241040111760397608517104648845525393218e3779",
+"6.4806764826250955905754663881360985139507923540e3782",
+"9.0470243697446334444433510778379935254753061262e3785",
+"1.2638693044533252921887361455739676955089002658e3789",
+"1.7668892876257487584798531315124068383214425716e3792",
+"2.4718781133884225131133145309858571668116981577e3795",
+"3.4606293587437915183586403433802000335363774208e3798",
+"4.8483417316000519172204551210756602469844647665e3801",
+"6.7973751077032727879430780797480756662722196026e3804",
+"9.5367172761076917214841385458865501597799241025e3807",
+"1.3389551055655199176963730518424716424331013440e3811",
+"1.8812319233195554843634041378386726576185073883e3814",
+"2.6450120841872950110149462178011737566116213879e3817",
+"3.7215320024515240804980293284462514755525512928e3820",
+"5.2399170594517459053412252944523220775779922203e3823",
+"7.3830431367675099806257864398833218073073910385e3826",
+"1.0410090822842189072682358880235483748303421364e3830",
+"1.4688638151030328781554808380012267568856127545e3833",
+"2.0740357069254824239555389432577321807224852093e3836",
+"2.9306124538857066650491765268231755713608716008e3839",
+"4.1438860097943892243795356089279702579042724435e3842",
+"5.8635987038590607524970428866330779149345455076e3845",
+"8.3028557646644300255358127274724383275473164388e3848",
+"1.1765146618529497346184246634828445110134547393e3852",
+"1.6682977905074827236889261728186735166170788204e3855",
+"2.3673145647301179849145862392296977200796348462e3858",
+"3.3615866819167675385787124597061707625130814816e3861",
+"4.7768146750037266723203504052424686535310887853e3864",
+"6.7926304678552993280395382762547904253212082528e3867",
+"9.6659131557580909438002629671105667752320793437e3870",
+"1.3764260333799521503971574465165447087930480985e3874",
+"1.9614070975664318143159493612860762100300935404e3877",
+"2.7969665211297317672145437891939446755029133886e3880",
+"3.9912712256521272318151539871797590519426574056e3883",
+"5.6995353102312376870320398936926959261741147752e3886",
+"8.1446359583204386547687850080868624785028100137e3889",
+"1.1646829420398227276319362561564213344259018319e3893",
+"1.6666612900589863232413007825598389295634655215e3896",
+"2.3866589673644684148815427206256893471348826268e3899",
+"3.4200823002332832385252507186566128344442868042e3902",
+"4.9043980185345281640452095305535828045931072773e3905",
+"7.0378111565970479154048756763443913245911089430e3908",
+"1.0106296820873360806521401471230545942112832442e3912",
+"1.4522748531595019478971253914158294518816140219e3915",
+"2.0883712388433638010760663128559627518057609635e3918",
+"3.0051662126956005097484594241997303998484900265e3921",
+"4.3274393462816647340377815708476117757818256382e3924",
+"6.2358400979918788817484432435914085689016107446e3927",
+"8.9920814213042893474812551572588111563561226938e3930",
+"1.2975573490942089528415451191924464498621885047e3934",
+"1.8736728120920377279031911521138926736010002008e3937",
+"2.7074572134729945168201112148045749133534452901e3940",
+"3.9149831306819500713218808166074153247090818896e3943",
+"5.6649805900967817532027615416309299748540414942e3946",
+"8.2028918944601399786375987122815866035886520836e3949",
+"1.1885990355072742829045880534096018988599956869e3953",
+"1.7234686014855477102116526774439227533469937460e3956",
+"2.5007529407555297275171080349711319151064879255e3959",
+"3.6310932699770291643548408667780835407346204678e3962",
+"5.2759785212766233758075837794285553846874035397e3965",
+"7.6712727699362103884242268152891195293354847468e3968",
+"1.1161701880257186115157250016245668915183130306e3972",
+"1.6251437937654462983668956023653693940506637726e3975",
+"2.3678345075162552567205668926463432071318171167e3978",
+"3.4523027119587001642985865294783683959981893562e3981",
+"5.0369096567477435397116377465089394897613582707e3984",
+"7.3538880988517055679789911099030516550515830752e3987",
+"1.0744030512422341834817306011568358468030362872e3991",
+"1.5707772609161463762502901388912940080260390520e3994",
+"2.2980471327203221484541744731979631337420951331e3997",
+"3.3643410023025516253369114287618180277984272748e4000",
+"4.9287595683732381311185752431360634107246959576e4003",
+"7.2255615272351671002198313064374689601224042739e4006",
+"1.0599898760453990136022492526543766964499567069e4010",
+"1.5560651380346457519681019028966249903885364458e4013",
+"2.2858596877728946096411416953551421108807600389e4016",
+"3.3602137410261550761724782921720589029947172572e4019",
+"4.9428744130494741170497155677850986463052290854e4022",
+"7.2759111360088259002971813157796652073612972138e4025",
+"1.0717417103341000551137748078143446850443190795e4029",
+"1.5797472810324634812377040667183440657553263233e4032",
+"2.3301272395228836348256134984095574969891063268e4035",
+"3.4392678055357762450026055236525068655559209385e4038",
+"5.0797985487763415138688483584347526404260952261e4041",
+"7.5079422550914327574981578737665644025497687442e4044",
+"1.1104246595280229048339775495300748751371107972e4048",
+"1.6434284961014738991542867733045108152029239799e4051",
+"2.4339176027262828446474987112639805173155304143e4054",
+"3.6070658872403511757675930900932191266616160740e4057",
+"5.3492787107774407936633405526082439648391766378e4060",
+"7.9383296067937221377963973800706340438213381305e4063",
+"1.1788419466088677374627650109404891555074687123e4067",
+"1.7517591326607774578696688062575668850840985066e4070",
+"2.6048658302665760798521975149050019581200544793e4073",
+"3.8760403554366652068200699021786429136826410652e4076",
+"5.7714240892451944929550840843439992984734525461e4079",
+"8.5994218929753397945030752856725589547254442937e4082",
+"1.2821738042426231633604085250937785401495637441e4086",
+"1.9130033159299937597337295194399175819031491063e4089",
+"2.8561139506834806832824581725237969497814016157e4092",
+"4.2670342423211201408239925097505526429734140139e4095",
+"6.3792161922700746105318688020770762012452539508e4098",
+"9.5433074236360316173556757279073059970628999104e4101",
+"1.4286331213183139331181446564677237077603161165e4105",
+"2.1400924157348342718109806953886501142249535426e4108",
+"3.2079985311865165734446600623875865212232053604e4111",
+"4.8119977967797748601669900935813797818348080406e4114",
+"7.2228086929664420651106521304656510525340468690e4117",
+"1.0848658656835595981796199499959407880906138397e4121",
+"1.6305533961223900760639687848438990045001926011e4124",
+"2.4523523077680746744002090524052241027682896720e4127",
+"3.6907902231909523849723146238698622746662759564e4130",
+"5.5583300761255742917683058235480125856474115904e4133",
+"8.3764034247212404576948368760868549665706492668e4136",
+"1.2631616364479630610203814009138977289588539094e4140",
+"1.9061109093999762590797555339790716729989105493e4143",
+"2.8782274731939641512104308563083982262283549295e4146",
+"4.3490017119960798324789610238819897198310442984e4149",
+"6.5756905885380727067081890681095684563845389792e4152",
+"9.9490198604581040052494900600497770745098074756e4155",
+"1.5062816068733569463947727950915362490807848518e4159",
+"2.2820166344131357737880807845636774173573890505e4162",
+"3.4595372177703138330627304693985349647138018005e4165",
+"5.2481179593575660847561621220775775414708373314e4168",
+"7.9666430623047853166598541013137627079527310691e4171",
+"1.2101330811640968896006318379895605553380198494e4175",
+"1.8394022833694272721929603937441320441137901710e4178",
+"2.7977308730048988810054927588848248390970748502e4181",
+"4.2581463887134560968903599790227034051057479220e4184",
+"6.4851569500105936355640182480515772859760540852e4187",
+"9.8833791918161447005995638100306037838275064259e4190",
+"1.5072153267519620668414334810296670770336947299e4194",
+"2.3000105886234941140000274920512719595534181579e4197",
+"3.5121161688280755120780419803622922822380695271e4200",
+"5.3665135059692993824552481459935826072597702374e4203",
+"8.2053991506270587557740744152241878065001886931e4206",
+"1.2554260700459399896334333855293007343945288700e4210",
+"1.9220573132403341241287865132453594243580237000e4213",
+"2.9445918038841918781653009382918906381164923084e4216",
+"4.5140592353544661492274063384014683482325827088e4219",
+"6.9245668670337510729148413231078524461887818754e4222",
+"1.0629210140896807896924281430970553504899780178e4226",
+"1.6326466776417496929675696277970770183526062354e4229",
+"2.5093779435353692780911545179241073772079557838e4232",
+"3.8594232771573979497041956485672771461458359956e4235",
+"5.9396524235452354445947571031450395279184415972e4238",
+"9.1470647322596625846759259388433608729944000598e4241",
+"1.4095626752412140042985601871757619105284370492e4245",
+"2.1735456452219519946283798086250248660348499298e4248",
+"3.3537809305774719277115900447084133682917734418e4251",
+"5.1782377568116166563866950290297902406424981941e4254",
+"8.0003773342739477341174438198510259217926597100e4257",
+"1.2368583358787523196945568145489686075091451911e4261",
+"1.9134198456044298385674793921072544358166476107e4264",
+"2.9619739209956573901024580989820298666441705014e4267",
+"4.5880976036222732972687075953231642634318201066e4270",
+"7.1115512856145236107664967727509046083193211653e4273",
+"1.1030016043988126120298836494536653047503267127e4277",
+"1.7118584900269571738703794239520885529725070581e4280",
+"2.6585162350118644910206992453975935227663034613e4283",
+"4.1313342292084374190461666273478603343788355789e4286",
+"6.4242247264191201866167891055259228199590893252e4289",
+"9.9960936743081510103757238481983359078563429901e4292",
+"1.5563917850897791123155002031644809008532326035e4296",
+"2.4248584011698758569875493165302612435293363963e4299",
+"3.7803542474238364610435893844706772786622354419e4302",
+"5.8973526259811848792279994397742565547130872893e4305",
+"9.2057674491566295964749071254876144819071292587e4308",
+"1.4379408755582655429693804930011653820738935902e4312",
+"2.2475015884975690436611417105608214921814956815e4315",
+"3.5150924844101979842860256353171248137718592458e4318",
+"5.5011197381019598454076301192713003335529597197e4321",
+"8.6147535098676691179083487667788563223439349211e4324",
+"1.3499318749962637507762382517542467857112946021e4328",
+"2.1166931799941415612171415787506589599953099361e4331",
+"3.3210915994108081095496951370597839082326412898e4334",
+"5.2141138110749687319930213651838607359252468250e4337",
+"8.1913727971987758779610365647038452161385627621e4340",
+"1.2876838037196475680154749479714444679769820662e4344",
+"2.0255266232510056244883420931590821481277927901e4347",
+"3.1881789049970828529446504546323953011531458517e4350",
+"5.0213817753704054933878244660460225993162047164e4353",
+"7.9136976779837590575792113584885316165223386331e4356",
+"1.2479901238180388033802416312336414359255728024e4360",
+"1.9693284153848652317340212940866861858905538822e4363",
+"3.1095695678927022009080196233628774875211845800e4366",
+"4.9131199172704694774346710049133464302834716365e4369",
+"7.7676425892046122438242148587680007062781686573e4372",
+"1.2288410576121696569729907906570977117332062815e4376",
+"1.9452553942000645669882444216101856776736655437e4379",
+"3.0812845444129022741093791638305341134350862213e4382",
+"4.8838360028944501044633659746713965697946116607e4385",
+"7.7457639005905978656788984358288349596942540940e4388",
+"1.2292527310237278812832411817660361081034781247e4392",
+"1.9520533368656798754777869966444653396683232620e4395",
+"3.1018127522795653221342035376680554247329656634e4398",
+"4.9318822761245088621933836248922081253254154048e4401",
+"7.8466247013140935997496733472035031273927359090e4404",
+"1.2491826524492037010801479968747976978809235567e4408",
+"1.9899479653515814958206757590215527327243112258e4411",
+"3.1719770567704209043381571598803550559625520940e4414",
+"5.0593034055488213424193606700091663142602705899e4417",
+"8.0746482352559188625012996293346294375593918615e4420",
+"1.2895213231703702423414575508047403211782348802e4424",
+"2.0606550744262516472616491661859750332428193387e4427",
+"3.2949874640075763839713770167313740781552681225e4430",
+"5.2719799424121222143542032267701985250484289961e4433",
+"8.4404398878018076651810793660590878386025348228e4436",
+"1.3521584700258495879620089144426658717441260786e4440",
+"2.1675100274514368895031002898515933924058341040e4443",
+"3.4766860840321047707629728649219558014189579028e4446",
+"5.5800811648715281570745714481997390612774274340e4449",
+"8.9616103507836742202617617458087809324115484591e4452",
+"1.4401307833709364471960651125514710958385358373e4456",
+"2.3157302996604658070912727009827655221083656265e4459",
+"3.7260100521536894836098577758812697250723602930e4462",
+"5.9988761839674400686118710191688442573665000718e4465",
+"9.6641895323715459505337242118810080986174316157e4468",
+"1.5578673526182932072260363429552185054971299764e4472",
+"2.5128400397733069432555966211867674493668706520e4475",
+"4.0557238241941174064145329465954426632781292323e4478",
+"6.5499939760734996113594707087516399011941787102e4481",
+"1.0584790265334775371956904665342650080329792795e4485",
+"1.7115605859046331776454314843859065179893274950e4488",
+"2.7693050279936964814303081417363967461067318870e4491",
+"4.4835048403217946034356688814712263319467989251e4494",
+"7.2632778413213072575657835879833866577538142586e4497",
+"1.1773773380781839064514135196121069772218932913e4501",
+"1.9097060423628142962641927288108375170539109185e4504",
+"3.0994529067548476028367847988599892901784974207e4507",
+"5.0335115205698725070069385133486226072498798113e4510",
+"8.1794562209260428238862750841915117367810546934e4513",
+"1.3299795815225745631639083286895398084005994931e4517",
+"2.1638767791372288142676788507778812682677753753e4520",
+"3.5227913964354085096277811690663907047399383110e4523",
+"5.7386271847932804621836555244091504580213595087e4526",
+"9.3539623112130471533593585047869152465748159993e4529",
+"1.5256312529588479907129113721307458767163524894e4533",
+"2.4898302048288399208434713593173772708010872628e4536",
+"4.0658927244854955907373887297652770832181755002e4539",
+"6.6436687118092997952648931844364627539784987673e4542",
+"1.0862398343808205165258100356553616602754845484e4546",
+"1.7770883690470223650362252183321716762106927212e4549",
+"2.9090936601299756115643006824097650339569039847e4552",
+"4.7650954152929000517423245177871951256214087270e4555",
+"7.8099913856650631848056698846532128108934889035e4558",
+"1.2808385872490703623081298610831269009865321801e4562",
+"2.1018561216757244645476411020374112445188993076e4565",
+"3.4512477517915395707872266895454292635000326632e4568",
+"5.6704000561934995148034134509231402799305536656e4571",
+"9.3221376923821132023368117133176426202058302263e4574",
+"1.5334916503968576217844055268407522110238590722e4578",
+"2.5241272565532276454571314971798781393452720329e4581",
+"4.1572375915431659320678955758552592955016630381e4584",
+"6.8511275508631374560478919090094673189867406869e4587",
+"1.1297509331373313665022973757956611609009135392e4591",
+"1.8640890396765967547287906700628409154865073398e4594",
+"3.0776110045060612420572333962737503514682236180e4597",
+"5.0842133794440131718785495706442355806255054169e4600",
+"8.4042047162209537731152424402749214147739604542e4603",
+"1.3900554600629457540732610996214720020036130591e4607",
+"2.3005417864041752229912471198735361633159796128e4610",
+"3.8096971982853141692735052305105758864512622389e4613",
+"6.3126682575587655784861981669560242438497415298e4616",
+"1.0466403971032433329130116560813088196302871456e4620",
+"1.7363764187942806893026863374388913317666463746e4623",
+"2.8823848551985059442424593201485596107326329818e4626",
+"4.7876412444847183733867249307667575134269033829e4629",
+"7.9570597483336019365687368349343509873155134224e4632",
+"1.3232590361478780020513809356495825691905698821e4636",
+"2.2019030361500689954134978769209053951331082838e4639",
+"3.6661685551898648773634739650733074828966252926e4642",
+"6.1078368129463148856875476258121302665057777376e4645",
+"1.0181763967181506914441141892228821154265131488e4649",
+"1.6983182297258753533287824676237673685314239322e4652",
+"2.8344931254124859647057379384640677380789465430e4655",
+"4.7336035194388515610585823572349931225918407268e4658",
+"7.9098514809823209585288911189396735078509658545e4661",
+"1.3225271676202440642660305950867134105126814908e4665",
+"2.2125879514286683195170691855800715357877161342e4668",
+"3.7038722306915907668715738166610397509086368087e4671",
+"6.2039859864084145345098861429072415827719666545e4674",
+"1.0397880513220502759838569175512536892725816113e4678",
+"1.7437245620670783128249280507334524369101193621e4681",
+"2.9259698151485574089202292691307331891351802897e4684",
+"4.9127033196344278895770649428705010245579677064e4687",
+"8.2533415769858388544894691040224417212573857468e4690",
+"1.3873867190913195114396797563861724533433665440e4694",
+"2.3335844615115994182415413502415420665235425270e4697",
+"3.9274226487240218209005140924565152979591220730e4700",
+"6.6137797404512527463964657316967717617631615710e4703",
+"1.1144218862660360877678044757909060418570927247e4707",
+"1.8789153002445368439765183461834675865710583338e4710",
+"3.1697301115125336557883864500115098185453754092e4713",
+"5.3505044282331568109707963276194285737045936908e4716",
+"9.0370019792858018537296749973492148609870587437e4719",
+"1.5272533344993005132803150745520173115068129276e4723",
+"2.5825853886383171679570127910674612737580206607e4726",
+"4.3697344775760326481832656424861444751985709579e4729",
+"7.3979604705362232733742687327290425965111806318e4732",
+"1.2532145037088362225096011233242998158489939990e4736",
+"2.1241985837864773971537739040346881878640448283e4739",
+"3.6026407981018656655728005412428311666174200289e4742",
+"6.1136814343788660344770425184890844897497617890e4745",
+"1.0381031075575314526542018196394465463595095517e4749",
+"1.7637371797402459380594888915674196822648067284e4752",
+"2.9983532055584180947011311156646134598501714384e4755",
+"5.1001988026548691790866240277455074952051416167e4758",
+"8.6805383621185873428054340952228537568391510316e4761",
+"1.4782956830687954244797654264164519947897074206e4765",
+"2.5190158439492274033135202866136341991216614448e4768",
+"4.2949220139334327226495520886762463095024327634e4771",
+"7.3271369557704362248401358632816762040111502945e4774",
+"1.2507422783500134635802111918621821280247033552e4778",
+"2.1362678114218229957950007157006070746661933308e4781",
+"3.6508816897198954998136562231323374906045244023e4784",
+"6.2430076894210213046813521415562971089337367280e4787",
+"1.0681786156599367452309793514202824353385623541e4791",
+"1.8287217900098117078354366496315235292996187503e4794",
+"3.1326004262868074555221029808187998056902469193e4797",
+"5.3692771306555879787648845091234228669530832197e4800",
+"9.2083102790743333835817769331466702168245377217e4803",
+"1.5801460438891556086226329217279686092070906730e4807",
+"2.7131107573576801800050607266069221020085746856e4810",
+"4.6611242811404945492486943283106921712507313099e4813",
+"8.0124726392805101301585055503660798423800071217e4816",
+"1.3781452939562477423872629546629657328893612249e4820",
+"2.3717880508987023646484795449749640263025906681e4823",
+"4.0842190236475654719246817764468880532930611305e4826",
+"7.0371093777447553081262267008179881158239443278e4829",
+"1.2131976567231958151209614832210211511680480021e4833",
+"2.0927659578475127810836585585562614857648828036e4836",
+"3.6121140432448070601503946720681073244301877191e4839",
+"6.2381209526837817928797315986616213492909341909e4842",
+"1.0779473006237574938096176202487281691574734281e4846",
+"1.8637708827784767067968288654100510044732715573e4849",
+"3.2243236272067647027585139371593882377387597942e4852",
+"5.5813041986949097004749876252229010395257932037e4855",
+"9.6668188721395836012226785668860646004586738289e4858",
+"1.6752597105417898380918901956413549952594881745e4862",
+"2.9049003380794635792513375992421095617799524946e4865",
+"5.0400020865678693100010707346850600896882175782e4868",
+"8.7494436222818211221618587954132643156987457159e4871",
+"1.5197783571903523289195148727632840116368721308e4875",
+"2.6413747847968323476621168488625876122248837634e4878",
+"4.5933507507616914525844212001720398576590728645e4881",
+"7.9924303063253431274968928882993493523267867843e4884",
+"1.3914821163312422384972090518529167222400935791e4888",
+"2.4239618466490239794621381683277809301422430148e4891",
+"4.2249654987092487962025068273953221612379295749e4894",
+"7.3683398297489299005771719069774418491989491787e4897",
+"1.2857753002911882676507164977675636026852166316e4901",
+"2.2449636743084147153181510051021660502883882389e4904",
+"3.9219515390168005076608098059134840898538142534e4907",
+"6.8555712902013672873910955407367701890644673149e4910",
+"1.1990394186562191385647026100748611060673753333e4914",
+"2.0983189826483834924882295676310069356179068334e4917",
+"3.6741565386173194953468899729218931442669548653e4920",
+"6.4371222556575437558477512325591567887557049240e4923",
+"1.1284275314167674204001107910676201850688750731e4927",
+"1.9792618901050100553817943275326058046108068783e4930",
+"3.4736046171342926471950490448197231870919660715e4933",
+"6.0996497076878178884745061227034339165334924216e4936",
+"1.0717084536407496030049707257589933391349346184e4940",
+"1.8840634615004378020827385358843102901992150592e4943",
+"3.3140676287792700938635370846205018004604192892e4946",
+"5.8327590266515153651998252689320831688103379491e4949",
+"1.0271488645933318558116892298589398460275005128e4953",
+"1.8098362994134507299401964230114520087004559036e4956",
+"3.1907413958659136368845662937691898913389037581e4959",
+"5.6284678223074716554643749422088509683218262293e4962",
+"9.9342457063726874718946217729986219590880232947e4965",
+"1.7543877917454166075365902051115566379749449138e4969",
+"3.1000032280141511455171548924321205793017276627e4972",
+"5.4808057071290192252743298498199891842054545077e4975",
+"9.6955452959112350095102895043315608668594490242e4978",
+"1.7161115173762885966833212422666862734341224772e4982",
+"3.0392334972734071047261619200543013902518309072e4985",
+"5.3855217571684773895747589223362220635262443677e4988",
+"9.5485300754597104117160475693021217186320312639e4991",
+"1.6939092353865526270384268387941963928853223462e4995",
+"3.0066888928111309129932076388596985973714471645e4998",
+"5.3398794736325685014759367666148247089316901642e5001",
+"9.4889658246450742271227396342745435077716134218e5004",
+"1.6871381236218941975824231069740138356817928664e5008",
+"3.0014187219233497774991307073067706136779095093e5011",
+"5.3425253250235626039484526590060516923466789266e5014",
+"9.5150376038669649976321941856897780640694351683e5017",
+"1.6955797010090931625780570038899184510171733469e5021",
+"3.0232186068992131088766756379357245981636200776e5024",
+"5.3934219947081961862359893380773326831238982185e5027",
+"9.6272582605541301924312409684680388393761583201e5030",
+"1.7194283253349676523682196369683917367125818759e5034",
+"3.0726184173735871947820084912625160335053838123e5037",
+"5.4938417302639739042702311823773786679076262565e5040",
+"9.8284828554422493147394435852731304368867433729e5043",
+"1.7592984311241626273383604017638903482027270637e5047",
+"3.1509034901433752655630034795591276136310841711e5050",
+"5.6464190543369284758889022353699566836269028347e5053",
+"1.0124029364426112757268801708018332333743036782e5057",
+"1.8162508679780446286540230264184888206735007988e5060",
+"3.2601703080205901084339713324211874331089339338e5063",
+"5.8552658732049798347474125130284526298636453452e5066",
+"1.0521912774149348763041100285912129375864970685e5070",
+"1.8918399167920529075947898314070008617805217292e5073",
+"3.4034200103089031807630269067011945503431585909e5076",
+"6.1261560185560257253734484320621501906176854636e5079",
+"1.1033206989419402331397580626143932493302451520e5083",
+"1.9881838994933763001178440288311366352931017639e5086",
+"3.5846955707865574691124727839825393534334624803e5089",
+"6.4667908096989496742789009023045009935939663145e5092",
+"1.1672557411506604162073416128659624293437109197e5096",
+"2.1080638685180927116704589528359281473947419211e5099",
+"3.8092714104121935299885193277745221623422986514e5102",
+"6.8871627100252459022192429446163360695148759617e5105",
+"1.2458877342435669837114610486810951949752410614e5109",
+"2.2550567989808562405177444981127823029051863212e5112",
+"4.0839078629543306515776352860822487505612924278e5115",
+"7.4000410476732471406586751383810347360170618792e5118",
+"1.3416274419431597066014178025884815976398933187e5122",
+"2.4337121796848917077749718938955056181187664801e5125",
+"4.4171876061280784496115739874203426968855611614e5128",
+"8.0216126927285904644946183611553423375441790692e5131",
+"1.4575270262687848873986721562219257027317773368e5135",
+"2.6497841337566509252907859800114609275663711984e5138",
+"4.8199573393033480331039396976408474272432292099e5141",
+"8.7723223575320934202491702497063423175826771621e5144",
+"1.5974399013065942118273739024715249360318055112e5148",
+"2.9105355001806146539494752503031184334499496414e5151",
+"5.3059062168292605141498933813025849041792581963e5154",
+"9.6779729394965711778094055274959148652229669501e5157",
+"1.7662300614581242399502165087680044629031914684e5161",
+"3.2251360922225348621490953450103761492612276213e5164",
+"5.8923236404905711931463971953339572247002628641e5167",
+"1.0771167614816764141071614073070473806752080515e5171",
+"1.9700465567499861614019982139645896592549555263e5174",
+"3.6051851988524746753656567315551990764365686131e5177",
+"6.6010940990988811305945174754775695089553571306e5180",
+"1.2093204389549150231249156015074907340406214263e5184",
+"2.2166843646043592373879702975632305154964590744e5187",
+"4.0653991246843948413695375257309647654205059425e5190",
+"7.4600073937958645339131013597163203445466284046e5193",
+"1.3696573575009207284264454096439164152587609750e5197",
+"2.5160605657291913781193802175158744548303439112e5200",
+"4.6245193198102537529834208397941772479781721088e5203",
+"8.5044910291310566517365109243814919590318585082e5206",
+"1.5648263493601144239195180100861945204618619655e5210",
+"2.8808453091719706544358326565686841121702878785e5213",
+"5.3065170594947699454708037533995161346176702722e5216",
+"9.7799109406488610095026913175153082361003663117e5219",
+"1.8034155774556499701522962789498228387369075478e5223",
+"3.3273017404056741949309866346624231374695944258e5226",
+"6.1421990127888745638426013275868331117688713100e5229",
+"1.1344641576621051319417284652052880757437105309e5233",
+"2.0964897633595702838283142036993723639743770612e5236",
+"3.8764095724518454547985529626401395009886231862e5239",
+"7.1713577090359140913773229808842580768289528945e5242",
+"1.3274183119425476983139424837616761700210391807e5246",
+"2.4583787137175983372774214799266242668789645628e5249",
+"4.5553757565187097189750620023040347665267213348e5252",
+"8.4456666525856878189797649522716804571405413548e5255",
+"1.5666711640546450904207463986463967247995704213e5259",
+"2.9077416804854212878209053158877123212280027019e5262",
+"5.3996763006614273314834211716034817805204010175e5265",
+"1.0032598566628931981896196536839269148206905090e5269",
+"1.8650600735363184554345029361984201346516636563e5272",
+"3.4690117367775523271081754613290614504520944008e5275",
+"6.4558308421430248807483145335333833592913476799e5278",
+"1.2020757028070312327953361661439159815000489380e5282",
+"2.2394670343294991866977112775261154735345911714e5285",
+"4.1743665519901864840045338213086792426684779436e5288",
+"7.7851936194616977926684555767406867875767113649e5291",
+"1.4527171293915528081119338106198121545618143406e5295",
+"2.7122228805740290927449804244271892925669073740e5298",
+"5.0664323409122863452476234328299895985149829747e5301",
+"9.4691620451650631792678081959592505596245031798e5304",
+"1.7707333024458668145230801326443798546497820946e5308",
+"3.3130420088762168099726829281776347080497422990e5311",
+"6.2020146406162778682688624415485321734691175838e5314",
+"1.1616373421874288447267579353020400760907657234e5318",
+"2.1769083792592416550179443707560231025940949657e5321",
+"4.0817032111110781031586456951675433173639280607e5324",
+"7.6572752240443825215256193241343112633747290420e5327",
+"1.4372705595531305992903587471400102241354366411e5331",
+"2.6991941108407792654672937271289392009263500121e5334",
+"5.0717857342698242398130449132752767585406116728e5337",
+"9.5349571804272695708485244369575203060563499449e5340",
+"1.7935254456383694062766074465917095695691994246e5344",
+"3.3754148886914112226125752144855974099292333171e5347",
+"6.3559062354059273321794791288763799228967463362e5350",
+"1.1974527347504767093826138678803099774737470097e5354",
+"2.2571984050046485971862271409543843075380131133e5357",
+"4.2570761918387672542932243878399688040166927318e5360",
+"8.0331027739997538088513144198540211331794991849e5363",
+"1.5166498037311535191111281624684391899442894461e5367",
+"2.8649514792481489976009210989028816298047627637e5370",
+"5.4147582957790016054657408769264462803310016234e5373",
+"1.0239307937318092035935715998267909916105924069e5377",
+"1.9372770617405830131990374668722885561272408340e5380",
+"3.6672654778749236439857779247892422367488668988e5383",
+"6.9458008150951053817090633895508247964023539063e5386",
+"1.3162292544605224698338675123198812989182460652e5390",
+"2.4955706664571506028050128033584949427489945397e5393",
+"4.7340975542692146935211092879710649063948426418e5396",
+"8.9853171580029694883030654285690811923374113342e5399",
+"1.7063117283047639058287521248852685184248744123e5403",
+"3.2419922837790514210746290372820101850072613835e5406",
+"6.1630273314639767514628697998731013616988038900e5409",
+"1.1722077984444483781282378359358638789951124998e5413",
+"2.2307114404397852635780366017859489617276990872e5416",
+"4.2472745825973511418525816898004468231295390621e5419",
+"8.0910580798479539252291681190698511980617719134e5422",
+"1.5421556700190200181486794434947136383505737267e5426",
+"2.9408908627262711746095316987444189083345440968e5429",
+"5.6112197660817254011549864812043512771023101367e5432",
+"1.0711818533450013790804869192619106587988310051e5436",
+"2.0459573398889526340437300157902493583057672197e5439",
+"3.9098244765277884836575680601751665237223211569e5442",
+"7.4755843991211315807532701310549183933570780520e5445",
+"1.4300792955518724713981005760708058886492090313e5449",
+"2.7371717716862839102559645025995224708745860860e5452",
+"5.2416839427792336881401720224780855317248323547e5455",
+"1.0043066434365011746476569595068011878784778791e5459",
+"1.9252558354677727517995583913745378771630420943e5462",
+"3.6926406924271881379515529946563636483987147370e5465",
+"7.0861774887677740367290301967455618412771335803e5468",
+"1.3605460778434126150519737977751478735252096474e5472",
+"2.6136090155371956335148416655260590650419277326e5475",
+"5.0233565278624900076155256811410855230105851022e5478",
+"9.6599146030795682846446558848343074607493551515e5481",
+"1.8585675696325089379656317922421207554481759311e5485",
+"3.5777425715425797055838412000660824542377386674e5488",
+"6.8907321927910085129544781513272748068618846735e5491",
+"1.3278440935508273404463279397607658552822851766e5495",
+"2.5600834123659951123805202678587565689842458204e5498",
+"4.9384009024540045717820235966995414215706101877e5501",
+"9.5311137417362288235393055416301149436312776623e5504",
+"1.8404580635292657858254399000887751956151997165e5508",
+"3.5557649787385414982147498869715136779285658524e5511",
+"6.8732937039016007160491115315159359394359177927e5514",
+"1.3292950023345695784838981701951820106869065011e5518",
+"2.5721858295173921343663429593276771906791640796e5521",
+"4.9797517659456711721332399692583830411548616582e5524",
+"9.6457791706367650604220858204534879507169670320e5527",
+"1.8693520032694050687098002320038859648489482108e5531",
+"3.6246735343393764282283026498555348858421105807e5534",
+"7.0318666566183902707629071407197376785336945266e5537",
+"1.3648853180496295515550802760137010834033901076e5541",
+"2.6506072876523805891199658960186075039693835890e5544",
+"5.1501299599085754846600937359641543802125123134e5547",
+"1.0011852642062270742179222222714316115133123937e5551",
+"1.9473053388811116593538587223179344843933926058e5554",
+"3.7894561894626432891026090736307005066295420109e5557",
+"7.3780712008837664838827798663589738864077182952e5560",
+"1.4372482699321577110603655179667281130722235239e5564",
+"2.8011968780977753788566523945171530923777636481e5567",
+"5.4623339122906619887704721693084485301366391138e5570",
+"1.0657013462879081540091191202320783082296582911e5574",
+"2.0802490279539967166258005226930168576642929842e5577",
+"4.0627263515941555875701884208194619230183641982e5580",
+"7.9385672910149800181121481742812285975778836433e5583",
+"1.5519899053934285935409249680719801908264762522e5587",
+"3.0356922549495463289660492375487932532565875494e5590",
+"5.9408497429362621657865583578829883966231418342e5593",
+"1.1632183796669201320610081264734891280588111711e5597",
+"2.2787448057674965387075149197615652018672110842e5600",
+"4.4663398193042932158667292427326677956597337251e5603",
+"8.7584923856557189963146560449987615472887378350e5606",
+"1.7184162060656520670769355160287570155780503632e5610",
+"3.3732510125068750076720244179644500215797128630e5613",
+"6.6250649885635025150678559568821798423825560630e5616",
+"1.3018252702527282442108336955273483390281722663e5620",
+"2.5593884813168637281184990454067668345293866757e5623",
+"5.0343171427502709532090876223151103635193035911e5626",
+"9.9075361369325332359154844407161371954059894673e5629",
+"1.9507938653620157941517588863770074137754393261e5633",
+"3.8430639147631711144789650061627046051376154724e5636",
+"7.5746789759982102666380400271466907767262400961e5639",
+"1.4937266940668470645810214933533274211704145469e5643",
+"2.9471227673938892584183554063861150019692279011e5646",
+"5.8176203428355373961178335722061910138872558769e5649",
+"1.1489800177100186357332721305107227252427330356e5653",
+"2.2703845149949968242089457298891881050796404785e5656",
+"4.4885501861451087214610857079909248837424492260e5659",
+"8.8783522681950250510500275304060494200425645691e5662",
+"1.7570259138757954576028004482673571802264235282e5666",
+"3.4789113094740750060535448875693672168483185858e5669",
+"6.8917233040681425869920724222749164565765191186e5672",
+"1.3659395588663058607418287540948884416934660893e5676",
+"2.7086581452318845218510464193701637798781432551e5679",
+"5.3739777601400588913524760960304049392782362181e5682",
+"1.0667345853878016899334665050620353804467298893e5686",
+"2.1185348865801741562078644790532022655672055601e5689",
+"4.2095288196348060483850267198787129016820374480e5692",
+"8.3685432934339944241894331191188812485438904466e5695",
+"1.6645032610640214909712782473927454803353798098e5699",
+"3.3123614895174027670328437123115635058674058215e5702",
+"6.5949117256291489091623918312123229401820049907e5705",
+"1.3137064157453264627051484527774947296842553941e5709",
+"2.6182168865804356401713608663855469962607210005e5712",
+"5.2207244718413886665016935675727807105438776751e5715",
+"1.0415345321323570389670878667307697517535035961e5719",
+"2.0789029261361846497783073819946164244999931779e5722",
+"4.1515691434939607456072798418432489997264863764e5725",
+"8.2948351487009335697233451240028115014535197801e5728",
+"1.6581375462253166205876966902881620191405586040e5732",
+"3.3162750924506332411753933805763240382811172081e5735",
+"6.6358664599937171155919621545332244006005155334e5738",
+"1.3285004652907421665415108233375515250002232097e5742",
+"2.6609864319773565595826461791451157045754470892e5745",
+"5.3326168096826225454036229430068118719691959667e5748",
+"1.0691896703413658203534264000728657803298237913e5752",
+"2.1447944787047798356289733585461687553416265254e5755",
+"4.3046025187604931301073495306021606919706444365e5758",
+"8.6436418576710702052555578574491386694770540285e5761",
+"1.7365076492061180042358415735615319586979401543e5765",
+"3.4903803749042971885140415628586792369828597102e5768",
+"7.0191549339325416461017375829088039455725308772e5771",
+"1.4122539727072273791956696016812513538491932125e5775",
+"2.8428672470596487143208829081843589752984259367e5778",
+"5.7255346355781325106422581770832989762510298366e5781",
+"1.1536952290689937008944150226822847437145825120e5785",
+"2.3258495818030913010031406857274860433285983443e5788",
+"4.6912386064968351541233347631123393493937828605e5791",
+"9.4669195079106133410208895519607008070766538126e5794",
+"1.9113710486471528335521176005408654929487764047e5798",
+"3.8609695182672487237752775530925482957565283376e5801",
+"7.8030193964181096707498359348000401057239437703e5804",
+"1.5777705219557417754256168260165681093773814303e5808",
+"3.1918297659164656116860228390315172852704426336e5811",
+"6.4602634462149263980525102261997909853873758904e5814",
+"1.3082033478585225956056333208054576745409436178e5818",
+"2.6504199827613667786970131079518572486199517697e5821",
+"5.3724013050572904604188455698184146429526422371e5824",
+"1.0895229846656185053729418815591744895907958457e5828",
+"2.2106421358865399474016990776835650393797247709e5831",
+"4.4876035358496760932254491276976370299408412849e5834",
+"9.1143227813106921453408871783539008078098486498e5837",
+"1.8520303891623326439332682746415126441469612456e5841",
+"3.7651777811670222651163344023461952055507722123e5844",
+"7.6583716068937232872466241743721610480902706800e5847",
+"1.5584786220028726889546880194847347732863700833e5851",
+"3.1730624743978487947117448076709199984110494897e5854",
+"6.4635282603484179948278241732256640367633078106e5857",
+"1.3172670594590075873459105665033903306923621318e5861",
+"2.6859075342369164705983116451004128842817263867e5864",
+"5.4792513698433096000205557560048422839347218289e5867",
+"1.1183152045850194893641954298005883101510767252e5871",
+"2.2835996477626097972816870676528013293284986730e5874",
+"4.6653940803790118158464866792146731158181227890e5877",
+"9.5360655002947001515902187723147918487322429808e5880",
+"1.9501253948102661810001997389383749330657436895e5884",
+"3.9899565577818046063264086658679151130525115888e5887",
+"8.1674410737793540291501585390316222364184912224e5890"
+};
diff --git a/fplll/fplll.cpp b/fplll/fplll.cpp
new file mode 100644 (file)
index 0000000..1b49ed0
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "fplll.h"
+#include "svpcvp.cpp"
+#include "wrapper.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/fplll.h b/fplll/fplll.h
new file mode 100644 (file)
index 0000000..5af51c8
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_H
+#define FPLLL_H
+
+#if __cplusplus < 201103L
+#error fplll needs at least a C++11 compliant compiler
+#endif
+
+#include "bkz.h"
+#include "bkz_param.h"
+#include "gso_gram.h"
+#include "hlll.h"
+#include "pruner/pruner.h"
+#include "svpcvp.h"
+#include "threadpool.h"
+#include "util.h"
+#include "wrapper.h"
+
+#endif
diff --git a/fplll/fplll_config.h.in b/fplll/fplll_config.h.in
new file mode 100644 (file)
index 0000000..3ba6f7b
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef FPLLL_CONFIG__H
+#define FPLLL_CONFIG__H
+
+/* use quaddouble library */
+#undef FPLLL_WITH_QD
+
+/* fplll major version */
+#define FPLLL_MAJOR_VERSION @FPLLL_MAJOR_VERSION@
+
+/* fplll minor version */
+#define FPLLL_MINOR_VERSION @FPLLL_MINOR_VERSION@
+
+/* fplll micro version */
+#define FPLLL_MICRO_VERSION @FPLLL_MICRO_VERSION@
+
+/* fplll sonum */
+#define FPLLL_SONUM @FPLLL_SONUM@
+
+/* fplll version */
+#define FPLLL_VERSION @FPLLL_VERSION@
+
+/* fplll version info */
+#define FPLLL_VERSION_INFO @FPLLL_VERSION_INFO@
+
+/* Maximum supported enumeration dimension */
+#define FPLLL_MAX_ENUM_DIM @FPLLL_MAX_ENUM_DIM@
+
+/* Recursive enumeration enabled */
+#undef FPLLL_WITH_RECURSIVE_ENUM
+
+/* Maximum supported parallel enumeration dimension */
+#define FPLLL_MAX_PARALLEL_ENUM_DIM @FPLLL_MAX_PARALLEL_ENUM_DIM@
+
+/* Switch between GMP and MPIR */
+#undef HAVE_LIBGMP
+#undef HAVE_LIBMPIR
+
+#endif //FPLLL_CONFIG__H
diff --git a/fplll/gso.cpp b/fplll/gso.cpp
new file mode 100644 (file)
index 0000000..c38c1a8
--- /dev/null
@@ -0,0 +1,436 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Template source file */
+
+#include "gso.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::update_bf(int i)
+{
+  int n = max(n_known_cols, init_row_size[i]);
+  if (enable_row_expo)
+  {
+    long max_expo = LONG_MIN;
+    for (int j = 0; j < n; j++)
+    {
+      b(i, j).get_f_exp(bf(i, j), tmp_col_expo[j]);
+      max_expo = max(max_expo, tmp_col_expo[j]);
+    }
+    for (int j = 0; j < n; j++)
+    {
+      bf(i, j).mul_2si(bf(i, j), tmp_col_expo[j] - max_expo);
+    }
+    row_expo[i] = max_expo;
+  }
+  else
+  {
+    for (int j = 0; j < n; j++)
+    {
+      bf(i, j).set_z(b(i, j));
+    }
+  }
+}
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::invalidate_gram_row(int i)
+{
+  for (int j = 0; j <= i; j++)
+    gf(i, j).set_nan();
+}
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::discover_row()
+{
+  FPLLL_DEBUG_CHECK(n_known_rows < d);
+  /* Early reduction (cols_locked=true) is not allowed when enable_int_gram=true,
+     since n_known_cols might be too small to compute all the g(i,j). */
+  FPLLL_DEBUG_CHECK(!(cols_locked && enable_int_gram));
+  int i = n_known_rows;
+  n_known_rows++;
+  if (!cols_locked)
+  {
+    n_source_rows = n_known_rows;
+    n_known_cols  = max(n_known_cols, init_row_size[i]);
+  }
+
+  if (enable_int_gram)
+  {
+    for (int j = 0; j <= i; j++)
+    {
+      b[i].dot_product(g(i, j), b[j], n_known_cols);
+    }
+  }
+  else
+  {
+    invalidate_gram_row(i);
+  }
+  gso_valid_cols[i] = 0;
+}
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::row_add(int i, int j)
+{
+  b[i].add(b[j], n_known_cols);
+  if (enable_transform)
+  {
+    u[i].add(u[j]);
+    if (enable_inverse_transform)
+      u_inv_t[j].sub(u_inv_t[i]);
+  }
+
+  if (enable_int_gram)
+  {
+    // g(i, i) += 2 * g(i, j) + g(j, j)
+    ztmp1.mul_2si(sym_g(i, j), 1);
+    ztmp1.add(ztmp1, g(j, j));
+    g(i, i).add(g(i, i), ztmp1);
+
+    for (int k = 0; k < n_known_rows; k++)
+      if (k != i)
+        sym_g(i, k).add(sym_g(i, k), sym_g(j, k));
+  }
+}
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::row_sub(int i, int j)
+{
+  b[i].sub(b[j], n_known_cols);
+  if (enable_transform)
+  {
+    u[i].sub(u[j]);
+    if (enable_inverse_transform)
+      u_inv_t[j].add(u_inv_t[i]);
+  }
+
+  if (enable_int_gram)
+  {
+    // g(i, i) += g(j, j) - 2 * g(i, j)
+    ztmp1.mul_2si(sym_g(i, j), 1);
+    ztmp1.sub(g(j, j), ztmp1);
+    g(i, i).add(g(i, i), ztmp1);
+
+    for (int k = 0; k < n_known_rows; k++)
+      if (k != i)
+        sym_g(i, k).sub(sym_g(i, k), sym_g(j, k));
+  }
+}
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::row_addmul_si(int i, int j, long x)
+{
+  b[i].addmul_si(b[j], x, n_known_cols);
+  if (enable_transform)
+  {
+    u[i].addmul_si(u[j], x);
+    if (enable_inverse_transform)
+      u_inv_t[j].addmul_si(u_inv_t[i], -x);
+  }
+
+  if (enable_int_gram)
+  {
+    /* g(i, i) += 2 * x * g(i, j) +  x^2 * g(j, j)
+      (must be done before updating g(i, j)) */
+    ztmp1.mul_si(sym_g(i, j), x);
+    ztmp1.mul_2si(ztmp1, 1);
+    g(i, i).add(g(i, i), ztmp1);
+    ztmp1.mul_si(g(j, j), x);
+    ztmp1.mul_si(ztmp1, x);
+    g(i, i).add(g(i, i), ztmp1);
+
+    // g(i, k) += g(j, k) * x  for k != i
+    for (int k = 0; k < n_known_rows; k++)
+    {
+      if (k == i)
+        continue;
+      ztmp1.mul_si(sym_g(j, k), x);
+      sym_g(i, k).add(sym_g(i, k), ztmp1);
+    }
+  }
+}
+
+template <class ZT, class FT>
+void MatGSO<ZT, FT>::row_addmul_si_2exp(int i, int j, long x, long expo)
+{
+  b[i].addmul_si_2exp(b[j], x, expo, n_known_cols, ztmp1);
+  if (enable_transform)
+  {
+    u[i].addmul_si_2exp(u[j], x, expo, ztmp1);
+    if (enable_inverse_transform)
+      u_inv_t[j].addmul_si_2exp(u_inv_t[i], -x, expo, ztmp1);
+  }
+
+  if (enable_int_gram)
+  {
+    /* g(i, i) += 2 * (2^e * x) * g(i, j) + 2^(2*e) * x^2 * g(j, j)
+      (must be done before updating g(i, j)) */
+    ztmp1.mul_si(sym_g(i, j), x);
+    ztmp1.mul_2si(ztmp1, expo + 1);
+    g(i, i).add(g(i, i), ztmp1);
+    ztmp1.mul_si(g(j, j), x);
+    ztmp1.mul_si(ztmp1, x);
+    ztmp1.mul_2si(ztmp1, 2 * expo);
+    g(i, i).add(g(i, i), ztmp1);
+
+    // g(i, k) += g(j, k) * (2^e * x) for k != i
+    for (int k = 0; k < n_known_rows; k++)
+    {
+      if (k == i)
+        continue;
+      ztmp1.mul_si(sym_g(j, k), x);
+      ztmp1.mul_2si(ztmp1, expo);
+      sym_g(i, k).add(sym_g(i, k), ztmp1);
+    }
+  }
+}
+
+template <class ZT, class FT>
+void MatGSO<ZT, FT>::row_addmul_2exp(int i, int j, const ZT &x, long expo)
+{
+  b[i].addmul_2exp(b[j], x, expo, n_known_cols, ztmp1);
+  if (enable_transform)
+  {
+    u[i].addmul_2exp(u[j], x, expo, ztmp1);
+    if (enable_inverse_transform)
+    {
+      ZT minus_x;
+      minus_x.neg(x);
+      u_inv_t[j].addmul_2exp(u_inv_t[i], minus_x, expo, ztmp1);
+    }
+  }
+
+  if (enable_int_gram)
+  {
+    /* g(i, i) += 2 * (2^e * x) * g(i, j) + 2^(2*e) * x^2 * g(j, j)
+      (must be done before updating g(i, j)) */
+    ztmp1.mul(sym_g(i, j), x);
+    ztmp1.mul_2si(ztmp1, expo + 1);
+    g(i, i).add(g(i, i), ztmp1);
+    ztmp1.mul(g(j, j), x);
+    ztmp1.mul(ztmp1, x);
+    ztmp1.mul_2si(ztmp1, 2 * expo);
+    g(i, i).add(g(i, i), ztmp1);
+
+    // g(i, k) += g(j, k) * (2^e * x) for k != i
+    for (int k = 0; k < n_known_rows; k++)
+    {
+      if (k == i)
+        continue;
+      ztmp1.mul(sym_g(j, k), x);
+      ztmp1.mul_2si(ztmp1, expo);
+      sym_g(i, k).add(sym_g(i, k), ztmp1);
+    }
+  }
+}
+
+template <class ZT, class FT>
+void MatGSO<ZT, FT>::row_addmul_we(int i, int j, const FT &x, long expo_add)
+{
+  FPLLL_DEBUG_CHECK(j >= 0 && /* i > j &&*/ i < n_known_rows && j < n_source_rows);
+
+  long expo;
+  long lx = x.get_si_exp_we(expo, expo_add);
+
+  if (expo == 0)
+  {
+    if (lx == 1)
+      row_add(i, j);
+    else if (lx == -1)
+      row_sub(i, j);
+    else if (lx != 0)
+      row_addmul_si(i, j, lx);
+  }
+  else if (row_op_force_long)
+  {
+    row_addmul_si_2exp(i, j, lx, expo);
+  }
+  else
+  {
+    x.get_z_exp_we(ztmp2, expo, expo_add);
+    row_addmul_2exp(i, j, ztmp2, expo);
+  }
+}
+// In row_swap, i < j
+template <class ZT, class FT> void MatGSO<ZT, FT>::row_swap(int i, int j)
+{
+  FPLLL_DEBUG_CHECK(!enable_inverse_transform);
+  b.swap_rows(i, j);
+  if (enable_transform)
+  {
+    u.swap_rows(i, j);
+  }
+
+  if (enable_int_gram)
+  {
+    if (j < i)  // Leaving this check here?
+    {
+      throw std::runtime_error("Error: in row_swap, i > j, causing errors in the grammatrix.");
+    }
+    for (int k = 0; k < i; k++)
+      g(i, k).swap(g(j, k));
+    for (int k = i + 1; k < j; k++)
+      g(k, i).swap(g(j, k));
+    for (int k = j + 1; k < n_known_rows; k++)
+      g(k, i).swap(g(k, j));
+    g(i, i).swap(g(j, j));
+  }
+}
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::move_row(int old_r, int new_r)
+{
+  FPLLL_DEBUG_CHECK(!cols_locked);
+  if (new_r < old_r)
+  {
+    FPLLL_DEBUG_CHECK(old_r < n_known_rows && !cols_locked);
+    for (int i = new_r; i < n_known_rows; i++)
+    {
+      invalidate_gso_row(i, new_r);
+    }
+    rotate(gso_valid_cols.begin() + new_r, gso_valid_cols.begin() + old_r,
+           gso_valid_cols.begin() + old_r + 1);
+    mu.rotate_right(new_r, old_r);
+    r.rotate_right(new_r, old_r);
+    b.rotate_right(new_r, old_r);
+    if (enable_transform)
+    {
+      u.rotate_right(new_r, old_r);
+      if (enable_inverse_transform)
+        u_inv_t.rotate_right(new_r, old_r);
+    }
+    if (enable_int_gram)
+    {
+      g.rotate_gram_right(new_r, old_r, n_known_rows);
+    }
+    else
+    {
+      gf.rotate_gram_right(new_r, old_r, n_known_rows);
+      bf.rotate_right(new_r, old_r);
+    }
+    if (enable_row_expo)
+      rotate(row_expo.begin() + new_r, row_expo.begin() + old_r, row_expo.begin() + old_r + 1);
+  }
+  else if (new_r > old_r)
+  {
+    for (int i = old_r; i < n_known_rows; i++)
+    {
+      invalidate_gso_row(i, old_r);
+    }
+    rotate(gso_valid_cols.begin() + old_r, gso_valid_cols.begin() + old_r + 1,
+           gso_valid_cols.begin() + new_r + 1);
+    mu.rotate_left(old_r, new_r);
+    r.rotate_left(old_r, new_r);
+    b.rotate_left(old_r, new_r);
+    if (enable_transform)
+    {
+      u.rotate_left(old_r, new_r);
+      if (enable_inverse_transform)
+        u_inv_t.rotate_left(old_r, new_r);
+    }
+    if (enable_int_gram)
+    {
+      if (old_r < n_known_rows - 1)
+      {
+        g.rotate_gram_left(old_r, min(new_r, n_known_rows - 1), n_known_rows);
+      }
+    }
+    else
+    {
+      if (old_r < n_known_rows - 1)
+        gf.rotate_gram_left(old_r, min(new_r, n_known_rows - 1), n_known_rows);
+      bf.rotate_left(old_r, new_r);
+    }
+    if (enable_row_expo)
+      rotate(row_expo.begin() + old_r, row_expo.begin() + old_r + 1, row_expo.begin() + new_r + 1);
+    if (new_r >= n_known_rows)
+    {
+      rotate(init_row_size.begin() + old_r, init_row_size.begin() + old_r + 1,
+             init_row_size.begin() + new_r + 1);
+      if (old_r < n_known_rows)
+      {
+        n_known_rows--;
+        n_source_rows        = n_known_rows;
+        init_row_size[new_r] = max(b[new_r].size_nz(), 1);
+      }
+    }
+  }
+}
+
+template <class ZT, class FT> void MatGSO<ZT, FT>::size_increased()
+{
+  int old_d = mu.get_rows();
+
+  if (d > alloc_dim)
+  {
+    if (enable_int_gram)
+    {
+      g.resize(d, d);
+    }
+    else
+    {
+      bf.resize(d, b.get_cols());
+      gf.resize(d, d);
+    }
+    mu.resize(d, d);
+    r.resize(d, d);
+    gso_valid_cols.resize(d);
+    init_row_size.resize(d);
+    if (enable_row_expo)
+    {
+      row_expo.resize(d);
+    }
+    alloc_dim = d;
+  }
+
+  for (int i = old_d; i < d; i++)
+  {
+    init_row_size[i] = max(b[i].size_nz(), 1);
+    if (!enable_int_gram)
+    {
+      bf[i].fill(0);  // update_bf might not copy all the zeros of b[i]
+      update_bf(i);
+    }
+  }
+}
+
+template class MatGSO<Z_NR<long>, FP_NR<double>>;
+template class MatGSO<Z_NR<double>, FP_NR<double>>;
+template class MatGSO<Z_NR<mpz_t>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class MatGSO<Z_NR<long>, FP_NR<long double>>;
+template class MatGSO<Z_NR<double>, FP_NR<long double>>;
+template class MatGSO<Z_NR<mpz_t>, FP_NR<long double>>;
+
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class MatGSO<Z_NR<long>, FP_NR<dd_real>>;
+template class MatGSO<Z_NR<double>, FP_NR<dd_real>>;
+template class MatGSO<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template class MatGSO<Z_NR<long>, FP_NR<qd_real>>;
+template class MatGSO<Z_NR<double>, FP_NR<qd_real>>;
+template class MatGSO<Z_NR<mpz_t>, FP_NR<qd_real>>;
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class MatGSO<Z_NR<long>, FP_NR<dpe_t>>;
+template class MatGSO<Z_NR<double>, FP_NR<dpe_t>>;
+template class MatGSO<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+#endif
+
+template class MatGSO<Z_NR<long>, FP_NR<mpfr_t>>;
+template class MatGSO<Z_NR<double>, FP_NR<mpfr_t>>;
+template class MatGSO<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/gso.h b/fplll/gso.h
new file mode 100644 (file)
index 0000000..c6435e2
--- /dev/null
@@ -0,0 +1,333 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_GSO_H
+#define FPLLL_GSO_H
+
+#include "gso_interface.h"
+#include "nr/matrix.h"
+#include "util.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+ * MatGSO provides an interface for performing elementary operations on a basis
+ * and computing its Gram matrix and its Gram-Schmidt orthogonalization.
+ * The Gram-Schmidt coefficients are computed on demand. The object keeps track
+ * of which coefficients are valid after each row operation.
+ */
+template <class ZT, class FT> class MatGSO : public MatGSOInterface<ZT, FT>
+{
+public:
+  using MatGSOInterface<ZT, FT>::d;
+  using MatGSOInterface<ZT, FT>::n_known_rows;
+  using MatGSOInterface<ZT, FT>::n_source_rows;
+  using MatGSOInterface<ZT, FT>::u;
+  using MatGSOInterface<ZT, FT>::enable_transform;
+  using MatGSOInterface<ZT, FT>::cols_locked;  // maybe scratch.
+  using MatGSOInterface<ZT, FT>::enable_int_gram;
+  using MatGSOInterface<ZT, FT>::gso_valid_cols;
+  using MatGSOInterface<ZT, FT>::enable_inverse_transform;
+  using MatGSOInterface<ZT, FT>::u_inv_t;
+  using MatGSOInterface<ZT, FT>::sym_g;
+  using MatGSOInterface<ZT, FT>::mu;
+  using MatGSOInterface<ZT, FT>::r;
+  using MatGSOInterface<ZT, FT>::ztmp1;
+  using MatGSOInterface<ZT, FT>::ztmp2;
+  using MatGSOInterface<ZT, FT>::row_op_force_long;
+  using MatGSOInterface<ZT, FT>::alloc_dim;
+  using MatGSOInterface<ZT, FT>::get_mu;
+  using MatGSOInterface<ZT, FT>::get_r;
+  using MatGSOInterface<ZT, FT>::gptr;
+  using MatGSOInterface<ZT, FT>::invalidate_gso_row;
+  using MatGSOInterface<ZT, FT>::gf;
+  using MatGSOInterface<ZT, FT>::bf;
+  using MatGSOInterface<ZT, FT>::discover_all_rows;
+  using MatGSOInterface<ZT, FT>::init_row_size;
+  using MatGSOInterface<ZT, FT>::enable_row_expo;
+  using MatGSOInterface<ZT, FT>::row_expo;
+  using MatGSOInterface<ZT, FT>::n_known_cols;
+  using MatGSOInterface<ZT, FT>::tmp_col_expo;
+
+  using MatGSOInterface<ZT, FT>::remove_last_row;
+  using MatGSOInterface<ZT, FT>::print_mu_r_g;
+  using MatGSOInterface<ZT, FT>::update_gso;
+  using MatGSOInterface<ZT, FT>::update_gso_row;
+  using MatGSOInterface<ZT, FT>::row_addmul;
+  using MatGSOInterface<ZT, FT>::symmetrize_g;
+
+#ifdef DEBUG
+  /* Used only in debug mode. */
+  using MatGSOInterface<ZT, FT>::row_op_first;
+  using MatGSOInterface<ZT, FT>::row_op_last;
+  using MatGSOInterface<ZT, FT>::in_row_op_range;
+#endif
+
+  /**
+   * Constructor.
+   * The precision of FT must be defined before creating an instance of the
+   * class and must remain the same until the object is destroyed (or no longer
+   * needed).
+   * @param b
+   *   The matrix on which row operations are performed. It must not be empty.
+   * @param u
+   *   If u is not empty, operations on b are also done on u
+   *   (in this case both must have the same number of rows).
+   *   If u is initially the identity matrix, multiplying transform by the
+   *   initial basis gives the current basis.
+   * @param u_inv_t
+   *   Inverse transform (should be empty, which disables the computation, or
+   *   initialized with identity matrix). It works only if u is not empty.
+   * @param enable_int_gram
+   *   If true, coefficients of the Gram matrix are computed with exact integer
+   *   arithmetic (type ZT). Otherwise, they are computed in floating-point
+   *   (type FT). Note that when exact arithmetic is used, all coefficients of
+   *   the first n_known_rows are continuously updated, whereas in floating-point,
+   *   they are computed only on-demand. This option cannot be enabled if
+   *   enable_row_expo=true.
+   * @param enable_row_expo
+   *   If true, each row of b is normalized by a power of 2 before doing
+   *   conversion to floating-point, which hopefully avoids some overflows.
+   *   This option cannot be enabled if enable_int_gram=true and works only
+   *   with FT=double and FT=long double. It is useless and MUST NOT be used
+   *   for FT=dpe or FT=mpfr_t.
+   * @param row_op_force_long
+   *   Affects the behaviour of row_addmul(_we).
+   *   See the documentation of row_addmul.
+   */
+  MatGSO(Matrix<ZT> &arg_b, Matrix<ZT> &arg_u, Matrix<ZT> &arg_uinv_t, int flags)
+      : MatGSOInterface<ZT, FT>(arg_u, arg_uinv_t, flags), b(arg_b)
+  {
+    FPLLL_DEBUG_CHECK(!(enable_int_gram && enable_row_expo));
+    d = b.get_rows();
+    if (enable_row_expo)
+    {
+      tmp_col_expo.resize(b.get_cols());
+    }
+    if (enable_int_gram)
+    {
+      gptr = &g;
+    }
+    size_increased();
+#ifdef DEBUG
+    row_op_first = row_op_last = -1;
+#endif
+  }
+
+public:
+  /**
+   * Basis of the lattice
+   */
+  Matrix<ZT> &b;
+  /**
+   * Integer Gram matrix of the lattice
+   */
+  Matrix<ZT> g;
+
+  virtual inline ZT &sqnorm_coordinates(ZT &sqnorm, vector<ZT> coordinates);
+
+  virtual inline long get_max_exp_of_b();
+  virtual inline bool b_row_is_zero(int i);
+  virtual inline int get_cols_of_b();
+  virtual inline int get_rows_of_b();
+  virtual inline void negate_row_of_b(int i);
+
+  virtual inline void create_rows(int n_new_rows);
+  virtual inline void remove_last_rows(int n_removed_rows);
+
+  virtual void move_row(int old_r, int new_r);
+
+  /**
+   * b[i] := b[i] + x * b[j].
+   * After one or several calls to row_addmul, row_op_end must be called.
+   * Special cases |x| &lt;= 1 and |x| &lt;= LONG_MAX are optimized.
+   * x should be an integer.
+   * If row_op_force_long=true, x is always converted to (2^expo * long) instead
+   * of (2^expo * ZT), which is faster if ZT=mpz_t but might lead to a loss of
+   * precision (in LLL, more Babai iterations are needed).
+   */
+  // --> moved to interface
+  // virtual inline void row_addmul(int i, int j, const FT &x);
+
+  /**
+   * b[i] := b[i] + x * 2^expo_add * b[j].
+   * After one or several calls to row_addmul_we, row_op_end must be called.
+   * Special cases |x| &lt;= 1 and |x| &lt;= LONG_MAX are optimized.
+   * x should be an integer.
+   * If row_op_force_long=true, x is always converted to (2^expo * long) instead
+   * of (2^expo * ZT), which is faster if ZT=mpz_t but might lead to a loss of
+   * precision (in LLL, more Babai iterations are needed).
+   */
+  virtual void row_addmul_we(int i, int j, const FT &x, long expo_add);
+
+  // b[i] += b[j] / b[i] -= b[j] (i > j)
+  virtual void row_add(int i, int j);
+  virtual void row_sub(int i, int j);
+
+  //  virtual inline void printparam(ostream &os);
+  virtual inline FT &get_gram(FT &f, int i, int j);
+
+  virtual inline ZT &get_int_gram(ZT &z, int i, int j);
+
+  // b[i] <-> b[j] (i < j)
+  virtual void row_swap(int i, int j);
+
+private:
+  /* Allocates matrices and arrays whose size depends on d (all but tmp_col_expo).
+   When enable_int_gram=false, initializes bf. */
+  virtual void size_increased();
+
+  virtual void discover_row();
+
+  /* Upates the i-th row of bf. It does not invalidate anything, so the caller
+     must take into account that it might change row_expo. */
+  virtual void update_bf(int i);
+  /* Marks g(i, j) for all j <= i (but NOT for j > i) */
+  virtual void invalidate_gram_row(int i);
+
+  // b[i] <- b[i] + x * b[j] (i > j)
+  virtual void row_addmul_si(int i, int j, long x);
+  // b[i] <- b[i] + (2^expo * x) * b[j] (i > j)
+  virtual void row_addmul_si_2exp(int i, int j, long x, long expo);
+  virtual void row_addmul_2exp(int i, int j, const ZT &x, long expo);
+};
+
+template <class ZT, class FT>
+inline ZT &MatGSO<ZT, FT>::sqnorm_coordinates(ZT &sqnorm, vector<ZT> coordinates)
+{
+  vector<ZT> tmpvec;
+  ZT tmp;
+  sqnorm = 0;
+  vector_matrix_product(tmpvec, coordinates, b);
+  for (int j = 0; j < b.get_rows(); j++)
+  {
+    tmp.mul(tmpvec[j], tmpvec[j]);
+    sqnorm.add(sqnorm, tmp);
+  }
+  return sqnorm;
+}
+
+template <class ZT, class FT> inline long MatGSO<ZT, FT>::get_max_exp_of_b()
+{
+  return b.get_max_exp();
+}
+
+template <class ZT, class FT> inline bool MatGSO<ZT, FT>::b_row_is_zero(int i)
+{
+  return b[i].is_zero();
+}
+template <class ZT, class FT> inline int MatGSO<ZT, FT>::get_cols_of_b() { return b.get_cols(); }
+
+template <class ZT, class FT> inline int MatGSO<ZT, FT>::get_rows_of_b() { return b.get_rows(); }
+
+template <class ZT, class FT> inline void MatGSO<ZT, FT>::negate_row_of_b(int i)
+{
+
+  for (int j = 0; j < get_cols_of_b(); j++)
+  {
+    b[i][j].neg(b[i][j]);
+  }
+  if (enable_int_gram)
+  {
+    for (int j = 0; j < get_rows_of_b(); j++)
+    {
+      if (j < i)
+      {
+        g(i, j).neg(g(i, j));
+      }
+      else if (j > i)
+      {
+        g(j, i).neg(g(j, i));
+      }
+    }
+  }
+}
+
+template <class ZT, class FT> inline FT &MatGSO<ZT, FT>::get_gram(FT &f, int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j <= i && j < n_source_rows &&
+                    !in_row_op_range(i));
+  if (enable_int_gram)
+  {
+    f.set_z(g(i, j));
+  }
+  else
+  {
+    if (gf(i, j).is_nan())
+    {
+      bf[i].dot_product(gf(i, j), bf[j], n_known_cols);
+    }
+    f = gf(i, j);
+  }
+  return f;
+}
+
+template <class ZT, class FT> inline ZT &MatGSO<ZT, FT>::get_int_gram(ZT &z, int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j <= i && j < n_source_rows &&
+                    !in_row_op_range(i));
+  if (enable_int_gram)
+  {
+    z = g(i, j);
+  }
+  else
+  {
+
+    b[i].dot_product(z, b[j], n_known_cols);
+  }
+  return z;
+}
+
+template <class ZT, class FT> inline void MatGSO<ZT, FT>::create_rows(int n_new_rows)
+{
+  FPLLL_DEBUG_CHECK(!cols_locked);
+  int old_d = d;
+  d += n_new_rows;
+  b.set_rows(d);
+  for (int i = old_d; i < d; i++)
+  {
+    for (int j = 0; j < b.get_cols(); j++)
+    {
+      b[i][j] = 0;
+    }
+  }
+  if (enable_transform)
+  {
+    u.set_rows(d);
+    for (int i = old_d; i < d; i++)
+      for (int j = 0; j < u.get_cols(); j++)
+        u[i][j] = 0;
+  }
+  size_increased();
+  if (n_known_rows == old_d)
+    discover_all_rows();
+}
+
+template <class ZT, class FT> inline void MatGSO<ZT, FT>::remove_last_rows(int n_removed_rows)
+{
+  FPLLL_DEBUG_CHECK(!cols_locked && d >= n_removed_rows);
+  d -= n_removed_rows;
+  n_known_rows  = min(n_known_rows, d);
+  n_source_rows = n_known_rows;
+  b.set_rows(d);
+  if (enable_transform)
+    u.set_rows(d);
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/gso_gram.cpp b/fplll/gso_gram.cpp
new file mode 100644 (file)
index 0000000..fcc4d76
--- /dev/null
@@ -0,0 +1,410 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2019 Koen de Boer
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Template source file */
+
+#include "gso_gram.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::discover_row()
+{
+
+  FPLLL_DEBUG_CHECK(n_known_rows < d);
+  /* Early reduction (cols_locked=true) is not allowed when enable_int_gram=true,
+     since n_known_cols might be too small to compute all the g(i,j). */
+  FPLLL_DEBUG_CHECK(!(cols_locked && enable_int_gram));
+  int i = n_known_rows;
+  n_known_rows++;
+  if (!cols_locked)
+  {
+    n_source_rows = n_known_rows;
+  }
+  gso_valid_cols[i] = 0;
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::update_bf(int)
+{
+  // EMPTY
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::invalidate_gram_row(int)
+{
+  // EMPTY
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::row_add(int i, int j)
+{
+  if (enable_transform)
+  {
+    u[i].add(u[j]);
+    if (enable_inverse_transform)
+      u_inv_t[j].sub(u_inv_t[i]);
+  }
+
+  if (enable_int_gram)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    Matrix<ZT> &g = *gptr;
+    // g(i, i) += 2 * g(i, j) + g(j, j)
+    ztmp1.mul_2si(sym_g(i, j), 1);
+    ztmp1.add(ztmp1, g(j, j));
+    g(i, i).add(g(i, i), ztmp1);
+
+    for (int k = 0; k < d; k++)
+    {
+      if (k != i)
+        sym_g(i, k).add(sym_g(i, k), sym_g(j, k));
+    }
+  }
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::row_sub(int i, int j)
+{
+  if (enable_transform)
+  {
+    u[i].sub(u[j]);
+    if (enable_inverse_transform)
+      u_inv_t[j].add(u_inv_t[i]);
+  }
+
+  if (enable_int_gram)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    Matrix<ZT> &g = *gptr;
+    // g(i, i) += g(j, j) - 2 * g(i, j)
+    ztmp1.mul_2si(sym_g(i, j), 1);
+    ztmp1.sub(g(j, j), ztmp1);
+    g(i, i).add(g(i, i), ztmp1);
+
+    for (int k = 0; k < d; k++)
+      if (k != i)
+        sym_g(i, k).sub(sym_g(i, k), sym_g(j, k));
+  }
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::row_addmul_si(int i, int j, long x)
+{
+  if (enable_transform)
+  {
+    u[i].addmul_si(u[j], x);
+    if (enable_inverse_transform)
+      u_inv_t[j].addmul_si(u_inv_t[i], -x);
+  }
+
+  if (enable_int_gram)
+  {
+    // g(i, i) += 2 * (2^e * x) * g(i, j) + 2^(2*e) * x^2 * g(j, j)
+    //  (must be done before updating g(i, j))
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    Matrix<ZT> &g = *gptr;
+
+    ztmp1.mul_si(sym_g(i, j), x);
+    ztmp1.mul_2si(ztmp1, 1);
+    g(i, i).add(g(i, i), ztmp1);
+    ztmp1.mul_si(g(j, j), x);
+    ztmp1.mul_si(ztmp1, x);
+    g(i, i).add(g(i, i), ztmp1);
+
+    // g(i, k) += g(j, k) * (2^e * x) for k != i
+    for (int k = 0; k < d; k++)
+    {
+      if (k == i)
+        continue;
+      ztmp1.mul_si(sym_g(j, k), x);
+      sym_g(i, k).add(sym_g(i, k), ztmp1);
+    }
+  }
+}
+
+template <class ZT, class FT>
+void MatGSOGram<ZT, FT>::row_addmul_si_2exp(int i, int j, long x, long expo)
+{
+  if (enable_transform)
+  {
+    u[i].addmul_si_2exp(u[j], x, expo, ztmp1);
+    if (enable_inverse_transform)
+      u_inv_t[j].addmul_si_2exp(u_inv_t[i], -x, expo, ztmp1);
+  }
+
+  if (enable_int_gram)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    Matrix<ZT> &g = *gptr;
+    /* g(i, i) += 2 * (2^e * x) * g(i, j) + 2^(2*e) * x^2 * g(j, j)
+      (must be done before updating g(i, j)) */
+    ztmp1.mul_si(sym_g(i, j), x);
+    ztmp1.mul_2si(ztmp1, expo + 1);
+    g(i, i).add(g(i, i), ztmp1);
+    ztmp1.mul_si(g(j, j), x);
+    ztmp1.mul_si(ztmp1, x);
+    ztmp1.mul_2si(ztmp1, 2 * expo);
+    g(i, i).add(g(i, i), ztmp1);
+
+    // g(i, k) += g(j, k) * (2^e * x) for k != i
+    for (int k = 0; k < d; k++)
+    {
+      if (k == i)
+        continue;
+      ztmp1.mul_si(sym_g(j, k), x);
+      ztmp1.mul_2si(ztmp1, expo);
+      sym_g(i, k).add(sym_g(i, k), ztmp1);
+    }
+  }
+}
+
+template <class ZT, class FT>
+void MatGSOGram<ZT, FT>::row_addmul_2exp(int i, int j, const ZT &x, long expo)
+{
+  if (enable_transform)
+  {
+    u[i].addmul_2exp(u[j], x, expo, ztmp1);
+    if (enable_inverse_transform)
+    {
+      ZT minus_x;
+      minus_x.neg(x);
+      u_inv_t[j].addmul_2exp(u_inv_t[i], minus_x, expo, ztmp1);
+    }
+  }
+
+  if (enable_int_gram)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    Matrix<ZT> &g = *gptr;
+    /* g(i, i) += 2 * (2^e * x) * g(i, j) + 2^(2*e) * x^2 * g(j, j)
+      (must be done before updating g(i, j)) */
+    ztmp1.mul(sym_g(i, j), x);
+    ztmp1.mul_2si(ztmp1, expo + 1);
+    g(i, i).add(g(i, i), ztmp1);
+    ztmp1.mul(g(j, j), x);
+    ztmp1.mul(ztmp1, x);
+    ztmp1.mul_2si(ztmp1, 2 * expo);
+    g(i, i).add(g(i, i), ztmp1);
+
+    // g(i, k) += g(j, k) * (2^e * x) for k != i
+
+    for (int k = 0; k < d; k++)
+    {
+      if (k == i)
+        continue;
+      ztmp1.mul(sym_g(j, k), x);
+      ztmp1.mul_2si(ztmp1, expo);
+      sym_g(i, k).add(sym_g(i, k), ztmp1);
+    }
+  }
+}
+
+template <class ZT, class FT>
+void MatGSOGram<ZT, FT>::row_addmul_we(int i, int j, const FT &x, long expo_add)
+{
+  FPLLL_DEBUG_CHECK(j >= 0 && i < n_known_rows && j < n_source_rows);
+  long expo;
+  long lx = x.get_si_exp_we(expo, expo_add);
+
+  if (expo == 0)
+  {
+    if (lx == 1)
+      row_add(i, j);
+    else if (lx == -1)
+      row_sub(i, j);
+    else if (lx != 0)
+      row_addmul_si(i, j, lx);
+  }
+  else if (row_op_force_long)
+  {
+    row_addmul_si_2exp(i, j, lx, expo);
+  }
+  else
+  {
+    x.get_z_exp_we(ztmp2, expo, expo_add);
+    row_addmul_2exp(i, j, ztmp2, expo);
+  }
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::row_swap(int i, int j)
+{
+  FPLLL_DEBUG_CHECK(!enable_inverse_transform);
+  if (enable_transform)
+  {
+    u.swap_rows(i, j);
+  }
+
+  if (enable_int_gram)
+  {
+    if (j < i)
+    {
+      throw std::runtime_error("Error: in row_swap, i > j, causing errors in the grammatrix.");
+    }
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    Matrix<ZT> &g = *gptr;
+    for (int k = 0; k < i; k++)
+      g(i, k).swap(g(j, k));
+    for (int k = i + 1; k < j; k++)
+      g(k, i).swap(g(j, k));
+    for (int k = j + 1; k < d; k++)
+      g(k, i).swap(g(k, j));
+    g(i, i).swap(g(j, j));
+  }
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::move_row(int old_r, int new_r)
+{
+  FPLLL_DEBUG_CHECK(!cols_locked);
+  if (new_r < old_r)
+  {
+    FPLLL_DEBUG_CHECK(old_r < n_known_rows && !cols_locked);
+    for (int i = new_r; i < n_known_rows; i++)
+    {
+      invalidate_gso_row(i, new_r);
+    }
+    rotate(gso_valid_cols.begin() + new_r, gso_valid_cols.begin() + old_r,
+           gso_valid_cols.begin() + old_r + 1);
+    mu.rotate_right(new_r, old_r);
+    r.rotate_right(new_r, old_r);
+    if (enable_transform)
+    {
+      u.rotate_right(new_r, old_r);
+      if (enable_inverse_transform)
+        u_inv_t.rotate_right(new_r, old_r);
+    }
+    if (enable_int_gram)
+    {
+      if (gptr == nullptr)
+      {
+        throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+      }
+      gptr->rotate_gram_right(new_r, old_r, d);
+    }
+    else
+    {
+    }
+  }
+
+  else if (new_r > old_r)
+  {
+    for (int i = old_r; i < n_known_rows; i++)
+    {
+      invalidate_gso_row(i, old_r);
+    }
+    rotate(gso_valid_cols.begin() + old_r, gso_valid_cols.begin() + old_r + 1,
+           gso_valid_cols.begin() + new_r + 1);
+    mu.rotate_left(old_r, new_r);
+    r.rotate_left(old_r, new_r);
+
+    if (enable_transform)
+    {
+      u.rotate_left(old_r, new_r);
+      if (enable_inverse_transform)
+        u_inv_t.rotate_left(old_r, new_r);
+    }
+
+    if (enable_int_gram)
+    {
+      if (old_r < n_known_rows - 1)
+      {
+        if (gptr == nullptr)
+        {
+          throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+        }
+        // gptr->rotate_gram_left(old_r, new_r, n_known_rows);
+        gptr->rotate_gram_left(old_r, min(new_r, n_known_rows - 1), d);
+      }
+    }
+    else
+    {
+    }
+    if (new_r >= n_known_rows)
+    {
+      if (old_r < n_known_rows)
+      {
+        n_known_rows--;
+        n_source_rows = n_known_rows;
+      }
+    }
+  }
+}
+
+template <class ZT, class FT> void MatGSOGram<ZT, FT>::size_increased()
+{
+  if (d > alloc_dim)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    gptr->resize(d, d);
+
+    mu.resize(d, d);
+    r.resize(d, d);
+    gso_valid_cols.resize(d);
+    alloc_dim = d;
+  }
+}
+
+template class MatGSOGram<Z_NR<long>, FP_NR<double>>;
+template class MatGSOGram<Z_NR<double>, FP_NR<double>>;
+template class MatGSOGram<Z_NR<mpz_t>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class MatGSOGram<Z_NR<long>, FP_NR<long double>>;
+template class MatGSOGram<Z_NR<double>, FP_NR<long double>>;
+template class MatGSOGram<Z_NR<mpz_t>, FP_NR<long double>>;
+
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class MatGSOGram<Z_NR<long>, FP_NR<dd_real>>;
+template class MatGSOGram<Z_NR<double>, FP_NR<dd_real>>;
+template class MatGSOGram<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template class MatGSOGram<Z_NR<long>, FP_NR<qd_real>>;
+template class MatGSOGram<Z_NR<double>, FP_NR<qd_real>>;
+template class MatGSOGram<Z_NR<mpz_t>, FP_NR<qd_real>>;
+//
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class MatGSOGram<Z_NR<long>, FP_NR<dpe_t>>;
+template class MatGSOGram<Z_NR<double>, FP_NR<dpe_t>>;
+template class MatGSOGram<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+//
+#endif
+
+template class MatGSOGram<Z_NR<long>, FP_NR<mpfr_t>>;
+template class MatGSOGram<Z_NR<double>, FP_NR<mpfr_t>>;
+template class MatGSOGram<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/gso_gram.h b/fplll/gso_gram.h
new file mode 100644 (file)
index 0000000..3ca8c52
--- /dev/null
@@ -0,0 +1,294 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2019 Koen de Boer
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_GSOGRAM_H
+#define FPLLL_GSOGRAM_H
+
+#include "gso_interface.h"
+#include "nr/matrix.h"
+#include "util.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+ * MatGSOGram provides an interface for performing elementary operations on a basis
+ * and computing its Gram matrix and its Gram-Schmidt orthogonalization.
+ * The Gram-Schmidt coefficients are computed on demand. The object keeps track
+ * of which coefficients are valid after each row operation.
+ */
+template <class ZT, class FT> class MatGSOGram : public MatGSOInterface<ZT, FT>
+{
+public:
+  using MatGSOInterface<ZT, FT>::d;
+  using MatGSOInterface<ZT, FT>::n_known_rows;
+  using MatGSOInterface<ZT, FT>::n_source_rows;
+  using MatGSOInterface<ZT, FT>::u;
+  using MatGSOInterface<ZT, FT>::enable_transform;
+  using MatGSOInterface<ZT, FT>::cols_locked;  // maybe scratch.
+  using MatGSOInterface<ZT, FT>::enable_int_gram;
+  using MatGSOInterface<ZT, FT>::gso_valid_cols;
+  using MatGSOInterface<ZT, FT>::enable_inverse_transform;
+  using MatGSOInterface<ZT, FT>::u_inv_t;
+  using MatGSOInterface<ZT, FT>::sym_g;
+  using MatGSOInterface<ZT, FT>::mu;
+  using MatGSOInterface<ZT, FT>::r;
+  using MatGSOInterface<ZT, FT>::ztmp1;
+  using MatGSOInterface<ZT, FT>::ztmp2;
+  using MatGSOInterface<ZT, FT>::row_op_force_long;
+  using MatGSOInterface<ZT, FT>::alloc_dim;
+  using MatGSOInterface<ZT, FT>::get_mu;
+  using MatGSOInterface<ZT, FT>::get_r;
+  using MatGSOInterface<ZT, FT>::gptr;
+  using MatGSOInterface<ZT, FT>::invalidate_gso_row;
+
+  using MatGSOInterface<ZT, FT>::create_row;
+  using MatGSOInterface<ZT, FT>::remove_last_row;
+  using MatGSOInterface<ZT, FT>::print_mu_r_g;
+  using MatGSOInterface<ZT, FT>::discover_all_rows;
+  using MatGSOInterface<ZT, FT>::update_gso;
+  using MatGSOInterface<ZT, FT>::update_gso_row;
+  using MatGSOInterface<ZT, FT>::symmetrize_g;
+
+#ifdef DEBUG
+  /* Used only in debug mode. */
+  using MatGSOInterface<ZT, FT>::row_op_first;
+  using MatGSOInterface<ZT, FT>::row_op_last;
+  using MatGSOInterface<ZT, FT>::in_row_op_range;
+#endif
+
+  MatGSOGram(Matrix<ZT> &arg_g, Matrix<ZT> &arg_u, Matrix<ZT> &arg_uinv_t, int flags = GSO_INT_GRAM)
+      : MatGSOInterface<ZT, FT>(arg_u, arg_uinv_t, flags)
+  {
+    if (flags != GSO_INT_GRAM)
+    {
+      throw std::invalid_argument("flags must be equal to GSO_INT_GRAM");
+    }
+    gptr = &arg_g;
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    d = gptr->get_rows();
+    size_increased();
+
+#ifdef DEBUG
+    row_op_first = row_op_last = -1;
+#endif
+  }
+
+public:
+  virtual inline long get_max_exp_of_b();
+  virtual inline bool b_row_is_zero(int i);
+  virtual inline int get_cols_of_b();
+  virtual inline int get_rows_of_b();
+  virtual inline void negate_row_of_b(int i);
+
+  //  inline void set_g(Matrix<ZT> arg_g)
+  virtual inline void create_rows(int n_new_rows);
+  virtual inline void remove_last_rows(int n_removed_rows);
+
+  /*
+    virtual inline void dump_mu_d(double *mu, int offset = 0, int block_size = -1);
+    virtual inline void dump_mu_d(vector<double> mu, int offset = 0, int block_size = -1);
+
+    virtual inline void dump_r_d(double *r, int offset = 0, int block_size = -1);
+    virtual inline void dump_r_d(vector<double> r, int offset = 0, int block_size = -1);
+  */
+  virtual void move_row(int old_r, int new_r);
+
+  virtual void row_addmul_we(int i, int j, const FT &x, long expo_add);
+
+  // b[i] += b[j] / b[i] -= b[j] (i > j)
+  virtual void row_add(int i, int j);
+  virtual void row_sub(int i, int j);
+
+  //  virtual inline void printparam(ostream &os);
+
+  virtual inline ZT &sqnorm_coordinates(ZT &sqnorm, vector<ZT> coordinates);
+
+  virtual inline FT &get_gram(FT &f, int i, int j);
+
+  virtual inline ZT &get_int_gram(ZT &z, int i, int j);
+
+  // b[i] <-> b[j] (i < j)
+  virtual void row_swap(int i, int j);
+
+private:
+  /* Allocates matrices and arrays whose size depends on d (all but tmp_col_expo).
+   When enable_int_gram=false, initializes bf. */
+  virtual void size_increased();
+
+  virtual void discover_row();
+
+  /* Upates the i-th row of bf. It does not invalidate anything, so the caller
+     must take into account that it might change row_expo. */
+  virtual void update_bf(int i);
+  /* Marks g(i, j) for all j <= i (but NOT for j > i) */
+  virtual void invalidate_gram_row(int i);
+
+  // b[i] <- b[i] + x * b[j] (i > j)
+  virtual void row_addmul_si(int i, int j, long x);
+  // b[i] <- b[i] + (2^expo * x) * b[j] (i > j)
+
+  virtual void row_addmul_si_2exp(int i, int j, long x, long expo);
+  virtual void row_addmul_2exp(int i, int j, const ZT &x, long expo);
+  // virtual void apply_transform(const Matrix<FT> &transform, int src_base, int target_base);
+};
+
+template <class ZT, class FT>
+inline ZT &MatGSOGram<ZT, FT>::sqnorm_coordinates(ZT &sqnorm, vector<ZT> coordinates)
+{
+  vector<ZT> tmpvec;
+  Matrix<ZT> &g = *gptr;
+  vector_matrix_product(tmpvec, coordinates, g);
+
+  sqnorm = 0;
+  for (int i = 0; i < g.get_cols(); i++)
+  {
+    ztmp1.mul(tmpvec[i], coordinates[i]);
+    sqnorm.add(sqnorm, ztmp1);
+  }
+  return sqnorm;
+}
+
+template <class ZT, class FT> inline long MatGSOGram<ZT, FT>::get_max_exp_of_b()
+{
+  if (gptr == nullptr)
+  {
+    throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+  }
+  Matrix<ZT> &g = *gptr;
+  // normally, this returns the maximum
+  // exponent of b. We approximate this temporarily
+  // by the half of the maximum exponent of g.
+  // beware of errors, because maybe g is
+  // zero in the upper half of the matrix.
+  return g.get_max_exp() / 2;
+}
+template <class ZT, class FT> inline bool MatGSOGram<ZT, FT>::b_row_is_zero(int i)
+{
+  if (gptr == nullptr)
+  {
+    throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+  }
+  Matrix<ZT> &g = *gptr;
+  // normally this returns whether the
+  // ith row of the basis is the zero row.
+  // now, we just check whether g[i][i] is zero.
+  return g[i][i].is_zero();
+}
+template <class ZT, class FT> inline int MatGSOGram<ZT, FT>::get_cols_of_b()
+{
+  if (gptr == nullptr)
+  {
+    throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+  }
+  // in this gram-matrix version, the number
+  // of columns of b is the same as the
+  // number of colums of g.
+  return gptr->get_cols();
+}
+
+template <class ZT, class FT> inline int MatGSOGram<ZT, FT>::get_rows_of_b()
+{
+  if (gptr == nullptr)
+  {
+    throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+  }
+  // in this gram-matrix version, the number
+  // of columns of b is the same as the
+  // number of colums of g.
+  return gptr->get_rows();
+}
+
+template <class ZT, class FT> inline void MatGSOGram<ZT, FT>::negate_row_of_b(int i)
+{
+  if (enable_int_gram)
+  {
+
+    for (int j = 0; j < get_rows_of_b(); j++)
+    {
+      if (j != i)
+      {
+        sym_g(i, j).neg(sym_g(i, j));
+      }
+    }
+  }
+}
+
+template <class ZT, class FT> inline FT &MatGSOGram<ZT, FT>::get_gram(FT &f, int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j <= i && j < n_source_rows &&
+                    !in_row_op_range(i));
+  if (enable_int_gram)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    f.set_z((*gptr)(i, j));
+  }
+  return f;
+}
+
+template <class ZT, class FT> inline ZT &MatGSOGram<ZT, FT>::get_int_gram(ZT &z, int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j <= i && j < n_source_rows &&
+                    !in_row_op_range(i));
+  if (enable_int_gram)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    z = (*gptr)[i][j];
+  }
+  return z;
+}
+
+template <class ZT, class FT> inline void MatGSOGram<ZT, FT>::remove_last_rows(int n_removed_rows)
+{
+  FPLLL_DEBUG_CHECK(!cols_locked && d >= n_removed_rows);
+  d -= n_removed_rows;
+  n_known_rows  = min(n_known_rows, d);
+  n_source_rows = n_known_rows;
+  if (enable_transform)
+    u.set_rows(d);
+}
+
+template <class ZT, class FT> inline void MatGSOGram<ZT, FT>::create_rows(int n_new_rows)
+{
+  FPLLL_DEBUG_CHECK(!cols_locked);
+  int old_d = d;
+  d += n_new_rows;
+
+  if (enable_transform)
+  {
+    u.set_rows(d);
+    for (int i = old_d; i < d; i++)
+      for (int j = 0; j < u.get_cols(); j++)
+        u[i][j] = 0;
+  }
+  size_increased();
+  if (n_known_rows == old_d)
+    MatGSOInterface<ZT, FT>::discover_all_rows();
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/gso_interface.cpp b/fplll/gso_interface.cpp
new file mode 100644 (file)
index 0000000..9ca183f
--- /dev/null
@@ -0,0 +1,337 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2019 Koen de Boer
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Template source file */
+
+#include "gso_interface.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class ZT, class FT>
+inline void MatGSOInterface<ZT, FT>::invalidate_gso_row(int i, int new_valid_cols)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && new_valid_cols >= 0 && new_valid_cols <= i + 1);
+  gso_valid_cols[i] = min(gso_valid_cols[i], new_valid_cols);
+}
+
+template <class ZT, class FT> void MatGSOInterface<ZT, FT>::row_op_end(int first, int last)
+{
+#ifdef DEBUG
+  FPLLL_DEBUG_CHECK(row_op_first == first && row_op_last == last);
+  row_op_first = row_op_last = -1;
+#endif
+  for (int i = first; i < last; i++)
+  {
+    if (!enable_int_gram)
+    {
+      update_bf(i);
+      invalidate_gram_row(i);
+      for (int j = i + 1; j < n_known_rows; j++)
+        gf(j, i).set_nan();
+    }
+    invalidate_gso_row(i, 0);
+  }
+  for (int i = last; i < n_known_rows; i++)
+  {
+    invalidate_gso_row(i, first);
+  }
+}
+
+template <class ZT, class FT> inline ZT MatGSOInterface<ZT, FT>::get_max_gram()
+{
+  ZT tmp;
+  if (enable_int_gram)
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+    }
+    Matrix<ZT> gr = *gptr;
+    tmp           = gr(0, 0);
+    for (int i = 0; i < n_known_rows; i++)
+      tmp = tmp.max_z(gr(i, i));
+  }
+  else
+  {
+    FT tmp1 = gf(0, 0);
+    for (int i = 0; i < n_known_rows; i++)
+      tmp1 = tmp1.max_f(gf(i, i));
+    tmp.set_f(tmp1);
+  }
+  return tmp;
+}
+
+template <class ZT, class FT> inline FT MatGSOInterface<ZT, FT>::get_max_bstar()
+{
+  FT tmp;
+  tmp = r(0, 0);
+  for (int i = 0; i < n_known_rows; i++)
+    tmp = tmp.max_f(r(i, i));
+  return tmp;
+}
+
+template <class ZT, class FT> long MatGSOInterface<ZT, FT>::get_max_mu_exp(int i, int n_columns)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && gso_valid_cols[i] >= n_columns);
+  long max_expo = LONG_MIN, expo;
+  for (int j = 0; j < n_columns; j++)
+  {
+    long expo2 = get_mu_exp(i, j, expo).exponent();
+    max_expo   = max(max_expo, expo + expo2);
+  }
+  return max_expo;
+}
+// This function *can* be included in the interface; it has no base-class specific functions.
+// If this function is going to be included, it must be removed from gso.* and gsogram.*
+// and also added to gso_interface.h as non-virtual.
+/*
+template <class ZT, class FT>
+void MatGSOInterface<ZT, FT>::row_addmul_we(int i, int j, const FT &x, long expo_add)
+{
+  FPLLL_DEBUG_CHECK(j >= 0 && i < n_known_rows && j < n_source_rows);
+  long expo;
+  long lx = x.get_si_exp_we(expo, expo_add);
+
+  if (expo == 0)
+  {
+    if (lx == 1)
+      row_add(i, j);
+    else if (lx == -1)
+      row_sub(i, j);
+    else if (lx != 0)
+      row_addmul_si(i, j, lx);
+  }
+  else if (row_op_force_long)
+  {
+    row_addmul_si_2exp(i, j, lx, expo);
+  }
+  else
+  {
+    x.get_z_exp_we(ztmp2, expo, expo_add);
+    row_addmul_2exp(i, j, ztmp2, expo);
+  }
+}
+*/
+
+template <class ZT, class FT> bool MatGSOInterface<ZT, FT>::update_gso_row(int i, int last_j)
+{
+  // FPLLL_TRACE_IN("Updating GSO up to (" << i << ", " << last_j << ")");
+  // FPLLL_TRACE("n_known_rows=" << n_known_rows << " n_source_rows=" << n_source_rows);
+  if (i >= n_known_rows)
+  {
+    discover_row();
+  }
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && last_j >= 0 && last_j < n_source_rows);
+
+  int j = max(0, gso_valid_cols[i]);
+
+  for (; j <= last_j; j++)
+  {
+    get_gram(ftmp1, i, j);
+    FPLLL_DEBUG_CHECK(j == i || gso_valid_cols[j] >= j);
+    for (int k = 0; k < j; k++)
+    {
+      ftmp2.mul(mu(j, k), r(i, k));
+      ftmp1.sub(ftmp1, ftmp2);
+    }
+    r(i, j) = ftmp1;
+    if (i > j)
+    {
+      mu(i, j).div(ftmp1, r(j, j));
+      if (!mu(i, j).is_finite())
+        return false;
+    }
+  }
+
+  gso_valid_cols[i] = j;  // = max(0, gso_valid_cols[i], last_j + 1)
+  // FPLLL_TRACE_OUT("End of GSO update");
+  return true;
+}
+
+template <class ZT, class FT> void MatGSOInterface<ZT, FT>::lock_cols() { cols_locked = true; }
+
+template <class ZT, class FT> void MatGSOInterface<ZT, FT>::unlock_cols()
+{
+  n_known_rows = n_source_rows;
+  cols_locked  = false;
+}
+
+template <class ZT, class FT>
+void MatGSOInterface<ZT, FT>::apply_transform(const Matrix<FT> &transform, int src_base,
+                                              int target_base)
+{
+  int target_size = transform.get_rows(), src_size = transform.get_cols();
+  int old_d = d;
+  create_rows(target_size);
+  for (int i = 0; i < target_size; i++)
+  {
+    for (int j = 0; j < src_size; j++)
+    {
+      row_addmul(old_d + i, src_base + j, transform(i, j));
+    }
+  }
+  row_op_begin(target_base, target_base + target_size);
+  for (int i = 0; i < target_size; i++)
+  {
+    row_swap(target_base + i, old_d + i);
+  }
+  row_op_end(target_base, target_base + target_size);
+  remove_last_rows(target_size);
+}
+
+template <class ZT, class FT>
+double MatGSOInterface<ZT, FT>::get_current_slope(int start_row, int stop_row)
+{
+  FT f, log_f;
+  long expo;
+  vector<double> x;
+  x.resize(stop_row);
+  for (int i = start_row; i < stop_row; i++)
+  {
+    update_gso_row(i);
+    f = get_r_exp(i, i, expo);
+    log_f.log(f, GMP_RNDU);
+    x[i] = log_f.get_d() + expo * std::log(2.0);
+  }
+  int n         = stop_row - start_row;
+  double i_mean = (n - 1) * 0.5 + start_row, x_mean = 0, v1 = 0, v2 = 0;
+  for (int i = start_row; i < stop_row; i++)
+  {
+    x_mean += x[i];
+  }
+  x_mean /= n;
+  for (int i = start_row; i < stop_row; i++)
+  {
+    v1 += (i - i_mean) * (x[i] - x_mean);
+    v2 += (i - i_mean) * (i - i_mean);
+  }
+  return v1 / v2;
+}
+
+template <class ZT, class FT> FT MatGSOInterface<ZT, FT>::get_root_det(int start_row, int end_row)
+{
+  start_row   = max(0, start_row);
+  end_row     = min(d, end_row);
+  FT h        = (double)(end_row - start_row);
+  FT root_det = get_log_det(start_row, end_row) / h;
+  root_det.exponential(root_det);
+  return root_det;
+}
+
+template <class ZT, class FT> FT MatGSOInterface<ZT, FT>::get_log_det(int start_row, int end_row)
+{
+  FT log_det = 0.0;
+  start_row  = max(0, start_row);
+  end_row    = min(d, end_row);
+  FT h;
+  for (int i = start_row; i < end_row; ++i)
+  {
+    get_r(h, i, i);
+    log_det += log(h);
+  }
+  return log_det;
+}
+
+template <class ZT, class FT>
+FT MatGSOInterface<ZT, FT>::get_slide_potential(int start_row, int end_row, int block_size)
+{
+  FT potential = 0.0;
+  int p        = (end_row - start_row) / block_size;
+  if ((end_row - start_row) % block_size == 0)
+  {
+    --p;
+  }
+  for (int i = 0; i < p; ++i)
+  {
+    potential += (p - i) * get_log_det(i * block_size, (i + 1) * block_size);
+  }
+  return potential;
+}
+
+template <class FT>
+void adjust_radius_to_gh_bound(FT &max_dist, long max_dist_expo, int block_size, const FT &root_det,
+                               double gh_factor)
+{
+  double t = (double)block_size / 2.0 + 1;
+  t        = lgamma(t);
+  t        = pow(M_E, t * 2.0 / (double)block_size);
+  t        = t / M_PI;
+  FT f     = t;
+  f        = f * root_det;
+  f.mul_2si(f, -max_dist_expo);
+  f = f * gh_factor;
+  if (f < max_dist)
+  {
+    max_dist = f;
+  }
+}
+
+template class MatGSOInterface<Z_NR<long>, FP_NR<double>>;
+template class MatGSOInterface<Z_NR<double>, FP_NR<double>>;
+template class MatGSOInterface<Z_NR<mpz_t>, FP_NR<double>>;
+template void adjust_radius_to_gh_bound<FP_NR<double>>(FP_NR<double> &max_dist, long max_dist_expo,
+                                                       int block_size,
+                                                       const FP_NR<double> &root_det,
+                                                       double gh_factor);
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class MatGSOInterface<Z_NR<long>, FP_NR<long double>>;
+template class MatGSOInterface<Z_NR<double>, FP_NR<long double>>;
+template class MatGSOInterface<Z_NR<mpz_t>, FP_NR<long double>>;
+template void adjust_radius_to_gh_bound<FP_NR<long double>>(FP_NR<long double> &max_dist,
+                                                            long max_dist_expo, int block_size,
+                                                            const FP_NR<long double> &root_det,
+                                                            double gh_factor);
+
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class MatGSOInterface<Z_NR<long>, FP_NR<dd_real>>;
+template class MatGSOInterface<Z_NR<double>, FP_NR<dd_real>>;
+template class MatGSOInterface<Z_NR<mpz_t>, FP_NR<dd_real>>;
+template void adjust_radius_to_gh_bound<FP_NR<dd_real>>(FP_NR<dd_real> &max_dist,
+                                                        long max_dist_expo, int block_size,
+                                                        const FP_NR<dd_real> &root_det,
+                                                        double gh_factor);
+template class MatGSOInterface<Z_NR<long>, FP_NR<qd_real>>;
+template class MatGSOInterface<Z_NR<double>, FP_NR<qd_real>>;
+template class MatGSOInterface<Z_NR<mpz_t>, FP_NR<qd_real>>;
+template void adjust_radius_to_gh_bound<FP_NR<qd_real>>(FP_NR<qd_real> &max_dist,
+                                                        long max_dist_expo, int block_size,
+                                                        const FP_NR<qd_real> &root_det,
+                                                        double gh_factor);
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class MatGSOInterface<Z_NR<long>, FP_NR<dpe_t>>;
+template class MatGSOInterface<Z_NR<double>, FP_NR<dpe_t>>;
+template class MatGSOInterface<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+template void adjust_radius_to_gh_bound<FP_NR<dpe_t>>(FP_NR<dpe_t> &max_dist, long max_dist_expo,
+                                                      int block_size, const FP_NR<dpe_t> &root_det,
+                                                      double gh_factor);
+#endif
+
+template class MatGSOInterface<Z_NR<long>, FP_NR<mpfr_t>>;
+template class MatGSOInterface<Z_NR<double>, FP_NR<mpfr_t>>;
+template class MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+template void adjust_radius_to_gh_bound<FP_NR<mpfr_t>>(FP_NR<mpfr_t> &max_dist, long max_dist_expo,
+                                                       int block_size,
+                                                       const FP_NR<mpfr_t> &root_det,
+                                                       double gh_factor);
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/gso_interface.h b/fplll/gso_interface.h
new file mode 100644 (file)
index 0000000..424b4a1
--- /dev/null
@@ -0,0 +1,837 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2019 Koen de Boer
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_GSOInterface_H
+#define FPLLL_GSOInterface_H
+
+#include "nr/matrix.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+enum MatGSOInterfaceFlags
+{
+  GSO_DEFAULT       = 0,
+  GSO_INT_GRAM      = 1,
+  GSO_ROW_EXPO      = 2,
+  GSO_OP_FORCE_LONG = 4
+};
+
+/**
+   @brief Use Gaussian Heuristic to compute a bound on the length of the
+   shortest vector
+
+   @param max_dist         output
+   @param max_dist_expo    exponent of output
+   @param block_size       block size
+   @param root_det         root determinant of lattice
+   @param gh_factor        factor by which to multiple bound
+
+   @return new bound if `gh_factor * GH` is shorter than `max_dist`, otherwise `max_dist` is
+   unchanged.
+*/
+
+template <class FT>
+void adjust_radius_to_gh_bound(FT &max_dist, long max_dist_expo, int block_size, const FT &root_det,
+                               double gh_factor);
+
+/**
+ * MatGSOInterface provides an interface for performing elementary operations on a basis
+ * and computing its Gram matrix and its Gram-Schmidt orthogonalization.
+ * The Gram-Schmidt coefficients are computed on demand. The object keeps track
+ * of which coefficients are valid after each row operation.
+ */
+
+template <class ZT, class FT> class MatGSOInterface
+{
+public:
+  /**
+   * Constructor.
+   * The precision of FT must be defined before creating an instance of the
+   * class and must remain the same until the object is destroyed (or no longer
+   * needed).
+   * @param b
+   *   The matrix on which row operations are performed. It must not be empty.
+   * @param u
+   *   If u is not empty, operations on b are also done on u
+   *   (in this case both must have the same number of rows).
+   *   If u is initially the identity matrix, multiplying transform by the
+   *   initial basis gives the current basis.
+   * @param u_inv_t
+   *   Inverse transform (should be empty, which disables the computation, or
+   *   initialized with identity matrix). It works only if u is not empty.
+   * @param enable_int_gram
+   *   If true, coefficients of the Gram matrix are computed with exact integer
+   *   arithmetic (type ZT). Otherwise, they are computed in floating-point
+   *   (type FT). Note that when exact arithmetic is used, all coefficients of
+   *   the first n_known_rows are continuously updated, whereas in floating-point,
+   *   they are computed only on-demand. This option cannot be enabled if
+   *   enable_row_expo=true.
+   * @param enable_row_expo
+   *   If true, each row of b is normalized by a power of 2 before doing
+   *   conversion to floating-point, which hopefully avoids some overflows.
+   *   This option cannot be enabled if enable_int_gram=true and works only
+   *   with FT=double and FT=long double. It is useless and MUST NOT be used
+   *   for FT=dpe or FT=mpfr_t.
+   * @param row_op_force_long
+   *   Affects the behaviour of row_addmul(_we).
+   *   See the documentation of row_addmul.
+   */
+  virtual ~MatGSOInterface();
+
+  MatGSOInterface(Matrix<ZT> &arg_u, Matrix<ZT> &arg_uinv_t, int flags)
+      : enable_int_gram(flags & GSO_INT_GRAM), enable_row_expo(flags & GSO_ROW_EXPO),
+        enable_transform(arg_u.get_rows() > 0), enable_inverse_transform(arg_uinv_t.get_rows() > 0),
+        row_op_force_long(flags & GSO_OP_FORCE_LONG), u(arg_u), u_inv_t(arg_uinv_t),
+        n_known_rows(0), n_source_rows(0), n_known_cols(0), cols_locked(false), alloc_dim(0),
+        gptr(nullptr)
+  {
+#ifdef DEBUG
+    row_op_first = row_op_last = -1;
+#endif
+  }
+
+  /**
+   * Number of rows of b (dimension of the lattice).
+   * Can be changed with create_row or remove_last_row.
+   */
+  int d;
+
+  /**
+   * Basis of the lattice
+   */
+  // Matrix<ZT> &b;
+
+  /**
+   * The next five functions make calls
+   * from lll.cpp and bkz.cpp indirect.
+   */
+
+  /**
+   * Returns || sum_i  x_i b_i ||^2 on vectorial input (x_i)_i
+   * in the Gram version, it returns x^T G x
+   */
+  virtual ZT &sqnorm_coordinates(ZT &sqnorm, vector<ZT> coordinates) = 0;
+
+  /**
+   * Returns maximum exponent of b. In the gram
+   * version it returns a half times the
+   * maximum exponent of g.
+   */
+  virtual long get_max_exp_of_b() = 0;
+
+  /** Returns true if the ith row
+   *  of b is zero. In the gram version
+   * it returns true if g(i,i) is zero.
+   */
+  virtual bool b_row_is_zero(int i) = 0;
+
+  /** Returns number of columns of b. In
+   *  the gram version it returns the number
+   *  of columns of g.
+   */
+  virtual int get_cols_of_b() = 0;
+
+  /** Returns number of rows of b. In
+   * the gram version it returns the number
+   * of of rows of g. This function is made
+   * to reduce code repetition (dump_mu/dump_r)
+   */
+  virtual int get_rows_of_b() = 0;
+
+  /** Negates the ith row of b. Needed
+   * by dbkz_postprocessing.
+   */
+  virtual void negate_row_of_b(int i) = 0;
+
+  /**
+   * When enable_row_expo=true, row_expo[i] is the smallest non-negative integer
+   * such that b(i, j) &lt;= 2^row_expo[i] for all j. Otherwise this array is empty.
+   */
+  vector<long> row_expo;
+
+  /**
+   * Must be called before a sequence of row_addmul(_we).
+   */
+  inline void row_op_begin(int first, int last);
+
+  /**
+   * Must be called after a sequence of row_addmul(_we). This invalidates the
+   * i-th line of the GSO.
+   */
+  void row_op_end(int first, int last);
+
+  /**
+   * Returns Gram matrix coefficients (0 &lt;= i &lt; n_known_rows and
+   * 0 &lt;= j &lt;= i).
+   * If enable_row_expo=false, returns the dot product (b[i], b[j]).
+   * If enable_row_expo=true, returns
+   * (b[i], b[j]) / 2 ^ (row_expo[i] + row_expo[j]).
+   *
+   * Returns reference to `f`.
+   */
+  virtual FT &get_gram(FT &f, int i, int j) = 0;
+
+  /**
+   * Returns *integer* Gram matrix coefficients (0 &lt;= i &lt; n_known_rows and
+   * 0 &lt;= j &lt;= i).
+   * If (enable_int_gram = true), it returns the i,j-th coordinate of the Gram matrix
+   * else it computes the inner product of b_i and b_j
+   * Returns reference to `z`.
+   */
+
+  virtual ZT &get_int_gram(ZT &z, int i, int j) = 0;
+
+  /**
+   * Returns the mu matrix
+   * Coefficients of the Gram Schmidt Orthogonalization
+   * (lower triangular matrix)
+   * mu(i, j) = r(i, j) / ||b*_j||^2.
+   */
+  const Matrix<FT> &get_mu_matrix() { return mu; }
+
+  /**
+   * Returns the r matrix
+   * Coefficients of the Gram Schmidt Orthogonalization
+   * (lower triangular matrix)
+   */
+  const Matrix<FT> &get_r_matrix() { return r; }
+
+  /**
+   * Returns the g matrix (Z_NR version of r)
+   * Coefficients of the Gram Schmidt Orthogonalization
+   * (lower triangular matrix)
+   */
+  const Matrix<ZT> &get_g_matrix()
+  {
+    if (gptr == nullptr)
+    {
+      throw std::runtime_error("Error: gptr == nullpointer.");
+    }
+    return *gptr;
+  }
+
+  /**
+   * Returns f = mu(i, j) and expo such that
+   * f * 2^expo = (b_i, b*_j) / ||b*_j||^2.
+   * If enable_row_expo=false, expo is always 0.
+   * If enable_row_expo=true, expo = row_expo[i] - row_expo[j]
+   * It is assumed that mu(i, j) is valid.
+   * The returned value is a reference to the coefficient of the internal
+   * matrix, which may change if the matrix is modified.
+   */
+  inline const FT &get_mu_exp(int i, int j, long &expo);
+  inline const FT &get_mu_exp(int i, int j);
+
+  /**
+   * Returns f = (b_i, b*_j) / ||b*_j||^2.
+   *
+   * Returns reference to `f`.
+   */
+  inline FT &get_mu(FT &f, int i, int j);
+
+  /**
+   * Return maximum bstar_i for all i
+   */
+  ZT get_max_gram();
+
+  /**
+   * Return maximum bstar_i for all i
+   */
+  FT get_max_bstar();
+
+  /**
+   * Returns f = r(i, j) and expo such that (b_i, b*_j) = f * 2^expo.
+   * If enable_row_expo=false, expo is always 0.
+   * If enable_row_expo=true, expo = row_expo[i] + row_expo[j]
+   * If is assumed that r(i, j) is valid.
+   * The returned value is a reference to the coefficient of the internal
+   * matrix, which may change if the matrix is modified
+   */
+  inline const FT &get_r_exp(int i, int j, long &expo);
+  inline const FT &get_r_exp(int i, int j);
+
+  /**
+   * Returns f = (b_i, b*_j).
+   *
+   * Returns reference to `f`.
+   */
+  inline FT &get_r(FT &f, int i, int j);
+
+  /**
+   * Returns expo such that mu(i, j) &lt; 2^expo for all j &lt; n_columns.
+   * It is assumed that mu(i, j) is valid for all j &lt; n_columns.
+   */
+  long get_max_mu_exp(int i, int n_columns);
+
+  /**
+   * Updates r(i, j) and mu(i, j) if needed for all j in [0, last_j].
+   * All coefficients of r and mu above the i-th row in columns
+   * [0, min(last_j, i - 1)] must be valid.
+   * If i=n_known_rows, n_known_rows is increased by one.
+   */
+  bool update_gso_row(int i, int last_j);
+
+  /**
+   * Updates r(i, j) and mu(i, j) if needed for all j.
+   * All coefficients of r and mu above the i-th row in columns
+   * [0, min(last_j, i - 1)] must be valid.
+   * If i=n_known_rows, n_known_rows is increased by one.
+   */
+  inline bool update_gso_row(int i);
+
+  /**
+   * Updates all GSO coefficients (mu and r).
+   */
+  inline bool update_gso();
+
+  /**
+   * Allows row_addmul(_we) for all rows even if the GSO has never been computed.
+   */
+  inline void discover_all_rows();
+
+  /**
+   * Sets the value of r(i, j). During the execution of LLL, some coefficients
+   * are computed by the algorithm. They are set directly to avoid double
+   * computation.
+   */
+  void set_r(int i, int j, FT &f);
+
+  /**
+   * Row old_r becomes row new_r and intermediate rows are shifted.
+   * If new_r < old_r, then old_r must be < n_known_rows.
+   */
+  virtual void move_row(int old_r, int new_r) = 0;
+
+  /**
+   * b[i] := b[i] + x * b[j].
+   * After one or several calls to row_addmul, row_op_end must be called.
+   * Special cases |x| &lt;= 1 and |x| &lt;= LONG_MAX are optimized.
+   * x should be an integer.
+   * If row_op_force_long=true, x is always converted to (2^expo * long) instead
+   * of (2^expo * ZT), which is faster if ZT=mpz_t but might lead to a loss of
+   * precision (in LLL, more Babai iterations are needed).
+   */
+  virtual inline void row_addmul(int i, int j, const FT &x);
+
+  /**
+   * b[i] := b[i] + x * 2^expo_add * b[j].
+   * After one or several calls to row_addmul_we, row_op_end must be called.
+   * Special cases |x| &lt;= 1 and |x| &lt;= LONG_MAX are optimized.
+   * x should be an integer.
+   * If row_op_force_long=true, x is always converted to (2^expo * long) instead
+   * of (2^expo * ZT), which is faster if ZT=mpz_t but might lead to a loss of
+   * precision (in LLL, more Babai iterations are needed).
+   */
+
+  virtual void row_addmul_we(int i, int j, const FT &x, long expo_add) = 0;
+
+  // b[i] += b[j] / b[i] -= b[j] (i > j)
+  virtual void row_add(int i, int j) = 0;
+  virtual void row_sub(int i, int j) = 0;
+
+  /**
+   * Early reduction
+   * Allowed when enable_int_gram=false,
+   * n_known_cols large enough to compute all the g(i,j)
+   */
+  void lock_cols();
+  void unlock_cols();
+
+  /**
+   * Adds a zero row to b (and to u if enableTranform=true). One or several
+   * operations can be performed on this row with row_addmul(_we), then
+   * row_op_end must be called.
+   * Do not use if enable_inverse_transform=true.
+   */
+  inline void create_row();
+  virtual void create_rows(int n_new_rows) = 0;
+
+  /**
+   * Removes the last row of b (and of u if enable_transform=true).
+   * Do not use if enable_inverse_transform=true.
+   */
+  inline void remove_last_row();
+  virtual void remove_last_rows(int n_removed_rows) = 0;
+
+  /**
+   * Executes transformation by creating extra rows,
+   * Calculating new entries, swapping the new rows with previous ones,
+   * And then removing the excess rows
+   */
+  void apply_transform(const Matrix<FT> &transform, int src_base, int target_base);
+
+  void apply_transform(const Matrix<FT> &transform, int src_base)
+  {
+    apply_transform(transform, src_base, src_base);
+  }
+
+  /**
+   * Dump mu matrix to parameter `mu`.
+
+   * When a double pointer is provided the caller must ensure it can hold
+   * block_size^2 entries. When a vector is provided new entries are pushed to
+   * the end. In particular, existing entries are not overwritten or cleared.
+   *
+   * @note No row discovery or update is performed prior to dumping the matrix.
+   */
+
+  inline void dump_mu_d(double *mu, int offset = 0, int block_size = -1);
+  inline void dump_mu_d(vector<double> mu, int offset = 0, int block_size = -1);
+
+  /**
+   * Dump r vector to parameter `r`.
+
+   * When a double pointer is provided the caller must ensure it can hold
+   * block_size entries. When a vector is provided new entries are pushed to the
+   * end. In particular, existing entries are not overwritten or cleared.
+   *
+   * @note No row discovery or update is performed prior to dumping the matrix.
+   */
+
+  inline void dump_r_d(double *r, int offset = 0, int block_size = -1);
+  inline void dump_r_d(vector<double> &r, int offset = 0, int block_size = -1);
+
+  /**
+     @brief Return slope of the curve fitted to the lengths of the vectors from
+     `start_row` to `stop_row`.
+
+     The slope gives an indication of the quality of the basis.
+
+     @param start_row start row (inclusive)
+     @param stop_row  stop row (exclusive)
+     @return
+  */
+
+  double get_current_slope(int start_row, int stop_row);
+
+  /**
+     @brief Return (squared) root determinant of the basis.
+
+     @param start_row start row (inclusive)
+     @param end_row   stop row (exclusive)
+  */
+
+  FT get_root_det(int start_row, int end_row);
+
+  /**
+     @brief Return log of the (squared) determinant of the basis.
+
+     @param start_row start row (inclusive)
+     @param end_row   stop row (exclusive)
+  */
+
+  FT get_log_det(int start_row, int end_row);
+
+  /**
+     @brief Return slide potential of the basis
+
+     @param start_row  start row (inclusive)
+     @param end_row    stop row (exclusive)
+     @param block_size block size
+  */
+
+  FT get_slide_potential(int start_row, int end_row, int block_size);
+
+  /**
+   * Prints mu,r and g matrix to ostream os.
+   *
+   */
+  inline void print_mu_r_g(ostream &os);
+
+  /** Exact computation of dot products (i.e. with type ZT instead of FT) */
+  const bool enable_int_gram;
+
+  /** Normalization of each row of b by a power of 2. */
+  const bool enable_row_expo;
+
+  /** Computation of the transform matrix. */
+  const bool enable_transform;
+
+  /**
+   * Computation of the inverse transform matrix (transposed).
+   * This works only if enable_transform=true.
+   * This matrix has very large coefficients, computing it is slow.
+   */
+  const bool enable_inverse_transform;
+
+  /**
+   * Changes the behaviour of row_addmul(_we).
+   * See the description of row_addmul.
+   */
+  const bool row_op_force_long;
+
+protected:
+  /** Allocates matrices and arrays whose size depends on d (all but tmp_col_expo).
+   * When enable_int_gram=false, initializes bf.
+   */
+  virtual void size_increased() = 0;
+
+  /* Increases known rows and invalidates the last
+   * gram row (gf) when enable_int_gram is false.
+   * When enable_int_gram is true, it computes
+   * the new inner products for the last gram
+   * row (g).
+   */
+  virtual void discover_row() = 0;
+
+  // Marks mu(i, j) and r(i, j) as invalid for j >= new_valid_cols
+  void invalidate_gso_row(int i, int new_valid_cols = 0);
+  /*  Upates the i-th row of bf. It does not invalidate anything, so the caller
+   * must take into account that it might change row_expo.
+   */
+  virtual void update_bf(int i) = 0;
+  /* Marks g(i, j) for all j <= i (but NOT for j > i) */
+  virtual void invalidate_gram_row(int i) = 0;
+
+  // b[i] <- b[i] + x * b[j] (i > j)
+  virtual void row_addmul_si(int i, int j, long x) = 0;
+  // b[i] <- b[i] + (2^expo * x) * b[j] (i > j)
+
+  // TODO check if these must be scratched here!
+  // virtual void row_addmul_si_2exp(int i, int j, long x, long expo) = 0;
+  // virtual void row_addmul_2exp(int i, int j, const ZT &x, long expo) = 0;
+
+public:
+  // made public for lll.cpp and bkz.cpp
+  void symmetrize_g();
+
+  // Made public for bkz.cpp (dbkz_postprocessing)
+  // b[i] <-> b[j] (i < j)
+  virtual void row_swap(int i, int j) = 0;
+
+protected:
+  inline ZT &sym_g(int i, int j);
+
+  /* Floating-point representation of the basis. It is used when
+     enable_int_gram=false. */
+  Matrix<FT> bf;
+
+  Matrix<ZT> &u;        // Transform
+  Matrix<ZT> &u_inv_t;  // Transposed inverse transform
+
+  // init_row_size[i] = (last non-zero column in the i-th row of b) + 1
+  vector<int> init_row_size;
+
+  // bf[i], g[i], gf[i], mu[i] and r[i] are invalid for i >= n_known_rows
+  int n_known_rows;
+  int n_source_rows;  // Known rows before the beginning of early reduction
+  int n_known_cols;
+  bool cols_locked;
+  int alloc_dim;
+
+  /**
+   * Coefficients of the Gram-Schmidt orthogonalization
+   * (lower triangular matrix).
+   *
+   * If enable_row_expo=false,
+   * mu(i, j) = (b_i, b*_j) / ||b*_j||^2.
+   * If enable_row_expo=true,
+   * mu(i, j) = (b_i, b*_j) / ||b*_j||^2  /  2 ^ (row_expo[i] - row_expo[j]).
+   *
+   * mu(i, j) is valid if 0 &lt;= i &lt; n_known_rows (&lt;= d) and
+   * 0 &lt;= j &lt; min(gso_valid_cols[i], i)
+   */
+  Matrix<FT> mu;
+
+  /**
+   * Coefficients of the Gram-Schmidt orthogonalization
+   * (lower triangular matrix).
+   *
+   * If enable_row_expo=false,
+   * r(i, j) = (b_i, b*_j).
+   * If enable_row_expo=true,
+   * r(i, j) = (b_i, b*_j)  /  2 ^ (row_expo[i] + row_expo[j]).
+   *
+   * r(i, j) is valid if 0 &lt;= i &lt; n_known_rows (&lt;= d) and
+   * 0 &lt;= j &lt; gso_valid_cols[i] (&lt;= i + 1).
+   */
+  Matrix<FT> r;
+
+public:
+  /** Replaced the gram matrix by a pointer. In the gso-class
+   * there is also a matrix g, and in the constructor gptr is
+   * defined to be equal to &g. In the ggso-class a gram matrix
+   * is given (arg_g), and gptr is defined as &arg_g.
+   */
+
+  /* Gram matrix (dot products of basis vectors, lower triangular matrix)
+   g(i, j) is valid if 0 <= i < n_known_rows and j <= i */
+  Matrix<ZT> *gptr;
+  //  Matrix<ZT> g;
+
+protected:
+  Matrix<FT> gf;
+
+  /* Number of valid columns of the i-th row of mu and r.
+     Valid only for 0 <= i < n_known_rows */
+  vector<int> gso_valid_cols;
+
+  /* Used by update_gso_row (+ update_gso), get_max_mu_exp and row_addmul_we. */
+  FT ftmp1, ftmp2;
+  /* Used by row_add, row_sub, row_addmul_si_2exp, row_addmul_2exp and
+     indirectly by row_addmul. */
+  ZT ztmp1;
+  /* Used by row_addmul. */
+  ZT ztmp2;
+  /* Used by update_bf. */
+  vector<long> tmp_col_expo;
+
+#ifdef DEBUG
+  /* Used only in debug mode. */
+  int row_op_first, row_op_last;
+  bool in_row_op_range(int i) { return i >= row_op_first && i < row_op_last; }
+#endif
+};
+
+template <class ZT, class FT> inline MatGSOInterface<ZT, FT>::~MatGSOInterface()
+{
+  // delete gptr;
+}
+
+template <class ZT, class FT> inline void MatGSOInterface<ZT, FT>::symmetrize_g()
+{
+  if (gptr == nullptr)
+  {
+    throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+  }
+  Matrix<ZT> &gr = *gptr;
+  for (int i = 0; i < d; i++)
+  {
+    for (int j = 0; j < d; j++)
+    {
+      gr(i, j) = sym_g(i, j);
+    }
+  }
+}
+
+template <class ZT, class FT> inline void MatGSOInterface<ZT, FT>::print_mu_r_g(ostream &os)
+{
+  os << "mu = " << endl;
+  mu.print(os);
+  os << endl << "r = " << endl;
+  r.print(os);
+  os << endl;
+  if (gptr != nullptr)
+  {
+    os << "g = " << endl;
+    symmetrize_g();
+    gptr->print(os);
+    os << endl << endl;
+  }
+}
+
+template <class ZT, class FT> inline ZT &MatGSOInterface<ZT, FT>::sym_g(int i, int j)
+{
+  if (gptr == nullptr)
+  {
+    throw std::runtime_error("Error: gptr is equal to the nullpointer.");
+  }
+  Matrix<ZT> &gr = *gptr;
+  return (i >= j) ? gr(i, j) : gr(j, i);
+}
+
+template <class ZT, class FT>
+inline const FT &MatGSOInterface<ZT, FT>::get_mu_exp(int i, int j, long &expo)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j < i && j < gso_valid_cols[i] &&
+                    !in_row_op_range(i));
+  if (enable_row_expo)
+    expo = row_expo[i] - row_expo[j];
+  else
+    expo = 0;
+  return mu(i, j);
+}
+
+template <class ZT, class FT> inline const FT &MatGSOInterface<ZT, FT>::get_mu_exp(int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j < i && j < gso_valid_cols[i] &&
+                    !in_row_op_range(i));
+  return mu(i, j);
+}
+
+template <class ZT, class FT> inline FT &MatGSOInterface<ZT, FT>::get_mu(FT &f, int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j < i && j < gso_valid_cols[i] &&
+                    !in_row_op_range(i));
+  f = mu(i, j);
+  if (enable_row_expo)
+    f.mul_2si(f, row_expo[i] - row_expo[j]);
+  return f;
+}
+
+template <class ZT, class FT>
+inline const FT &MatGSOInterface<ZT, FT>::get_r_exp(int i, int j, long &expo)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j < gso_valid_cols[i] &&
+                    !in_row_op_range(i));
+  if (enable_row_expo)
+    expo = row_expo[i] + row_expo[j];
+  else
+    expo = 0;
+  return r(i, j);
+}
+
+template <class ZT, class FT> inline const FT &MatGSOInterface<ZT, FT>::get_r_exp(int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j < gso_valid_cols[i] &&
+                    !in_row_op_range(i));
+  return r(i, j);
+}
+
+template <class ZT, class FT> inline FT &MatGSOInterface<ZT, FT>::get_r(FT &f, int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && j >= 0 && j < gso_valid_cols[i] &&
+                    !in_row_op_range(i));
+  f = r(i, j);
+  if (enable_row_expo)
+    f.mul_2si(f, row_expo[i] + row_expo[j]);
+  return f;
+}
+
+template <class ZT, class FT> inline bool MatGSOInterface<ZT, FT>::update_gso_row(int i)
+{
+  return update_gso_row(i, i);
+}
+
+template <class ZT, class FT> inline void MatGSOInterface<ZT, FT>::set_r(int i, int j, FT &f)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < n_known_rows && gso_valid_cols[i] >= j && j >= 0 &&
+                    j < n_source_rows);
+  r(i, j) = f;
+  if (gso_valid_cols[i] == j)
+    gso_valid_cols[i]++;
+}
+
+template <class ZT, class FT>
+inline void MatGSOInterface<ZT, FT>::row_addmul(int i, int j, const FT &x)
+{
+  row_addmul_we(i, j, x, 0);
+}
+
+template <class ZT, class FT> inline void MatGSOInterface<ZT, FT>::create_row() { create_rows(1); }
+
+template <class ZT, class FT> inline void MatGSOInterface<ZT, FT>::remove_last_row()
+{
+  remove_last_rows(1);
+}
+
+template <class ZT, class FT> inline void MatGSOInterface<ZT, FT>::discover_all_rows()
+{
+  while (n_known_rows < d)
+    discover_row();
+}
+
+template <class ZT, class FT> inline bool MatGSOInterface<ZT, FT>::update_gso()
+{
+  for (int i = 0; i < d; i++)
+  {
+    if (!update_gso_row(i))
+      return false;
+  }
+  return true;
+}
+
+#ifdef DEBUG
+template <class ZT, class FT> inline void MatGSOInterface<ZT, FT>::row_op_begin(int first, int last)
+{
+  FPLLL_DEBUG_CHECK(row_op_first == -1);
+  row_op_first = first;
+  row_op_last  = last;
+}
+#else
+template <class ZT, class FT>
+inline void MatGSOInterface<ZT, FT>::row_op_begin(int /*first*/, int /*last*/)
+{
+}
+#endif
+
+template <class ZT, class FT>
+inline void MatGSOInterface<ZT, FT>::dump_mu_d(double *mu, int offset, int block_size)
+{
+  FT e;
+  if (block_size <= 0)
+  {
+    block_size = get_rows_of_b();
+  }
+
+  for (int i = 0; i < block_size; ++i)
+  {
+    for (int j = 0; j < block_size; ++j)
+    {
+      get_mu(e, offset + i, offset + j);
+      mu[i * block_size + j] = e.get_d();
+    }
+  }
+}
+
+template <class ZT, class FT>
+inline void MatGSOInterface<ZT, FT>::dump_mu_d(vector<double> mu, int offset, int block_size)
+{
+  FT e;
+  if (block_size <= 0)
+  {
+    block_size = get_rows_of_b();
+  }
+
+  mu.reserve(mu.size() + block_size * block_size);
+  for (int i = 0; i < block_size; ++i)
+  {
+    for (int j = 0; j < block_size; ++j)
+    {
+      get_mu(e, offset + i, offset + j);
+      mu.push_back(e.get_d());
+    }
+  }
+}
+
+template <class ZT, class FT>
+inline void MatGSOInterface<ZT, FT>::dump_r_d(double *r, int offset, int block_size)
+{
+  FT e;
+  if (block_size <= 0)
+  {
+    block_size = get_rows_of_b();
+  }
+
+  for (int i = 0; i < block_size; ++i)
+  {
+    get_r(e, offset + i, offset + i);
+    r[i] = e.get_d();
+  }
+}
+
+template <class ZT, class FT>
+inline void MatGSOInterface<ZT, FT>::dump_r_d(vector<double> &r, int offset, int block_size)
+{
+  FT e;
+  if (block_size <= 0)
+  {
+    block_size = get_rows_of_b();
+  }
+
+  r.reserve(r.size() + block_size * block_size);
+  for (int i = 0; i < block_size; ++i)
+  {
+    get_r(e, offset + i, offset + i);
+    r.push_back(e.get_d());
+  }
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/hlll.cpp b/fplll/hlll.cpp
new file mode 100644 (file)
index 0000000..646588a
--- /dev/null
@@ -0,0 +1,668 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2017-1018 Laurent Grémy.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Template source file */
+
+#include "hlll.h"
+#include "util.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class ZT, class FT> bool HLLLReduction<ZT, FT>::hlll()
+{
+  /* TODO: we do not use a completely correct value for delta. We must use a value
+   * delta_ in (delta + 2^(-p + p0), 1 - 2^(-p + p0)). This implies that, with the
+   * fast method, we cannot guarantee the HLLL-reduction w.r.t delta.
+   *
+   * A careful analysis about how to set delta may help to obtain this guarantee.
+   * Experimentally, the delta used during the computation must be equal to
+   * (delta + (0.01 or 0.02) to have an basis which is HLLL-reduced w.r.t delta.
+   */
+  int start_time = cputime();
+  // True if the corresponding vector is weak size-reduced
+  bool status_sr = true;
+
+  if (verbose)
+  {
+    // Print the parameters of the computation
+    print_params();
+    // Discover b[0]
+    cerr << "Discovering vector 1/" << m.get_d() << " cputime=" << cputime() - start_time << endl;
+  }
+
+  // Set R[0] and bf[0] to b[0], precompute ||b[0]||^2
+  m.refresh_R_bf(0);
+  // Compute R[0]
+  m.update_R_last(0);  // In this case, update_R(0) is exactly equal to update_R_last(0)
+  // Precompute dR[0]: R[0]^2 * delta = dR[0] * 2^(2*row_expo[0])
+  compute_dR(0);
+  // Precompute eR[0]: R[0] * eta = eR[0] * 2^row_expo[0]
+  compute_eR(0);
+
+  int k = 1;
+  // Remember which was the largest b[k_max] that is tried to be size-reduced
+  int k_max = 1;
+
+  int prev_k = -1;
+  vector<FT> prev_R;
+  vector<long> prev_expo;
+  prev_R.resize(m.get_d());
+  prev_expo.resize(m.get_d());
+  // prev_R[0] is never used: m.get_R(prev_R[0], 0, 0, prev_expo[0]);
+
+  if (verbose)
+  {
+    // Discover b[1]
+    cerr << "Discovering vector 2/" << m.get_d() << " cputime=" << cputime() - start_time << endl;
+  }
+
+  // Set R[1] and bf[1] to b[1], precompute ||b[1]||^2
+  m.refresh_R_bf(1);
+
+  while (true)
+  {
+    // Size reduce b[k] thanks to b[0] to b[k - 1]
+    size_reduction(k, k, 0);
+    status_sr = verify_size_reduction(k);  // b[kappa] should be size_reduced. Verify it.
+    if (!status_sr)
+      return set_status(RED_HLLL_SR_FAILURE);
+
+    if (lovasz_test(k))
+    {
+      // Fully compute R[k], since all the coefficient except one of R[k] were computed during
+      // size_reduction.
+      m.update_R_last(k);
+      // Compute delta_ * R(k, k)^2 = dR[k] * 2^(2*row_expo[k])
+      compute_dR(k);
+      // Compute eta * R(k, k) = eR[k] * 2^row_expo[k]
+      compute_eR(k);
+
+      // Heuristic precision check : when R(kappa-1,kappa-1) increases in a 2x2 up and down (see
+      // hplll)
+      if (prev_k == k + 1)
+      {
+        // R(k, k) = ftmp0 * 2^expo0
+        m.get_R(ftmp0, k, k, expo0);
+        ftmp1.mul_2si(prev_R[k], prev_expo[k] - expo0);
+
+        if (ftmp0.cmp(ftmp1) > 0)
+        {
+          // cerr << "Anomaly: the norm increases for kappa = " << k << endl;
+          return set_status(RED_HLLL_NORM_FAILURE);
+        }
+      }
+
+      prev_k = k;
+      // R(k, k) = prev_R[k] * 2^prev_expo[k]
+      m.get_R(prev_R[k], k, k, prev_expo[k]);
+
+      // b[k] is size reduced, now, size reduce b[k + 1]
+      k++;
+
+      if (k < m.get_d())
+      {
+        if (k > k_max)
+        {
+          // First time b[k] is discovered
+          if (verbose)
+          {
+            cerr << "Discovering vector " << k + 1 << "/" << m.get_d()
+                 << " cputime=" << cputime() - start_time << endl;
+          }
+          k_max = k;
+          // Set R[k] and bf[k] to b[k], precompute ||b[k]||^2
+          m.refresh_R_bf(k);
+        }
+        else
+          // Set R[k] to b[k]. Indeed, it is not necessary to refresh bf[k], since b[k] has not
+          // changed. However, it is mandatory to refresh R[k], since b[0] to b[k - 1] may have
+          // changed, and then, it is necessary to recompute R[k].
+          m.refresh_R(k);
+      }
+      else
+        // if k == m.get_d(), then b[k] does not exist and the computation is ended
+        return set_status(RED_SUCCESS);
+    }
+    else
+    {
+      // Swap b[k-1] and b[k] and other usefull variables
+      m.swap(k - 1, k);
+      prev_k = k;
+
+      if (k - 1 == 0)
+      {
+        // Set R[0] to b[0] (bf[0] and other usefull variables were swaped previously)
+        m.refresh_R(0);
+        // Compute R[0]
+        m.update_R_last(0);  // In this case, update_R(0) is exactly equal to update_R_last(0)
+        // Precompute dR[0]: R[0]^2 * delta = dR[0] * 2^(2*row_expo[0])
+        compute_dR(0);
+        // Precompute eR[0]: R[0] * eta = eR[0] * 2^row_expo[0]
+        compute_eR(0);
+
+        // Set R[1] to b[1] (bf[1] and other usefull variables were swaped previously)
+        m.refresh_R(1);
+        k = 1;
+      }
+      else
+      {
+        // Size reduce b[k - 1]
+        k--;
+        // Since b[k] was not changed, a previous computation of R[k][0..k-1] can be used instead of
+        // recomputing R[k][0..k-1], which is the only interesting part to begin the size reduction
+        // of b[k]
+        m.recover_R(k);
+      }
+    }
+  }
+}
+
+template <class ZT, class FT> bool HLLLReduction<ZT, FT>::lovasz_test(int k)
+{
+#ifndef MODIFIED_LOVASZ_TEST
+  // This Lovasz test is the one proposed in [MSV, ISSAC'09]
+  //
+  // Prior, we used another test, which is dR[k-1].cmp(R(k, k - 1)^2 + R(k, k)^2) <= 0, if R(k, k)
+  // is known (which is not the case here at this step of the computation, but can be computed
+  // thanks to sqrt(sum_{i=k}^{i<n}R(k, i)^2) (indices must be checked)). In the prior version,
+  // since R(k, k)^2 was known, we directly used the test. However, the test was probably not as
+  // accurate as what we hope. However, since this formula is used in hplll
+  // (https://github.com/gilvillard/hplll/releases), this can maybe be retested. An example of
+  // matrices that was not HLLL reduced because of a fail in this test can be generated thanks to
+  // latticegen -randseed 122 r 300 30000.
+  // Such a test can be activate by compiling with -DMODIFIED_LOVASZ_TEST
+
+  m.get_norm_square_b(ftmp0, k, expo0);  // ||b[k]||^2 = ftmp0 * 2^expo0
+  m.norm_square_R_row(ftmp1, k, 0, k - 1,
+                      expo1);  // sum_{i = 0}^{i < k - 1}R[k][i]^2 = ftmp1 * 2^expo1
+
+  // If this check is false, we need to reenable
+  // ftmp0.mul_2si(ftmp0, expo0 - expo1);
+  FPLLL_DEBUG_CHECK(expo0 == expo1);
+
+  ftmp1.sub(ftmp0, ftmp1);  // ||b[k]||^2 - sum_{i = 0}^{i < k - 1}R[k][i]^2 = ftmp1 * 2^expo1
+
+  expo0 = m.get_row_expo(k - 1);
+
+  // Here, delta * R(k - 1, k - 1)^2 = dR[k-1] * 2^(2*expo0). We want to compare
+  //   delta * R(k - 1, k - 1)^2 <= ||b[k]||^2 - sum_{i = 0}^{i < k - 1}R[k][i]^2
+  //   dR[k-1] * 2^(2*expo0) <= ftmp1 * 2^expo1
+  //   dR[k-1] <= ftmp1 * 2^(expo1 - 2*expo0)
+  ftmp1.mul_2si(ftmp1, expo1 - 2 * expo0);
+#else  // MODIFIED_LOVASZ_TEST
+  // Modified Lovasz test, following the comment above.
+  // FIXME: probably not maintained, especially if code is not compiled with -DMODIFIED_LOVASZ_TEST
+  // for a while.
+
+  m.norm_square_R_row(ftmp1, k, k, m.get_n(),
+                      expo1);  // sum_{i = k}^{i < n}R[k][i]^2 = ftmp1 * 2^expo1
+// Since we do not necessarily need expo1 (since expo0 and expo1 are correlated), we can
+// avoid to return it.
+#ifdef DEBUG
+  m.get_R(ftmp0, k, k - 1, expo0);  // R(k, k - 1) = ftmp0 * 2^expo0
+#else   // DEBUG
+  m.get_R(ftmp0, k, k - 1);  // R(k, k - 1) = ftmp0 * 2^(expo1 / 2)
+#endif  // DEBUG
+
+  ftmp0.mul(ftmp0, ftmp0);  // R(k, k - 1)^2 = ftmp0 * 2^(2 * expo 0)
+
+  // If this check is false, we need to reenable
+  // ftmp0.mul_2si(ftmp0, 2 * expo0 - expo1);  // 2 * expo0 since R(k, k-1)^2 = ftmp0 *
+  // (2^expo0)^2
+  FPLLL_DEBUG_CHECK(2 * expo0 == expo1);
+
+  ftmp1.add(ftmp0, ftmp1);  // sum_{i = k}^{i < n}R[k][i]^2 + R(k, k-1)^2 = ftmp1 * 2^expo1
+
+  expo0 = m.get_row_expo(k - 1);
+
+  // Here, delta * R(k - 1, k - 1)^2 = dR[k-1] * 2^(2*expo0). We want to compare
+  //   delta * R(k - 1, k - 1)^2 <= sum_{i = k}^{i < n}R[k][i]^2 + R(k, k-1)^2
+  //   dR[k-1] * 2^(2*expo0) <= ftmp1 * 2^expo1
+  //   dR[k-1] <= ftmp1 * 2^(expo1 - 2*expo0)
+  ftmp1.mul_2si(ftmp1, expo1 - 2 * expo0);
+#endif  // MODIFIED_LOVASZ_TEST
+
+  return (dR[k - 1].cmp(ftmp1) <= 0);
+}
+
+// TODO: there is maybe a problem. It seems that size_reduction is often (maybe always) stopped
+// because of reduced is false and almost never because the conditions about the norm of b[kappa]
+// are reached. This can be an issue.
+
+/*
+ * EXPLANATION:
+ *
+ * The incomplete size-reduction algorithm (Algorithm 3 in HLLL) performs several step to
+ * size-reduce b[kappa]. However, we remarked that the condition to break the do...until loop is
+ * not sufficient to guarantee that b[kappa] is weak size-reduced. We then modify the test, but now,
+ * this test seems never being reached (at least in this implementation) and we leave the
+ * size_reduction function almost only when b[kappa] remains unchanged, instead of leaving the loop
+ * when the progress is sufficient.
+ *
+ * My guess is that it can be a problem coming from this implementation, or coming from the test to
+ * stop the loop, since it is very strict. I think that it can be seen as a limitation of the code,
+ * and a way to improve it is to find clever bound to stop the loop depending on the norms of
+ * b[kappa].
+ */
+template <class ZT, class FT>
+void HLLLReduction<ZT, FT>::size_reduction(int kappa, int size_reduction_end,
+                                           int size_reduction_start)
+{
+  FPLLL_DEBUG_CHECK(kappa >= size_reduction_end);
+  FPLLL_DEBUG_CHECK(size_reduction_start < size_reduction_end);
+  FPLLL_DEBUG_CHECK(0 <= size_reduction_start);
+
+  // If b[kappa] is reduced by at least one b[i], then reduced will be set to true.
+  bool reduced = false;
+
+  /*
+   * Variables introduced in hplll (https://github.com/gilvillard/hplll)
+   * See commit a6b29d1a23ca34000264e22608ef23a64e3cac9d
+   * It seems that testing only one time the condition on line 7 of Algorithm 3 (incomplete size
+   * reduction) is not sufficient to ensure that b[kappa] is size-reduced. We then test it two
+   * times. If two times in a row, the condition is reached, then we consider that b[kappa] is
+   * size-reduced.
+   */
+  bool not_stop      = true;
+  bool prev_not_stop = true;
+
+#ifndef HOUSEHOLDER_USE_SIZE_REDUCTION_TEST
+  /*
+   * Variables introduced in hplll (https://github.com/gilvillard/hplll)
+   * See commit a6b29d1a23ca34000264e22608ef23a64e3cac9d
+   * The loop is done while ||bk||^2 <= a * t, where t is the squared norm of bk before size
+   * reduction and a = 2^(-cd).
+   *   The condition is equivalent to -1/2 * log(a) <= 1/2*log(t) - log(||bk||), where 1/2*log(t) is
+   *   the log of the squared norm of bk before size reduction. For c=0.1 and d=300,
+   *   -1/2 * log_2(a) = 15, then the loop continues when the length of bk decreases from more than
+   *   15 bits. For a=0.1, the same thing occurs with less than 2 bits. It experimentally allows to
+   *   size reduce the vectors for dimension >= 260.
+   * TODO: this hard coded value must be theoretically analyzed.
+   */
+  FT approx = 0.1;
+#else   // HOUSEHOLDER_USE_SIZE_REDUCTION_TEST
+  FT approx = sr;
+#endif  // HOUSEHOLDER_USE_SIZE_REDUCTION_TEST
+
+  m.update_R(kappa, false);
+
+  /* Most likely, at this step, the next update_R(kappa, false) must modify some coefficients since
+   * b will most likely be changed. If b is not modified during the size reduction, there will be
+   * only a call to update_R_last(kappa), which automatically must set updated_R to false. We set
+   * updated_R to false since it can be equal to true if recover_R was called that allows to avoid
+   * an unuseful recomputation of R[kappa] with update_R.
+   * TODO: maybe find a best place to use this function.
+   */
+  m.set_updated_R_false();
+
+  do
+  {
+    reduced = m.size_reduce(kappa, size_reduction_end, size_reduction_start);
+
+    // If not reduced, b(kappa) has not changed. Computing ||b[kappa]||^2 is not necessary.
+    // 1 > 2^(-cd)=sr since cd > 0.
+    if (!reduced)
+      return;
+    else
+    {
+      // At this point, even if b has changed, the precomputed squared norm of b was for b before
+      // the reduction
+      m.get_norm_square_b(ftmp0, kappa, expo0);  // ||b[kappa]||^2 = t = ftmp0 * 2^expo
+      // Since b has changed, R must be recomputed (latter in the implementation) and then R[kappa]
+      // and bf[kappa] are set to b[kappa]. The squared norm of b is updated, then, the next call to
+      // get_norm_square_b(..., kappa, ...) will get the squared norm of the current b.
+      m.refresh_R_bf(kappa);
+      m.get_norm_square_b(ftmp1, kappa, expo1);  // ||b[kappa]||^2 = ftmp1 * 2^expo1
+
+      ftmp0.mul(approx, ftmp0);  // approx * t = ftmp0 * 2^expo0
+
+      // TODO: Why not doing ftmp1.mul_2si(ftmp1, expo1 - expo0); ?
+      // We want to compare
+      //   ||b[k]||^2 > approx * t
+      //   ftmp1 * 2^expo1 > ftmp0 * 2^expo0
+      //   ftmp1 > ftmp0 * 2^(expo0-expo1)
+      ftmp0.mul_2si(ftmp0, expo0 - expo1);
+
+      // If (||b(kappa)||^2 > approx * t => ftmp1 > ftmp0), stop the loop.
+      not_stop = (ftmp1.cmp(ftmp0) <= 0);
+
+      // Update R(kappa, 0..kappa-1).
+      m.update_R(kappa, false);
+
+      if (prev_not_stop || not_stop)
+        prev_not_stop = not_stop;  // Continue to try to reduce b(kappa).
+      else
+        return;
+    }
+  } while (true);
+}
+
+/*
+ * A first version of this test was introduced in 2015-04-09 in hplll (see
+ * commit 93da15d1418347714ef5c07ae8860946825772e5). This test to detect not
+ * enough precision during the computation is therefore needed in addition to
+ * the one about the norms (such a test is implemented and send a
+ * RED_HLLL_NORM_FAILURE in this implementation).
+ *
+ * However, for now on, the following test about the weak size reduction was
+ * never used to stop one of our computations, even if hplll, for a same lattice,
+ * stops by reaching this test.
+ *
+ * TODO: is the following test actually used to detect an hypothetical infinite
+ * loop or not?
+ * HYPOTHESIS: this test was used previously when eta=0.52 and theta = 0.01. Since now
+ *   eta=0.51 and theta=0.001, maybe this test will be used.
+ */
+template <class ZT, class FT> bool HLLLReduction<ZT, FT>::verify_size_reduction(int kappa)
+{
+#ifdef HOUSEHOLDER_VERIFY_SIZE_REDUCTION_HPLLL
+  /*
+   * This test tries to mimick to the test of hplll in hsizereduce. It tests if
+   *   |R(k, i)| / R(i, i) <= (0.00...01 * ||b[kappa]||) / R(i, i) + 1
+   * but we test with this one
+   *   |R(k, i)| <= 0.00...01 * ||b[kappa]|| + R(i, i)
+   */
+
+  // TODO: can this test be more concise. This test is used at the end of each call to
+  // size_reduction, improving it can save time, especially if, for now, it does not help
+  // to detect loss of precision during the computation.
+
+  m.get_norm_square_b(ftmp0, kappa, expo0);  // ||b[kappa]||^2 = ftmp0 * 2^expo0
+
+  FPLLL_DEBUG_CHECK(expo0 % 2 == 0);
+  ftmp0.sqrt(ftmp0);
+  expo0 = expo0 / 2;  // ||b[kappa]|| = ftmp0 * 2^expo0
+
+  ftmp2 = 0.00000000001;
+  ftmp0.mul(ftmp0, ftmp2);  // See hplll, to tune for theta depending on the precision.
+  // 0.00000000001 * ||b[kappa]|| = ftmp0 * 2^expo0
+
+  for (int i = 0; i < kappa; i++)
+  {
+// Since we do not necessarily need expo1 (since expo0 and expo1 are correlated), we can
+// avoid to return it.
+#ifdef DEBUG
+    m.get_R(ftmp1, kappa, i, expo1);  // R(kappa, i) = ftmp1 * 2^expo1
+#else                                 // DEBUG
+    m.get_R(ftmp1, kappa, i);  // R(kappa, i) = ftmp1 * 2^expo0
+#endif                                // DEBUG
+
+    FPLLL_DEBUG_CHECK(expo0 == expo1);  // Since R[kappa] and b[kappa] share the same row_expo.
+    ftmp1.abs(ftmp1);
+
+    m.get_R(ftmp2, i, i, expo2);  // R(i, i) = ftmp2 * 2^expo2
+
+#if 0
+    // We want to test if
+    //   |R(kappa, i)| <= (0.00...01 * ||b[kappa]||) + R(i, i)
+    //   ftmp1 * 2^expo1 <= ftmp0 * 2^expo1 + ftmp2 * 2^expo2, since expo0 == expo1
+    //   ftmp1 <= ftmp0 + ftmp2 * 2^(expo2 - expo1);
+
+    ftmp2.mul_2si(ftmp2, expo2 - expo1);
+    ftmp2.add(ftmp0, ftmp2);
+
+#else   // 0
+    // We want to test if (theoretically the same test as in hplll)
+    //   |R(kappa, i)| / R(i, i) <= (0.00...01 * ||b[kappa]||) / R(i, i) + 1
+    //   ftmp1 / ftmp2 * 2^(expo1 - expo2) <= ftmp0 / ftmp2 * 2^(expo0 - expo2) + 1
+    //   ftmp1 / ftmp2 <= ftmp0 / ftmp2 + 2^(expo2 - expo1), since expo0 == expo1
+
+    ftmp1.div(ftmp1, ftmp2);
+    // Here, |R(kappa, i)| / R(i, i) = ftmp1 * 2^(expo1 - expo2)
+
+    ftmp2.div(ftmp0, ftmp2);
+    // Here, (0.00...01 * ||b[kappa]||) / R(i, i) = ftmp2 * 2^(expo1 - expo2);
+
+    FT one = 1.0;
+    one.mul_2si(one, expo2 - expo1);
+    ftmp2.add(one, ftmp2);
+#endif  // 0
+
+    if (ftmp1.cmp(ftmp2) > 0)
+    {
+      cerr << "This is probably the first time this test is used." << endl;
+
+      cerr << "Anomaly: weak size reduction is not complete kappa = " << kappa << " and i = " << i
+           << endl;
+
+      return false;
+    }
+  }
+#else   // HOUSEHOLDER_VERIFY_SIZE_REDUCTION_HPLLL
+  /*
+   * This test is similar to the test of hplll in hsizereduce. It is however not
+   * exactly the same, this one crudely verify the condition of the weak-size
+   * reduction. The one of hplll verify if
+   *   |R(k, i)| / R(i, i) <= (0.00...01 * ||b[kappa]||) / R(i, i) + 1
+   */
+
+  // TODO: can this test be more concise. This test is used at the end of each call to
+  // size_reduction, improving it can save time, especially if, for now, it does not help
+  // to detect loss of precision during the computation.
+
+  // Since R(kappa, kappa) is not know at this time, compute its value
+  // For now on, R(kappa, kappa) is assumed to be known, even if the value stored
+  // at R(kappa, kappa) is not correct.
+  m.norm_R_row(ftmp1, kappa, kappa, m.get_n(), expo1);  // R(kappa, kappa) = ftmp1 * 2^expo1
+
+  ftmp1.mul(ftmp1, theta);  // theta * R(kappa, kappa) = ftmp1 * 2^expo1
+
+  // Verify the conditions on the weak size-reduction in Definition 2 of [MSV'09]
+  for (int i = 0; i < kappa; i++)
+  {
+    m.get_R(ftmp0, kappa, i, expo0);  // R(kappa, i) = ftmp0 * 2^expo0
+    ftmp0.abs(ftmp0);                 // |R(kappa, i)| = |ftmp0| * 2^expo0
+    expo2 = m.get_row_expo(i);        // R(i, i) = eR[i] * 2^expo2
+
+    FPLLL_DEBUG_CHECK(expo0 == expo1);
+
+    // We want to test if
+    //   |R(kappa, i)| <= eta * R(i, i) + theta * R(kappa, kappa)
+    //   ftmp0 * 2^expo0 <= eR[i] * 2^expo2 + ftmp1 * 2^expo0, since expo0 == expo1
+    //   ftmp0 <= eRr[i] * 2^(expo2 - expo0) + ftmp1
+    //   ftmp0 <= ftmp2
+    ftmp2.mul_2si(eR[i], expo2 - expo0);
+    ftmp2.add(ftmp1, ftmp2);
+
+    if (ftmp0.cmp(ftmp2) > 0)
+    {
+      cerr << "This is probably the first time this test is used." << endl;
+
+      cerr << "Anomaly: weak size reduction is not complete kappa = " << kappa << " and i = " << i
+           << endl;
+
+      return false;
+    }
+  }
+#endif  // HOUSEHOLDER_VERIFY_SIZE_REDUCTION_HPLLL
+
+  return true;
+}
+
+/*
+ * Verify if the basis b inside m is (delta, eta)-hlll reduced.
+ * Use a different implementation of the Householder transformation to compute R in this test than
+ * the one used to reduced the basis.
+ */
+template <class ZT, class FT>
+int is_hlll_reduced(MatHouseholder<ZT, FT> &m, double delta, double eta, double theta)
+{
+  int i, j;
+  // Temporary variables
+  FT ftmp0, ftmp1, ftmp2;
+  // FT version of delta and eta
+  FT delta_ = delta;
+  FT eta_   = eta;
+  FT theta_ = theta;
+
+  // Compute the R coefficients of b
+  m.update_R_naively();
+
+  // Exponent associated to ftmp0 and ftmp1 (respectively)
+  long expo0 = 0;
+  long expo1 = 0;
+  long expo2 = 0;
+
+  // Verify if |R(j, i)| <= eta * R(i, i) + theta * R(j, j) (weak size-reduction of Definition 2
+  // [MSV'09].
+  for (j = 0; j < m.get_d(); j++)
+  {
+    for (i = 0; i < j; i++)
+    {
+      m.get_R_naively(ftmp0, j, i, expo0);  // R(j, i) = ftmp0 * 2^expo0
+      ftmp0.abs(ftmp0);                     // |R(j, i)| = |ftmp0| * 2^expo0
+      m.get_R_naively(ftmp1, j, j, expo1);  // R(j, j) = ftmp1 * 2^expo1
+      m.get_R_naively(ftmp2, i, i, expo2);  // R(i, i) = ftmp2 * 2^expo2
+
+      FPLLL_DEBUG_CHECK(expo0 == expo1);
+
+      ftmp1.mul(ftmp1, theta_);  // theta_ * R(j, j) = ftmp1 * 2^expo1
+      ftmp2.mul(ftmp2, eta_);    // eta_ * R(i, i) = ftmp2 * 2^expo2
+
+      // We want to test if
+      //   |R(j, i)| <= eta * R(i, i) + theta * R(j, j)
+      //   ftmp0 * 2^expo0 <= ftmp1 * 2^expo0 + ftmp2 * 2^expo2, since expo0 == expo1
+      //   ftmp0 <= ftmp1 + ftmp2 * 2^(expo2 - expo0)
+      ftmp2.mul_2si(ftmp2, expo2 - expo0);
+      ftmp1.add(ftmp1, ftmp2);
+
+      if (ftmp0.cmp(ftmp1) > 0)
+        return RED_HLLL_FAILURE;
+    }
+  }
+
+  // At this step, we verify if two consecutive vectors must be swapped during the hlll-reduction or
+  // not (Lovasz's condition)
+  for (i = 1; i < m.get_d(); i++)
+  {
+    m.get_R_naively(ftmp0, i - 1, i - 1, expo0);  // R(i - 1, i - 1) = ftmp0 * 2^expo0
+    m.get_R_naively(ftmp1, i, i - 1, expo1);      // R(i, i - 1) = ftmp1 * 2^expo1
+    m.get_R_naively(ftmp2, i, i, expo2);          // R(i, i) = ftmp2 * 2^expo2
+    FPLLL_DEBUG_CHECK(expo0 == expo1);
+
+    ftmp0.mul(ftmp0, ftmp0);
+    ftmp1.mul(ftmp1, ftmp1);
+    ftmp2.mul(ftmp2, ftmp2);
+    expo0 = 2 * expo0;
+    // expo1 = 2 * expo1; : not necessary, since expo0 == expo1
+    expo2 = 2 * expo2;
+    // Here: R(i - 1, i - 1)^2 = ftmp0 * 2^expo0
+    // Here: R(i, i - 1)^2 = ftmp1 * 2^expo1
+    // Here: R(i, i)^2 = ftmp2 * 2^expo2
+
+    ftmp0.mul(ftmp0, delta);  // delta * R(i - 1, i - 1)^2 = delta * ftmp0 * 2^expo0
+
+    // We want to test if
+    //   delta * R(i - 1, i - 1)^2 <= R(i, i - 1)^2 + R(i, i)^2
+    //   ftmp0 * 2^expo0 <= ftmp1 * 2^expo0 + ftmp2 * 2^expo2
+    //   ftmp0 <= ftmp1 + ftmp2 * 2^(expo2 - expo0)
+    ftmp2.mul_2si(ftmp2, expo2 - expo0);
+    ftmp1.add(ftmp1, ftmp2);
+
+    if (ftmp0.cmp(ftmp1) > 0)
+      return RED_HLLL_FAILURE;
+  }
+
+  return RED_SUCCESS;
+}
+
+/** instantiate functions **/
+
+template class HLLLReduction<Z_NR<long>, FP_NR<double>>;
+template class HLLLReduction<Z_NR<double>, FP_NR<double>>;
+template class HLLLReduction<Z_NR<mpz_t>, FP_NR<double>>;
+template int
+is_hlll_reduced<Z_NR<mpz_t>, FP_NR<double>>(MatHouseholder<Z_NR<mpz_t>, FP_NR<double>> &m,
+                                            double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<long>, FP_NR<double>>(MatHouseholder<Z_NR<long>, FP_NR<double>> &m,
+                                           double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<double>, FP_NR<double>>(MatHouseholder<Z_NR<double>, FP_NR<double>> &m,
+                                             double delta, double eta, double theta);
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class HLLLReduction<Z_NR<long>, FP_NR<long double>>;
+template class HLLLReduction<Z_NR<double>, FP_NR<long double>>;
+template class HLLLReduction<Z_NR<mpz_t>, FP_NR<long double>>;
+template int
+is_hlll_reduced<Z_NR<mpz_t>, FP_NR<long double>>(MatHouseholder<Z_NR<mpz_t>, FP_NR<long double>> &m,
+                                                 double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<long>, FP_NR<long double>>(MatHouseholder<Z_NR<long>, FP_NR<long double>> &m,
+                                                double delta, double eta, double theta);
+template int is_hlll_reduced<Z_NR<double>, FP_NR<long double>>(
+    MatHouseholder<Z_NR<double>, FP_NR<long double>> &m, double delta, double eta, double theta);
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class HLLLReduction<Z_NR<long>, FP_NR<dd_real>>;
+template class HLLLReduction<Z_NR<double>, FP_NR<dd_real>>;
+template class HLLLReduction<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template class HLLLReduction<Z_NR<long>, FP_NR<qd_real>>;
+template class HLLLReduction<Z_NR<double>, FP_NR<qd_real>>;
+template class HLLLReduction<Z_NR<mpz_t>, FP_NR<qd_real>>;
+template int
+is_hlll_reduced<Z_NR<mpz_t>, FP_NR<qd_real>>(MatHouseholder<Z_NR<mpz_t>, FP_NR<qd_real>> &m,
+                                             double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<long>, FP_NR<qd_real>>(MatHouseholder<Z_NR<long>, FP_NR<qd_real>> &m,
+                                            double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<double>, FP_NR<qd_real>>(MatHouseholder<Z_NR<double>, FP_NR<qd_real>> &m,
+                                              double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<mpz_t>, FP_NR<dd_real>>(MatHouseholder<Z_NR<mpz_t>, FP_NR<dd_real>> &m,
+                                             double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<long>, FP_NR<dd_real>>(MatHouseholder<Z_NR<long>, FP_NR<dd_real>> &m,
+                                            double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<double>, FP_NR<dd_real>>(MatHouseholder<Z_NR<double>, FP_NR<dd_real>> &m,
+                                              double delta, double eta, double theta);
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class HLLLReduction<Z_NR<long>, FP_NR<dpe_t>>;
+template class HLLLReduction<Z_NR<double>, FP_NR<dpe_t>>;
+template class HLLLReduction<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+template int
+is_hlll_reduced<Z_NR<mpz_t>, FP_NR<dpe_t>>(MatHouseholder<Z_NR<mpz_t>, FP_NR<dpe_t>> &m,
+                                           double delta, double eta, double theta);
+template int is_hlll_reduced<Z_NR<long>, FP_NR<dpe_t>>(MatHouseholder<Z_NR<long>, FP_NR<dpe_t>> &m,
+                                                       double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<double>, FP_NR<dpe_t>>(MatHouseholder<Z_NR<double>, FP_NR<dpe_t>> &m,
+                                            double delta, double eta, double theta);
+#endif
+
+template class HLLLReduction<Z_NR<long>, FP_NR<mpfr_t>>;
+template class HLLLReduction<Z_NR<double>, FP_NR<mpfr_t>>;
+template class HLLLReduction<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+template int
+is_hlll_reduced<Z_NR<mpz_t>, FP_NR<mpfr_t>>(MatHouseholder<Z_NR<mpz_t>, FP_NR<mpfr_t>> &m,
+                                            double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<long>, FP_NR<mpfr_t>>(MatHouseholder<Z_NR<long>, FP_NR<mpfr_t>> &m,
+                                           double delta, double eta, double theta);
+template int
+is_hlll_reduced<Z_NR<double>, FP_NR<mpfr_t>>(MatHouseholder<Z_NR<double>, FP_NR<mpfr_t>> &m,
+                                             double delta, double eta, double theta);
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/hlll.h b/fplll/hlll.h
new file mode 100644 (file)
index 0000000..03dd63e
--- /dev/null
@@ -0,0 +1,179 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2017-1018 Laurent Grémy.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_HLLL_H
+#define FPLLL_HLLL_H
+
+#include "householder.h"
+#include <cmath>
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class ZT, class FT> class HLLLReduction
+{
+public:
+  /**
+   * Constructor.
+   * The precision of FT must be defined before creating an instance of the
+   * class and must remain the same until the object is destroyed (or no longer
+   * needed).
+   */
+  HLLLReduction(MatHouseholder<ZT, FT> &arg_m, double delta, double eta, double theta, double c,
+                int flags)
+      : m(arg_m)
+  {
+    this->delta = delta;
+    this->eta   = eta;
+    this->theta = theta;
+    this->c     = c;
+    sr          = pow(2.0, -(double)m.get_d() * c);
+    verbose     = flags & LLL_VERBOSE;
+    dR.resize(m.get_d());
+    eR.resize(m.get_d());
+    status = -1;
+  }
+
+  /**
+    @brief Househorder inside LLL reduction.
+    */
+  bool hlll();
+
+  // Get the status of the computation
+  inline int get_status() { return status; }
+
+private:
+  // Paramters to (delta, eta, theta) hlll-reduce the basis b in m.
+  FT delta, eta, theta;
+  MatHouseholder<ZT, FT> &m;
+
+  // Arbitraty c > 0
+  FT c;
+  // Multiplicative coefficient used to check if a vector is size-reduced or not.
+  FT sr;
+  // Verbose mode.
+  bool verbose;
+
+  // Temporary variables
+  FT ftmp0, ftmp1, ftmp2;
+  long expo0, expo1, expo2;
+
+  int status;
+
+  /**
+     @brief Size reduction.
+
+     Perform size reduction of b[kappa]. Reduce b[kappa] with
+     b[size_reduction_start..size_reduction_end-1].
+
+     @param kappa index of the vector
+  */
+  void size_reduction(int kappa, int size_reduction_end, int size_reduction_start = 0);
+
+  /**
+   * In verbose mode, print informations to reproduce the computation (parameters, enable features)
+   */
+  inline void print_params();
+
+  // Precompute dR[k] * 2^(2*row_expo[k]) = delta_ * R(k, k)^2
+  vector<FT> dR;
+
+  // Compute dR[k]
+  inline void compute_dR(int k);
+
+  // Set the status of the computation and print message if verbose
+  inline bool set_status(int new_status);
+
+  // Precompute eR[k] * 2^row_expo[k] = eta * R(k, k)
+  vector<FT> eR;
+
+  // Compute eR[k]
+  inline void compute_eR(int k);
+
+  // Verify if b[k] is is correctry size reduced
+  bool verify_size_reduction(int kappa);
+
+  // Test if delta * R(k - 1, k - 1)^2 <= ||b[k]||^2 - sum_{i = 0}^{i < k - 1}R[k][i]^2 (depending
+  // on the way ftmp1 is computed, this test can be slightly different, but the purpose keeps the
+  // same)
+  bool lovasz_test(int k);
+};
+
+template <class ZT, class FT> inline void HLLLReduction<ZT, FT>::print_params()
+{
+  cerr << "Entering HLLL" << endl
+       << "delta = " << delta << endl
+       << "eta = " << eta << endl
+       << "theta = " << theta << endl
+       << "c = " << c << endl
+       << "precision = " << FT::get_prec() << endl
+       << "row_expo = " << static_cast<int>(m.is_enable_row_expo()) << endl
+       << "long_in_size_reduction = " << static_cast<int>(m.is_row_op_force_long()) << endl;
+
+#ifndef HOUSEHOLDER_PRECOMPUTE_INVERSE
+  cerr << "householder_precompute_inverse = 0" << endl;
+#else   // HOUSEHOLDER_PRECOMPUTE_INVERSE
+  cerr << "householder_precompute_inverse = 1" << endl;
+#endif  // HOUSEHOLDER_PRECOMPUTE_INVERSE
+
+#ifndef HOUSEHOLDER_USE_SIZE_REDUCTION_TEST
+  // Condition to break incomplete size reduction: ||b[k]||^2 > 0.1 * t
+  cerr << "householder_use_size_reduction_test = 0" << endl;
+#else   // HOUSEHOLDER_USE_SIZE_REDUCTION_TEST
+  // Condition to break incomplete size reduction: ||b[k]||^2 > sr * t
+  cerr << "householder_use_size_reduction_test = 1" << endl;
+#endif  // HOUSEHOLDER_USE_SIZE_REDUCTION_TEST
+
+#ifndef HOUSEHOLDER_VERIFY_SIZE_REDUCTION_HPLLL
+  cerr << "householder_verify_size_reduction_hplll = 0" << endl;
+#else   // HOUSEHOLDER_VERIFY_SIZE_REDUCTION_HPLLL
+  cerr << "householder_verify_size_reduction_hplll = 1" << endl;
+#endif  // HOUSEHOLDER_VERIFY_SIZE_REDUCTION_HPLLL
+}
+
+template <class ZT, class FT> inline void HLLLReduction<ZT, FT>::compute_dR(int k)
+{
+  m.get_R(dR[k], k, k);
+  dR[k].mul(dR[k], dR[k]);
+  dR[k].mul(delta, dR[k]);  // dR[k] = delta * R(k, k)^2
+}
+
+template <class ZT, class FT> inline void HLLLReduction<ZT, FT>::compute_eR(int k)
+{
+  m.get_R(eR[k], k, k);
+  eR[k].mul(delta, eR[k]);  // eR[k] = eta * R(k, k)
+}
+
+template <class ZT, class FT> inline bool HLLLReduction<ZT, FT>::set_status(int new_status)
+{
+  status = new_status;
+  if (verbose)
+  {
+    if (status == RED_SUCCESS)
+      cerr << "End of HLLL: success" << endl;
+    else
+      cerr << "End of HLLL: failure: " << RED_STATUS_STR[status] << endl;
+  }
+  return status == RED_SUCCESS;
+}
+
+template <class ZT, class FT>
+int is_hlll_reduced(MatHouseholder<ZT, FT> &m, double delta, double eta, double theta);
+
+FPLLL_END_NAMESPACE
+
+#endif /* FPLLL_HLLL_H */
diff --git a/fplll/householder.cpp b/fplll/householder.cpp
new file mode 100644 (file)
index 0000000..c4a4e2f
--- /dev/null
@@ -0,0 +1,591 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2017-1018 Laurent Grémy.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Template source file */
+
+#include "householder.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+// TODO: maybe add a variable available on DEBUG to verify in update_R(i, false) was done
+// This function corresponds more or less to householder_v in hplll.
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::update_R_last(int i)
+{
+  // sigma[i] = sign(r[1])
+  sigma[i] = (R(i, i).cmp(0.0) < 0) ? -1.0 : 1.0;
+  // V(i, i) is used as a temporary variable. In the following, V(i, i) is always modified.
+  if (i + 1 == n)
+    ftmp3 = 0.0;
+  else
+  {
+    // r^T * r (with first coefficient ignored)
+    R[i].dot_product(ftmp3, R[i], i + 1, n);
+  }
+  ftmp1.mul(R(i, i), R(i, i));
+  // ftmp1 = r^T * r
+  ftmp1.add(ftmp1, ftmp3);
+
+  if (ftmp1.cmp(0.0) != 0)
+  {
+    // ||r||
+    ftmp2.sqrt(ftmp1);
+    // s = sigma[i] * ||r|| = sigma[i] * sqrt(r * r^T)
+    ftmp0.mul(sigma[i], ftmp2);
+    ftmp1.add(R(i, i), ftmp0);
+    // ftmp3 = (-sum(r[j]^2, j, 2, n-i+1)
+    ftmp3.neg(ftmp3);
+    // ftmp3 = (-sum(r[j]^2, j, 2, n-i+1) / (r[1] + s)
+    ftmp3.div(ftmp3, ftmp1);
+    // If ftmp3 = 0, then ftmp0 = 0 and then, divide by ftmp0 is not allowed
+    if (ftmp3.cmp(0.0) != 0)
+    {
+      // ftmp0 = -sigma[i] * ||r||
+      ftmp0.neg(ftmp0);
+      // ftmp0 = -sigma[i] * ||r|| * (-sum(r[j]^2, j, 2, n-i+1) / (r[1] + s)
+      ftmp0.mul(ftmp0, ftmp3);
+      // ftmp0 = sqrt(-sigma[i] * ||r|| * (-sum(r[j]^2, j, 2, n-i+1) / (r[1] + s))
+      ftmp0.sqrt(ftmp0);
+
+#ifndef HOUSEHOLDER_PRECOMPUTE_INVERSE
+      // V(i, i) =
+      // ((-sum(r[j]^2, j, 2, n-i+1) / (r[1] + s)) / sqrt(-sigma[i] * ||r|| * (-sum(r[j]^2, j, 2,
+      // n-i+1) / (r[1] + s))
+      V(i, i).div(ftmp3, ftmp0);
+      // R(i, i) = ||r||
+      R(i, i) = ftmp2;
+
+      V[i].div(R[i], i + 1, n, ftmp0);
+
+#else   // HOUSEHOLDER_PRECOMPUTE_INVERSE
+      ftmp0.div(1.0, ftmp0);
+      // Here, ftmp0 = 1 / sqrt(-s * vi[1])
+      V(i, i).mul(ftmp3, ftmp0);
+      R(i, i) = ftmp2;
+
+      // FIXME: not tested.
+      V[i].mul(R[i], i + 1, n, ftmp0);
+
+      R_inverse_diag[i].div(1.0, ftmp2);
+#endif  // HOUSEHOLDER_PRECOMPUTE_INVERSE
+        // Here, vi = vi / ftmp0 and ri[i..n] = (||r||, 0, 0, ..., 0)
+
+#ifdef DEBUG
+      // Setting R(i, k) to 0 is not neccessary since this value will be not used in HLLL.
+      // However, in DEBUG, we must set to do not break test.
+      for (int k = i + 1; k < n; k++)
+        R(i, k) = 0.0;
+#endif  // DEBUG
+    }
+    else
+    {
+      V(i, i) = 0.0;
+      if (R(i, i).cmp(0.0) < 0)
+        R(i, i).neg(R(i, i));
+
+      // TODO: this is a row operation (from i + 1 to n).
+      for (int k = i + 1; k < n; k++)
+      {
+        // if enable_row_expo, R can be not correct at some point of the computation
+        FPLLL_DEBUG_CHECK(enable_row_expo ? 1 : R(i, k).is_zero());
+        V(i, k) = 0.0;
+
+// Setting R(i, k) to 0 is not neccessary since this value will be not used in HLLL.
+// However, in DEBUG, we must set to do not break test.
+#ifdef DEBUG
+        R(i, k) = 0.0;
+#endif  // DEBUG
+      }
+
+#ifdef HOUSEHOLDER_PRECOMPUTE_INVERSE
+      R_inverse_diag[i].div(1.0, R(i, i));
+#endif  // HOUSEHOLDER_PRECOMPUTE_INVERSE
+    }
+  }
+  else
+  {
+    R(i, i) = 0.0;
+    V(i, i) = 0.0;
+    // The for loop can for(int k = i; k < n; k++) if the setting of R(i, k) is uncommented.
+    // TODO: this is a row operation (from i + 1 to n).
+    for (int k = i + 1; k < n; k++)
+    {
+      // if enable_row_expo, R can be not correct at some point of the computation
+      FPLLL_DEBUG_CHECK(enable_row_expo ? 1 : R(i, k).is_zero());
+      V(i, k) = 0.0;
+
+// Setting R(i, k) to 0 is not neccessary since this value will be not used in HLLL.
+// However, in DEBUG, we must set to do not break test.
+#ifdef DEBUG
+      R(i, k) = 0.0;
+#endif  // DEBUG
+    }
+
+#ifdef HOUSEHOLDER_PRECOMPUTE_INVERSE
+    // Result is inf.
+    // TODO: set inf instead of doing the computation.
+    R_inverse_diag[i].div(1.0, 0.0);
+#endif  // HOUSEHOLDER_PRECOMPUTE_INVERSE
+  }
+
+  n_known_rows++;
+}
+
+// This function corresponds more or less to householder_r in hplll.
+// TODO: in hplll, householder_r do not recompute all the coefficients, depending on various
+// strategies. It will help to improve the running time.
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::update_R(int i, bool last_j)
+{
+  // To update row i, we need to know n_known_rows rows
+  FPLLL_DEBUG_CHECK(i <= n_known_rows);
+  if (/*i == n_known_rows && =*/!updated_R)
+  {
+    int j, k;
+
+    for (j = 0; j < i; j++)
+    {
+      // vj * ri[j..n]^T
+      // TODO: n_known_cols here?
+      V[j].dot_product(ftmp0, R[i], j, n);
+
+      //-vj * ri[j..n]^T
+      ftmp0.neg(ftmp0);
+      // ri[j..n] = ri[j..n] - (vj * ri[j..n]^T) * vj
+      R[i].addmul(V[j], ftmp0, j, n);
+
+      // ri[j] = sigma[j] * ri[j]
+      R(i, j).mul(sigma[j], R(i, j));
+
+      // Copy R into R_history
+      // TODO: this is a row operation. Can try to copy R(i, j..n-1) directly in
+      // R_history[i][j](j..n-1).
+      for (k = j; k < n; k++)
+        R_history[i][j][k] = R(i, k);
+    }
+
+    // Compute R(i, i), since R(i, 0..i-1) are known
+    if (last_j)
+      update_R_last(i);
+  }
+}
+
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::refresh_R_bf(int i)
+{
+  // Verify that b[i] has change before last time (more or less bf != b)
+  FPLLL_DEBUG_CHECK(col_kept[i] == false);
+
+  int j;
+
+  n_known_cols = max(n_known_cols, init_row_size[i]);
+
+  if (enable_row_expo)
+  {
+    long max_expo = LONG_MIN;
+
+    // Copy b(i, j) in bf(i, j) and get the maximal exponent of the row
+    // TODO: these are row operations. However, since the types are converted, maybe difficult
+    // to make a row operation here.
+    for (j = 0; j < n_known_cols; j++)
+    {
+      b(i, j).get_f_exp(bf(i, j), tmp_col_expo[j]);
+      max_expo = max(max_expo, tmp_col_expo[j]);
+    }
+
+    // Renormalize all the bf(i, j) with max_expo
+    // TODO: these are row operations. However, since the exponent of mul_2si is not constant,
+    // maybe difficult to make a row operation here.
+    for (j = 0; j < n_known_cols; j++)
+      bf(i, j).mul_2si(bf(i, j), tmp_col_expo[j] - max_expo);
+    for (j = n_known_cols; j < n; j++)
+      bf(i, j) = 0.0;
+
+    row_expo[i] = max_expo;
+    FPLLL_DEBUG_CHECK(row_expo[i] >= 0);
+  }
+  else
+  {
+    // Simply copy b[i] in bf[i]
+    // TODO: these are row operations. However, since the types are converted, maybe difficult
+    // to make a row operation here.
+    for (j = 0; j < n_known_cols; j++)
+      bf(i, j).set_z(b(i, j));
+    for (j = n_known_cols; j < n; j++)
+      bf(i, j) = 0.0;
+  }
+
+  // Copy R[i] in bf[i] (while we have copied b[i] in R[i])
+  // TODO: these are row operations.
+  for (j = 0; j < n_known_cols; j++)
+    R(i, j) = bf(i, j);
+  for (j = n_known_cols; j < n; j++)
+    R(i, j) = 0.0;
+
+  // TODO: maybe not realy efficient (since we will redo some already done comparisions if flags are
+  // enabled) but factorize code.
+  norm_square_b_row(norm_square_b[i], i, expo_norm_square_b[i]);
+
+#ifdef DEBUG
+  // bf[i] = b[i] at the end of the function
+  col_kept[i] = true;
+#endif  // DEBUG
+}
+
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::refresh_R(int i)
+{
+  // Verify that b[i] has not change before last time (more or less bf = b)
+  FPLLL_DEBUG_CHECK(col_kept[i] == true);
+
+  int j;
+
+  // Copy bf[i] in R[i] (while we have already copied b[i] in bf[i] and b[i] has not changed)
+  // TODO: these are row operations. However, since the types are converted, maybe difficult
+  // to make a row operation here.
+  for (j = 0; j < n_known_cols; j++)
+    R(i, j) = bf(i, j);
+  for (j = n_known_cols; j < n; j++)
+    R(i, j) = 0.0;
+}
+
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::update_R_naively(int i)
+{
+  // This function try to strictly respect Algorithm 2 of [MSV'09].
+  FPLLL_DEBUG_CHECK(i <= n_known_rows_naively);
+
+  int j;
+
+  // Set B in R_naively.
+  if (enable_row_expo)
+  {
+    long max_expo = LONG_MIN;
+
+    for (j = 0; j < n; j++)
+    {
+      b(i, j).get_f_exp(R_naively(i, j), tmp_col_expo[j]);
+      max_expo = max(max_expo, tmp_col_expo[j]);
+    }
+
+    for (j = 0; j < n; j++)
+      R_naively(i, j).mul_2si(R_naively(i, j), tmp_col_expo[j] - max_expo);
+
+    row_expo_naively[i] = max_expo;
+    FPLLL_DEBUG_CHECK(row_expo_naively[i] >= 0);
+  }
+  else
+  {
+    for (j = 0; j < n; j++)
+      R_naively(i, j).set_z(b(i, j));
+  }
+
+  for (j = 0; j < i; j++)
+  {
+    // vj * ri[j..n]^T
+    V_naively[j].dot_product(ftmp0, R_naively[i], j, n);
+
+    //-vj * ri[j..n]^T
+    ftmp0.neg(ftmp0);
+    // ri[j..n] = ri[j..n] - (vj * ri[j..n]^T) * vj
+    R_naively[i].addmul(V_naively[j], ftmp0, j, n);
+    // ri[j] = sigma_naively[j] * ri[j]
+    R_naively(i, j).mul(sigma_naively[j], R_naively(i, j));
+  }
+
+  // Here, ftmp2 is equal to s in [MSV, ISSAC'09].
+  // Copy R_naively[i][i..n] in V_naively
+  for (j = i; j < n; j++)
+    V_naively(i, j) = R_naively(i, j);
+
+  // sigma_naively[i] = sign(r[1])
+  sigma_naively[i] = (R_naively(i, i).cmp(0.0) < 0) ? -1.0 : 1.0;
+  R_naively[i].dot_product(ftmp2, R_naively[i], i, n);
+  ftmp2.sqrt(ftmp2);
+  ftmp2.mul(ftmp2, sigma_naively[i]);
+  // Here, ftmp2 = sigma_naively[i] * ||r||
+
+  // ftmp0 = (r[1] + ftmp2)
+  ftmp0.add(R_naively(i, i), ftmp2);
+  if (ftmp0.cmp(0.0) != 0)
+  {
+    if (i + 1 == n)
+      ftmp1 = 0.0;
+    else
+      R_naively[i].dot_product(ftmp1, R_naively[i], i + 1, n);
+    if (ftmp1.cmp(0.0) != 0)
+    {
+      // ftmp1 = (-sum(r[j]^2, j, 2, n-i+1)
+      ftmp1.neg(ftmp1);
+
+      // vi[1] = (-sum(r[j]^2, j, 2, n-i+1) / (r[1] + ftmp2)
+      V_naively(i, i).div(ftmp1, ftmp0);
+
+      ftmp2.neg(ftmp2);
+      ftmp0.mul(ftmp2, V_naively(i, i));
+      // Here, ftmp0 = -ftmp2 * vi[1]
+
+      // ftmp0 = sqrt(-ftmp2 * vi[1])
+      ftmp0.sqrt(ftmp0);
+
+      V_naively[i].div(V_naively[i], i, n, ftmp0);
+
+      R_naively(i, i).abs(ftmp2);
+      for (j = i + 1; j < n; j++)
+        R_naively(i, j) = 0.0;
+    }
+    else
+    {
+      if (R_naively(i, i).cmp(0.0) < 0)
+        R_naively(i, i).neg(R_naively(i, i));
+
+      V_naively(i, i) = 0.0;
+      for (int k = i + 1; k < n; k++)
+      {
+        V_naively(i, k) = 0.0;
+        R_naively(i, k) = 0.0;
+      }
+    }
+  }
+  else
+  {
+    for (int k = i; k < n; k++)
+    {
+      V_naively(i, k) = 0.0;
+      R_naively(i, k) = 0.0;
+    }
+  }
+
+  n_known_rows_naively++;
+}
+
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::swap(int i, int j)
+{
+  FPLLL_DEBUG_CHECK(0 <= i && i < j && j < d);
+
+  // Invalidate to the min not modified row, that is i
+  invalidate_row(i);
+
+  b.swap_rows(i, j);
+  bf.swap_rows(i, j);
+  iter_swap(sigma.begin() + i, sigma.begin() + j);
+  if (enable_row_expo)
+    iter_swap(row_expo.begin() + i, row_expo.begin() + j);
+  iter_swap(init_row_size.begin() + i, init_row_size.begin() + j);
+  iter_swap(R_history.begin() + i, R_history.begin() + j);
+  if (enable_transform)
+  {
+    u.swap_rows(i, j);
+    if (enable_inverse_transform)
+      u_inv_t.swap_rows(i, j);
+  }
+  iter_swap(norm_square_b.begin() + i, norm_square_b.begin() + j);
+  iter_swap(expo_norm_square_b.begin() + i, expo_norm_square_b.begin() + j);
+
+#ifdef DEBUG
+  iter_swap(col_kept.begin() + i, col_kept.begin() + j);
+#endif  // DEBUG
+}
+
+// Reduce b[k] and R[k] accordingly (Step 3 to Step 6 of Algorithm 3 of [MSV,
+// ISSAC'09])
+template <class ZT, class FT>
+bool MatHouseholder<ZT, FT>::size_reduce(int k, int size_reduction_end, int size_reduction_start)
+{
+  FPLLL_DEBUG_CHECK(k > 0 && k < d);
+
+  bool reduced = false;
+
+  for (int i = size_reduction_end - 1; i >= size_reduction_start; i--)
+  {
+// R(k, i) / R(i, i) = ftmp1 * 2^(row_expo[k] - row_expo[i])
+#ifndef HOUSEHOLDER_PRECOMPUTE_INVERSE
+    ftmp1.div(R(k, i), R(i, i));
+#else   // HOUSEHOLDER_PRECOMPUTE_INVERSE
+    ftmp1.mul(R(k, i), R_inverse_diag[i]);
+#endif  // HOUSEHOLDER_PRECOMPUTE_INVERSE
+
+    /* If T = mpfr or dpe, enable_row_expo must be false and then, expo1 - expo0 == 0 (required by
+     * rnd_we with these types) */
+    // rnd(R(k, i) / R(i, i)) = ftmp1 * 2^(row_expo[k] - row_expo[i])
+    ftmp1.rnd_we(ftmp1, row_expo[k] - row_expo[i]);
+
+    // ftmp1 * 2^(expo1 - expo0) is equal to -X[i] in Algorithm 3 of [MSV, ISSAC'09]
+    ftmp1.neg(ftmp1);
+
+    if (ftmp1.sgn() != 0)  // Equivalent to test if ftmp1 == 0
+    {
+      // b[k] will be reduced by ftmp1 * 2^(row_expo[k] - row_expo[i]) * b[i]
+      row_addmul_we(k, i, ftmp1, row_expo[k] - row_expo[i]);
+
+      // b[k] was reduced
+      reduced = true;
+    }
+  }
+
+  // b[k] was reduced by at least one b[i]
+  if (reduced)
+  {
+#ifdef DEBUG
+    // b[k] has changed
+    col_kept[k] = false;
+#endif  // DEBUG
+
+    // Invalidate since b has changed, but R is not recomputed. We do operations on R[k], but not
+    // the one to get the correct R[k]: the operations are the one mentionned in line 5 of
+    // Algorithm 3 [MSV, ISSAC'09].
+    invalidate_row(k);
+  }
+
+  return reduced;
+}
+
+/* Taken from fplll/gso.cpp (commit 3d0d962)*/
+// TODO: is it possible to factorize piece of code with fplll/gso.cpp?
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::row_add(int i, int j)
+{
+  b[i].add(b[j], n_known_cols);
+
+  if (enable_transform)
+  {
+    u[i].add(u[j]);
+    if (enable_inverse_transform)
+      u_inv_t[j].sub(u_inv_t[i]);
+  }
+}
+
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::row_sub(int i, int j)
+{
+  b[i].sub(b[j], n_known_cols);
+
+  if (enable_transform)
+  {
+    u[i].sub(u[j]);
+    if (enable_inverse_transform)
+      u_inv_t[j].add(u_inv_t[i]);
+  }
+}
+
+template <class ZT, class FT> void MatHouseholder<ZT, FT>::row_addmul_si(int i, int j, long x)
+{
+  b[i].addmul_si(b[j], x, n_known_cols);
+
+  if (enable_transform)
+  {
+    u[i].addmul_si(u[j], x);
+    if (enable_inverse_transform)
+      u_inv_t[j].addmul_si(u_inv_t[i], -x);
+  }
+}
+
+template <class ZT, class FT>
+void MatHouseholder<ZT, FT>::row_addmul_si_2exp(int i, int j, long x, long expo)
+{
+  b[i].addmul_si_2exp(b[j], x, expo, n_known_cols, ztmp0);
+
+  if (enable_transform)
+  {
+    u[i].addmul_si_2exp(u[j], x, expo, ztmp0);
+    if (enable_inverse_transform)
+      u_inv_t[j].addmul_si_2exp(u_inv_t[i], -x, expo, ztmp0);
+  }
+}
+
+template <class ZT, class FT>
+void MatHouseholder<ZT, FT>::row_addmul_2exp(int i, int j, const ZT &x, long expo)
+{
+  // Cannot use ztmp0 here, since x is ztmp0 (see row_addmul_we). Use ztmp1 instead.
+  b[i].addmul_2exp(b[j], x, expo, n_known_cols, ztmp1);
+
+  if (enable_transform)
+  {
+    u[i].addmul_2exp(u[j], x, expo, ztmp1);
+    if (enable_inverse_transform)
+    {
+      ZT minus_x;
+      minus_x.neg(x);
+      u_inv_t[j].addmul_2exp(u_inv_t[i], minus_x, expo, ztmp1);
+    }
+  }
+}
+
+template <class ZT, class FT>
+void MatHouseholder<ZT, FT>::row_addmul_we(int i, int j, const FT &x, long expo_add)
+{
+  FPLLL_DEBUG_CHECK(j >= 0 && i == n_known_rows && j < i);
+  FPLLL_DEBUG_CHECK(x.cmp(0.0) != 0);
+
+  long expo;
+  long lx = x.get_si_exp_we(expo, expo_add);
+
+  // if expo == 0, does not need to use mul_2si like functions
+  if (expo == 0)
+  {
+    if (lx == 1)
+      row_add(i, j);
+    else if (lx == -1)
+      row_sub(i, j);
+    else if (lx != 0)
+      row_addmul_si(i, j, lx);
+  }
+  else if (row_op_force_long)
+    row_addmul_si_2exp(i, j, lx, expo);
+  else
+  {
+    x.get_z_exp_we(ztmp0, expo, expo_add);
+    row_addmul_2exp(i, j, ztmp0, expo);
+  }
+
+  // TODO: is it possible to combine this specialization with the condition on lx?
+  // Cannot specialize depending on lx, since x contains the contribution of the 2^row_expo[i] and
+  // 2^row_expo[j].
+  // TODO: not sure this specialization is usefull.
+  if (x.cmp(1.0) == 0.0)
+    R[i].add(R[j], i);
+  else if (x.cmp(-1.0) == 0.0)
+    R[i].sub(R[j], i);
+  else
+    R[i].addmul(R[j], x, i);
+}
+
+template class MatHouseholder<Z_NR<long>, FP_NR<double>>;
+template class MatHouseholder<Z_NR<double>, FP_NR<double>>;
+template class MatHouseholder<Z_NR<mpz_t>, FP_NR<double>>;
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class MatHouseholder<Z_NR<long>, FP_NR<long double>>;
+template class MatHouseholder<Z_NR<double>, FP_NR<long double>>;
+template class MatHouseholder<Z_NR<mpz_t>, FP_NR<long double>>;
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class MatHouseholder<Z_NR<long>, FP_NR<dd_real>>;
+template class MatHouseholder<Z_NR<double>, FP_NR<dd_real>>;
+template class MatHouseholder<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template class MatHouseholder<Z_NR<long>, FP_NR<qd_real>>;
+template class MatHouseholder<Z_NR<double>, FP_NR<qd_real>>;
+template class MatHouseholder<Z_NR<mpz_t>, FP_NR<qd_real>>;
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class MatHouseholder<Z_NR<long>, FP_NR<dpe_t>>;
+template class MatHouseholder<Z_NR<double>, FP_NR<dpe_t>>;
+template class MatHouseholder<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+#endif
+
+template class MatHouseholder<Z_NR<long>, FP_NR<mpfr_t>>;
+template class MatHouseholder<Z_NR<double>, FP_NR<mpfr_t>>;
+template class MatHouseholder<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/householder.h b/fplll/householder.h
new file mode 100644 (file)
index 0000000..0994610
--- /dev/null
@@ -0,0 +1,689 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+   Copyright (C) 2017-1018 Laurent Grémy.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_HOUSEHOLDER_H
+#define FPLLL_HOUSEHOLDER_H
+
+#include "nr/matrix.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+enum MatHouseholderFlags
+{
+  HOUSEHOLDER_DEFAULT = 0,
+  // We consider that using ROW_EXPO is mandatory if FT in {double, long double, qd, dd}.
+  HOUSEHOLDER_ROW_EXPO      = 1,
+  HOUSEHOLDER_OP_FORCE_LONG = 2
+};
+
+/**
+ * MatHouseholder provides an interface for performing elementary operations on a basis
+ * and computing its R matrix using Householder transformations.
+ */
+template <class ZT, class FT> class MatHouseholder
+{
+public:
+  /**
+   * Constructor.
+   * The precision of FT must be defined before creating an instance of the
+   * class and must remain the same until the object is destroyed (or no longer
+   * needed).
+   * @param b
+   *   The matrix on which row operations are performed. It must not be empty.
+   * @param enable_row_expo
+   *   If true, each row of b is normalized by a power of 2 before doing
+   *   conversion to floating-point, which hopefully avoids some overflows.
+   *   This option cannot be enabled if enable_int_gram=true and works only
+   *   with FT=double and FT=long double. It is useless and MUST NOT be used
+   *   for FT=dpe or FT=mpfr_t.
+   * @param enable_transform
+   *   Compute u
+   * @param u
+   *   If u is not empty, operations on b are also done on u
+   *   (in this case both must have the same number of rows).
+   *   If u is initially the identity matrix, multiplying transform by the
+   *   initial basis gives the current basis.
+   * @param enable_inverse_transform
+   *   Compute u_inv_t
+   * @param u_inv_t
+   *   Inverse transform (should be empty, which disables the computation, or
+   *   initialized with identity matrix). It works only if u is not empty.
+   * @param enable_op_force_long
+   *   Affects the behaviour of row_addmul(_we).
+   *   See the documentation of row_addmul.
+   */
+  MatHouseholder(Matrix<ZT> &arg_b, Matrix<ZT> &arg_u, Matrix<ZT> &arg_uinv_t, int flags)
+      : b(arg_b), enable_row_expo(flags & HOUSEHOLDER_ROW_EXPO),
+        enable_transform(arg_u.get_rows() > 0), u(arg_u),
+        enable_inverse_transform(arg_uinv_t.get_rows() > 0), u_inv_t(arg_uinv_t),
+        row_op_force_long(flags & HOUSEHOLDER_OP_FORCE_LONG)
+  {
+    // Get the dimensions of the lattice
+    d = b.get_rows();
+    n = b.get_cols();
+
+    // Any row are known
+    n_known_rows = 0;
+    n_known_cols = 0;
+
+    // Initialize sigma and V used to compute R
+    sigma.resize(d);
+    R.resize(d, n);
+    // TODO: V does not need to be a matrix, since V is a list of vector of different length
+    V.resize(d, n);
+
+    // Initialize bf
+    bf.resize(d, n);
+
+    // Initialize row_expo.
+    row_expo.resize(d);
+    fill(row_expo.begin(), row_expo.end(), 0);
+    // Initialize row_size
+    init_row_size.resize(d);
+    for (int i = 0; i < d; i++)
+      // Capture the shape of b
+      init_row_size[i] = max(b[i].size_nz(), 1);
+
+    // Initialize R_history and update_R
+    R_history.resize(d);
+    for (int i = 0; i < d; i++)
+    {
+      R_history[i].resize(n);
+      for (int j = 0; j < n; j++)
+        R_history[i][j].resize(n);
+    }
+    updated_R = false;
+
+    // Initialize norm_square_b
+    norm_square_b.resize(d);
+    expo_norm_square_b.resize(d);
+    /* fill row_expo with 0, since if enable_row_expo, it will be filled by real value, and
+     * otherwise, we essentially 0 - 0 */
+    fill(expo_norm_square_b.begin(), expo_norm_square_b.end(), 0);
+
+#ifdef HOUSEHOLDER_PRECOMPUTE_INVERSE
+    // Initialize R_inverse_diag
+    R_inverse_diag.resize(d);
+#endif  // HOUSEHOLDER_PRECOMPUTE_INVERSE
+
+    if (enable_row_expo)
+      // Initialize tmp_col_expo
+      tmp_col_expo.resize(n);
+
+#ifdef DEBUG
+    col_kept.resize(d);
+    fill(col_kept.begin(), col_kept.end(), false);
+#endif  // DEBUG
+
+    /* Initialize values for naively part of the computation
+     * Used in is_hlll_reduced at least */
+    n_known_rows_naively = 0;
+    sigma_naively.resize(d);
+    R_naively.resize(d, n);
+    V_naively.resize(d, n);
+    row_expo_naively.resize(d);
+    fill(row_expo_naively.begin(), row_expo_naively.end(), 0);
+
+#ifdef DEBUG
+    for (int i = 0; i < d; i++)
+    {
+      for (int j = 0; j < n; j++)
+      {
+        V(i, j).set_nan();
+        V_naively(i, j).set_nan();
+      }
+    }
+#endif  // DEBUG
+  }
+
+  ~MatHouseholder() {}
+
+  /**
+   * Returns f (* 2^expo if enable_row_expo) = R(i, j).
+   *
+   * Returns reference to `f` and expo.
+   */
+  inline void get_R(FT &f, int i, int j, long &expo);
+
+  /**
+   * Returns f (* 2^expo if enable_row_expo) = R(i, j).
+   *
+   * Returns reference to `f`.
+   */
+  inline void get_R(FT &f, int i, int j);
+
+  /**
+   * Returns R[i].
+   */
+  inline MatrixRow<FT> get_R(int i, long &expo);
+
+  /**
+   * Returns the R matrix
+   * expo is set to row_expo
+   */
+  const Matrix<FT> &get_R(vector<long> &expo)
+  {
+    expo = row_expo;
+    return R;
+  }
+
+  /**
+   * Returns b[i].
+   */
+  MatrixRow<ZT> get_b(int i);
+
+  /**
+   * Returns the b matrix
+   */
+  const Matrix<ZT> &get_b() { return b; }
+
+  /**
+   * Apply Householder transformation on row i for columns [0, i).
+   * If last_j, apply Householder transformation on row i, from cols [0, i].
+   */
+  void update_R(int i, bool last_j);
+
+  /**
+   * Apply Householder transformation on row i.
+   */
+  void update_R(int i);
+
+  /**
+   * Finalize Householder transformation on row i (especially after update_R(i, false))
+   */
+  void update_R_last(int i);
+
+  /**
+   * Full computation of the matrix R.
+   */
+  inline void update_R();
+
+  /**
+   * Retun the dimensions of the lattice
+   */
+  inline int get_d() { return d; }
+  inline int get_n() { return n; }
+
+  /**
+   * Compute the squared norm of b[k].
+   */
+  inline void norm_square_b_row(FT &f, int k, long &expo);
+
+  /**
+   * Truncated squared norm of R[k], with coefficients of R[k][beg..end-1].
+   */
+  inline void norm_square_R_row(FT &f, int k, int beg, int end, long &expo);
+
+  /**
+   * Truncated norm of R[k], with coefficients of R[k][beg..end-1].
+   */
+  inline void norm_R_row(FT &f, int k, int beg, int end, long &expo);
+
+  // Size reduce b[k] with b[size_reduction_start..size_reduction_end-1].
+  // Not necessary to make transformation on bf, since basically, after each size_reduce, we call
+  // refresh_R_bf, which set bf to the correct value from b directly.
+  bool size_reduce(int k, int size_reduction_end, int size_reduction_start = 0);
+
+  /**
+   * Swap row i and j of b, bf, R, V, u and u_inv_t
+   * Swap element i and j in sigma, row_expo, norm_square_b, expo_norm_square_b, init_row_size and
+   * R_history.
+   */
+  void swap(int i, int j);
+
+  /**
+   * Update n_known_rows to k.
+   */
+  inline void invalidate_row(int k);
+
+  /**
+   * Return values enable_row_expo
+   */
+  inline bool is_enable_row_expo() { return enable_row_expo; }
+
+  /**
+   * Return value of updated_R
+   */
+  inline bool get_updated_R() { return updated_R; }
+  /**
+   * Set updated_R to false
+   * updated_R is set to true in recover_R
+   */
+  inline void set_updated_R_false() { updated_R = false; }
+
+  /**
+   * Get the precomputation of R(i, i)
+   */
+  inline FT get_R_inverse_diag(int i) { return R_inverse_diag[i]; }
+
+  /*
+   * Recover R[i] from the precomputed values of R stored in R_history, i.e., R[i] is correct for
+   * the coefficients [0,
+   * i) and a call to update_R_last(i) will fully compute R[i].
+   */
+  inline void recover_R(int i);
+
+  /**
+   * Return row_expo[i]
+   */
+  inline long get_row_expo(int i) { return row_expo[i]; }
+
+  /**
+   * Returns the value of row_op_force_long
+   */
+  inline bool is_row_op_force_long() { return row_op_force_long; }
+
+  /**
+   * Set bf[i] and R[i] to b[i].
+   * Precompute square norm of b[i].
+   */
+  void refresh_R_bf(int i);
+  /**
+   * Set bf and R to b.
+   * Precompute squared norm of all the vectors of b
+   */
+  inline void refresh_R_bf();
+
+  /**
+   * Set R[i] to b[i].
+   */
+  void refresh_R(int i);
+  /**
+   * Set R to b.
+   */
+  inline void refresh_R();
+
+  /**
+   * Set in f the precomputed squared norm of b[i] and in expo the exponent such that ||b[i]||^2 = f
+   * * 2^{expo}
+   */
+  inline void get_norm_square_b(FT &f, int i, long &expo);
+
+private:
+  /**
+   * Number of rows of b (dimension of the lattice).
+   */
+  int d;
+
+  /**
+   * Number of columns of b (dimension of the lattice).
+   */
+  int n;
+
+  /**
+   * Basis of the lattice
+   */
+  Matrix<ZT> &b;
+
+  /**
+   * b = R * q_householder (q_householder is not computed)
+   * R is lower triangular and the diagonal coefficient are >= 0.
+   */
+  Matrix<FT> R;
+
+  /**
+   * Vector v following [MSV, ISSAC'09].
+   */
+  Matrix<FT> V;
+
+  /**
+   * Sigma values following [MSV, ISSAC'09].
+   */
+  vector<FT> sigma;
+
+  /**
+   * R[i] is invalid for i >= n_known_rows.
+   */
+  int n_known_rows;
+
+  /** Normalization of each row of b by a power of 2. */
+  const bool enable_row_expo;
+
+  /**
+   * When enable_row_expo=true, row_expo[i] is the smallest non-negative integer
+   * such that b(i, j) &lt;= 2^row_expo[i] for all j. Otherwise this array is empty.
+   */
+  vector<long> row_expo;
+
+  /* Used by update_R. Temporary variable. */
+  vector<long> tmp_col_expo;
+
+  // Temporary variables
+  FT ftmp0, ftmp1, ftmp2, ftmp3;
+  ZT ztmp0, ztmp1;
+
+  // init_row_size[i] = (last non-zero column in the i-th row of b) + 1
+  vector<int> init_row_size;
+  // n_known_cols (last non-zero column of the discovered rows) + 1
+  int n_known_cols;
+
+  /**
+   * b[i] := b[i] + x * 2^expo_add * b[j].
+   * Special cases |x| &lt;= 1 and |x| &lt;= LONG_MAX are optimized.
+   * x should be a non-zero FT. x*2^expo_add must represent an integer (typically coming from
+   * rnd_we).
+   * If row_op_force_long=true, x is always converted to (2^expo * long) instead
+   * of (2^expo * ZT), which is faster if ZT=mpz_t but might lead to a loss of
+   * precision.
+   */
+  void row_addmul_we(int i, int j, const FT &x, long expo_add);
+  /**
+   * Special cases of row_addmul_we
+   */
+  void row_add(int i, int j);
+  void row_sub(int i, int j);
+  void row_addmul_si(int i, int j, long x);
+  void row_addmul_si_2exp(int i, int j, long x, long expo);
+  void row_addmul_2exp(int i, int j, const ZT &x, long expo);
+
+  /**
+   * Basis of the lattice (floatting point)
+   */
+  Matrix<FT> bf;
+
+  /**
+   * R_history stores the history of the computation of R
+   * Example: R[i][j][k] is the index k of R[i] when the coefficient j was known
+   */
+  vector<vector<vector<FT>>> R_history;
+
+  // If updated_R, R[n_known_rows][0] to R[n_known_rows][n_known_rows - 1] is valid
+  bool updated_R;
+
+  // Stores at index i the inverse of R(i, i)
+  vector<FT> R_inverse_diag;
+
+  // Compute the unimodular matrix u
+  const bool enable_transform;
+
+  Matrix<ZT> &u;  // Transform
+
+  /**
+   * Computation of the inverse transform matrix (transposed).
+   * This works only if enable_transform=true.
+   * This matrix has very large coefficients, computing it is slow.
+   */
+  const bool enable_inverse_transform;
+
+  Matrix<ZT> &u_inv_t;  // Transposed inverse transform
+
+  /**
+   * Changes the behaviour of row_addmul(_we).
+   * See the description of row_addmul.
+   */
+  const bool row_op_force_long;
+
+  // Store the approximate norm of b[i].
+  vector<FT> norm_square_b;
+  // If enable_row_expo, ||b[i]||^2 = norm_square_b[i] * 2^{expo_norm_square_b}
+  vector<long> expo_norm_square_b;
+
+  // As in hplll. This variable is only used for check with DEBUG.
+  // If col_kept[k] = true, b[k] has not changed since last time we use it.
+  vector<bool> col_kept;
+
+  /* Objects and methods for the naive computation of the R factor using Householder. */
+
+public:
+  /**
+   * Full computation of the matrix R.
+   */
+  void update_R_naively();
+
+  /**
+   * Apply Householder transformation on row i.
+   */
+  void update_R_naively(int i);
+
+  /**
+   * Return R_naively(i, j) = f (* 2^expo, if enable_row_expo)
+   */
+  inline void get_R_naively(FT &f, int i, int j, long &expo);
+
+  /**
+   * Squared norm of b[k].
+   * Use row_expo_naively if enable_row_expo is used.
+   * f * 2^expo = ||b[i]||^2
+   */
+  inline void norm_square_b_row_naively(FT &f, int k, long &expo);
+
+  /**
+   * Truncated norm square of R_naively[k], with coefficients of R_naively[k][0..end-1].
+   */
+  inline void norm_square_R_row_naively(FT &f, int k, int end, long &expo);
+
+private:
+  /**
+   * b = R * q_householder.
+   * R is lower triangular and the diagonal coefficient are >= 0.
+   */
+  Matrix<FT> R_naively;
+
+  /**
+   * Vector v following [MSV, ISSAC'09].
+   */
+  Matrix<FT> V_naively;
+
+  /**
+   * Sigma values following [MSV, ISSAC'09].
+   */
+  vector<FT> sigma_naively;
+
+  /**
+   * When enable_row_expo=true, row_expo_naively[i] is the smallest non-negative integer
+   * such that b(i, j) &lt;= 2^row_expo_naively[i] for all j. Otherwise this array is empty.
+   */
+  vector<long> row_expo_naively;
+
+  /**
+   * R[i] is invalid for i >= n_known_rows_naively.
+   */
+  int n_known_rows_naively;
+};
+
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::get_R(FT &f, int i, int j, long &expo)
+{
+  get_R(f, i, j);
+  expo = row_expo[i];
+}
+
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::get_R(FT &f, int i, int j)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < d && j >= 0 && j <= i);
+  f = R(i, j);
+}
+
+template <class ZT, class FT> inline MatrixRow<FT> MatHouseholder<ZT, FT>::get_R(int i, long &expo)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < d);
+  expo = row_expo[i];
+
+  return R[i];
+}
+
+template <class ZT, class FT> MatrixRow<ZT> MatHouseholder<ZT, FT>::get_b(int i)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < d);
+  return b[i];
+}
+
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::update_R(int i)
+{
+  // last_j = true since we want the full computation of R[i]
+  update_R(i, true);
+}
+
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::update_R()
+{
+  for (int i = 0; i < d; i++)
+    update_R(i);
+}
+
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::norm_square_b_row(FT &f, int k, long &expo)
+{
+  FPLLL_DEBUG_CHECK(k >= 0 && k < d);
+
+  // TODO: maybe can be only dot_product(f, bf[k], n_known_rows). However, since the
+  // FPLLL_DEBUG_CHECK is more constraint, fall back to this version of dot_product
+  bf[k].dot_product(f, bf[k], 0, n_known_cols);
+
+  if (enable_row_expo)
+    expo = 2 * row_expo[k];
+  else
+    expo = 0;
+}
+
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::norm_square_R_row(FT &f, int k, int beg, int end, long &expo)
+{
+  FPLLL_DEBUG_CHECK(k >= 0 && k < d);
+  FPLLL_DEBUG_CHECK(beg <= end);
+  FPLLL_DEBUG_CHECK(end <= k);
+  if (end == beg)
+    f = 0.0;
+  else
+    R[k].dot_product(f, R[k], beg, end);
+
+  if (enable_row_expo)
+    expo = 2 * row_expo[k];
+  else
+    expo = 0;
+}
+
+// TODO: maybe can merge some part of the code with norm_square_R_row?
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::norm_R_row(FT &f, int k, int beg, int end, long &expo)
+{
+  FPLLL_DEBUG_CHECK(k >= 0 && k < d);
+  FPLLL_DEBUG_CHECK(beg <= end);
+  if (end == beg)
+    f = 0.0;
+  else
+  {
+    R[k].dot_product(f, R[k], beg, end);
+    f.sqrt(f);
+  }
+
+  if (enable_row_expo)
+    expo = row_expo[k];
+  else
+    expo = 0;
+}
+
+// TODO: test seems to be strange
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::invalidate_row(int k)
+{
+  if (k < n_known_rows)
+    n_known_rows = k;
+}
+
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::recover_R(int i)
+{
+  FPLLL_DEBUG_CHECK(col_kept[i] == true);
+
+  // TODO: these are row operations.
+  for (int k = 0; k < i - 1; k++)
+    R(i, k) = R_history[i][k][k];
+  for (int k = i - 1; k < n; k++)
+    R(i, k) = R_history[i][i - 1][k];
+
+  updated_R = true;
+}
+
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::refresh_R_bf()
+{
+  for (int i = 0; i < d; i++)
+    refresh_R_bf(i);
+}
+
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::refresh_R()
+{
+  for (int i = 0; i < d; i++)
+    refresh_R(i);
+}
+
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::get_norm_square_b(FT &f, int i, long &expo)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < d);
+  expo = expo_norm_square_b[i];
+  f    = norm_square_b[i];
+}
+
+/* Objects and methods for the naive computation of the R factor using Householder. */
+
+template <class ZT, class FT> inline void MatHouseholder<ZT, FT>::update_R_naively()
+{
+  for (int i = 0; i < d; i++)
+    update_R_naively(i);
+}
+
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::get_R_naively(FT &f, int i, int j, long &expo)
+{
+  FPLLL_DEBUG_CHECK(i >= 0 && i < d && j >= 0 && j <= i);
+  f    = R_naively(i, j);
+  expo = row_expo_naively[i];
+}
+
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::norm_square_R_row_naively(FT &f, int k, int end, long &expo)
+{
+  FPLLL_DEBUG_CHECK(k >= 0 && k < d);
+  FPLLL_DEBUG_CHECK(0 <= end && end <= k);
+  if (end == 0)
+    f = 0.0;
+  else
+    // TODO: maybe can be only dot_product(f, R_naively[k], end). However, since the
+    // FPLLL_DEBUG_CHECK is more constraint, fall back to this version of dot_product
+    R_naively[k].dot_product(f, R_naively[k], 0, end);
+
+  if (enable_row_expo)
+    expo = 2 * row_expo_naively[k];
+  else
+    expo = 0;
+}
+
+template <class ZT, class FT>
+inline void MatHouseholder<ZT, FT>::norm_square_b_row_naively(FT &f, int k, long &expo)
+{
+  FPLLL_DEBUG_CHECK(k >= 0 && k < d);
+  if (enable_row_expo)
+  {
+    // TODO: maybe can be only dot_product(ztmp0, b[k], n). However, since the FPLLL_DEBUG_CHECK
+    // is more constraint, fall back to this version of dot_product. However, since it is n here,
+    // a problem with the check will probably not appear.
+    b[k].dot_product(ztmp0, b[k], 0, n);
+    ztmp0.get_f_exp(f, expo);
+  }
+  else
+  {
+    expo = 0;
+    // TODO: maybe can be only dot_product(ztmp0, b[k], n). However, since the FPLLL_DEBUG_CHECK
+    // is more constraint, fall back to this version of dot_product. However, since it is n here,
+    // a problem with the check will probably not appear.
+    b[k].dot_product(ztmp0, b[k], 0, n);
+    f.set_z(ztmp0);
+  }
+}
+
+FPLLL_END_NAMESPACE
+
+#endif  // FPLLL_HOUSEHOLDER_H
diff --git a/fplll/io/json.hpp b/fplll/io/json.hpp
new file mode 100644 (file)
index 0000000..cb37406
--- /dev/null
@@ -0,0 +1,10591 @@
+/*
+    __ _____ _____ _____
+ __|  |   __|     |   | |  JSON for Modern C++
+|  |  |__   |  |  | | | |  version 2.0.3
+|_____|_____|_____|_|___|  https://github.com/nlohmann/json
+
+Licensed under the MIT License <http://opensource.org/licenses/MIT>.
+Copyright (c) 2013-2016 Niels Lohmann <http://nlohmann.me>.
+
+Permission is hereby  granted, free of charge, to any  person obtaining a copy
+of this software and associated  documentation files (the "Software"), to deal
+in the Software  without restriction, including without  limitation the rights
+to  use, copy,  modify, merge,  publish, distribute,  sublicense, and/or  sell
+copies  of  the Software,  and  to  permit persons  to  whom  the Software  is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE  IS PROVIDED "AS  IS", WITHOUT WARRANTY  OF ANY KIND,  EXPRESS OR
+IMPLIED,  INCLUDING BUT  NOT  LIMITED TO  THE  WARRANTIES OF  MERCHANTABILITY,
+FITNESS FOR  A PARTICULAR PURPOSE AND  NONINFRINGEMENT. IN NO EVENT  SHALL THE
+AUTHORS  OR COPYRIGHT  HOLDERS  BE  LIABLE FOR  ANY  CLAIM,  DAMAGES OR  OTHER
+LIABILITY, WHETHER IN AN ACTION OF  CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE  OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#ifndef NLOHMANN_JSON_HPP
+#define NLOHMANN_JSON_HPP
+
+#include <algorithm>
+#include <array>
+#include <cassert>
+#include <ciso646>
+#include <cmath>
+#include <cstddef>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
+#include <functional>
+#include <initializer_list>
+#include <iomanip>
+#include <iostream>
+#include <iterator>
+#include <limits>
+#include <locale>
+#include <map>
+#include <memory>
+#include <numeric>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <type_traits>
+#include <utility>
+#include <vector>
+
+// exclude unsupported compilers
+#if defined(__clang__)
+    #define CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
+    #if CLANG_VERSION < 30400
+        #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers"
+    #endif
+#elif defined(__GNUC__)
+    #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+    #if GCC_VERSION < 40800
+        #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers"
+    #endif
+#endif
+
+// disable float-equal warnings on GCC/clang
+#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)
+    #pragma GCC diagnostic push
+    #pragma GCC diagnostic ignored "-Wfloat-equal"
+#endif
+
+// allow for portable deprecation warnings
+#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)
+    #define JSON_DEPRECATED __attribute__((deprecated))
+#elif defined(_MSC_VER)
+    #define JSON_DEPRECATED __declspec(deprecated)
+#else
+    #define JSON_DEPRECATED
+#endif
+
+/*!
+@brief namespace for Niels Lohmann
+@see https://github.com/nlohmann
+@since version 1.0.0
+*/
+namespace nlohmann
+{
+
+
+/*!
+@brief unnamed namespace with internal helper functions
+@since version 1.0.0
+*/
+namespace
+{
+/*!
+@brief Helper to determine whether there's a key_type for T.
+
+Thus helper is used to tell associative containers apart from other containers
+such as sequence containers. For instance, `std::map` passes the test as it
+contains a `mapped_type`, whereas `std::vector` fails the test.
+
+@sa http://stackoverflow.com/a/7728728/266378
+@since version 1.0.0
+*/
+template<typename T>
+struct has_mapped_type
+{
+  private:
+    template<typename C> static char test(typename C::mapped_type*);
+    template<typename C> static char (&test(...))[2];
+  public:
+    static constexpr bool value = sizeof(test<T>(0)) == 1;
+};
+
+/*!
+@brief helper class to create locales with decimal point
+
+This struct is used a default locale during the JSON serialization. JSON
+requires the decimal point to be `.`, so this function overloads the
+`do_decimal_point()` function to return `.`. This function is called by
+float-to-string conversions to retrieve the decimal separator between integer
+and fractional parts.
+
+@sa https://github.com/nlohmann/json/issues/51#issuecomment-86869315
+@since version 2.0.0
+*/
+struct DecimalSeparator : std::numpunct<char>
+{
+    char do_decimal_point() const
+    {
+        return '.';
+    }
+};
+
+}
+
+/*!
+@brief a class to store JSON values
+
+@tparam ObjectType type for JSON objects (`std::map` by default; will be used
+in @ref object_t)
+@tparam ArrayType type for JSON arrays (`std::vector` by default; will be used
+in @ref array_t)
+@tparam StringType type for JSON strings and object keys (`std::string` by
+default; will be used in @ref string_t)
+@tparam BooleanType type for JSON booleans (`bool` by default; will be used
+in @ref boolean_t)
+@tparam NumberIntegerType type for JSON integer numbers (`int64_t` by
+default; will be used in @ref number_integer_t)
+@tparam NumberUnsignedType type for JSON unsigned integer numbers (@c
+`uint64_t` by default; will be used in @ref number_unsigned_t)
+@tparam NumberFloatType type for JSON floating-point numbers (`double` by
+default; will be used in @ref number_float_t)
+@tparam AllocatorType type of the allocator to use (`std::allocator` by
+default)
+
+@requirement The class satisfies the following concept requirements:
+- Basic
+ - [DefaultConstructible](http://en.cppreference.com/w/cpp/concept/DefaultConstructible):
+   JSON values can be default constructed. The result will be a JSON null value.
+ - [MoveConstructible](http://en.cppreference.com/w/cpp/concept/MoveConstructible):
+   A JSON value can be constructed from an rvalue argument.
+ - [CopyConstructible](http://en.cppreference.com/w/cpp/concept/CopyConstructible):
+   A JSON value can be copy-constructed from an lvalue expression.
+ - [MoveAssignable](http://en.cppreference.com/w/cpp/concept/MoveAssignable):
+   A JSON value van be assigned from an rvalue argument.
+ - [CopyAssignable](http://en.cppreference.com/w/cpp/concept/CopyAssignable):
+   A JSON value can be copy-assigned from an lvalue expression.
+ - [Destructible](http://en.cppreference.com/w/cpp/concept/Destructible):
+   JSON values can be destructed.
+- Layout
+ - [StandardLayoutType](http://en.cppreference.com/w/cpp/concept/StandardLayoutType):
+   JSON values have
+   [standard layout](http://en.cppreference.com/w/cpp/language/data_members#Standard_layout):
+   All non-static data members are private and standard layout types, the class
+   has no virtual functions or (virtual) base classes.
+- Library-wide
+ - [EqualityComparable](http://en.cppreference.com/w/cpp/concept/EqualityComparable):
+   JSON values can be compared with `==`, see @ref
+   operator==(const_reference,const_reference).
+ - [LessThanComparable](http://en.cppreference.com/w/cpp/concept/LessThanComparable):
+   JSON values can be compared with `<`, see @ref
+   operator<(const_reference,const_reference).
+ - [Swappable](http://en.cppreference.com/w/cpp/concept/Swappable):
+   Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of
+   other compatible types, using unqualified function call @ref swap().
+ - [NullablePointer](http://en.cppreference.com/w/cpp/concept/NullablePointer):
+   JSON values can be compared against `std::nullptr_t` objects which are used
+   to model the `null` value.
+- Container
+ - [Container](http://en.cppreference.com/w/cpp/concept/Container):
+   JSON values can be used like STL containers and provide iterator access.
+ - [ReversibleContainer](http://en.cppreference.com/w/cpp/concept/ReversibleContainer);
+   JSON values can be used like STL containers and provide reverse iterator
+   access.
+
+@invariant The member variables @a m_value and @a m_type have the following
+relationship:
+- If `m_type == value_t::object`, then `m_value.object != nullptr`.
+- If `m_type == value_t::array`, then `m_value.array != nullptr`.
+- If `m_type == value_t::string`, then `m_value.string != nullptr`.
+The invariants are checked by member function assert_invariant().
+
+@internal
+@note ObjectType trick from http://stackoverflow.com/a/9860911
+@endinternal
+
+@see [RFC 7159: The JavaScript Object Notation (JSON) Data Interchange
+Format](http://rfc7159.net/rfc7159)
+
+@since version 1.0.0
+
+@nosubgrouping
+*/
+template <
+    template<typename U, typename V, typename... Args> class ObjectType = std::map,
+    template<typename U, typename... Args> class ArrayType = std::vector,
+    class StringType = std::string,
+    class BooleanType = bool,
+    class NumberIntegerType = std::int64_t,
+    class NumberUnsignedType = std::uint64_t,
+    class NumberFloatType = double,
+    template<typename U> class AllocatorType = std::allocator
+    >
+class basic_json
+{
+  private:
+    /// workaround type for MSVC
+    using basic_json_t = basic_json<ObjectType, ArrayType, StringType,
+          BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType,
+          AllocatorType>;
+
+  public:
+    // forward declarations
+    template<typename Base> class json_reverse_iterator;
+    class json_pointer;
+
+    /////////////////////
+    // container types //
+    /////////////////////
+
+    /// @name container types
+    /// The canonic container types to use @ref basic_json like any other STL
+    /// container.
+    /// @{
+
+    /// the type of elements in a basic_json container
+    using value_type = basic_json;
+
+    /// the type of an element reference
+    using reference = value_type&;
+    /// the type of an element const reference
+    using const_reference = const value_type&;
+
+    /// a type to represent differences between iterators
+    using difference_type = std::ptrdiff_t;
+    /// a type to represent container sizes
+    using size_type = std::size_t;
+
+    /// the allocator type
+    using allocator_type = AllocatorType<basic_json>;
+
+    /// the type of an element pointer
+    using pointer = typename std::allocator_traits<allocator_type>::pointer;
+    /// the type of an element const pointer
+    using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer;
+
+    /// an iterator for a basic_json container
+    class iterator;
+    /// a const iterator for a basic_json container
+    class const_iterator;
+    /// a reverse iterator for a basic_json container
+    using reverse_iterator = json_reverse_iterator<typename basic_json::iterator>;
+    /// a const reverse iterator for a basic_json container
+    using const_reverse_iterator = json_reverse_iterator<typename basic_json::const_iterator>;
+
+    /// @}
+
+
+    /*!
+    @brief returns the allocator associated with the container
+    */
+    static allocator_type get_allocator()
+    {
+        return allocator_type();
+    }
+
+
+    ///////////////////////////
+    // JSON value data types //
+    ///////////////////////////
+
+    /// @name JSON value data types
+    /// The data types to store a JSON value. These types are derived from
+    /// the template arguments passed to class @ref basic_json.
+    /// @{
+
+    /*!
+    @brief a type for an object
+
+    [RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows:
+    > An object is an unordered collection of zero or more name/value pairs,
+    > where a name is a string and a value is a string, number, boolean, null,
+    > object, or array.
+
+    To store objects in C++, a type is defined by the template parameters
+    described below.
+
+    @tparam ObjectType  the container to store objects (e.g., `std::map` or
+    `std::unordered_map`)
+    @tparam StringType the type of the keys or names (e.g., `std::string`).
+    The comparison function `std::less<StringType>` is used to order elements
+    inside the container.
+    @tparam AllocatorType the allocator to use for objects (e.g.,
+    `std::allocator`)
+
+    #### Default type
+
+    With the default values for @a ObjectType (`std::map`), @a StringType
+    (`std::string`), and @a AllocatorType (`std::allocator`), the default
+    value for @a object_t is:
+
+    @code {.cpp}
+    std::map<
+      std::string, // key_type
+      basic_json, // value_type
+      std::less<std::string>, // key_compare
+      std::allocator<std::pair<const std::string, basic_json>> // allocator_type
+    >
+    @endcode
+
+    #### Behavior
+
+    The choice of @a object_t influences the behavior of the JSON class. With
+    the default type, objects have the following behavior:
+
+    - When all names are unique, objects will be interoperable in the sense
+      that all software implementations receiving that object will agree on
+      the name-value mappings.
+    - When the names within an object are not unique, later stored name/value
+      pairs overwrite previously stored name/value pairs, leaving the used
+      names unique. For instance, `{"key": 1}` and `{"key": 2, "key": 1}` will
+      be treated as equal and both stored as `{"key": 1}`.
+    - Internally, name/value pairs are stored in lexicographical order of the
+      names. Objects will also be serialized (see @ref dump) in this order.
+      For instance, `{"b": 1, "a": 2}` and `{"a": 2, "b": 1}` will be stored
+      and serialized as `{"a": 2, "b": 1}`.
+    - When comparing objects, the order of the name/value pairs is irrelevant.
+      This makes objects interoperable in the sense that they will not be
+      affected by these differences. For instance, `{"b": 1, "a": 2}` and
+      `{"a": 2, "b": 1}` will be treated as equal.
+
+    #### Limits
+
+    [RFC 7159](http://rfc7159.net/rfc7159) specifies:
+    > An implementation may set limits on the maximum depth of nesting.
+
+    In this class, the object's limit of nesting is not constraint explicitly.
+    However, a maximum depth of nesting may be introduced by the compiler or
+    runtime environment. A theoretical limit can be queried by calling the
+    @ref max_size function of a JSON object.
+
+    #### Storage
+
+    Objects are stored as pointers in a @ref basic_json type. That is, for any
+    access to object values, a pointer of type `object_t*` must be
+    dereferenced.
+
+    @sa @ref array_t -- type for an array value
+
+    @since version 1.0.0
+
+    @note The order name/value pairs are added to the object is *not*
+    preserved by the library. Therefore, iterating an object may return
+    name/value pairs in a different order than they were originally stored. In
+    fact, keys will be traversed in alphabetical order as `std::map` with
+    `std::less` is used by default. Please note this behavior conforms to [RFC
+    7159](http://rfc7159.net/rfc7159), because any order implements the
+    specified "unordered" nature of JSON objects.
+    */
+    using object_t = ObjectType<StringType,
+          basic_json,
+          std::less<StringType>,
+          AllocatorType<std::pair<const StringType,
+          basic_json>>>;
+
+    /*!
+    @brief a type for an array
+
+    [RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows:
+    > An array is an ordered sequence of zero or more values.
+
+    To store objects in C++, a type is defined by the template parameters
+    explained below.
+
+    @tparam ArrayType  container type to store arrays (e.g., `std::vector` or
+    `std::list`)
+    @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`)
+
+    #### Default type
+
+    With the default values for @a ArrayType (`std::vector`) and @a
+    AllocatorType (`std::allocator`), the default value for @a array_t is:
+
+    @code {.cpp}
+    std::vector<
+      basic_json, // value_type
+      std::allocator<basic_json> // allocator_type
+    >
+    @endcode
+
+    #### Limits
+
+    [RFC 7159](http://rfc7159.net/rfc7159) specifies:
+    > An implementation may set limits on the maximum depth of nesting.
+
+    In this class, the array's limit of nesting is not constraint explicitly.
+    However, a maximum depth of nesting may be introduced by the compiler or
+    runtime environment. A theoretical limit can be queried by calling the
+    @ref max_size function of a JSON array.
+
+    #### Storage
+
+    Arrays are stored as pointers in a @ref basic_json type. That is, for any
+    access to array values, a pointer of type `array_t*` must be dereferenced.
+
+    @sa @ref object_t -- type for an object value
+
+    @since version 1.0.0
+    */
+    using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
+
+    /*!
+    @brief a type for a string
+
+    [RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows:
+    > A string is a sequence of zero or more Unicode characters.
+
+    To store objects in C++, a type is defined by the template parameter
+    described below. Unicode values are split by the JSON class into
+    byte-sized characters during deserialization.
+
+    @tparam StringType  the container to store strings (e.g., `std::string`).
+    Note this container is used for keys/names in objects, see @ref object_t.
+
+    #### Default type
+
+    With the default values for @a StringType (`std::string`), the default
+    value for @a string_t is:
+
+    @code {.cpp}
+    std::string
+    @endcode
+
+    #### String comparison
+
+    [RFC 7159](http://rfc7159.net/rfc7159) states:
+    > Software implementations are typically required to test names of object
+    > members for equality. Implementations that transform the textual
+    > representation into sequences of Unicode code units and then perform the
+    > comparison numerically, code unit by code unit, are interoperable in the
+    > sense that implementations will agree in all cases on equality or
+    > inequality of two strings. For example, implementations that compare
+    > strings with escaped characters unconverted may incorrectly find that
+    > `"a\\b"` and `"a\u005Cb"` are not equal.
+
+    This implementation is interoperable as it does compare strings code unit
+    by code unit.
+
+    #### Storage
+
+    String values are stored as pointers in a @ref basic_json type. That is,
+    for any access to string values, a pointer of type `string_t*` must be
+    dereferenced.
+
+    @since version 1.0.0
+    */
+    using string_t = StringType;
+
+    /*!
+    @brief a type for a boolean
+
+    [RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a
+    type which differentiates the two literals `true` and `false`.
+
+    To store objects in C++, a type is defined by the template parameter @a
+    BooleanType which chooses the type to use.
+
+    #### Default type
+
+    With the default values for @a BooleanType (`bool`), the default value for
+    @a boolean_t is:
+
+    @code {.cpp}
+    bool
+    @endcode
+
+    #### Storage
+
+    Boolean values are stored directly inside a @ref basic_json type.
+
+    @since version 1.0.0
+    */
+    using boolean_t = BooleanType;
+
+    /*!
+    @brief a type for a number (integer)
+
+    [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows:
+    > The representation of numbers is similar to that used in most
+    > programming languages. A number is represented in base 10 using decimal
+    > digits. It contains an integer component that may be prefixed with an
+    > optional minus sign, which may be followed by a fraction part and/or an
+    > exponent part. Leading zeros are not allowed. (...) Numeric values that
+    > cannot be represented in the grammar below (such as Infinity and NaN)
+    > are not permitted.
+
+    This description includes both integer and floating-point numbers.
+    However, C++ allows more precise storage if it is known whether the number
+    is a signed integer, an unsigned integer or a floating-point number.
+    Therefore, three different types, @ref number_integer_t, @ref
+    number_unsigned_t and @ref number_float_t are used.
+
+    To store integer numbers in C++, a type is defined by the template
+    parameter @a NumberIntegerType which chooses the type to use.
+
+    #### Default type
+
+    With the default values for @a NumberIntegerType (`int64_t`), the default
+    value for @a number_integer_t is:
+
+    @code {.cpp}
+    int64_t
+    @endcode
+
+    #### Default behavior
+
+    - The restrictions about leading zeros is not enforced in C++. Instead,
+      leading zeros in integer literals lead to an interpretation as octal
+      number. Internally, the value will be stored as decimal number. For
+      instance, the C++ integer literal `010` will be serialized to `8`.
+      During deserialization, leading zeros yield an error.
+    - Not-a-number (NaN) values will be serialized to `null`.
+
+    #### Limits
+
+    [RFC 7159](http://rfc7159.net/rfc7159) specifies:
+    > An implementation may set limits on the range and precision of numbers.
+
+    When the default type is used, the maximal integer number that can be
+    stored is `9223372036854775807` (INT64_MAX) and the minimal integer number
+    that can be stored is `-9223372036854775808` (INT64_MIN). Integer numbers
+    that are out of range will yield over/underflow when used in a
+    constructor. During deserialization, too large or small integer numbers
+    will be automatically be stored as @ref number_unsigned_t or @ref
+    number_float_t.
+
+    [RFC 7159](http://rfc7159.net/rfc7159) further states:
+    > Note that when such software is used, numbers that are integers and are
+    > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense
+    > that implementations will agree exactly on their numeric values.
+
+    As this range is a subrange of the exactly supported range [INT64_MIN,
+    INT64_MAX], this class's integer type is interoperable.
+
+    #### Storage
+
+    Integer number values are stored directly inside a @ref basic_json type.
+
+    @sa @ref number_float_t -- type for number values (floating-point)
+
+    @sa @ref number_unsigned_t -- type for number values (unsigned integer)
+
+    @since version 1.0.0
+    */
+    using number_integer_t = NumberIntegerType;
+
+    /*!
+    @brief a type for a number (unsigned)
+
+    [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows:
+    > The representation of numbers is similar to that used in most
+    > programming languages. A number is represented in base 10 using decimal
+    > digits. It contains an integer component that may be prefixed with an
+    > optional minus sign, which may be followed by a fraction part and/or an
+    > exponent part. Leading zeros are not allowed. (...) Numeric values that
+    > cannot be represented in the grammar below (such as Infinity and NaN)
+    > are not permitted.
+
+    This description includes both integer and floating-point numbers.
+    However, C++ allows more precise storage if it is known whether the number
+    is a signed integer, an unsigned integer or a floating-point number.
+    Therefore, three different types, @ref number_integer_t, @ref
+    number_unsigned_t and @ref number_float_t are used.
+
+    To store unsigned integer numbers in C++, a type is defined by the
+    template parameter @a NumberUnsignedType which chooses the type to use.
+
+    #### Default type
+
+    With the default values for @a NumberUnsignedType (`uint64_t`), the
+    default value for @a number_unsigned_t is:
+
+    @code {.cpp}
+    uint64_t
+    @endcode
+
+    #### Default behavior
+
+    - The restrictions about leading zeros is not enforced in C++. Instead,
+      leading zeros in integer literals lead to an interpretation as octal
+      number. Internally, the value will be stored as decimal number. For
+      instance, the C++ integer literal `010` will be serialized to `8`.
+      During deserialization, leading zeros yield an error.
+    - Not-a-number (NaN) values will be serialized to `null`.
+
+    #### Limits
+
+    [RFC 7159](http://rfc7159.net/rfc7159) specifies:
+    > An implementation may set limits on the range and precision of numbers.
+
+    When the default type is used, the maximal integer number that can be
+    stored is `18446744073709551615` (UINT64_MAX) and the minimal integer
+    number that can be stored is `0`. Integer numbers that are out of range
+    will yield over/underflow when used in a constructor. During
+    deserialization, too large or small integer numbers will be automatically
+    be stored as @ref number_integer_t or @ref number_float_t.
+
+    [RFC 7159](http://rfc7159.net/rfc7159) further states:
+    > Note that when such software is used, numbers that are integers and are
+    > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense
+    > that implementations will agree exactly on their numeric values.
+
+    As this range is a subrange (when considered in conjunction with the
+    number_integer_t type) of the exactly supported range [0, UINT64_MAX],
+    this class's integer type is interoperable.
+
+    #### Storage
+
+    Integer number values are stored directly inside a @ref basic_json type.
+
+    @sa @ref number_float_t -- type for number values (floating-point)
+    @sa @ref number_integer_t -- type for number values (integer)
+
+    @since version 2.0.0
+    */
+    using number_unsigned_t = NumberUnsignedType;
+
+    /*!
+    @brief a type for a number (floating-point)
+
+    [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows:
+    > The representation of numbers is similar to that used in most
+    > programming languages. A number is represented in base 10 using decimal
+    > digits. It contains an integer component that may be prefixed with an
+    > optional minus sign, which may be followed by a fraction part and/or an
+    > exponent part. Leading zeros are not allowed. (...) Numeric values that
+    > cannot be represented in the grammar below (such as Infinity and NaN)
+    > are not permitted.
+
+    This description includes both integer and floating-point numbers.
+    However, C++ allows more precise storage if it is known whether the number
+    is a signed integer, an unsigned integer or a floating-point number.
+    Therefore, three different types, @ref number_integer_t, @ref
+    number_unsigned_t and @ref number_float_t are used.
+
+    To store floating-point numbers in C++, a type is defined by the template
+    parameter @a NumberFloatType which chooses the type to use.
+
+    #### Default type
+
+    With the default values for @a NumberFloatType (`double`), the default
+    value for @a number_float_t is:
+
+    @code {.cpp}
+    double
+    @endcode
+
+    #### Default behavior
+
+    - The restrictions about leading zeros is not enforced in C++. Instead,
+      leading zeros in floating-point literals will be ignored. Internally,
+      the value will be stored as decimal number. For instance, the C++
+      floating-point literal `01.2` will be serialized to `1.2`. During
+      deserialization, leading zeros yield an error.
+    - Not-a-number (NaN) values will be serialized to `null`.
+
+    #### Limits
+
+    [RFC 7159](http://rfc7159.net/rfc7159) states:
+    > This specification allows implementations to set limits on the range and
+    > precision of numbers accepted. Since software that implements IEEE
+    > 754-2008 binary64 (double precision) numbers is generally available and
+    > widely used, good interoperability can be achieved by implementations
+    > that expect no more precision or range than these provide, in the sense
+    > that implementations will approximate JSON numbers within the expected
+    > precision.
+
+    This implementation does exactly follow this approach, as it uses double
+    precision floating-point numbers. Note values smaller than
+    `-1.79769313486232e+308` and values greater than `1.79769313486232e+308`
+    will be stored as NaN internally and be serialized to `null`.
+
+    #### Storage
+
+    Floating-point number values are stored directly inside a @ref basic_json
+    type.
+
+    @sa @ref number_integer_t -- type for number values (integer)
+
+    @sa @ref number_unsigned_t -- type for number values (unsigned integer)
+
+    @since version 1.0.0
+    */
+    using number_float_t = NumberFloatType;
+
+    /// @}
+
+
+    ///////////////////////////
+    // JSON type enumeration //
+    ///////////////////////////
+
+    /*!
+    @brief the JSON type enumeration
+
+    This enumeration collects the different JSON types. It is internally used
+    to distinguish the stored values, and the functions @ref is_null(), @ref
+    is_object(), @ref is_array(), @ref is_string(), @ref is_boolean(), @ref
+    is_number() (with @ref is_number_integer(), @ref is_number_unsigned(), and
+    @ref is_number_float()), @ref is_discarded(), @ref is_primitive(), and
+    @ref is_structured() rely on it.
+
+    @note There are three enumeration entries (number_integer,
+    number_unsigned, and number_float), because the library distinguishes
+    these three types for numbers: @ref number_unsigned_t is used for unsigned
+    integers, @ref number_integer_t is used for signed integers, and @ref
+    number_float_t is used for floating-point numbers or to approximate
+    integers which do not fit in the limits of their respective type.
+
+    @sa @ref basic_json(const value_t value_type) -- create a JSON value with
+    the default value for a given type
+
+    @since version 1.0.0
+    */
+    enum class value_t : uint8_t
+    {
+        null,            ///< null value
+        object,          ///< object (unordered set of name/value pairs)
+        array,           ///< array (ordered collection of values)
+        string,          ///< string value
+        boolean,         ///< boolean value
+        number_integer,  ///< number value (signed integer)
+        number_unsigned, ///< number value (unsigned integer)
+        number_float,    ///< number value (floating-point)
+        discarded        ///< discarded by the the parser callback function
+    };
+
+
+  private:
+
+    /// helper for exception-safe object creation
+    template<typename T, typename... Args>
+    static T* create(Args&& ... args)
+    {
+        AllocatorType<T> alloc;
+        auto deleter = [&](T * object)
+        {
+            alloc.deallocate(object, 1);
+        };
+        std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter);
+        alloc.construct(object.get(), std::forward<Args>(args)...);
+        assert(object.get() != nullptr);
+        return object.release();
+    }
+
+    ////////////////////////
+    // JSON value storage //
+    ////////////////////////
+
+    /*!
+    @brief a JSON value
+
+    The actual storage for a JSON value of the @ref basic_json class. This
+    union combines the different storage types for the JSON value types
+    defined in @ref value_t.
+
+    JSON type | value_t type    | used type
+    --------- | --------------- | ------------------------
+    object    | object          | pointer to @ref object_t
+    array     | array           | pointer to @ref array_t
+    string    | string          | pointer to @ref string_t
+    boolean   | boolean         | @ref boolean_t
+    number    | number_integer  | @ref number_integer_t
+    number    | number_unsigned | @ref number_unsigned_t
+    number    | number_float    | @ref number_float_t
+    null      | null            | *no value is stored*
+
+    @note Variable-length types (objects, arrays, and strings) are stored as
+    pointers. The size of the union should not exceed 64 bits if the default
+    value types are used.
+
+    @since version 1.0.0
+    */
+    union json_value
+    {
+        /// object (stored with pointer to save storage)
+        object_t* object;
+        /// array (stored with pointer to save storage)
+        array_t* array;
+        /// string (stored with pointer to save storage)
+        string_t* string;
+        /// boolean
+        boolean_t boolean;
+        /// number (integer)
+        number_integer_t number_integer;
+        /// number (unsigned integer)
+        number_unsigned_t number_unsigned;
+        /// number (floating-point)
+        number_float_t number_float;
+
+        /// default constructor (for null values)
+        json_value() = default;
+        /// constructor for booleans
+        json_value(boolean_t v) noexcept : boolean(v) {}
+        /// constructor for numbers (integer)
+        json_value(number_integer_t v) noexcept : number_integer(v) {}
+        /// constructor for numbers (unsigned)
+        json_value(number_unsigned_t v) noexcept : number_unsigned(v) {}
+        /// constructor for numbers (floating-point)
+        json_value(number_float_t v) noexcept : number_float(v) {}
+        /// constructor for empty values of a given type
+        json_value(value_t t)
+        {
+            switch (t)
+            {
+                case value_t::object:
+                {
+                    object = create<object_t>();
+                    break;
+                }
+
+                case value_t::array:
+                {
+                    array = create<array_t>();
+                    break;
+                }
+
+                case value_t::string:
+                {
+                    string = create<string_t>("");
+                    break;
+                }
+
+                case value_t::boolean:
+                {
+                    boolean = boolean_t(false);
+                    break;
+                }
+
+                case value_t::number_integer:
+                {
+                    number_integer = number_integer_t(0);
+                    break;
+                }
+
+                case value_t::number_unsigned:
+                {
+                    number_unsigned = number_unsigned_t(0);
+                    break;
+                }
+
+                case value_t::number_float:
+                {
+                    number_float = number_float_t(0.0);
+                    break;
+                }
+
+                default:
+                {
+                    break;
+                }
+            }
+        }
+
+        /// constructor for strings
+        json_value(const string_t& value)
+        {
+            string = create<string_t>(value);
+        }
+
+        /// constructor for objects
+        json_value(const object_t& value)
+        {
+            object = create<object_t>(value);
+        }
+
+        /// constructor for arrays
+        json_value(const array_t& value)
+        {
+            array = create<array_t>(value);
+        }
+    };
+
+    /*!
+    @brief checks the class invariants
+
+    This function asserts the class invariants. It needs to be called at the
+    end of every constructor to make sure that created objects respect the
+    invariant. Furthermore, it has to be called each time the type of a JSON
+    value is changed, because the invariant expresses a relationship between
+    @a m_type and @a m_value.
+    */
+    void assert_invariant() const
+    {
+        assert(m_type != value_t::object or m_value.object != nullptr);
+        assert(m_type != value_t::array or m_value.array != nullptr);
+        assert(m_type != value_t::string or m_value.string != nullptr);
+    }
+
+  public:
+    //////////////////////////
+    // JSON parser callback //
+    //////////////////////////
+
+    /*!
+    @brief JSON callback events
+
+    This enumeration lists the parser events that can trigger calling a
+    callback function of type @ref parser_callback_t during parsing.
+
+    @image html callback_events.png "Example when certain parse events are triggered"
+
+    @since version 1.0.0
+    */
+    enum class parse_event_t : uint8_t
+    {
+        /// the parser read `{` and started to process a JSON object
+        object_start,
+        /// the parser read `}` and finished processing a JSON object
+        object_end,
+        /// the parser read `[` and started to process a JSON array
+        array_start,
+        /// the parser read `]` and finished processing a JSON array
+        array_end,
+        /// the parser read a key of a value in an object
+        key,
+        /// the parser finished reading a JSON value
+        value
+    };
+
+    /*!
+    @brief per-element parser callback type
+
+    With a parser callback function, the result of parsing a JSON text can be
+    influenced. When passed to @ref parse(std::istream&, const
+    parser_callback_t) or @ref parse(const char*, const parser_callback_t),
+    it is called on certain events (passed as @ref parse_event_t via parameter
+    @a event) with a set recursion depth @a depth and context JSON value
+    @a parsed. The return value of the callback function is a boolean
+    indicating whether the element that emitted the callback shall be kept or
+    not.
+
+    We distinguish six scenarios (determined by the event type) in which the
+    callback function can be called. The following table describes the values
+    of the parameters @a depth, @a event, and @a parsed.
+
+    parameter @a event | description | parameter @a depth | parameter @a parsed
+    ------------------ | ----------- | ------------------ | -------------------
+    parse_event_t::object_start | the parser read `{` and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded
+    parse_event_t::key | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key
+    parse_event_t::object_end | the parser read `}` and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object
+    parse_event_t::array_start | the parser read `[` and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded
+    parse_event_t::array_end | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array
+    parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value
+
+    @image html callback_events.png "Example when certain parse events are triggered"
+
+    Discarding a value (i.e., returning `false`) has different effects
+    depending on the context in which function was called:
+
+    - Discarded values in structured types are skipped. That is, the parser
+      will behave as if the discarded value was never read.
+    - In case a value outside a structured type is skipped, it is replaced
+      with `null`. This case happens if the top-level element is skipped.
+
+    @param[in] depth  the depth of the recursion during parsing
+
+    @param[in] event  an event of type parse_event_t indicating the context in
+    the callback function has been called
+
+    @param[in,out] parsed  the current intermediate parse result; note that
+    writing to this value has no effect for parse_event_t::key events
+
+    @return Whether the JSON value which called the function during parsing
+    should be kept (`true`) or not (`false`). In the latter case, it is either
+    skipped completely or replaced by an empty discarded object.
+
+    @sa @ref parse(std::istream&, parser_callback_t) or
+    @ref parse(const char*, parser_callback_t) for examples
+
+    @since version 1.0.0
+    */
+    using parser_callback_t = std::function<bool(int depth,
+                              parse_event_t event,
+                              basic_json& parsed)>;
+
+
+    //////////////////
+    // constructors //
+    //////////////////
+
+    /// @name constructors and destructors
+    /// Constructors of class @ref basic_json, copy/move constructor, copy
+    /// assignment, static functions creating objects, and the destructor.
+    /// @{
+
+    /*!
+    @brief create an empty value with a given type
+
+    Create an empty JSON value with a given type. The value will be default
+    initialized with an empty value which depends on the type:
+
+    Value type  | initial value
+    ----------- | -------------
+    null        | `null`
+    boolean     | `false`
+    string      | `""`
+    number      | `0`
+    object      | `{}`
+    array       | `[]`
+
+    @param[in] value_type  the type of the value to create
+
+    @complexity Constant.
+
+    @throw std::bad_alloc if allocation for object, array, or string value
+    fails
+
+    @liveexample{The following code shows the constructor for different @ref
+    value_t values,basic_json__value_t}
+
+    @sa @ref basic_json(std::nullptr_t) -- create a `null` value
+    @sa @ref basic_json(boolean_t value) -- create a boolean value
+    @sa @ref basic_json(const string_t&) -- create a string value
+    @sa @ref basic_json(const object_t&) -- create a object value
+    @sa @ref basic_json(const array_t&) -- create a array value
+    @sa @ref basic_json(const number_float_t) -- create a number
+    (floating-point) value
+    @sa @ref basic_json(const number_integer_t) -- create a number (integer)
+    value
+    @sa @ref basic_json(const number_unsigned_t) -- create a number (unsigned)
+    value
+
+    @since version 1.0.0
+    */
+    basic_json(const value_t value_type)
+        : m_type(value_type), m_value(value_type)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create a null object
+
+    Create a `null` JSON value. It either takes a null pointer as parameter
+    (explicitly creating `null`) or no parameter (implicitly creating `null`).
+    The passed null pointer itself is not read -- it is only used to choose
+    the right constructor.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this constructor never throws
+    exceptions.
+
+    @liveexample{The following code shows the constructor with and without a
+    null pointer parameter.,basic_json__nullptr_t}
+
+    @since version 1.0.0
+    */
+    basic_json(std::nullptr_t = nullptr) noexcept
+        : basic_json(value_t::null)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an object (explicit)
+
+    Create an object JSON value with a given content.
+
+    @param[in] val  a value for the object
+
+    @complexity Linear in the size of the passed @a val.
+
+    @throw std::bad_alloc if allocation for object value fails
+
+    @liveexample{The following code shows the constructor with an @ref
+    object_t parameter.,basic_json__object_t}
+
+    @sa @ref basic_json(const CompatibleObjectType&) -- create an object value
+    from a compatible STL container
+
+    @since version 1.0.0
+    */
+    basic_json(const object_t& val)
+        : m_type(value_t::object), m_value(val)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an object (implicit)
+
+    Create an object JSON value with a given content. This constructor allows
+    any type @a CompatibleObjectType that can be used to construct values of
+    type @ref object_t.
+
+    @tparam CompatibleObjectType An object type whose `key_type` and
+    `value_type` is compatible to @ref object_t. Examples include `std::map`,
+    `std::unordered_map`, `std::multimap`, and `std::unordered_multimap` with
+    a `key_type` of `std::string`, and a `value_type` from which a @ref
+    basic_json value can be constructed.
+
+    @param[in] val  a value for the object
+
+    @complexity Linear in the size of the passed @a val.
+
+    @throw std::bad_alloc if allocation for object value fails
+
+    @liveexample{The following code shows the constructor with several
+    compatible object type parameters.,basic_json__CompatibleObjectType}
+
+    @sa @ref basic_json(const object_t&) -- create an object value
+
+    @since version 1.0.0
+    */
+    template<class CompatibleObjectType, typename std::enable_if<
+                 std::is_constructible<typename object_t::key_type, typename CompatibleObjectType::key_type>::value and
+                 std::is_constructible<basic_json, typename CompatibleObjectType::mapped_type>::value, int>::type = 0>
+    basic_json(const CompatibleObjectType& val)
+        : m_type(value_t::object)
+    {
+        using std::begin;
+        using std::end;
+        m_value.object = create<object_t>(begin(val), end(val));
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an array (explicit)
+
+    Create an array JSON value with a given content.
+
+    @param[in] val  a value for the array
+
+    @complexity Linear in the size of the passed @a val.
+
+    @throw std::bad_alloc if allocation for array value fails
+
+    @liveexample{The following code shows the constructor with an @ref array_t
+    parameter.,basic_json__array_t}
+
+    @sa @ref basic_json(const CompatibleArrayType&) -- create an array value
+    from a compatible STL containers
+
+    @since version 1.0.0
+    */
+    basic_json(const array_t& val)
+        : m_type(value_t::array), m_value(val)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an array (implicit)
+
+    Create an array JSON value with a given content. This constructor allows
+    any type @a CompatibleArrayType that can be used to construct values of
+    type @ref array_t.
+
+    @tparam CompatibleArrayType An object type whose `value_type` is
+    compatible to @ref array_t. Examples include `std::vector`, `std::deque`,
+    `std::list`, `std::forward_list`, `std::array`, `std::set`,
+    `std::unordered_set`, `std::multiset`, and `unordered_multiset` with a
+    `value_type` from which a @ref basic_json value can be constructed.
+
+    @param[in] val  a value for the array
+
+    @complexity Linear in the size of the passed @a val.
+
+    @throw std::bad_alloc if allocation for array value fails
+
+    @liveexample{The following code shows the constructor with several
+    compatible array type parameters.,basic_json__CompatibleArrayType}
+
+    @sa @ref basic_json(const array_t&) -- create an array value
+
+    @since version 1.0.0
+    */
+    template<class CompatibleArrayType, typename std::enable_if<
+                 not std::is_same<CompatibleArrayType, typename basic_json_t::iterator>::value and
+                 not std::is_same<CompatibleArrayType, typename basic_json_t::const_iterator>::value and
+                 not std::is_same<CompatibleArrayType, typename basic_json_t::reverse_iterator>::value and
+                 not std::is_same<CompatibleArrayType, typename basic_json_t::const_reverse_iterator>::value and
+                 not std::is_same<CompatibleArrayType, typename array_t::iterator>::value and
+                 not std::is_same<CompatibleArrayType, typename array_t::const_iterator>::value and
+                 std::is_constructible<basic_json, typename CompatibleArrayType::value_type>::value, int>::type = 0>
+    basic_json(const CompatibleArrayType& val)
+        : m_type(value_t::array)
+    {
+        using std::begin;
+        using std::end;
+        m_value.array = create<array_t>(begin(val), end(val));
+        assert_invariant();
+    }
+
+    /*!
+    @brief create a string (explicit)
+
+    Create an string JSON value with a given content.
+
+    @param[in] val  a value for the string
+
+    @complexity Linear in the size of the passed @a val.
+
+    @throw std::bad_alloc if allocation for string value fails
+
+    @liveexample{The following code shows the constructor with an @ref
+    string_t parameter.,basic_json__string_t}
+
+    @sa @ref basic_json(const typename string_t::value_type*) -- create a
+    string value from a character pointer
+    @sa @ref basic_json(const CompatibleStringType&) -- create a string value
+    from a compatible string container
+
+    @since version 1.0.0
+    */
+    basic_json(const string_t& val)
+        : m_type(value_t::string), m_value(val)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create a string (explicit)
+
+    Create a string JSON value with a given content.
+
+    @param[in] val  a literal value for the string
+
+    @complexity Linear in the size of the passed @a val.
+
+    @throw std::bad_alloc if allocation for string value fails
+
+    @liveexample{The following code shows the constructor with string literal
+    parameter.,basic_json__string_t_value_type}
+
+    @sa @ref basic_json(const string_t&) -- create a string value
+    @sa @ref basic_json(const CompatibleStringType&) -- create a string value
+    from a compatible string container
+
+    @since version 1.0.0
+    */
+    basic_json(const typename string_t::value_type* val)
+        : basic_json(string_t(val))
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create a string (implicit)
+
+    Create a string JSON value with a given content.
+
+    @param[in] val  a value for the string
+
+    @tparam CompatibleStringType an string type which is compatible to @ref
+    string_t, for instance `std::string`.
+
+    @complexity Linear in the size of the passed @a val.
+
+    @throw std::bad_alloc if allocation for string value fails
+
+    @liveexample{The following code shows the construction of a string value
+    from a compatible type.,basic_json__CompatibleStringType}
+
+    @sa @ref basic_json(const string_t&) -- create a string value
+    @sa @ref basic_json(const typename string_t::value_type*) -- create a
+    string value from a character pointer
+
+    @since version 1.0.0
+    */
+    template<class CompatibleStringType, typename std::enable_if<
+                 std::is_constructible<string_t, CompatibleStringType>::value, int>::type = 0>
+    basic_json(const CompatibleStringType& val)
+        : basic_json(string_t(val))
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create a boolean (explicit)
+
+    Creates a JSON boolean type from a given value.
+
+    @param[in] val  a boolean value to store
+
+    @complexity Constant.
+
+    @liveexample{The example below demonstrates boolean
+    values.,basic_json__boolean_t}
+
+    @since version 1.0.0
+    */
+    basic_json(boolean_t val) noexcept
+        : m_type(value_t::boolean), m_value(val)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an integer number (explicit)
+
+    Create an integer number JSON value with a given content.
+
+    @tparam T A helper type to remove this function via SFINAE in case @ref
+    number_integer_t is the same as `int`. In this case, this constructor
+    would have the same signature as @ref basic_json(const int value). Note
+    the helper type @a T is not visible in this constructor's interface.
+
+    @param[in] val  an integer to create a JSON number from
+
+    @complexity Constant.
+
+    @liveexample{The example below shows the construction of an integer
+    number value.,basic_json__number_integer_t}
+
+    @sa @ref basic_json(const int) -- create a number value (integer)
+    @sa @ref basic_json(const CompatibleNumberIntegerType) -- create a number
+    value (integer) from a compatible number type
+
+    @since version 1.0.0
+    */
+    template<typename T, typename std::enable_if<
+                 not (std::is_same<T, int>::value) and
+                 std::is_same<T, number_integer_t>::value, int>::type = 0>
+    basic_json(const number_integer_t val) noexcept
+        : m_type(value_t::number_integer), m_value(val)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an integer number from an enum type (explicit)
+
+    Create an integer number JSON value with a given content.
+
+    @param[in] val  an integer to create a JSON number from
+
+    @note This constructor allows to pass enums directly to a constructor. As
+    C++ has no way of specifying the type of an anonymous enum explicitly, we
+    can only rely on the fact that such values implicitly convert to int. As
+    int may already be the same type of number_integer_t, we may need to
+    switch off the constructor @ref basic_json(const number_integer_t).
+
+    @complexity Constant.
+
+    @liveexample{The example below shows the construction of an integer
+    number value from an anonymous enum.,basic_json__const_int}
+
+    @sa @ref basic_json(const number_integer_t) -- create a number value
+    (integer)
+    @sa @ref basic_json(const CompatibleNumberIntegerType) -- create a number
+    value (integer) from a compatible number type
+
+    @since version 1.0.0
+    */
+    basic_json(const int val) noexcept
+        : m_type(value_t::number_integer),
+          m_value(static_cast<number_integer_t>(val))
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an integer number (implicit)
+
+    Create an integer number JSON value with a given content. This constructor
+    allows any type @a CompatibleNumberIntegerType that can be used to
+    construct values of type @ref number_integer_t.
+
+    @tparam CompatibleNumberIntegerType An integer type which is compatible to
+    @ref number_integer_t. Examples include the types `int`, `int32_t`,
+    `long`, and `short`.
+
+    @param[in] val  an integer to create a JSON number from
+
+    @complexity Constant.
+
+    @liveexample{The example below shows the construction of several integer
+    number values from compatible
+    types.,basic_json__CompatibleIntegerNumberType}
+
+    @sa @ref basic_json(const number_integer_t) -- create a number value
+    (integer)
+    @sa @ref basic_json(const int) -- create a number value (integer)
+
+    @since version 1.0.0
+    */
+    template<typename CompatibleNumberIntegerType, typename std::enable_if<
+                 std::is_constructible<number_integer_t, CompatibleNumberIntegerType>::value and
+                 std::numeric_limits<CompatibleNumberIntegerType>::is_integer and
+                 std::numeric_limits<CompatibleNumberIntegerType>::is_signed,
+                 CompatibleNumberIntegerType>::type = 0>
+    basic_json(const CompatibleNumberIntegerType val) noexcept
+        : m_type(value_t::number_integer),
+          m_value(static_cast<number_integer_t>(val))
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an unsigned integer number (explicit)
+
+    Create an unsigned integer number JSON value with a given content.
+
+    @tparam T  helper type to compare number_unsigned_t and unsigned int (not
+    visible in) the interface.
+
+    @param[in] val  an integer to create a JSON number from
+
+    @complexity Constant.
+
+    @sa @ref basic_json(const CompatibleNumberUnsignedType) -- create a number
+    value (unsigned integer) from a compatible number type
+
+    @since version 2.0.0
+    */
+    template<typename T, typename std::enable_if<
+                 not (std::is_same<T, int>::value) and
+                 std::is_same<T, number_unsigned_t>::value, int>::type = 0>
+    basic_json(const number_unsigned_t val) noexcept
+        : m_type(value_t::number_unsigned), m_value(val)
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an unsigned number (implicit)
+
+    Create an unsigned number JSON value with a given content. This
+    constructor allows any type @a CompatibleNumberUnsignedType that can be
+    used to construct values of type @ref number_unsigned_t.
+
+    @tparam CompatibleNumberUnsignedType An integer type which is compatible
+    to @ref number_unsigned_t. Examples may include the types `unsigned int`,
+    `uint32_t`, or `unsigned short`.
+
+    @param[in] val  an unsigned integer to create a JSON number from
+
+    @complexity Constant.
+
+    @sa @ref basic_json(const number_unsigned_t) -- create a number value
+    (unsigned)
+
+    @since version 2.0.0
+    */
+    template<typename CompatibleNumberUnsignedType, typename std::enable_if <
+                 std::is_constructible<number_unsigned_t, CompatibleNumberUnsignedType>::value and
+                 std::numeric_limits<CompatibleNumberUnsignedType>::is_integer and
+                 not std::numeric_limits<CompatibleNumberUnsignedType>::is_signed,
+                 CompatibleNumberUnsignedType>::type = 0>
+    basic_json(const CompatibleNumberUnsignedType val) noexcept
+        : m_type(value_t::number_unsigned),
+          m_value(static_cast<number_unsigned_t>(val))
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create a floating-point number (explicit)
+
+    Create a floating-point number JSON value with a given content.
+
+    @param[in] val  a floating-point value to create a JSON number from
+
+    @note [RFC 7159](http://www.rfc-editor.org/rfc/rfc7159.txt), section 6
+    disallows NaN values:
+    > Numeric values that cannot be represented in the grammar below (such as
+    > Infinity and NaN) are not permitted.
+    In case the parameter @a val is not a number, a JSON null value is created
+    instead.
+
+    @complexity Constant.
+
+    @liveexample{The following example creates several floating-point
+    values.,basic_json__number_float_t}
+
+    @sa @ref basic_json(const CompatibleNumberFloatType) -- create a number
+    value (floating-point) from a compatible number type
+
+    @since version 1.0.0
+    */
+    basic_json(const number_float_t val) noexcept
+        : m_type(value_t::number_float), m_value(val)
+    {
+        // replace infinity and NAN by null
+        if (not std::isfinite(val))
+        {
+            m_type = value_t::null;
+            m_value = json_value();
+        }
+
+        assert_invariant();
+    }
+
+    /*!
+    @brief create an floating-point number (implicit)
+
+    Create an floating-point number JSON value with a given content. This
+    constructor allows any type @a CompatibleNumberFloatType that can be used
+    to construct values of type @ref number_float_t.
+
+    @tparam CompatibleNumberFloatType A floating-point type which is
+    compatible to @ref number_float_t. Examples may include the types `float`
+    or `double`.
+
+    @param[in] val  a floating-point to create a JSON number from
+
+    @note [RFC 7159](http://www.rfc-editor.org/rfc/rfc7159.txt), section 6
+    disallows NaN values:
+    > Numeric values that cannot be represented in the grammar below (such as
+    > Infinity and NaN) are not permitted.
+    In case the parameter @a val is not a number, a JSON null value is
+    created instead.
+
+    @complexity Constant.
+
+    @liveexample{The example below shows the construction of several
+    floating-point number values from compatible
+    types.,basic_json__CompatibleNumberFloatType}
+
+    @sa @ref basic_json(const number_float_t) -- create a number value
+    (floating-point)
+
+    @since version 1.0.0
+    */
+    template<typename CompatibleNumberFloatType, typename = typename std::enable_if<
+                 std::is_constructible<number_float_t, CompatibleNumberFloatType>::value and
+                 std::is_floating_point<CompatibleNumberFloatType>::value>::type>
+    basic_json(const CompatibleNumberFloatType val) noexcept
+        : basic_json(number_float_t(val))
+    {
+        assert_invariant();
+    }
+
+    /*!
+    @brief create a container (array or object) from an initializer list
+
+    Creates a JSON value of type array or object from the passed initializer
+    list @a init. In case @a type_deduction is `true` (default), the type of
+    the JSON value to be created is deducted from the initializer list @a init
+    according to the following rules:
+
+    1. If the list is empty, an empty JSON object value `{}` is created.
+    2. If the list consists of pairs whose first element is a string, a JSON
+       object value is created where the first elements of the pairs are
+       treated as keys and the second elements are as values.
+    3. In all other cases, an array is created.
+
+    The rules aim to create the best fit between a C++ initializer list and
+    JSON values. The rationale is as follows:
+
+    1. The empty initializer list is written as `{}` which is exactly an empty
+       JSON object.
+    2. C++ has now way of describing mapped types other than to list a list of
+       pairs. As JSON requires that keys must be of type string, rule 2 is the
+       weakest constraint one can pose on initializer lists to interpret them
+       as an object.
+    3. In all other cases, the initializer list could not be interpreted as
+       JSON object type, so interpreting it as JSON array type is safe.
+
+    With the rules described above, the following JSON values cannot be
+    expressed by an initializer list:
+
+    - the empty array (`[]`): use @ref array(std::initializer_list<basic_json>)
+      with an empty initializer list in this case
+    - arrays whose elements satisfy rule 2: use @ref
+      array(std::initializer_list<basic_json>) with the same initializer list
+      in this case
+
+    @note When used without parentheses around an empty initializer list, @ref
+    basic_json() is called instead of this function, yielding the JSON null
+    value.
+
+    @param[in] init  initializer list with JSON values
+
+    @param[in] type_deduction internal parameter; when set to `true`, the type
+    of the JSON value is deducted from the initializer list @a init; when set
+    to `false`, the type provided via @a manual_type is forced. This mode is
+    used by the functions @ref array(std::initializer_list<basic_json>) and
+    @ref object(std::initializer_list<basic_json>).
+
+    @param[in] manual_type internal parameter; when @a type_deduction is set
+    to `false`, the created JSON value will use the provided type (only @ref
+    value_t::array and @ref value_t::object are valid); when @a type_deduction
+    is set to `true`, this parameter has no effect
+
+    @throw std::domain_error if @a type_deduction is `false`, @a manual_type
+    is `value_t::object`, but @a init contains an element which is not a pair
+    whose first element is a string; example: `"cannot create object from
+    initializer list"`
+
+    @complexity Linear in the size of the initializer list @a init.
+
+    @liveexample{The example below shows how JSON values are created from
+    initializer lists.,basic_json__list_init_t}
+
+    @sa @ref array(std::initializer_list<basic_json>) -- create a JSON array
+    value from an initializer list
+    @sa @ref object(std::initializer_list<basic_json>) -- create a JSON object
+    value from an initializer list
+
+    @since version 1.0.0
+    */
+    basic_json(std::initializer_list<basic_json> init,
+               bool type_deduction = true,
+               value_t manual_type = value_t::array)
+    {
+        // check if each element is an array with two elements whose first
+        // element is a string
+        bool is_an_object = std::all_of(init.begin(), init.end(),
+                                        [](const basic_json & element)
+        {
+            return element.is_array() and element.size() == 2 and element[0].is_string();
+        });
+
+        // adjust type if type deduction is not wanted
+        if (not type_deduction)
+        {
+            // if array is wanted, do not create an object though possible
+            if (manual_type == value_t::array)
+            {
+                is_an_object = false;
+            }
+
+            // if object is wanted but impossible, throw an exception
+            if (manual_type == value_t::object and not is_an_object)
+            {
+                throw std::domain_error("cannot create object from initializer list");
+            }
+        }
+
+        if (is_an_object)
+        {
+            // the initializer list is a list of pairs -> create object
+            m_type = value_t::object;
+            m_value = value_t::object;
+
+            std::for_each(init.begin(), init.end(), [this](const basic_json & element)
+            {
+                m_value.object->emplace(*(element[0].m_value.string), element[1]);
+            });
+        }
+        else
+        {
+            // the initializer list describes an array -> create array
+            m_type = value_t::array;
+            m_value.array = create<array_t>(init);
+        }
+
+        assert_invariant();
+    }
+
+    /*!
+    @brief explicitly create an array from an initializer list
+
+    Creates a JSON array value from a given initializer list. That is, given a
+    list of values `a, b, c`, creates the JSON value `[a, b, c]`. If the
+    initializer list is empty, the empty array `[]` is created.
+
+    @note This function is only needed to express two edge cases that cannot
+    be realized with the initializer list constructor (@ref
+    basic_json(std::initializer_list<basic_json>, bool, value_t)). These cases
+    are:
+    1. creating an array whose elements are all pairs whose first element is a
+    string -- in this case, the initializer list constructor would create an
+    object, taking the first elements as keys
+    2. creating an empty array -- passing the empty initializer list to the
+    initializer list constructor yields an empty object
+
+    @param[in] init  initializer list with JSON values to create an array from
+    (optional)
+
+    @return JSON array value
+
+    @complexity Linear in the size of @a init.
+
+    @liveexample{The following code shows an example for the `array`
+    function.,array}
+
+    @sa @ref basic_json(std::initializer_list<basic_json>, bool, value_t) --
+    create a JSON value from an initializer list
+    @sa @ref object(std::initializer_list<basic_json>) -- create a JSON object
+    value from an initializer list
+
+    @since version 1.0.0
+    */
+    static basic_json array(std::initializer_list<basic_json> init =
+                                std::initializer_list<basic_json>())
+    {
+        return basic_json(init, false, value_t::array);
+    }
+
+    /*!
+    @brief explicitly create an object from an initializer list
+
+    Creates a JSON object value from a given initializer list. The initializer
+    lists elements must be pairs, and their first elements must be strings. If
+    the initializer list is empty, the empty object `{}` is created.
+
+    @note This function is only added for symmetry reasons. In contrast to the
+    related function @ref array(std::initializer_list<basic_json>), there are
+    no cases which can only be expressed by this function. That is, any
+    initializer list @a init can also be passed to the initializer list
+    constructor @ref basic_json(std::initializer_list<basic_json>, bool,
+    value_t).
+
+    @param[in] init  initializer list to create an object from (optional)
+
+    @return JSON object value
+
+    @throw std::domain_error if @a init is not a pair whose first elements are
+    strings; thrown by
+    @ref basic_json(std::initializer_list<basic_json>, bool, value_t)
+
+    @complexity Linear in the size of @a init.
+
+    @liveexample{The following code shows an example for the `object`
+    function.,object}
+
+    @sa @ref basic_json(std::initializer_list<basic_json>, bool, value_t) --
+    create a JSON value from an initializer list
+    @sa @ref array(std::initializer_list<basic_json>) -- create a JSON array
+    value from an initializer list
+
+    @since version 1.0.0
+    */
+    static basic_json object(std::initializer_list<basic_json> init =
+                                 std::initializer_list<basic_json>())
+    {
+        return basic_json(init, false, value_t::object);
+    }
+
+    /*!
+    @brief construct an array with count copies of given value
+
+    Constructs a JSON array value by creating @a cnt copies of a passed value.
+    In case @a cnt is `0`, an empty array is created. As postcondition,
+    `std::distance(begin(),end()) == cnt` holds.
+
+    @param[in] cnt  the number of JSON copies of @a val to create
+    @param[in] val  the JSON value to copy
+
+    @complexity Linear in @a cnt.
+
+    @liveexample{The following code shows examples for the @ref
+    basic_json(size_type\, const basic_json&)
+    constructor.,basic_json__size_type_basic_json}
+
+    @since version 1.0.0
+    */
+    basic_json(size_type cnt, const basic_json& val)
+        : m_type(value_t::array)
+    {
+        m_value.array = create<array_t>(cnt, val);
+        assert_invariant();
+    }
+
+    /*!
+    @brief construct a JSON container given an iterator range
+
+    Constructs the JSON value with the contents of the range `[first, last)`.
+    The semantics depends on the different types a JSON value can have:
+    - In case of primitive types (number, boolean, or string), @a first must
+      be `begin()` and @a last must be `end()`. In this case, the value is
+      copied. Otherwise, std::out_of_range is thrown.
+    - In case of structured types (array, object), the constructor behaves as
+      similar versions for `std::vector`.
+    - In case of a null type, std::domain_error is thrown.
+
+    @tparam InputIT an input iterator type (@ref iterator or @ref
+    const_iterator)
+
+    @param[in] first begin of the range to copy from (included)
+    @param[in] last end of the range to copy from (excluded)
+
+    @pre Iterators @a first and @a last must be initialized. **This
+         precondition is enforced with an assertion.**
+
+    @throw std::domain_error if iterators are not compatible; that is, do not
+    belong to the same JSON value; example: `"iterators are not compatible"`
+    @throw std::out_of_range if iterators are for a primitive type (number,
+    boolean, or string) where an out of range error can be detected easily;
+    example: `"iterators out of range"`
+    @throw std::bad_alloc if allocation for object, array, or string fails
+    @throw std::domain_error if called with a null value; example: `"cannot
+    use construct with iterators from null"`
+
+    @complexity Linear in distance between @a first and @a last.
+
+    @liveexample{The example below shows several ways to create JSON values by
+    specifying a subrange with iterators.,basic_json__InputIt_InputIt}
+
+    @since version 1.0.0
+    */
+    template<class InputIT, typename std::enable_if<
+                 std::is_same<InputIT, typename basic_json_t::iterator>::value or
+                 std::is_same<InputIT, typename basic_json_t::const_iterator>::value, int>::type = 0>
+    basic_json(InputIT first, InputIT last)
+    {
+        assert(first.m_object != nullptr);
+        assert(last.m_object != nullptr);
+
+        // make sure iterator fits the current value
+        if (first.m_object != last.m_object)
+        {
+            throw std::domain_error("iterators are not compatible");
+        }
+
+        // copy type from first iterator
+        m_type = first.m_object->m_type;
+
+        // check if iterator range is complete for primitive values
+        switch (m_type)
+        {
+            case value_t::boolean:
+            case value_t::number_float:
+            case value_t::number_integer:
+            case value_t::number_unsigned:
+            case value_t::string:
+            {
+                if (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end())
+                {
+                    throw std::out_of_range("iterators out of range");
+                }
+                break;
+            }
+
+            default:
+            {
+                break;
+            }
+        }
+
+        switch (m_type)
+        {
+            case value_t::number_integer:
+            {
+                m_value.number_integer = first.m_object->m_value.number_integer;
+                break;
+            }
+
+            case value_t::number_unsigned:
+            {
+                m_value.number_unsigned = first.m_object->m_value.number_unsigned;
+                break;
+            }
+
+            case value_t::number_float:
+            {
+                m_value.number_float = first.m_object->m_value.number_float;
+                break;
+            }
+
+            case value_t::boolean:
+            {
+                m_value.boolean = first.m_object->m_value.boolean;
+                break;
+            }
+
+            case value_t::string:
+            {
+                m_value = *first.m_object->m_value.string;
+                break;
+            }
+
+            case value_t::object:
+            {
+                m_value.object = create<object_t>(first.m_it.object_iterator, last.m_it.object_iterator);
+                break;
+            }
+
+            case value_t::array:
+            {
+                m_value.array = create<array_t>(first.m_it.array_iterator, last.m_it.array_iterator);
+                break;
+            }
+
+            default:
+            {
+                throw std::domain_error("cannot use construct with iterators from " + first.m_object->type_name());
+            }
+        }
+
+        assert_invariant();
+    }
+
+    /*!
+    @brief construct a JSON value given an input stream
+
+    @param[in,out] i  stream to read a serialized JSON value from
+    @param[in] cb a parser callback function of type @ref parser_callback_t
+    which is used to control the deserialization by filtering unwanted values
+    (optional)
+
+    @complexity Linear in the length of the input. The parser is a predictive
+    LL(1) parser. The complexity can be higher if the parser callback function
+    @a cb has a super-linear complexity.
+
+    @note A UTF-8 byte order mark is silently ignored.
+
+    @deprecated This constructor is deprecated and will be removed in version
+      3.0.0 to unify the interface of the library. Deserialization will be
+      done by stream operators or by calling one of the `parse` functions,
+      e.g. @ref parse(std::istream&, const parser_callback_t). That is, calls
+      like `json j(i);` for an input stream @a i need to be replaced by
+      `json j = json::parse(i);`. See the example below.
+
+    @liveexample{The example below demonstrates constructing a JSON value from
+    a `std::stringstream` with and without callback
+    function.,basic_json__istream}
+
+    @since version 2.0.0, deprecated in version 2.0.3, to be removed in
+           version 3.0.0
+    */
+    JSON_DEPRECATED
+    explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr)
+    {
+        *this = parser(i, cb).parse();
+        assert_invariant();
+    }
+
+    ///////////////////////////////////////
+    // other constructors and destructor //
+    ///////////////////////////////////////
+
+    /*!
+    @brief copy constructor
+
+    Creates a copy of a given JSON value.
+
+    @param[in] other  the JSON value to copy
+
+    @complexity Linear in the size of @a other.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is linear.
+    - As postcondition, it holds: `other == basic_json(other)`.
+
+    @throw std::bad_alloc if allocation for object, array, or string fails.
+
+    @liveexample{The following code shows an example for the copy
+    constructor.,basic_json__basic_json}
+
+    @since version 1.0.0
+    */
+    basic_json(const basic_json& other)
+        : m_type(other.m_type)
+    {
+        // check of passed value is valid
+        other.assert_invariant();
+
+        switch (m_type)
+        {
+            case value_t::object:
+            {
+                m_value = *other.m_value.object;
+                break;
+            }
+
+            case value_t::array:
+            {
+                m_value = *other.m_value.array;
+                break;
+            }
+
+            case value_t::string:
+            {
+                m_value = *other.m_value.string;
+                break;
+            }
+
+            case value_t::boolean:
+            {
+                m_value = other.m_value.boolean;
+                break;
+            }
+
+            case value_t::number_integer:
+            {
+                m_value = other.m_value.number_integer;
+                break;
+            }
+
+            case value_t::number_unsigned:
+            {
+                m_value = other.m_value.number_unsigned;
+                break;
+            }
+
+            case value_t::number_float:
+            {
+                m_value = other.m_value.number_float;
+                break;
+            }
+
+            default:
+            {
+                break;
+            }
+        }
+
+        assert_invariant();
+    }
+
+    /*!
+    @brief move constructor
+
+    Move constructor. Constructs a JSON value with the contents of the given
+    value @a other using move semantics. It "steals" the resources from @a
+    other and leaves it as JSON null value.
+
+    @param[in,out] other  value to move to this object
+
+    @post @a other is a JSON null value
+
+    @complexity Constant.
+
+    @liveexample{The code below shows the move constructor explicitly called
+    via std::move.,basic_json__moveconstructor}
+
+    @since version 1.0.0
+    */
+    basic_json(basic_json&& other) noexcept
+        : m_type(std::move(other.m_type)),
+          m_value(std::move(other.m_value))
+    {
+        // check that passed value is valid
+        other.assert_invariant();
+
+        // invalidate payload
+        other.m_type = value_t::null;
+        other.m_value = {};
+
+        assert_invariant();
+    }
+
+    /*!
+    @brief copy assignment
+
+    Copy assignment operator. Copies a JSON value via the "copy and swap"
+    strategy: It is expressed in terms of the copy constructor, destructor,
+    and the swap() member function.
+
+    @param[in] other  value to copy from
+
+    @complexity Linear.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is linear.
+
+    @liveexample{The code below shows and example for the copy assignment. It
+    creates a copy of value `a` which is then swapped with `b`. Finally\, the
+    copy of `a` (which is the null value after the swap) is
+    destroyed.,basic_json__copyassignment}
+
+    @since version 1.0.0
+    */
+    reference& operator=(basic_json other) noexcept (
+        std::is_nothrow_move_constructible<value_t>::value and
+        std::is_nothrow_move_assignable<value_t>::value and
+        std::is_nothrow_move_constructible<json_value>::value and
+        std::is_nothrow_move_assignable<json_value>::value
+    )
+    {
+        // check that passed value is valid
+        other.assert_invariant();
+
+        using std::swap;
+        swap(m_type, other.m_type);
+        swap(m_value, other.m_value);
+
+        assert_invariant();
+        return *this;
+    }
+
+    /*!
+    @brief destructor
+
+    Destroys the JSON value and frees all allocated memory.
+
+    @complexity Linear.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is linear.
+    - All stored elements are destroyed and all memory is freed.
+
+    @since version 1.0.0
+    */
+    ~basic_json()
+    {
+        assert_invariant();
+
+        switch (m_type)
+        {
+            case value_t::object:
+            {
+                AllocatorType<object_t> alloc;
+                alloc.destroy(m_value.object);
+                alloc.deallocate(m_value.object, 1);
+                break;
+            }
+
+            case value_t::array:
+            {
+                AllocatorType<array_t> alloc;
+                alloc.destroy(m_value.array);
+                alloc.deallocate(m_value.array, 1);
+                break;
+            }
+
+            case value_t::string:
+            {
+                AllocatorType<string_t> alloc;
+                alloc.destroy(m_value.string);
+                alloc.deallocate(m_value.string, 1);
+                break;
+            }
+
+            default:
+            {
+                // all other types need no specific destructor
+                break;
+            }
+        }
+    }
+
+    /// @}
+
+  public:
+    ///////////////////////
+    // object inspection //
+    ///////////////////////
+
+    /// @name object inspection
+    /// Functions to inspect the type of a JSON value.
+    /// @{
+
+    /*!
+    @brief serialization
+
+    Serialization function for JSON values. The function tries to mimic
+    Python's `json.dumps()` function, and currently supports its @a indent
+    parameter.
+
+    @param[in] indent If indent is nonnegative, then array elements and object
+    members will be pretty-printed with that indent level. An indent level of
+    `0` will only insert newlines. `-1` (the default) selects the most compact
+    representation.
+
+    @return string containing the serialization of the JSON value
+
+    @complexity Linear.
+
+    @liveexample{The following example shows the effect of different @a indent
+    parameters to the result of the serialization.,dump}
+
+    @see https://docs.python.org/2/library/json.html#json.dump
+
+    @since version 1.0.0
+    */
+    string_t dump(const int indent = -1) const
+    {
+        std::stringstream ss;
+        // fix locale problems
+        const static std::locale loc(std::locale(), new DecimalSeparator);
+        ss.imbue(loc);
+
+        // 6, 15 or 16 digits of precision allows round-trip IEEE 754
+        // string->float->string, string->double->string or string->long
+        // double->string; to be safe, we read this value from
+        // std::numeric_limits<number_float_t>::digits10
+        ss.precision(std::numeric_limits<double>::digits10);
+
+        if (indent >= 0)
+        {
+            dump(ss, true, static_cast<unsigned int>(indent));
+        }
+        else
+        {
+            dump(ss, false, 0);
+        }
+
+        return ss.str();
+    }
+
+    /*!
+    @brief return the type of the JSON value (explicit)
+
+    Return the type of the JSON value as a value from the @ref value_t
+    enumeration.
+
+    @return the type of the JSON value
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `type()` for all JSON
+    types.,type}
+
+    @since version 1.0.0
+    */
+    constexpr value_t type() const noexcept
+    {
+        return m_type;
+    }
+
+    /*!
+    @brief return whether type is primitive
+
+    This function returns true iff the JSON type is primitive (string, number,
+    boolean, or null).
+
+    @return `true` if type is primitive (string, number, boolean, or null),
+    `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_primitive()` for all JSON
+    types.,is_primitive}
+
+    @sa @ref is_structured() -- returns whether JSON value is structured
+    @sa @ref is_null() -- returns whether JSON value is `null`
+    @sa @ref is_string() -- returns whether JSON value is a string
+    @sa @ref is_boolean() -- returns whether JSON value is a boolean
+    @sa @ref is_number() -- returns whether JSON value is a number
+
+    @since version 1.0.0
+    */
+    constexpr bool is_primitive() const noexcept
+    {
+        return is_null() or is_string() or is_boolean() or is_number();
+    }
+
+    /*!
+    @brief return whether type is structured
+
+    This function returns true iff the JSON type is structured (array or
+    object).
+
+    @return `true` if type is structured (array or object), `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_structured()` for all JSON
+    types.,is_structured}
+
+    @sa @ref is_primitive() -- returns whether value is primitive
+    @sa @ref is_array() -- returns whether value is an array
+    @sa @ref is_object() -- returns whether value is an object
+
+    @since version 1.0.0
+    */
+    constexpr bool is_structured() const noexcept
+    {
+        return is_array() or is_object();
+    }
+
+    /*!
+    @brief return whether value is null
+
+    This function returns true iff the JSON value is null.
+
+    @return `true` if type is null, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_null()` for all JSON
+    types.,is_null}
+
+    @since version 1.0.0
+    */
+    constexpr bool is_null() const noexcept
+    {
+        return m_type == value_t::null;
+    }
+
+    /*!
+    @brief return whether value is a boolean
+
+    This function returns true iff the JSON value is a boolean.
+
+    @return `true` if type is boolean, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_boolean()` for all JSON
+    types.,is_boolean}
+
+    @since version 1.0.0
+    */
+    constexpr bool is_boolean() const noexcept
+    {
+        return m_type == value_t::boolean;
+    }
+
+    /*!
+    @brief return whether value is a number
+
+    This function returns true iff the JSON value is a number. This includes
+    both integer and floating-point values.
+
+    @return `true` if type is number (regardless whether integer, unsigned
+    integer or floating-type), `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_number()` for all JSON
+    types.,is_number}
+
+    @sa @ref is_number_integer() -- check if value is an integer or unsigned
+    integer number
+    @sa @ref is_number_unsigned() -- check if value is an unsigned integer
+    number
+    @sa @ref is_number_float() -- check if value is a floating-point number
+
+    @since version 1.0.0
+    */
+    constexpr bool is_number() const noexcept
+    {
+        return is_number_integer() or is_number_float();
+    }
+
+    /*!
+    @brief return whether value is an integer number
+
+    This function returns true iff the JSON value is an integer or unsigned
+    integer number. This excludes floating-point values.
+
+    @return `true` if type is an integer or unsigned integer number, `false`
+    otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_number_integer()` for all
+    JSON types.,is_number_integer}
+
+    @sa @ref is_number() -- check if value is a number
+    @sa @ref is_number_unsigned() -- check if value is an unsigned integer
+    number
+    @sa @ref is_number_float() -- check if value is a floating-point number
+
+    @since version 1.0.0
+    */
+    constexpr bool is_number_integer() const noexcept
+    {
+        return m_type == value_t::number_integer or m_type == value_t::number_unsigned;
+    }
+
+    /*!
+    @brief return whether value is an unsigned integer number
+
+    This function returns true iff the JSON value is an unsigned integer
+    number. This excludes floating-point and (signed) integer values.
+
+    @return `true` if type is an unsigned integer number, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_number_unsigned()` for all
+    JSON types.,is_number_unsigned}
+
+    @sa @ref is_number() -- check if value is a number
+    @sa @ref is_number_integer() -- check if value is an integer or unsigned
+    integer number
+    @sa @ref is_number_float() -- check if value is a floating-point number
+
+    @since version 2.0.0
+    */
+    constexpr bool is_number_unsigned() const noexcept
+    {
+        return m_type == value_t::number_unsigned;
+    }
+
+    /*!
+    @brief return whether value is a floating-point number
+
+    This function returns true iff the JSON value is a floating-point number.
+    This excludes integer and unsigned integer values.
+
+    @return `true` if type is a floating-point number, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_number_float()` for all
+    JSON types.,is_number_float}
+
+    @sa @ref is_number() -- check if value is number
+    @sa @ref is_number_integer() -- check if value is an integer number
+    @sa @ref is_number_unsigned() -- check if value is an unsigned integer
+    number
+
+    @since version 1.0.0
+    */
+    constexpr bool is_number_float() const noexcept
+    {
+        return m_type == value_t::number_float;
+    }
+
+    /*!
+    @brief return whether value is an object
+
+    This function returns true iff the JSON value is an object.
+
+    @return `true` if type is object, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_object()` for all JSON
+    types.,is_object}
+
+    @since version 1.0.0
+    */
+    constexpr bool is_object() const noexcept
+    {
+        return m_type == value_t::object;
+    }
+
+    /*!
+    @brief return whether value is an array
+
+    This function returns true iff the JSON value is an array.
+
+    @return `true` if type is array, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_array()` for all JSON
+    types.,is_array}
+
+    @since version 1.0.0
+    */
+    constexpr bool is_array() const noexcept
+    {
+        return m_type == value_t::array;
+    }
+
+    /*!
+    @brief return whether value is a string
+
+    This function returns true iff the JSON value is a string.
+
+    @return `true` if type is string, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_string()` for all JSON
+    types.,is_string}
+
+    @since version 1.0.0
+    */
+    constexpr bool is_string() const noexcept
+    {
+        return m_type == value_t::string;
+    }
+
+    /*!
+    @brief return whether value is discarded
+
+    This function returns true iff the JSON value was discarded during parsing
+    with a callback function (see @ref parser_callback_t).
+
+    @note This function will always be `false` for JSON values after parsing.
+    That is, discarded values can only occur during parsing, but will be
+    removed when inside a structured value or replaced by null in other cases.
+
+    @return `true` if type is discarded, `false` otherwise.
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies `is_discarded()` for all JSON
+    types.,is_discarded}
+
+    @since version 1.0.0
+    */
+    constexpr bool is_discarded() const noexcept
+    {
+        return m_type == value_t::discarded;
+    }
+
+    /*!
+    @brief return the type of the JSON value (implicit)
+
+    Implicitly return the type of the JSON value as a value from the @ref
+    value_t enumeration.
+
+    @return the type of the JSON value
+
+    @complexity Constant.
+
+    @exceptionsafety No-throw guarantee: this member function never throws
+    exceptions.
+
+    @liveexample{The following code exemplifies the @ref value_t operator for
+    all JSON types.,operator__value_t}
+
+    @since version 1.0.0
+    */
+    constexpr operator value_t() const noexcept
+    {
+        return m_type;
+    }
+
+    /// @}
+
+  private:
+    //////////////////
+    // value access //
+    //////////////////
+
+    /// get an object (explicit)
+    template<class T, typename std::enable_if<
+                 std::is_convertible<typename object_t::key_type, typename T::key_type>::value and
+                 std::is_convertible<basic_json_t, typename T::mapped_type>::value, int>::type = 0>
+    T get_impl(T*) const
+    {
+        if (is_object())
+        {
+            return T(m_value.object->begin(), m_value.object->end());
+        }
+        else
+        {
+            throw std::domain_error("type must be object, but is " + type_name());
+        }
+    }
+
+    /// get an object (explicit)
+    object_t get_impl(object_t*) const
+    {
+        if (is_object())
+        {
+            return *(m_value.object);
+        }
+        else
+        {
+            throw std::domain_error("type must be object, but is " + type_name());
+        }
+    }
+
+    /// get an array (explicit)
+    template<class T, typename std::enable_if<
+                 std::is_convertible<basic_json_t, typename T::value_type>::value and
+                 not std::is_same<basic_json_t, typename T::value_type>::value and
+                 not std::is_arithmetic<T>::value and
+                 not std::is_convertible<std::string, T>::value and
+                 not has_mapped_type<T>::value, int>::type = 0>
+    T get_impl(T*) const
+    {
+        if (is_array())
+        {
+            T to_vector;
+            std::transform(m_value.array->begin(), m_value.array->end(),
+                           std::inserter(to_vector, to_vector.end()), [](basic_json i)
+            {
+                return i.get<typename T::value_type>();
+            });
+            return to_vector;
+        }
+        else
+        {
+            throw std::domain_error("type must be array, but is " + type_name());
+        }
+    }
+
+    /// get an array (explicit)
+    template<class T, typename std::enable_if<
+                 std::is_convertible<basic_json_t, T>::value and
+                 not std::is_same<basic_json_t, T>::value, int>::type = 0>
+    std::vector<T> get_impl(std::vector<T>*) const
+    {
+        if (is_array())
+        {
+            std::vector<T> to_vector;
+            to_vector.reserve(m_value.array->size());
+            std::transform(m_value.array->begin(), m_value.array->end(),
+                           std::inserter(to_vector, to_vector.end()), [](basic_json i)
+            {
+                return i.get<T>();
+            });
+            return to_vector;
+        }
+        else
+        {
+            throw std::domain_error("type must be array, but is " + type_name());
+        }
+    }
+
+    /// get an array (explicit)
+    template<class T, typename std::enable_if<
+                 std::is_same<basic_json, typename T::value_type>::value and
+                 not has_mapped_type<T>::value, int>::type = 0>
+    T get_impl(T*) const
+    {
+        if (is_array())
+        {
+            return T(m_value.array->begin(), m_value.array->end());
+        }
+        else
+        {
+            throw std::domain_error("type must be array, but is " + type_name());
+        }
+    }
+
+    /// get an array (explicit)
+    array_t get_impl(array_t*) const
+    {
+        if (is_array())
+        {
+            return *(m_value.array);
+        }
+        else
+        {
+            throw std::domain_error("type must be array, but is " + type_name());
+        }
+    }
+
+    /// get a string (explicit)
+    template<typename T, typename std::enable_if<
+                 std::is_convertible<string_t, T>::value, int>::type = 0>
+    T get_impl(T*) const
+    {
+        if (is_string())
+        {
+            return *m_value.string;
+        }
+        else
+        {
+            throw std::domain_error("type must be string, but is " + type_name());
+        }
+    }
+
+    /// get a number (explicit)
+    template<typename T, typename std::enable_if<
+                 std::is_arithmetic<T>::value, int>::type = 0>
+    T get_impl(T*) const
+    {
+        switch (m_type)
+        {
+            case value_t::number_integer:
+            {
+                return static_cast<T>(m_value.number_integer);
+            }
+
+            case value_t::number_unsigned:
+            {
+                return static_cast<T>(m_value.number_unsigned);
+            }
+
+            case value_t::number_float:
+            {
+                return static_cast<T>(m_value.number_float);
+            }
+
+            default:
+            {
+                throw std::domain_error("type must be number, but is " + type_name());
+            }
+        }
+    }
+
+    /// get a boolean (explicit)
+    constexpr boolean_t get_impl(boolean_t*) const
+    {
+        return is_boolean()
+               ? m_value.boolean
+               : throw std::domain_error("type must be boolean, but is " + type_name());
+    }
+
+    /// get a pointer to the value (object)
+    object_t* get_impl_ptr(object_t*) noexcept
+    {
+        return is_object() ? m_value.object : nullptr;
+    }
+
+    /// get a pointer to the value (object)
+    constexpr const object_t* get_impl_ptr(const object_t*) const noexcept
+    {
+        return is_object() ? m_value.object : nullptr;
+    }
+
+    /// get a pointer to the value (array)
+    array_t* get_impl_ptr(array_t*) noexcept
+    {
+        return is_array() ? m_value.array : nullptr;
+    }
+
+    /// get a pointer to the value (array)
+    constexpr const array_t* get_impl_ptr(const array_t*) const noexcept
+    {
+        return is_array() ? m_value.array : nullptr;
+    }
+
+    /// get a pointer to the value (string)
+    string_t* get_impl_ptr(string_t*) noexcept
+    {
+        return is_string() ? m_value.string : nullptr;
+    }
+
+    /// get a pointer to the value (string)
+    constexpr const string_t* get_impl_ptr(const string_t*) const noexcept
+    {
+        return is_string() ? m_value.string : nullptr;
+    }
+
+    /// get a pointer to the value (boolean)
+    boolean_t* get_impl_ptr(boolean_t*) noexcept
+    {
+        return is_boolean() ? &m_value.boolean : nullptr;
+    }
+
+    /// get a pointer to the value (boolean)
+    constexpr const boolean_t* get_impl_ptr(const boolean_t*) const noexcept
+    {
+        return is_boolean() ? &m_value.boolean : nullptr;
+    }
+
+    /// get a pointer to the value (integer number)
+    number_integer_t* get_impl_ptr(number_integer_t*) noexcept
+    {
+        return is_number_integer() ? &m_value.number_integer : nullptr;
+    }
+
+    /// get a pointer to the value (integer number)
+    constexpr const number_integer_t* get_impl_ptr(const number_integer_t*) const noexcept
+    {
+        return is_number_integer() ? &m_value.number_integer : nullptr;
+    }
+
+    /// get a pointer to the value (unsigned number)
+    number_unsigned_t* get_impl_ptr(number_unsigned_t*) noexcept
+    {
+        return is_number_unsigned() ? &m_value.number_unsigned : nullptr;
+    }
+
+    /// get a pointer to the value (unsigned number)
+    constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t*) const noexcept
+    {
+        return is_number_unsigned() ? &m_value.number_unsigned : nullptr;
+    }
+
+    /// get a pointer to the value (floating-point number)
+    number_float_t* get_impl_ptr(number_float_t*) noexcept
+    {
+        return is_number_float() ? &m_value.number_float : nullptr;
+    }
+
+    /// get a pointer to the value (floating-point number)
+    constexpr const number_float_t* get_impl_ptr(const number_float_t*) const noexcept
+    {
+        return is_number_float() ? &m_value.number_float : nullptr;
+    }
+
+    /*!
+    @brief helper function to implement get_ref()
+
+    This funcion helps to implement get_ref() without code duplication for
+    const and non-const overloads
+
+    @tparam ThisType will be deduced as `basic_json` or `const basic_json`
+
+    @throw std::domain_error if ReferenceType does not match underlying value
+    type of the current JSON
+    */
+    template<typename ReferenceType, typename ThisType>
+    static ReferenceType get_ref_impl(ThisType& obj)
+    {
+        // helper type
+        using PointerType = typename std::add_pointer<ReferenceType>::type;
+
+        // delegate the call to get_ptr<>()
+        auto ptr = obj.template get_ptr<PointerType>();
+
+        if (ptr != nullptr)
+        {
+            return *ptr;
+        }
+        else
+        {
+            throw std::domain_error("incompatible ReferenceType for get_ref, actual type is " +
+                                    obj.type_name());
+        }
+    }
+
+  public:
+
+    /// @name value access
+    /// Direct access to the stored value of a JSON value.
+    /// @{
+
+    /*!
+    @brief get a value (explicit)
+
+    Explicit type conversion between the JSON value and a compatible value.
+
+    @tparam ValueType non-pointer type compatible to the JSON value, for
+    instance `int` for JSON integer numbers, `bool` for JSON booleans, or
+    `std::vector` types for JSON arrays
+
+    @return copy of the JSON value, converted to type @a ValueType
+
+    @throw std::domain_error in case passed type @a ValueType is incompatible
+    to JSON; example: `"type must be object, but is null"`
+
+    @complexity Linear in the size of the JSON value.
+
+    @liveexample{The example below shows several conversions from JSON values
+    to other types. There a few things to note: (1) Floating-point numbers can
+    be converted to integers\, (2) A JSON array can be converted to a standard
+    `std::vector<short>`\, (3) A JSON object can be converted to C++
+    associative containers such as `std::unordered_map<std::string\,
+    json>`.,get__ValueType_const}
+
+    @internal
+    The idea of using a casted null pointer to choose the correct
+    implementation is from <http://stackoverflow.com/a/8315197/266378>.
+    @endinternal
+
+    @sa @ref operator ValueType() const for implicit conversion
+    @sa @ref get() for pointer-member access
+
+    @since version 1.0.0
+    */
+    template<typename ValueType, typename std::enable_if<
+                 not std::is_pointer<ValueType>::value, int>::type = 0>
+    ValueType get() const
+    {
+        return get_impl(static_cast<ValueType*>(nullptr));
+    }
+
+    /*!
+    @brief get a pointer value (explicit)
+
+    Explicit pointer access to the internally stored JSON value. No copies are
+    made.
+
+    @warning The pointer becomes invalid if the underlying JSON object
+    changes.
+
+    @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref
+    object_t, @ref string_t, @ref boolean_t, @ref number_integer_t,
+    @ref number_unsigned_t, or @ref number_float_t.
+
+    @return pointer to the internally stored JSON value if the requested
+    pointer type @a PointerType fits to the JSON value; `nullptr` otherwise
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how pointers to internal values of a
+    JSON value can be requested. Note that no type conversions are made and a
+    `nullptr` is returned if the value and the requested pointer type does not
+    match.,get__PointerType}
+
+    @sa @ref get_ptr() for explicit pointer-member access
+
+    @since version 1.0.0
+    */
+    template<typename PointerType, typename std::enable_if<
+                 std::is_pointer<PointerType>::value, int>::type = 0>
+    PointerType get() noexcept
+    {
+        // delegate the call to get_ptr
+        return get_ptr<PointerType>();
+    }
+
+    /*!
+    @brief get a pointer value (explicit)
+    @copydoc get()
+    */
+    template<typename PointerType, typename std::enable_if<
+                 std::is_pointer<PointerType>::value, int>::type = 0>
+    constexpr const PointerType get() const noexcept
+    {
+        // delegate the call to get_ptr
+        return get_ptr<PointerType>();
+    }
+
+    /*!
+    @brief get a pointer value (implicit)
+
+    Implicit pointer access to the internally stored JSON value. No copies are
+    made.
+
+    @warning Writing data to the pointee of the result yields an undefined
+    state.
+
+    @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref
+    object_t, @ref string_t, @ref boolean_t, @ref number_integer_t,
+    @ref number_unsigned_t, or @ref number_float_t. Enforced by a static
+    assertion.
+
+    @return pointer to the internally stored JSON value if the requested
+    pointer type @a PointerType fits to the JSON value; `nullptr` otherwise
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how pointers to internal values of a
+    JSON value can be requested. Note that no type conversions are made and a
+    `nullptr` is returned if the value and the requested pointer type does not
+    match.,get_ptr}
+
+    @since version 1.0.0
+    */
+    template<typename PointerType, typename std::enable_if<
+                 std::is_pointer<PointerType>::value, int>::type = 0>
+    PointerType get_ptr() noexcept
+    {
+        // get the type of the PointerType (remove pointer and const)
+        using pointee_t = typename std::remove_const<typename
+                          std::remove_pointer<typename
+                          std::remove_const<PointerType>::type>::type>::type;
+        // make sure the type matches the allowed types
+        static_assert(
+            std::is_same<object_t, pointee_t>::value
+            or std::is_same<array_t, pointee_t>::value
+            or std::is_same<string_t, pointee_t>::value
+            or std::is_same<boolean_t, pointee_t>::value
+            or std::is_same<number_integer_t, pointee_t>::value
+            or std::is_same<number_unsigned_t, pointee_t>::value
+            or std::is_same<number_float_t, pointee_t>::value
+            , "incompatible pointer type");
+
+        // delegate the call to get_impl_ptr<>()
+        return get_impl_ptr(static_cast<PointerType>(nullptr));
+    }
+
+    /*!
+    @brief get a pointer value (implicit)
+    @copydoc get_ptr()
+    */
+    template<typename PointerType, typename std::enable_if<
+                 std::is_pointer<PointerType>::value and
+                 std::is_const<typename std::remove_pointer<PointerType>::type>::value, int>::type = 0>
+    constexpr const PointerType get_ptr() const noexcept
+    {
+        // get the type of the PointerType (remove pointer and const)
+        using pointee_t = typename std::remove_const<typename
+                          std::remove_pointer<typename
+                          std::remove_const<PointerType>::type>::type>::type;
+        // make sure the type matches the allowed types
+        static_assert(
+            std::is_same<object_t, pointee_t>::value
+            or std::is_same<array_t, pointee_t>::value
+            or std::is_same<string_t, pointee_t>::value
+            or std::is_same<boolean_t, pointee_t>::value
+            or std::is_same<number_integer_t, pointee_t>::value
+            or std::is_same<number_unsigned_t, pointee_t>::value
+            or std::is_same<number_float_t, pointee_t>::value
+            , "incompatible pointer type");
+
+        // delegate the call to get_impl_ptr<>() const
+        return get_impl_ptr(static_cast<const PointerType>(nullptr));
+    }
+
+    /*!
+    @brief get a reference value (implicit)
+
+    Implict reference access to the internally stored JSON value. No copies
+    are made.
+
+    @warning Writing data to the referee of the result yields an undefined
+    state.
+
+    @tparam ReferenceType reference type; must be a reference to @ref array_t,
+    @ref object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, or
+    @ref number_float_t. Enforced by static assertion.
+
+    @return reference to the internally stored JSON value if the requested
+    reference type @a ReferenceType fits to the JSON value; throws
+    std::domain_error otherwise
+
+    @throw std::domain_error in case passed type @a ReferenceType is
+    incompatible with the stored JSON value
+
+    @complexity Constant.
+
+    @liveexample{The example shows several calls to `get_ref()`.,get_ref}
+
+    @since version 1.1.0
+    */
+    template<typename ReferenceType, typename std::enable_if<
+                 std::is_reference<ReferenceType>::value, int>::type = 0>
+    ReferenceType get_ref()
+    {
+        // delegate call to get_ref_impl
+        return get_ref_impl<ReferenceType>(*this);
+    }
+
+    /*!
+    @brief get a reference value (implicit)
+    @copydoc get_ref()
+    */
+    template<typename ReferenceType, typename std::enable_if<
+                 std::is_reference<ReferenceType>::value and
+                 std::is_const<typename std::remove_reference<ReferenceType>::type>::value, int>::type = 0>
+    ReferenceType get_ref() const
+    {
+        // delegate call to get_ref_impl
+        return get_ref_impl<ReferenceType>(*this);
+    }
+
+    /*!
+    @brief get a value (implicit)
+
+    Implicit type conversion between the JSON value and a compatible value.
+    The call is realized by calling @ref get() const.
+
+    @tparam ValueType non-pointer type compatible to the JSON value, for
+    instance `int` for JSON integer numbers, `bool` for JSON booleans, or
+    `std::vector` types for JSON arrays. The character type of @ref string_t
+    as well as an initializer list of this type is excluded to avoid
+    ambiguities as these types implicitly convert to `std::string`.
+
+    @return copy of the JSON value, converted to type @a ValueType
+
+    @throw std::domain_error in case passed type @a ValueType is incompatible
+    to JSON, thrown by @ref get() const
+
+    @complexity Linear in the size of the JSON value.
+
+    @liveexample{The example below shows several conversions from JSON values
+    to other types. There a few things to note: (1) Floating-point numbers can
+    be converted to integers\, (2) A JSON array can be converted to a standard
+    `std::vector<short>`\, (3) A JSON object can be converted to C++
+    associative containers such as `std::unordered_map<std::string\,
+    json>`.,operator__ValueType}
+
+    @since version 1.0.0
+    */
+    template < typename ValueType, typename std::enable_if <
+                   not std::is_pointer<ValueType>::value and
+                   not std::is_same<ValueType, typename string_t::value_type>::value
+#ifndef _MSC_VER  // Fix for issue #167 operator<< abiguity under VS2015
+                   and not std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>::value
+#endif
+                   , int >::type = 0 >
+    operator ValueType() const
+    {
+        // delegate the call to get<>() const
+        return get<ValueType>();
+    }
+
+    /// @}
+
+
+    ////////////////////
+    // element access //
+    ////////////////////
+
+    /// @name element access
+    /// Access to the JSON value.
+    /// @{
+
+    /*!
+    @brief access specified array element with bounds checking
+
+    Returns a reference to the element at specified location @a idx, with
+    bounds checking.
+
+    @param[in] idx  index of the element to access
+
+    @return reference to the element at index @a idx
+
+    @throw std::domain_error if the JSON value is not an array; example:
+    `"cannot use at() with string"`
+    @throw std::out_of_range if the index @a idx is out of range of the array;
+    that is, `idx >= size()`; example: `"array index 7 is out of range"`
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how array elements can be read and
+    written using `at()`.,at__size_type}
+
+    @since version 1.0.0
+    */
+    reference at(size_type idx)
+    {
+        // at only works for arrays
+        if (is_array())
+        {
+            try
+            {
+                return m_value.array->at(idx);
+            }
+            catch (std::out_of_range&)
+            {
+                // create better exception explanation
+                throw std::out_of_range("array index " + std::to_string(idx) + " is out of range");
+            }
+        }
+        else
+        {
+            throw std::domain_error("cannot use at() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified array element with bounds checking
+
+    Returns a const reference to the element at specified location @a idx,
+    with bounds checking.
+
+    @param[in] idx  index of the element to access
+
+    @return const reference to the element at index @a idx
+
+    @throw std::domain_error if the JSON value is not an array; example:
+    `"cannot use at() with string"`
+    @throw std::out_of_range if the index @a idx is out of range of the array;
+    that is, `idx >= size()`; example: `"array index 7 is out of range"`
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how array elements can be read using
+    `at()`.,at__size_type_const}
+
+    @since version 1.0.0
+    */
+    const_reference at(size_type idx) const
+    {
+        // at only works for arrays
+        if (is_array())
+        {
+            try
+            {
+                return m_value.array->at(idx);
+            }
+            catch (std::out_of_range&)
+            {
+                // create better exception explanation
+                throw std::out_of_range("array index " + std::to_string(idx) + " is out of range");
+            }
+        }
+        else
+        {
+            throw std::domain_error("cannot use at() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified object element with bounds checking
+
+    Returns a reference to the element at with specified key @a key, with
+    bounds checking.
+
+    @param[in] key  key of the element to access
+
+    @return reference to the element at key @a key
+
+    @throw std::domain_error if the JSON value is not an object; example:
+    `"cannot use at() with boolean"`
+    @throw std::out_of_range if the key @a key is is not stored in the object;
+    that is, `find(key) == end()`; example: `"key "the fast" not found"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read and
+    written using `at()`.,at__object_t_key_type}
+
+    @sa @ref operator[](const typename object_t::key_type&) for unchecked
+    access by reference
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.0.0
+    */
+    reference at(const typename object_t::key_type& key)
+    {
+        // at only works for objects
+        if (is_object())
+        {
+            try
+            {
+                return m_value.object->at(key);
+            }
+            catch (std::out_of_range&)
+            {
+                // create better exception explanation
+                throw std::out_of_range("key '" + key + "' not found");
+            }
+        }
+        else
+        {
+            throw std::domain_error("cannot use at() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified object element with bounds checking
+
+    Returns a const reference to the element at with specified key @a key,
+    with bounds checking.
+
+    @param[in] key  key of the element to access
+
+    @return const reference to the element at key @a key
+
+    @throw std::domain_error if the JSON value is not an object; example:
+    `"cannot use at() with boolean"`
+    @throw std::out_of_range if the key @a key is is not stored in the object;
+    that is, `find(key) == end()`; example: `"key "the fast" not found"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read using
+    `at()`.,at__object_t_key_type_const}
+
+    @sa @ref operator[](const typename object_t::key_type&) for unchecked
+    access by reference
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.0.0
+    */
+    const_reference at(const typename object_t::key_type& key) const
+    {
+        // at only works for objects
+        if (is_object())
+        {
+            try
+            {
+                return m_value.object->at(key);
+            }
+            catch (std::out_of_range&)
+            {
+                // create better exception explanation
+                throw std::out_of_range("key '" + key + "' not found");
+            }
+        }
+        else
+        {
+            throw std::domain_error("cannot use at() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified array element
+
+    Returns a reference to the element at specified location @a idx.
+
+    @note If @a idx is beyond the range of the array (i.e., `idx >= size()`),
+    then the array is silently filled up with `null` values to make `idx` a
+    valid reference to the last stored element.
+
+    @param[in] idx  index of the element to access
+
+    @return reference to the element at index @a idx
+
+    @throw std::domain_error if JSON is not an array or null; example:
+    `"cannot use operator[] with string"`
+
+    @complexity Constant if @a idx is in the range of the array. Otherwise
+    linear in `idx - size()`.
+
+    @liveexample{The example below shows how array elements can be read and
+    written using `[]` operator. Note the addition of `null`
+    values.,operatorarray__size_type}
+
+    @since version 1.0.0
+    */
+    reference operator[](size_type idx)
+    {
+        // implicitly convert null value to an empty array
+        if (is_null())
+        {
+            m_type = value_t::array;
+            m_value.array = create<array_t>();
+            assert_invariant();
+        }
+
+        // operator[] only works for arrays
+        if (is_array())
+        {
+            // fill up array with null values if given idx is outside range
+            if (idx >= m_value.array->size())
+            {
+                m_value.array->insert(m_value.array->end(),
+                                      idx - m_value.array->size() + 1,
+                                      basic_json());
+            }
+
+            return m_value.array->operator[](idx);
+        }
+        else
+        {
+            throw std::domain_error("cannot use operator[] with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified array element
+
+    Returns a const reference to the element at specified location @a idx.
+
+    @param[in] idx  index of the element to access
+
+    @return const reference to the element at index @a idx
+
+    @throw std::domain_error if JSON is not an array; example: `"cannot use
+    operator[] with null"`
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how array elements can be read using
+    the `[]` operator.,operatorarray__size_type_const}
+
+    @since version 1.0.0
+    */
+    const_reference operator[](size_type idx) const
+    {
+        // const operator[] only works for arrays
+        if (is_array())
+        {
+            return m_value.array->operator[](idx);
+        }
+        else
+        {
+            throw std::domain_error("cannot use operator[] with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified object element
+
+    Returns a reference to the element at with specified key @a key.
+
+    @note If @a key is not found in the object, then it is silently added to
+    the object and filled with a `null` value to make `key` a valid reference.
+    In case the value was `null` before, it is converted to an object.
+
+    @param[in] key  key of the element to access
+
+    @return reference to the element at key @a key
+
+    @throw std::domain_error if JSON is not an object or null; example:
+    `"cannot use operator[] with string"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read and
+    written using the `[]` operator.,operatorarray__key_type}
+
+    @sa @ref at(const typename object_t::key_type&) for access by reference
+    with range checking
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.0.0
+    */
+    reference operator[](const typename object_t::key_type& key)
+    {
+        // implicitly convert null value to an empty object
+        if (is_null())
+        {
+            m_type = value_t::object;
+            m_value.object = create<object_t>();
+            assert_invariant();
+        }
+
+        // operator[] only works for objects
+        if (is_object())
+        {
+            return m_value.object->operator[](key);
+        }
+        else
+        {
+            throw std::domain_error("cannot use operator[] with " + type_name());
+        }
+    }
+
+    /*!
+    @brief read-only access specified object element
+
+    Returns a const reference to the element at with specified key @a key. No
+    bounds checking is performed.
+
+    @warning If the element with key @a key does not exist, the behavior is
+    undefined.
+
+    @param[in] key  key of the element to access
+
+    @return const reference to the element at key @a key
+
+    @pre The element with key @a key must exist. **This precondition is
+         enforced with an assertion.**
+
+    @throw std::domain_error if JSON is not an object; example: `"cannot use
+    operator[] with null"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read using
+    the `[]` operator.,operatorarray__key_type_const}
+
+    @sa @ref at(const typename object_t::key_type&) for access by reference
+    with range checking
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.0.0
+    */
+    const_reference operator[](const typename object_t::key_type& key) const
+    {
+        // const operator[] only works for objects
+        if (is_object())
+        {
+            assert(m_value.object->find(key) != m_value.object->end());
+            return m_value.object->find(key)->second;
+        }
+        else
+        {
+            throw std::domain_error("cannot use operator[] with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified object element
+
+    Returns a reference to the element at with specified key @a key.
+
+    @note If @a key is not found in the object, then it is silently added to
+    the object and filled with a `null` value to make `key` a valid reference.
+    In case the value was `null` before, it is converted to an object.
+
+    @param[in] key  key of the element to access
+
+    @return reference to the element at key @a key
+
+    @throw std::domain_error if JSON is not an object or null; example:
+    `"cannot use operator[] with string"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read and
+    written using the `[]` operator.,operatorarray__key_type}
+
+    @sa @ref at(const typename object_t::key_type&) for access by reference
+    with range checking
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.0.0
+    */
+    template<typename T, std::size_t n>
+    reference operator[](T * (&key)[n])
+    {
+        return operator[](static_cast<const T>(key));
+    }
+
+    /*!
+    @brief read-only access specified object element
+
+    Returns a const reference to the element at with specified key @a key. No
+    bounds checking is performed.
+
+    @warning If the element with key @a key does not exist, the behavior is
+    undefined.
+
+    @note This function is required for compatibility reasons with Clang.
+
+    @param[in] key  key of the element to access
+
+    @return const reference to the element at key @a key
+
+    @throw std::domain_error if JSON is not an object; example: `"cannot use
+    operator[] with null"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read using
+    the `[]` operator.,operatorarray__key_type_const}
+
+    @sa @ref at(const typename object_t::key_type&) for access by reference
+    with range checking
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.0.0
+    */
+    template<typename T, std::size_t n>
+    const_reference operator[](T * (&key)[n]) const
+    {
+        return operator[](static_cast<const T>(key));
+    }
+
+    /*!
+    @brief access specified object element
+
+    Returns a reference to the element at with specified key @a key.
+
+    @note If @a key is not found in the object, then it is silently added to
+    the object and filled with a `null` value to make `key` a valid reference.
+    In case the value was `null` before, it is converted to an object.
+
+    @param[in] key  key of the element to access
+
+    @return reference to the element at key @a key
+
+    @throw std::domain_error if JSON is not an object or null; example:
+    `"cannot use operator[] with string"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read and
+    written using the `[]` operator.,operatorarray__key_type}
+
+    @sa @ref at(const typename object_t::key_type&) for access by reference
+    with range checking
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.1.0
+    */
+    template<typename T>
+    reference operator[](T* key)
+    {
+        // implicitly convert null to object
+        if (is_null())
+        {
+            m_type = value_t::object;
+            m_value = value_t::object;
+            assert_invariant();
+        }
+
+        // at only works for objects
+        if (is_object())
+        {
+            return m_value.object->operator[](key);
+        }
+        else
+        {
+            throw std::domain_error("cannot use operator[] with " + type_name());
+        }
+    }
+
+    /*!
+    @brief read-only access specified object element
+
+    Returns a const reference to the element at with specified key @a key. No
+    bounds checking is performed.
+
+    @warning If the element with key @a key does not exist, the behavior is
+    undefined.
+
+    @param[in] key  key of the element to access
+
+    @return const reference to the element at key @a key
+
+    @pre The element with key @a key must exist. **This precondition is
+         enforced with an assertion.**
+
+    @throw std::domain_error if JSON is not an object; example: `"cannot use
+    operator[] with null"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be read using
+    the `[]` operator.,operatorarray__key_type_const}
+
+    @sa @ref at(const typename object_t::key_type&) for access by reference
+    with range checking
+    @sa @ref value() for access by value with a default value
+
+    @since version 1.1.0
+    */
+    template<typename T>
+    const_reference operator[](T* key) const
+    {
+        // at only works for objects
+        if (is_object())
+        {
+            assert(m_value.object->find(key) != m_value.object->end());
+            return m_value.object->find(key)->second;
+        }
+        else
+        {
+            throw std::domain_error("cannot use operator[] with " + type_name());
+        }
+    }
+
+    /*!
+    @brief access specified object element with default value
+
+    Returns either a copy of an object's element at the specified key @a key
+    or a given default value if no element with key @a key exists.
+
+    The function is basically equivalent to executing
+    @code {.cpp}
+    try {
+        return at(key);
+    } catch(std::out_of_range) {
+        return default_value;
+    }
+    @endcode
+
+    @note Unlike @ref at(const typename object_t::key_type&), this function
+    does not throw if the given key @a key was not found.
+
+    @note Unlike @ref operator[](const typename object_t::key_type& key), this
+    function does not implicitly add an element to the position defined by @a
+    key. This function is furthermore also applicable to const objects.
+
+    @param[in] key  key of the element to access
+    @param[in] default_value  the value to return if @a key is not found
+
+    @tparam ValueType type compatible to JSON values, for instance `int` for
+    JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for
+    JSON arrays. Note the type of the expected value at @a key and the default
+    value @a default_value must be compatible.
+
+    @return copy of the element at key @a key or @a default_value if @a key
+    is not found
+
+    @throw std::domain_error if JSON is not an object; example: `"cannot use
+    value() with null"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be queried
+    with a default value.,basic_json__value}
+
+    @sa @ref at(const typename object_t::key_type&) for access by reference
+    with range checking
+    @sa @ref operator[](const typename object_t::key_type&) for unchecked
+    access by reference
+
+    @since version 1.0.0
+    */
+    template<class ValueType, typename std::enable_if<
+                 std::is_convertible<basic_json_t, ValueType>::value, int>::type = 0>
+    ValueType value(const typename object_t::key_type& key, ValueType default_value) const
+    {
+        // at only works for objects
+        if (is_object())
+        {
+            // if key is found, return value and given default value otherwise
+            const auto it = find(key);
+            if (it != end())
+            {
+                return *it;
+            }
+            else
+            {
+                return default_value;
+            }
+        }
+        else
+        {
+            throw std::domain_error("cannot use value() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief overload for a default value of type const char*
+    @copydoc basic_json::value(const typename object_t::key_type&, ValueType) const
+    */
+    string_t value(const typename object_t::key_type& key, const char* default_value) const
+    {
+        return value(key, string_t(default_value));
+    }
+
+    /*!
+    @brief access specified object element via JSON Pointer with default value
+
+    Returns either a copy of an object's element at the specified key @a key
+    or a given default value if no element with key @a key exists.
+
+    The function is basically equivalent to executing
+    @code {.cpp}
+    try {
+        return at(ptr);
+    } catch(std::out_of_range) {
+        return default_value;
+    }
+    @endcode
+
+    @note Unlike @ref at(const json_pointer&), this function does not throw
+    if the given key @a key was not found.
+
+    @param[in] ptr  a JSON pointer to the element to access
+    @param[in] default_value  the value to return if @a ptr found no value
+
+    @tparam ValueType type compatible to JSON values, for instance `int` for
+    JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for
+    JSON arrays. Note the type of the expected value at @a key and the default
+    value @a default_value must be compatible.
+
+    @return copy of the element at key @a key or @a default_value if @a key
+    is not found
+
+    @throw std::domain_error if JSON is not an object; example: `"cannot use
+    value() with null"`
+
+    @complexity Logarithmic in the size of the container.
+
+    @liveexample{The example below shows how object elements can be queried
+    with a default value.,basic_json__value_ptr}
+
+    @sa @ref operator[](const json_pointer&) for unchecked access by reference
+
+    @since version 2.0.2
+    */
+    template<class ValueType, typename std::enable_if<
+                 std::is_convertible<basic_json_t, ValueType>::value, int>::type = 0>
+    ValueType value(const json_pointer& ptr, ValueType default_value) const
+    {
+        // at only works for objects
+        if (is_object())
+        {
+            // if pointer resolves a value, return it or use default value
+            try
+            {
+                return ptr.get_checked(this);
+            }
+            catch (std::out_of_range&)
+            {
+                return default_value;
+            }
+        }
+        else
+        {
+            throw std::domain_error("cannot use value() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief overload for a default value of type const char*
+    @copydoc basic_json::value(const json_pointer&, ValueType) const
+    */
+    string_t value(const json_pointer& ptr, const char* default_value) const
+    {
+        return value(ptr, string_t(default_value));
+    }
+
+    /*!
+    @brief access the first element
+
+    Returns a reference to the first element in the container. For a JSON
+    container `c`, the expression `c.front()` is equivalent to `*c.begin()`.
+
+    @return In case of a structured type (array or object), a reference to the
+    first element is returned. In cast of number, string, or boolean values, a
+    reference to the value is returned.
+
+    @complexity Constant.
+
+    @pre The JSON value must not be `null` (would throw `std::out_of_range`)
+    or an empty array or object (undefined behavior, **guarded by
+    assertions**).
+    @post The JSON value remains unchanged.
+
+    @throw std::out_of_range when called on `null` value
+
+    @liveexample{The following code shows an example for `front()`.,front}
+
+    @sa @ref back() -- access the last element
+
+    @since version 1.0.0
+    */
+    reference front()
+    {
+        return *begin();
+    }
+
+    /*!
+    @copydoc basic_json::front()
+    */
+    const_reference front() const
+    {
+        return *cbegin();
+    }
+
+    /*!
+    @brief access the last element
+
+    Returns a reference to the last element in the container. For a JSON
+    container `c`, the expression `c.back()` is equivalent to
+    @code {.cpp}
+    auto tmp = c.end();
+    --tmp;
+    return *tmp;
+    @endcode
+
+    @return In case of a structured type (array or object), a reference to the
+    last element is returned. In cast of number, string, or boolean values, a
+    reference to the value is returned.
+
+    @complexity Constant.
+
+    @pre The JSON value must not be `null` (would throw `std::out_of_range`)
+    or an empty array or object (undefined behavior, **guarded by
+    assertions**).
+    @post The JSON value remains unchanged.
+
+    @throw std::out_of_range when called on `null` value.
+
+    @liveexample{The following code shows an example for `back()`.,back}
+
+    @sa @ref front() -- access the first element
+
+    @since version 1.0.0
+    */
+    reference back()
+    {
+        auto tmp = end();
+        --tmp;
+        return *tmp;
+    }
+
+    /*!
+    @copydoc basic_json::back()
+    */
+    const_reference back() const
+    {
+        auto tmp = cend();
+        --tmp;
+        return *tmp;
+    }
+
+    /*!
+    @brief remove element given an iterator
+
+    Removes the element specified by iterator @a pos. The iterator @a pos must
+    be valid and dereferenceable. Thus the `end()` iterator (which is valid,
+    but is not dereferenceable) cannot be used as a value for @a pos.
+
+    If called on a primitive type other than `null`, the resulting JSON value
+    will be `null`.
+
+    @param[in] pos iterator to the element to remove
+    @return Iterator following the last removed element. If the iterator @a
+    pos refers to the last element, the `end()` iterator is returned.
+
+    @tparam IteratorType an @ref iterator or @ref const_iterator
+
+    @post Invalidates iterators and references at or after the point of the
+    erase, including the `end()` iterator.
+
+    @throw std::domain_error if called on a `null` value; example: `"cannot
+    use erase() with null"`
+    @throw std::domain_error if called on an iterator which does not belong to
+    the current JSON value; example: `"iterator does not fit current value"`
+    @throw std::out_of_range if called on a primitive type with invalid
+    iterator (i.e., any iterator which is not `begin()`); example: `"iterator
+    out of range"`
+
+    @complexity The complexity depends on the type:
+    - objects: amortized constant
+    - arrays: linear in distance between pos and the end of the container
+    - strings: linear in the length of the string
+    - other types: constant
+
+    @liveexample{The example shows the result of `erase()` for different JSON
+    types.,erase__IteratorType}
+
+    @sa @ref erase(IteratorType, IteratorType) -- removes the elements in
+    the given range
+    @sa @ref erase(const typename object_t::key_type&) -- removes the element
+    from an object at the given key
+    @sa @ref erase(const size_type) -- removes the element from an array at
+    the given index
+
+    @since version 1.0.0
+    */
+    template<class IteratorType, typename std::enable_if<
+                 std::is_same<IteratorType, typename basic_json_t::iterator>::value or
+                 std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int>::type
+             = 0>
+    IteratorType erase(IteratorType pos)
+    {
+        // make sure iterator fits the current value
+        if (this != pos.m_object)
+        {
+            throw std::domain_error("iterator does not fit current value");
+        }
+
+        IteratorType result = end();
+
+        switch (m_type)
+        {
+            case value_t::boolean:
+            case value_t::number_float:
+            case value_t::number_integer:
+            case value_t::number_unsigned:
+            case value_t::string:
+            {
+                if (not pos.m_it.primitive_iterator.is_begin())
+                {
+                    throw std::out_of_range("iterator out of range");
+                }
+
+                if (is_string())
+                {
+                    AllocatorType<string_t> alloc;
+                    alloc.destroy(m_value.string);
+                    alloc.deallocate(m_value.string, 1);
+                    m_value.string = nullptr;
+                }
+
+                m_type = value_t::null;
+                assert_invariant();
+                break;
+            }
+
+            case value_t::object:
+            {
+                result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator);
+                break;
+            }
+
+            case value_t::array:
+            {
+                result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator);
+                break;
+            }
+
+            default:
+            {
+                throw std::domain_error("cannot use erase() with " + type_name());
+            }
+        }
+
+        return result;
+    }
+
+    /*!
+    @brief remove elements given an iterator range
+
+    Removes the element specified by the range `[first; last)`. The iterator
+    @a first does not need to be dereferenceable if `first == last`: erasing
+    an empty range is a no-op.
+
+    If called on a primitive type other than `null`, the resulting JSON value
+    will be `null`.
+
+    @param[in] first iterator to the beginning of the range to remove
+    @param[in] last iterator past the end of the range to remove
+    @return Iterator following the last removed element. If the iterator @a
+    second refers to the last element, the `end()` iterator is returned.
+
+    @tparam IteratorType an @ref iterator or @ref const_iterator
+
+    @post Invalidates iterators and references at or after the point of the
+    erase, including the `end()` iterator.
+
+    @throw std::domain_error if called on a `null` value; example: `"cannot
+    use erase() with null"`
+    @throw std::domain_error if called on iterators which does not belong to
+    the current JSON value; example: `"iterators do not fit current value"`
+    @throw std::out_of_range if called on a primitive type with invalid
+    iterators (i.e., if `first != begin()` and `last != end()`); example:
+    `"iterators out of range"`
+
+    @complexity The complexity depends on the type:
+    - objects: `log(size()) + std::distance(first, last)`
+    - arrays: linear in the distance between @a first and @a last, plus linear
+      in the distance between @a last and end of the container
+    - strings: linear in the length of the string
+    - other types: constant
+
+    @liveexample{The example shows the result of `erase()` for different JSON
+    types.,erase__IteratorType_IteratorType}
+
+    @sa @ref erase(IteratorType) -- removes the element at a given position
+    @sa @ref erase(const typename object_t::key_type&) -- removes the element
+    from an object at the given key
+    @sa @ref erase(const size_type) -- removes the element from an array at
+    the given index
+
+    @since version 1.0.0
+    */
+    template<class IteratorType, typename std::enable_if<
+                 std::is_same<IteratorType, typename basic_json_t::iterator>::value or
+                 std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int>::type
+             = 0>
+    IteratorType erase(IteratorType first, IteratorType last)
+    {
+        // make sure iterator fits the current value
+        if (this != first.m_object or this != last.m_object)
+        {
+            throw std::domain_error("iterators do not fit current value");
+        }
+
+        IteratorType result = end();
+
+        switch (m_type)
+        {
+            case value_t::boolean:
+            case value_t::number_float:
+            case value_t::number_integer:
+            case value_t::number_unsigned:
+            case value_t::string:
+            {
+                if (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end())
+                {
+                    throw std::out_of_range("iterators out of range");
+                }
+
+                if (is_string())
+                {
+                    AllocatorType<string_t> alloc;
+                    alloc.destroy(m_value.string);
+                    alloc.deallocate(m_value.string, 1);
+                    m_value.string = nullptr;
+                }
+
+                m_type = value_t::null;
+                assert_invariant();
+                break;
+            }
+
+            case value_t::object:
+            {
+                result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator,
+                                              last.m_it.object_iterator);
+                break;
+            }
+
+            case value_t::array:
+            {
+                result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator,
+                                             last.m_it.array_iterator);
+                break;
+            }
+
+            default:
+            {
+                throw std::domain_error("cannot use erase() with " + type_name());
+            }
+        }
+
+        return result;
+    }
+
+    /*!
+    @brief remove element from a JSON object given a key
+
+    Removes elements from a JSON object with the key value @a key.
+
+    @param[in] key value of the elements to remove
+
+    @return Number of elements removed. If @a ObjectType is the default
+    `std::map` type, the return value will always be `0` (@a key was not
+    found) or `1` (@a key was found).
+
+    @post References and iterators to the erased elements are invalidated.
+    Other references and iterators are not affected.
+
+    @throw std::domain_error when called on a type other than JSON object;
+    example: `"cannot use erase() with null"`
+
+    @complexity `log(size()) + count(key)`
+
+    @liveexample{The example shows the effect of `erase()`.,erase__key_type}
+
+    @sa @ref erase(IteratorType) -- removes the element at a given position
+    @sa @ref erase(IteratorType, IteratorType) -- removes the elements in
+    the given range
+    @sa @ref erase(const size_type) -- removes the element from an array at
+    the given index
+
+    @since version 1.0.0
+    */
+    size_type erase(const typename object_t::key_type& key)
+    {
+        // this erase only works for objects
+        if (is_object())
+        {
+            return m_value.object->erase(key);
+        }
+        else
+        {
+            throw std::domain_error("cannot use erase() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief remove element from a JSON array given an index
+
+    Removes element from a JSON array at the index @a idx.
+
+    @param[in] idx index of the element to remove
+
+    @throw std::domain_error when called on a type other than JSON array;
+    example: `"cannot use erase() with null"`
+    @throw std::out_of_range when `idx >= size()`; example: `"array index 17
+    is out of range"`
+
+    @complexity Linear in distance between @a idx and the end of the container.
+
+    @liveexample{The example shows the effect of `erase()`.,erase__size_type}
+
+    @sa @ref erase(IteratorType) -- removes the element at a given position
+    @sa @ref erase(IteratorType, IteratorType) -- removes the elements in
+    the given range
+    @sa @ref erase(const typename object_t::key_type&) -- removes the element
+    from an object at the given key
+
+    @since version 1.0.0
+    */
+    void erase(const size_type idx)
+    {
+        // this erase only works for arrays
+        if (is_array())
+        {
+            if (idx >= size())
+            {
+                throw std::out_of_range("array index " + std::to_string(idx) + " is out of range");
+            }
+
+            m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx));
+        }
+        else
+        {
+            throw std::domain_error("cannot use erase() with " + type_name());
+        }
+    }
+
+    /// @}
+
+
+    ////////////
+    // lookup //
+    ////////////
+
+    /// @name lookup
+    /// @{
+
+    /*!
+    @brief find an element in a JSON object
+
+    Finds an element in a JSON object with key equivalent to @a key. If the
+    element is not found or the JSON value is not an object, end() is
+    returned.
+
+    @param[in] key key value of the element to search for
+
+    @return Iterator to an element with key equivalent to @a key. If no such
+    element is found, past-the-end (see end()) iterator is returned.
+
+    @complexity Logarithmic in the size of the JSON object.
+
+    @liveexample{The example shows how `find()` is used.,find__key_type}
+
+    @since version 1.0.0
+    */
+    iterator find(typename object_t::key_type key)
+    {
+        auto result = end();
+
+        if (is_object())
+        {
+            result.m_it.object_iterator = m_value.object->find(key);
+        }
+
+        return result;
+    }
+
+    /*!
+    @brief find an element in a JSON object
+    @copydoc find(typename object_t::key_type)
+    */
+    const_iterator find(typename object_t::key_type key) const
+    {
+        auto result = cend();
+
+        if (is_object())
+        {
+            result.m_it.object_iterator = m_value.object->find(key);
+        }
+
+        return result;
+    }
+
+    /*!
+    @brief returns the number of occurrences of a key in a JSON object
+
+    Returns the number of elements with key @a key. If ObjectType is the
+    default `std::map` type, the return value will always be `0` (@a key was
+    not found) or `1` (@a key was found).
+
+    @param[in] key key value of the element to count
+
+    @return Number of elements with key @a key. If the JSON value is not an
+    object, the return value will be `0`.
+
+    @complexity Logarithmic in the size of the JSON object.
+
+    @liveexample{The example shows how `count()` is used.,count}
+
+    @since version 1.0.0
+    */
+    size_type count(typename object_t::key_type key) const
+    {
+        // return 0 for all nonobject types
+        return is_object() ? m_value.object->count(key) : 0;
+    }
+
+    /// @}
+
+
+    ///////////////
+    // iterators //
+    ///////////////
+
+    /// @name iterators
+    /// @{
+
+    /*!
+    @brief returns an iterator to the first element
+
+    Returns an iterator to the first element.
+
+    @image html range-begin-end.svg "Illustration from cppreference.com"
+
+    @return iterator to the first element
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is constant.
+
+    @liveexample{The following code shows an example for `begin()`.,begin}
+
+    @sa @ref cbegin() -- returns a const iterator to the beginning
+    @sa @ref end() -- returns an iterator to the end
+    @sa @ref cend() -- returns a const iterator to the end
+
+    @since version 1.0.0
+    */
+    iterator begin() noexcept
+    {
+        iterator result(this);
+        result.set_begin();
+        return result;
+    }
+
+    /*!
+    @copydoc basic_json::cbegin()
+    */
+    const_iterator begin() const noexcept
+    {
+        return cbegin();
+    }
+
+    /*!
+    @brief returns a const iterator to the first element
+
+    Returns a const iterator to the first element.
+
+    @image html range-begin-end.svg "Illustration from cppreference.com"
+
+    @return const iterator to the first element
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `const_cast<const basic_json&>(*this).begin()`.
+
+    @liveexample{The following code shows an example for `cbegin()`.,cbegin}
+
+    @sa @ref begin() -- returns an iterator to the beginning
+    @sa @ref end() -- returns an iterator to the end
+    @sa @ref cend() -- returns a const iterator to the end
+
+    @since version 1.0.0
+    */
+    const_iterator cbegin() const noexcept
+    {
+        const_iterator result(this);
+        result.set_begin();
+        return result;
+    }
+
+    /*!
+    @brief returns an iterator to one past the last element
+
+    Returns an iterator to one past the last element.
+
+    @image html range-begin-end.svg "Illustration from cppreference.com"
+
+    @return iterator one past the last element
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is constant.
+
+    @liveexample{The following code shows an example for `end()`.,end}
+
+    @sa @ref cend() -- returns a const iterator to the end
+    @sa @ref begin() -- returns an iterator to the beginning
+    @sa @ref cbegin() -- returns a const iterator to the beginning
+
+    @since version 1.0.0
+    */
+    iterator end() noexcept
+    {
+        iterator result(this);
+        result.set_end();
+        return result;
+    }
+
+    /*!
+    @copydoc basic_json::cend()
+    */
+    const_iterator end() const noexcept
+    {
+        return cend();
+    }
+
+    /*!
+    @brief returns a const iterator to one past the last element
+
+    Returns a const iterator to one past the last element.
+
+    @image html range-begin-end.svg "Illustration from cppreference.com"
+
+    @return const iterator one past the last element
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `const_cast<const basic_json&>(*this).end()`.
+
+    @liveexample{The following code shows an example for `cend()`.,cend}
+
+    @sa @ref end() -- returns an iterator to the end
+    @sa @ref begin() -- returns an iterator to the beginning
+    @sa @ref cbegin() -- returns a const iterator to the beginning
+
+    @since version 1.0.0
+    */
+    const_iterator cend() const noexcept
+    {
+        const_iterator result(this);
+        result.set_end();
+        return result;
+    }
+
+    /*!
+    @brief returns an iterator to the reverse-beginning
+
+    Returns an iterator to the reverse-beginning; that is, the last element.
+
+    @image html range-rbegin-rend.svg "Illustration from cppreference.com"
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [ReversibleContainer](http://en.cppreference.com/w/cpp/concept/ReversibleContainer)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `reverse_iterator(end())`.
+
+    @liveexample{The following code shows an example for `rbegin()`.,rbegin}
+
+    @sa @ref crbegin() -- returns a const reverse iterator to the beginning
+    @sa @ref rend() -- returns a reverse iterator to the end
+    @sa @ref crend() -- returns a const reverse iterator to the end
+
+    @since version 1.0.0
+    */
+    reverse_iterator rbegin() noexcept
+    {
+        return reverse_iterator(end());
+    }
+
+    /*!
+    @copydoc basic_json::crbegin()
+    */
+    const_reverse_iterator rbegin() const noexcept
+    {
+        return crbegin();
+    }
+
+    /*!
+    @brief returns an iterator to the reverse-end
+
+    Returns an iterator to the reverse-end; that is, one before the first
+    element.
+
+    @image html range-rbegin-rend.svg "Illustration from cppreference.com"
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [ReversibleContainer](http://en.cppreference.com/w/cpp/concept/ReversibleContainer)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `reverse_iterator(begin())`.
+
+    @liveexample{The following code shows an example for `rend()`.,rend}
+
+    @sa @ref crend() -- returns a const reverse iterator to the end
+    @sa @ref rbegin() -- returns a reverse iterator to the beginning
+    @sa @ref crbegin() -- returns a const reverse iterator to the beginning
+
+    @since version 1.0.0
+    */
+    reverse_iterator rend() noexcept
+    {
+        return reverse_iterator(begin());
+    }
+
+    /*!
+    @copydoc basic_json::crend()
+    */
+    const_reverse_iterator rend() const noexcept
+    {
+        return crend();
+    }
+
+    /*!
+    @brief returns a const reverse iterator to the last element
+
+    Returns a const iterator to the reverse-beginning; that is, the last
+    element.
+
+    @image html range-rbegin-rend.svg "Illustration from cppreference.com"
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [ReversibleContainer](http://en.cppreference.com/w/cpp/concept/ReversibleContainer)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `const_cast<const basic_json&>(*this).rbegin()`.
+
+    @liveexample{The following code shows an example for `crbegin()`.,crbegin}
+
+    @sa @ref rbegin() -- returns a reverse iterator to the beginning
+    @sa @ref rend() -- returns a reverse iterator to the end
+    @sa @ref crend() -- returns a const reverse iterator to the end
+
+    @since version 1.0.0
+    */
+    const_reverse_iterator crbegin() const noexcept
+    {
+        return const_reverse_iterator(cend());
+    }
+
+    /*!
+    @brief returns a const reverse iterator to one before the first
+
+    Returns a const reverse iterator to the reverse-end; that is, one before
+    the first element.
+
+    @image html range-rbegin-rend.svg "Illustration from cppreference.com"
+
+    @complexity Constant.
+
+    @requirement This function helps `basic_json` satisfying the
+    [ReversibleContainer](http://en.cppreference.com/w/cpp/concept/ReversibleContainer)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `const_cast<const basic_json&>(*this).rend()`.
+
+    @liveexample{The following code shows an example for `crend()`.,crend}
+
+    @sa @ref rend() -- returns a reverse iterator to the end
+    @sa @ref rbegin() -- returns a reverse iterator to the beginning
+    @sa @ref crbegin() -- returns a const reverse iterator to the beginning
+
+    @since version 1.0.0
+    */
+    const_reverse_iterator crend() const noexcept
+    {
+        return const_reverse_iterator(cbegin());
+    }
+
+  private:
+    // forward declaration
+    template<typename IteratorType> class iteration_proxy;
+
+  public:
+    /*!
+    @brief wrapper to access iterator member functions in range-based for
+
+    This function allows to access @ref iterator::key() and @ref
+    iterator::value() during range-based for loops. In these loops, a
+    reference to the JSON values is returned, so there is no access to the
+    underlying iterator.
+
+    @note The name of this function is not yet final and may change in the
+    future.
+    */
+    static iteration_proxy<iterator> iterator_wrapper(reference cont)
+    {
+        return iteration_proxy<iterator>(cont);
+    }
+
+    /*!
+    @copydoc iterator_wrapper(reference)
+    */
+    static iteration_proxy<const_iterator> iterator_wrapper(const_reference cont)
+    {
+        return iteration_proxy<const_iterator>(cont);
+    }
+
+    /// @}
+
+
+    //////////////
+    // capacity //
+    //////////////
+
+    /// @name capacity
+    /// @{
+
+    /*!
+    @brief checks whether the container is empty
+
+    Checks if a JSON value has no elements.
+
+    @return The return value depends on the different types and is
+            defined as follows:
+            Value type  | return value
+            ----------- | -------------
+            null        | `true`
+            boolean     | `false`
+            string      | `false`
+            number      | `false`
+            object      | result of function `object_t::empty()`
+            array       | result of function `array_t::empty()`
+
+    @note This function does not return whether a string stored as JSON value
+    is empty - it returns whether the JSON container itself is empty which is
+    false in the case of a string.
+
+    @complexity Constant, as long as @ref array_t and @ref object_t satisfy
+    the Container concept; that is, their `empty()` functions have constant
+    complexity.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `begin() == end()`.
+
+    @liveexample{The following code uses `empty()` to check if a JSON
+    object contains any elements.,empty}
+
+    @sa @ref size() -- returns the number of elements
+
+    @since version 1.0.0
+    */
+    bool empty() const noexcept
+    {
+        switch (m_type)
+        {
+            case value_t::null:
+            {
+                // null values are empty
+                return true;
+            }
+
+            case value_t::array:
+            {
+                // delegate call to array_t::empty()
+                return m_value.array->empty();
+            }
+
+            case value_t::object:
+            {
+                // delegate call to object_t::empty()
+                return m_value.object->empty();
+            }
+
+            default:
+            {
+                // all other types are nonempty
+                return false;
+            }
+        }
+    }
+
+    /*!
+    @brief returns the number of elements
+
+    Returns the number of elements in a JSON value.
+
+    @return The return value depends on the different types and is
+            defined as follows:
+            Value type  | return value
+            ----------- | -------------
+            null        | `0`
+            boolean     | `1`
+            string      | `1`
+            number      | `1`
+            object      | result of function object_t::size()
+            array       | result of function array_t::size()
+
+    @note This function does not return the length of a string stored as JSON
+    value - it returns the number of elements in the JSON value which is 1 in
+    the case of a string.
+
+    @complexity Constant, as long as @ref array_t and @ref object_t satisfy
+    the Container concept; that is, their size() functions have constant
+    complexity.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of `std::distance(begin(), end())`.
+
+    @liveexample{The following code calls `size()` on the different value
+    types.,size}
+
+    @sa @ref empty() -- checks whether the container is empty
+    @sa @ref max_size() -- returns the maximal number of elements
+
+    @since version 1.0.0
+    */
+    size_type size() const noexcept
+    {
+        switch (m_type)
+        {
+            case value_t::null:
+            {
+                // null values are empty
+                return 0;
+            }
+
+            case value_t::array:
+            {
+                // delegate call to array_t::size()
+                return m_value.array->size();
+            }
+
+            case value_t::object:
+            {
+                // delegate call to object_t::size()
+                return m_value.object->size();
+            }
+
+            default:
+            {
+                // all other types have size 1
+                return 1;
+            }
+        }
+    }
+
+    /*!
+    @brief returns the maximum possible number of elements
+
+    Returns the maximum number of elements a JSON value is able to hold due to
+    system or library implementation limitations, i.e. `std::distance(begin(),
+    end())` for the JSON value.
+
+    @return The return value depends on the different types and is
+            defined as follows:
+            Value type  | return value
+            ----------- | -------------
+            null        | `0` (same as `size()`)
+            boolean     | `1` (same as `size()`)
+            string      | `1` (same as `size()`)
+            number      | `1` (same as `size()`)
+            object      | result of function `object_t::max_size()`
+            array       | result of function `array_t::max_size()`
+
+    @complexity Constant, as long as @ref array_t and @ref object_t satisfy
+    the Container concept; that is, their `max_size()` functions have constant
+    complexity.
+
+    @requirement This function helps `basic_json` satisfying the
+    [Container](http://en.cppreference.com/w/cpp/concept/Container)
+    requirements:
+    - The complexity is constant.
+    - Has the semantics of returning `b.size()` where `b` is the largest
+      possible JSON value.
+
+    @liveexample{The following code calls `max_size()` on the different value
+    types. Note the output is implementation specific.,max_size}
+
+    @sa @ref size() -- returns the number of elements
+
+    @since version 1.0.0
+    */
+    size_type max_size() const noexcept
+    {
+        switch (m_type)
+        {
+            case value_t::array:
+            {
+                // delegate call to array_t::max_size()
+                return m_value.array->max_size();
+            }
+
+            case value_t::object:
+            {
+                // delegate call to object_t::max_size()
+                return m_value.object->max_size();
+            }
+
+            default:
+            {
+                // all other types have max_size() == size()
+                return size();
+            }
+        }
+    }
+
+    /// @}
+
+
+    ///////////////
+    // modifiers //
+    ///////////////
+
+    /// @name modifiers
+    /// @{
+
+    /*!
+    @brief clears the contents
+
+    Clears the content of a JSON value and resets it to the default value as
+    if @ref basic_json(value_t) would have been called:
+
+    Value type  | initial value
+    ----------- | -------------
+    null        | `null`
+    boolean     | `false`
+    string      | `""`
+    number      | `0`
+    object      | `{}`
+    array       | `[]`
+
+    @note Floating-point numbers are set to `0.0` which will be serialized to
+    `0`. The vale type remains @ref number_float_t.
+
+    @complexity Linear in the size of the JSON value.
+
+    @liveexample{The example below shows the effect of `clear()` to different
+    JSON types.,clear}
+
+    @since version 1.0.0
+    */
+    void clear() noexcept
+    {
+        switch (m_type)
+        {
+            case value_t::number_integer:
+            {
+                m_value.number_integer = 0;
+                break;
+            }
+
+            case value_t::number_unsigned:
+            {
+                m_value.number_unsigned = 0;
+                break;
+            }
+
+            case value_t::number_float:
+            {
+                m_value.number_float = 0.0;
+                break;
+            }
+
+            case value_t::boolean:
+            {
+                m_value.boolean = false;
+                break;
+            }
+
+            case value_t::string:
+            {
+                m_value.string->clear();
+                break;
+            }
+
+            case value_t::array:
+            {
+                m_value.array->clear();
+                break;
+            }
+
+            case value_t::object:
+            {
+                m_value.object->clear();
+                break;
+            }
+
+            default:
+            {
+                break;
+            }
+        }
+    }
+
+    /*!
+    @brief add an object to an array
+
+    Appends the given element @a val to the end of the JSON value. If the
+    function is called on a JSON null value, an empty array is created before
+    appending @a val.
+
+    @param[in] val the value to add to the JSON array
+
+    @throw std::domain_error when called on a type other than JSON array or
+    null; example: `"cannot use push_back() with number"`
+
+    @complexity Amortized constant.
+
+    @liveexample{The example shows how `push_back()` and `+=` can be used to
+    add elements to a JSON array. Note how the `null` value was silently
+    converted to a JSON array.,push_back}
+
+    @since version 1.0.0
+    */
+    void push_back(basic_json&& val)
+    {
+        // push_back only works for null objects or arrays
+        if (not(is_null() or is_array()))
+        {
+            throw std::domain_error("cannot use push_back() with " + type_name());
+        }
+
+        // transform null object into an array
+        if (is_null())
+        {
+            m_type = value_t::array;
+            m_value = value_t::array;
+            assert_invariant();
+        }
+
+        // add element to array (move semantics)
+        m_value.array->push_back(std::move(val));
+        // invalidate object
+        val.m_type = value_t::null;
+    }
+
+    /*!
+    @brief add an object to an array
+    @copydoc push_back(basic_json&&)
+    */
+    reference operator+=(basic_json&& val)
+    {
+        push_back(std::move(val));
+        return *this;
+    }
+
+    /*!
+    @brief add an object to an array
+    @copydoc push_back(basic_json&&)
+    */
+    void push_back(const basic_json& val)
+    {
+        // push_back only works for null objects or arrays
+        if (not(is_null() or is_array()))
+        {
+            throw std::domain_error("cannot use push_back() with " + type_name());
+        }
+
+        // transform null object into an array
+        if (is_null())
+        {
+            m_type = value_t::array;
+            m_value = value_t::array;
+            assert_invariant();
+        }
+
+        // add element to array
+        m_value.array->push_back(val);
+    }
+
+    /*!
+    @brief add an object to an array
+    @copydoc push_back(basic_json&&)
+    */
+    reference operator+=(const basic_json& val)
+    {
+        push_back(val);
+        return *this;
+    }
+
+    /*!
+    @brief add an object to an object
+
+    Inserts the given element @a val to the JSON object. If the function is
+    called on a JSON null value, an empty object is created before inserting
+    @a val.
+
+    @param[in] val the value to add to the JSON object
+
+    @throw std::domain_error when called on a type other than JSON object or
+    null; example: `"cannot use push_back() with number"`
+
+    @complexity Logarithmic in the size of the container, O(log(`size()`)).
+
+    @liveexample{The example shows how `push_back()` and `+=` can be used to
+    add elements to a JSON object. Note how the `null` value was silently
+    converted to a JSON object.,push_back__object_t__value}
+
+    @since version 1.0.0
+    */
+    void push_back(const typename object_t::value_type& val)
+    {
+        // push_back only works for null objects or objects
+        if (not(is_null() or is_object()))
+        {
+            throw std::domain_error("cannot use push_back() with " + type_name());
+        }
+
+        // transform null object into an object
+        if (is_null())
+        {
+            m_type = value_t::object;
+            m_value = value_t::object;
+            assert_invariant();
+        }
+
+        // add element to array
+        m_value.object->insert(val);
+    }
+
+    /*!
+    @brief add an object to an object
+    @copydoc push_back(const typename object_t::value_type&)
+    */
+    reference operator+=(const typename object_t::value_type& val)
+    {
+        push_back(val);
+        return *this;
+    }
+
+    /*!
+    @brief add an object to an object
+
+    This function allows to use `push_back` with an initializer list. In case
+
+    1. the current value is an object,
+    2. the initializer list @a init contains only two elements, and
+    3. the first element of @a init is a string,
+
+    @a init is converted into an object element and added using
+    @ref push_back(const typename object_t::value_type&). Otherwise, @a init
+    is converted to a JSON value and added using @ref push_back(basic_json&&).
+
+    @param init  an initializer list
+
+    @complexity Linear in the size of the initializer list @a init.
+
+    @note This function is required to resolve an ambiguous overload error,
+          because pairs like `{"key", "value"}` can be both interpreted as
+          `object_t::value_type` or `std::initializer_list<basic_json>`, see
+          https://github.com/nlohmann/json/issues/235 for more information.
+
+    @liveexample{The example shows how initializer lists are treated as
+    objects when possible.,push_back__initializer_list}
+    */
+    void push_back(std::initializer_list<basic_json> init)
+    {
+        if (is_object() and init.size() == 2 and init.begin()->is_string())
+        {
+            const string_t key = *init.begin();
+            push_back(typename object_t::value_type(key, *(init.begin() + 1)));
+        }
+        else
+        {
+            push_back(basic_json(init));
+        }
+    }
+
+    /*!
+    @brief add an object to an object
+    @copydoc push_back(std::initializer_list<basic_json>)
+    */
+    reference operator+=(std::initializer_list<basic_json> init)
+    {
+        push_back(init);
+        return *this;
+    }
+
+    /*!
+    @brief inserts element
+
+    Inserts element @a val before iterator @a pos.
+
+    @param[in] pos iterator before which the content will be inserted; may be
+    the end() iterator
+    @param[in] val element to insert
+    @return iterator pointing to the inserted @a val.
+
+    @throw std::domain_error if called on JSON values other than arrays;
+    example: `"cannot use insert() with string"`
+    @throw std::domain_error if @a pos is not an iterator of *this; example:
+    `"iterator does not fit current value"`
+
+    @complexity Constant plus linear in the distance between pos and end of the
+    container.
+
+    @liveexample{The example shows how `insert()` is used.,insert}
+
+    @since version 1.0.0
+    */
+    iterator insert(const_iterator pos, const basic_json& val)
+    {
+        // insert only works for arrays
+        if (is_array())
+        {
+            // check if iterator pos fits to this JSON value
+            if (pos.m_object != this)
+            {
+                throw std::domain_error("iterator does not fit current value");
+            }
+
+            // insert to array and return iterator
+            iterator result(this);
+            result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val);
+            return result;
+        }
+        else
+        {
+            throw std::domain_error("cannot use insert() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief inserts element
+    @copydoc insert(const_iterator, const basic_json&)
+    */
+    iterator insert(const_iterator pos, basic_json&& val)
+    {
+        return insert(pos, val);
+    }
+
+    /*!
+    @brief inserts elements
+
+    Inserts @a cnt copies of @a val before iterator @a pos.
+
+    @param[in] pos iterator before which the content will be inserted; may be
+    the end() iterator
+    @param[in] cnt number of copies of @a val to insert
+    @param[in] val element to insert
+    @return iterator pointing to the first element inserted, or @a pos if
+    `cnt==0`
+
+    @throw std::domain_error if called on JSON values other than arrays;
+    example: `"cannot use insert() with string"`
+    @throw std::domain_error if @a pos is not an iterator of *this; example:
+    `"iterator does not fit current value"`
+
+    @complexity Linear in @a cnt plus linear in the distance between @a pos
+    and end of the container.
+
+    @liveexample{The example shows how `insert()` is used.,insert__count}
+
+    @since version 1.0.0
+    */
+    iterator insert(const_iterator pos, size_type cnt, const basic_json& val)
+    {
+        // insert only works for arrays
+        if (is_array())
+        {
+            // check if iterator pos fits to this JSON value
+            if (pos.m_object != this)
+            {
+                throw std::domain_error("iterator does not fit current value");
+            }
+
+            // insert to array and return iterator
+            iterator result(this);
+            result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val);
+            return result;
+        }
+        else
+        {
+            throw std::domain_error("cannot use insert() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief inserts elements
+
+    Inserts elements from range `[first, last)` before iterator @a pos.
+
+    @param[in] pos iterator before which the content will be inserted; may be
+    the end() iterator
+    @param[in] first begin of the range of elements to insert
+    @param[in] last end of the range of elements to insert
+
+    @throw std::domain_error if called on JSON values other than arrays;
+    example: `"cannot use insert() with string"`
+    @throw std::domain_error if @a pos is not an iterator of *this; example:
+    `"iterator does not fit current value"`
+    @throw std::domain_error if @a first and @a last do not belong to the same
+    JSON value; example: `"iterators do not fit"`
+    @throw std::domain_error if @a first or @a last are iterators into
+    container for which insert is called; example: `"passed iterators may not
+    belong to container"`
+
+    @return iterator pointing to the first element inserted, or @a pos if
+    `first==last`
+
+    @complexity Linear in `std::distance(first, last)` plus linear in the
+    distance between @a pos and end of the container.
+
+    @liveexample{The example shows how `insert()` is used.,insert__range}
+
+    @since version 1.0.0
+    */
+    iterator insert(const_iterator pos, const_iterator first, const_iterator last)
+    {
+        // insert only works for arrays
+        if (not is_array())
+        {
+            throw std::domain_error("cannot use insert() with " + type_name());
+        }
+
+        // check if iterator pos fits to this JSON value
+        if (pos.m_object != this)
+        {
+            throw std::domain_error("iterator does not fit current value");
+        }
+
+        // check if range iterators belong to the same JSON object
+        if (first.m_object != last.m_object)
+        {
+            throw std::domain_error("iterators do not fit");
+        }
+
+        if (first.m_object == this or last.m_object == this)
+        {
+            throw std::domain_error("passed iterators may not belong to container");
+        }
+
+        // insert to array and return iterator
+        iterator result(this);
+        result.m_it.array_iterator = m_value.array->insert(
+                                         pos.m_it.array_iterator,
+                                         first.m_it.array_iterator,
+                                         last.m_it.array_iterator);
+        return result;
+    }
+
+    /*!
+    @brief inserts elements
+
+    Inserts elements from initializer list @a ilist before iterator @a pos.
+
+    @param[in] pos iterator before which the content will be inserted; may be
+    the end() iterator
+    @param[in] ilist initializer list to insert the values from
+
+    @throw std::domain_error if called on JSON values other than arrays;
+    example: `"cannot use insert() with string"`
+    @throw std::domain_error if @a pos is not an iterator of *this; example:
+    `"iterator does not fit current value"`
+
+    @return iterator pointing to the first element inserted, or @a pos if
+    `ilist` is empty
+
+    @complexity Linear in `ilist.size()` plus linear in the distance between
+    @a pos and end of the container.
+
+    @liveexample{The example shows how `insert()` is used.,insert__ilist}
+
+    @since version 1.0.0
+    */
+    iterator insert(const_iterator pos, std::initializer_list<basic_json> ilist)
+    {
+        // insert only works for arrays
+        if (not is_array())
+        {
+            throw std::domain_error("cannot use insert() with " + type_name());
+        }
+
+        // check if iterator pos fits to this JSON value
+        if (pos.m_object != this)
+        {
+            throw std::domain_error("iterator does not fit current value");
+        }
+
+        // insert to array and return iterator
+        iterator result(this);
+        result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist);
+        return result;
+    }
+
+    /*!
+    @brief exchanges the values
+
+    Exchanges the contents of the JSON value with those of @a other. Does not
+    invoke any move, copy, or swap operations on individual elements. All
+    iterators and references remain valid. The past-the-end iterator is
+    invalidated.
+
+    @param[in,out] other JSON value to exchange the contents with
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how JSON values can be swapped with
+    `swap()`.,swap__reference}
+
+    @since version 1.0.0
+    */
+    void swap(reference other) noexcept (
+        std::is_nothrow_move_constructible<value_t>::value and
+        std::is_nothrow_move_assignable<value_t>::value and
+        std::is_nothrow_move_constructible<json_value>::value and
+        std::is_nothrow_move_assignable<json_value>::value
+    )
+    {
+        std::swap(m_type, other.m_type);
+        std::swap(m_value, other.m_value);
+        assert_invariant();
+    }
+
+    /*!
+    @brief exchanges the values
+
+    Exchanges the contents of a JSON array with those of @a other. Does not
+    invoke any move, copy, or swap operations on individual elements. All
+    iterators and references remain valid. The past-the-end iterator is
+    invalidated.
+
+    @param[in,out] other array to exchange the contents with
+
+    @throw std::domain_error when JSON value is not an array; example: `"cannot
+    use swap() with string"`
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how arrays can be swapped with
+    `swap()`.,swap__array_t}
+
+    @since version 1.0.0
+    */
+    void swap(array_t& other)
+    {
+        // swap only works for arrays
+        if (is_array())
+        {
+            std::swap(*(m_value.array), other);
+        }
+        else
+        {
+            throw std::domain_error("cannot use swap() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief exchanges the values
+
+    Exchanges the contents of a JSON object with those of @a other. Does not
+    invoke any move, copy, or swap operations on individual elements. All
+    iterators and references remain valid. The past-the-end iterator is
+    invalidated.
+
+    @param[in,out] other object to exchange the contents with
+
+    @throw std::domain_error when JSON value is not an object; example:
+    `"cannot use swap() with string"`
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how objects can be swapped with
+    `swap()`.,swap__object_t}
+
+    @since version 1.0.0
+    */
+    void swap(object_t& other)
+    {
+        // swap only works for objects
+        if (is_object())
+        {
+            std::swap(*(m_value.object), other);
+        }
+        else
+        {
+            throw std::domain_error("cannot use swap() with " + type_name());
+        }
+    }
+
+    /*!
+    @brief exchanges the values
+
+    Exchanges the contents of a JSON string with those of @a other. Does not
+    invoke any move, copy, or swap operations on individual elements. All
+    iterators and references remain valid. The past-the-end iterator is
+    invalidated.
+
+    @param[in,out] other string to exchange the contents with
+
+    @throw std::domain_error when JSON value is not a string; example: `"cannot
+    use swap() with boolean"`
+
+    @complexity Constant.
+
+    @liveexample{The example below shows how strings can be swapped with
+    `swap()`.,swap__string_t}
+
+    @since version 1.0.0
+    */
+    void swap(string_t& other)
+    {
+        // swap only works for strings
+        if (is_string())
+        {
+            std::swap(*(m_value.string), other);
+        }
+        else
+        {
+            throw std::domain_error("cannot use swap() with " + type_name());
+        }
+    }
+
+    /// @}
+
+
+    //////////////////////////////////////////
+    // lexicographical comparison operators //
+    //////////////////////////////////////////
+
+    /// @name lexicographical comparison operators
+    /// @{
+
+  private:
+    /*!
+    @brief comparison operator for JSON types
+
+    Returns an ordering that is similar to Python:
+    - order: null < boolean < number < object < array < string
+    - furthermore, each type is not smaller than itself
+
+    @since version 1.0.0
+    */
+    friend bool operator<(const value_t lhs, const value_t rhs) noexcept
+    {
+        static constexpr std::array<uint8_t, 8> order = {{
+                0, // null
+                3, // object
+                4, // array
+                5, // string
+                1, // boolean
+                2, // integer
+                2, // unsigned
+                2, // float
+            }
+        };
+
+        // discarded values are not comparable
+        if (lhs == value_t::discarded or rhs == value_t::discarded)
+        {
+            return false;
+        }
+
+        return order[static_cast<std::size_t>(lhs)] < order[static_cast<std::size_t>(rhs)];
+    }
+
+  public:
+    /*!
+    @brief comparison: equal
+
+    Compares two JSON values for equality according to the following rules:
+    - Two JSON values are equal if (1) they are from the same type and (2)
+      their stored values are the same.
+    - Integer and floating-point numbers are automatically converted before
+      comparison. Floating-point numbers are compared indirectly: two
+      floating-point numbers `f1` and `f2` are considered equal if neither
+      `f1 > f2` nor `f2 > f1` holds.
+    - Two JSON null values are equal.
+
+    @param[in] lhs  first JSON value to consider
+    @param[in] rhs  second JSON value to consider
+    @return whether the values @a lhs and @a rhs are equal
+
+    @complexity Linear.
+
+    @liveexample{The example demonstrates comparing several JSON
+    types.,operator__equal}
+
+    @since version 1.0.0
+    */
+    friend bool operator==(const_reference lhs, const_reference rhs) noexcept
+    {
+        const auto lhs_type = lhs.type();
+        const auto rhs_type = rhs.type();
+
+        if (lhs_type == rhs_type)
+        {
+            switch (lhs_type)
+            {
+                case value_t::array:
+                {
+                    return *lhs.m_value.array == *rhs.m_value.array;
+                }
+                case value_t::object:
+                {
+                    return *lhs.m_value.object == *rhs.m_value.object;
+                }
+                case value_t::null:
+                {
+                    return true;
+                }
+                case value_t::string:
+                {
+                    return *lhs.m_value.string == *rhs.m_value.string;
+                }
+                case value_t::boolean:
+                {
+                    return lhs.m_value.boolean == rhs.m_value.boolean;
+                }
+                case value_t::number_integer:
+                {
+                    return lhs.m_value.number_integer == rhs.m_value.number_integer;
+                }
+                case value_t::number_unsigned:
+                {
+                    return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned;
+                }
+                case value_t::number_float:
+                {
+                    return lhs.m_value.number_float == rhs.m_value.number_float;
+                }
+                default:
+                {
+                    return false;
+                }
+            }
+        }
+        else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_float)
+        {
+            return static_cast<number_float_t>(lhs.m_value.number_integer) == rhs.m_value.number_float;
+        }
+        else if (lhs_type == value_t::number_float and rhs_type == value_t::number_integer)
+        {
+            return lhs.m_value.number_float == static_cast<number_float_t>(rhs.m_value.number_integer);
+        }
+        else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float)
+        {
+            return static_cast<number_float_t>(lhs.m_value.number_unsigned) == rhs.m_value.number_float;
+        }
+        else if (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned)
+        {
+            return lhs.m_value.number_float == static_cast<number_float_t>(rhs.m_value.number_unsigned);
+        }
+        else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer)
+        {
+            return static_cast<number_integer_t>(lhs.m_value.number_unsigned) == rhs.m_value.number_integer;
+        }
+        else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned)
+        {
+            return lhs.m_value.number_integer == static_cast<number_integer_t>(rhs.m_value.number_unsigned);
+        }
+
+        return false;
+    }
+
+    /*!
+    @brief comparison: equal
+
+    The functions compares the given JSON value against a null pointer. As the
+    null pointer can be used to initialize a JSON value to null, a comparison
+    of JSON value @a v with a null pointer should be equivalent to call
+    `v.is_null()`.
+
+    @param[in] v  JSON value to consider
+    @return whether @a v is null
+
+    @complexity Constant.
+
+    @liveexample{The example compares several JSON types to the null pointer.
+    ,operator__equal__nullptr_t}
+
+    @since version 1.0.0
+    */
+    friend bool operator==(const_reference v, std::nullptr_t) noexcept
+    {
+        return v.is_null();
+    }
+
+    /*!
+    @brief comparison: equal
+    @copydoc operator==(const_reference, std::nullptr_t)
+    */
+    friend bool operator==(std::nullptr_t, const_reference v) noexcept
+    {
+        return v.is_null();
+    }
+
+    /*!
+    @brief comparison: not equal
+
+    Compares two JSON values for inequality by calculating `not (lhs == rhs)`.
+
+    @param[in] lhs  first JSON value to consider
+    @param[in] rhs  second JSON value to consider
+    @return whether the values @a lhs and @a rhs are not equal
+
+    @complexity Linear.
+
+    @liveexample{The example demonstrates comparing several JSON
+    types.,operator__notequal}
+
+    @since version 1.0.0
+    */
+    friend bool operator!=(const_reference lhs, const_reference rhs) noexcept
+    {
+        return not (lhs == rhs);
+    }
+
+    /*!
+    @brief comparison: not equal
+
+    The functions compares the given JSON value against a null pointer. As the
+    null pointer can be used to initialize a JSON value to null, a comparison
+    of JSON value @a v with a null pointer should be equivalent to call
+    `not v.is_null()`.
+
+    @param[in] v  JSON value to consider
+    @return whether @a v is not null
+
+    @complexity Constant.
+
+    @liveexample{The example compares several JSON types to the null pointer.
+    ,operator__notequal__nullptr_t}
+
+    @since version 1.0.0
+    */
+    friend bool operator!=(const_reference v, std::nullptr_t) noexcept
+    {
+        return not v.is_null();
+    }
+
+    /*!
+    @brief comparison: not equal
+    @copydoc operator!=(const_reference, std::nullptr_t)
+    */
+    friend bool operator!=(std::nullptr_t, const_reference v) noexcept
+    {
+        return not v.is_null();
+    }
+
+    /*!
+    @brief comparison: less than
+
+    Compares whether one JSON value @a lhs is less than another JSON value @a
+    rhs according to the following rules:
+    - If @a lhs and @a rhs have the same type, the values are compared using
+      the default `<` operator.
+    - Integer and floating-point numbers are automatically converted before
+      comparison
+    - In case @a lhs and @a rhs have different types, the values are ignored
+      and the order of the types is considered, see
+      @ref operator<(const value_t, const value_t).
+
+    @param[in] lhs  first JSON value to consider
+    @param[in] rhs  second JSON value to consider
+    @return whether @a lhs is less than @a rhs
+
+    @complexity Linear.
+
+    @liveexample{The example demonstrates comparing several JSON
+    types.,operator__less}
+
+    @since version 1.0.0
+    */
+    friend bool operator<(const_reference lhs, const_reference rhs) noexcept
+    {
+        const auto lhs_type = lhs.type();
+        const auto rhs_type = rhs.type();
+
+        if (lhs_type == rhs_type)
+        {
+            switch (lhs_type)
+            {
+                case value_t::array:
+                {
+                    return *lhs.m_value.array < *rhs.m_value.array;
+                }
+                case value_t::object:
+                {
+                    return *lhs.m_value.object < *rhs.m_value.object;
+                }
+                case value_t::null:
+                {
+                    return false;
+                }
+                case value_t::string:
+                {
+                    return *lhs.m_value.string < *rhs.m_value.string;
+                }
+                case value_t::boolean:
+                {
+                    return lhs.m_value.boolean < rhs.m_value.boolean;
+                }
+                case value_t::number_integer:
+                {
+                    return lhs.m_value.number_integer < rhs.m_value.number_integer;
+                }
+                case value_t::number_unsigned:
+                {
+                    return lhs.m_value.number_unsigned < rhs.m_value.number_unsigned;
+                }
+                case value_t::number_float:
+                {
+                    return lhs.m_value.number_float < rhs.m_value.number_float;
+                }
+                default:
+                {
+                    return false;
+                }
+            }
+        }
+        else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_float)
+        {
+            return static_cast<number_float_t>(lhs.m_value.number_integer) < rhs.m_value.number_float;
+        }
+        else if (lhs_type == value_t::number_float and rhs_type == value_t::number_integer)
+        {
+            return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_integer);
+        }
+        else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float)
+        {
+            return static_cast<number_float_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_float;
+        }
+        else if (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned)
+        {
+            return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_unsigned);
+        }
+        else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned)
+        {
+            return lhs.m_value.number_integer < static_cast<number_integer_t>(rhs.m_value.number_unsigned);
+        }
+        else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer)
+        {
+            return static_cast<number_integer_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_integer;
+        }
+
+        // We only reach this line if we cannot compare values. In that case,
+        // we compare types. Note we have to call the operator explicitly,
+        // because MSVC has problems otherwise.
+        return operator<(lhs_type, rhs_type);
+    }
+
+    /*!
+    @brief comparison: less than or equal
+
+    Compares whether one JSON value @a lhs is less than or equal to another
+    JSON value by calculating `not (rhs < lhs)`.
+
+    @param[in] lhs  first JSON value to consider
+    @param[in] rhs  second JSON value to consider
+    @return whether @a lhs is less than or equal to @a rhs
+
+    @complexity Linear.
+
+    @liveexample{The example demonstrates comparing several JSON
+    types.,operator__greater}
+
+    @since version 1.0.0
+    */
+    friend bool operator<=(const_reference lhs, const_reference rhs) noexcept
+    {
+        return not (rhs < lhs);
+    }
+
+    /*!
+    @brief comparison: greater than
+
+    Compares whether one JSON value @a lhs is greater than another
+    JSON value by calculating `not (lhs <= rhs)`.
+
+    @param[in] lhs  first JSON value to consider
+    @param[in] rhs  second JSON value to consider
+    @return whether @a lhs is greater than to @a rhs
+
+    @complexity Linear.
+
+    @liveexample{The example demonstrates comparing several JSON
+    types.,operator__lessequal}
+
+    @since version 1.0.0
+    */
+    friend bool operator>(const_reference lhs, const_reference rhs) noexcept
+    {
+        return not (lhs <= rhs);
+    }
+
+    /*!
+    @brief comparison: greater than or equal
+
+    Compares whether one JSON value @a lhs is greater than or equal to another
+    JSON value by calculating `not (lhs < rhs)`.
+
+    @param[in] lhs  first JSON value to consider
+    @param[in] rhs  second JSON value to consider
+    @return whether @a lhs is greater than or equal to @a rhs
+
+    @complexity Linear.
+
+    @liveexample{The example demonstrates comparing several JSON
+    types.,operator__greaterequal}
+
+    @since version 1.0.0
+    */
+    friend bool operator>=(const_reference lhs, const_reference rhs) noexcept
+    {
+        return not (lhs < rhs);
+    }
+
+    /// @}
+
+
+    ///////////////////
+    // serialization //
+    ///////////////////
+
+    /// @name serialization
+    /// @{
+
+    /*!
+    @brief serialize to stream
+
+    Serialize the given JSON value @a j to the output stream @a o. The JSON
+    value will be serialized using the @ref dump member function. The
+    indentation of the output can be controlled with the member variable
+    `width` of the output stream @a o. For instance, using the manipulator
+    `std::setw(4)` on @a o sets the indentation level to `4` and the
+    serialization result is the same as calling `dump(4)`.
+
+    @note During serializaion, the locale and the precision of the output
+    stream @a o are changed. The original values are restored when the
+    function returns.
+
+    @param[in,out] o  stream to serialize to
+    @param[in] j  JSON value to serialize
+
+    @return the stream @a o
+
+    @complexity Linear.
+
+    @liveexample{The example below shows the serialization with different
+    parameters to `width` to adjust the indentation level.,operator_serialize}
+
+    @since version 1.0.0
+    */
+    friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
+    {
+        // read width member and use it as indentation parameter if nonzero
+        const bool pretty_print = (o.width() > 0);
+        const auto indentation = (pretty_print ? o.width() : 0);
+
+        // reset width to 0 for subsequent calls to this stream
+        o.width(0);
+
+        // fix locale problems
+        const auto old_locale = o.imbue(std::locale(std::locale(), new DecimalSeparator));
+        // set precision
+
+        // 6, 15 or 16 digits of precision allows round-trip IEEE 754
+        // string->float->string, string->double->string or string->long
+        // double->string; to be safe, we read this value from
+        // std::numeric_limits<number_float_t>::digits10
+        const auto old_precision = o.precision(std::numeric_limits<double>::digits10);
+
+        // do the actual serialization
+        j.dump(o, pretty_print, static_cast<unsigned int>(indentation));
+
+        // reset locale and precision
+        o.imbue(old_locale);
+        o.precision(old_precision);
+        return o;
+    }
+
+    /*!
+    @brief serialize to stream
+    @copydoc operator<<(std::ostream&, const basic_json&)
+    */
+    friend std::ostream& operator>>(const basic_json& j, std::ostream& o)
+    {
+        return o << j;
+    }
+
+    /// @}
+
+
+    /////////////////////
+    // deserialization //
+    /////////////////////
+
+    /// @name deserialization
+    /// @{
+
+    /*!
+    @brief deserialize from an array
+
+    This function reads from an array of 1-byte values.
+
+    @pre Each element of the container has a size of 1 byte. Violating this
+    precondition yields undefined behavior. **This precondition is enforced
+    with a static assertion.**
+
+    @param[in] array  array to read from
+    @param[in] cb  a parser callback function of type @ref parser_callback_t
+    which is used to control the deserialization by filtering unwanted values
+    (optional)
+
+    @return result of the deserialization
+
+    @complexity Linear in the length of the input. The parser is a predictive
+    LL(1) parser. The complexity can be higher if the parser callback function
+    @a cb has a super-linear complexity.
+
+    @note A UTF-8 byte order mark is silently ignored.
+
+    @liveexample{The example below demonstrates the `parse()` function reading
+    from an array.,parse__array__parser_callback_t}
+
+    @since version 2.0.3
+    */
+    template<class T, std::size_t N>
+    static basic_json parse(T (&array)[N],
+                            const parser_callback_t cb = nullptr)
+    {
+        // delegate the call to the iterator-range parse overload
+        return parse(std::begin(array), std::end(array), cb);
+    }
+
+    /*!
+    @brief deserialize from string literal
+
+    @tparam CharT character/literal type with size of 1 byte
+    @param[in] s  string literal to read a serialized JSON value from
+    @param[in] cb a parser callback function of type @ref parser_callback_t
+    which is used to control the deserialization by filtering unwanted values
+    (optional)
+
+    @return result of the deserialization
+
+    @complexity Linear in the length of the input. The parser is a predictive
+    LL(1) parser. The complexity can be higher if the parser callback function
+    @a cb has a super-linear complexity.
+
+    @note A UTF-8 byte order mark is silently ignored.
+    @note String containers like `std::string` or @ref string_t can be parsed
+          with @ref parse(const ContiguousContainer&, const parser_callback_t)
+
+    @liveexample{The example below demonstrates the `parse()` function with
+    and without callback function.,parse__string__parser_callback_t}
+
+    @sa @ref parse(std::istream&, const parser_callback_t) for a version that
+    reads from an input stream
+
+    @since version 1.0.0 (originally for @ref string_t)
+    */
+    template<typename CharPT, typename std::enable_if<
+                 std::is_pointer<CharPT>::value and
+                 std::is_integral<typename std::remove_pointer<CharPT>::type>::value and
+                 sizeof(typename std::remove_pointer<CharPT>::type) == 1, int>::type = 0>
+    static basic_json parse(const CharPT s,
+                            const parser_callback_t cb = nullptr)
+    {
+        return parser(reinterpret_cast<const char*>(s), cb).parse();
+    }
+
+    /*!
+    @brief deserialize from stream
+
+    @param[in,out] i  stream to read a serialized JSON value from
+    @param[in] cb a parser callback function of type @ref parser_callback_t
+    which is used to control the deserialization by filtering unwanted values
+    (optional)
+
+    @return result of the deserialization
+
+    @complexity Linear in the length of the input. The parser is a predictive
+    LL(1) parser. The complexity can be higher if the parser callback function
+    @a cb has a super-linear complexity.
+
+    @note A UTF-8 byte order mark is silently ignored.
+
+    @liveexample{The example below demonstrates the `parse()` function with
+    and without callback function.,parse__istream__parser_callback_t}
+
+    @sa @ref parse(const char*, const parser_callback_t) for a version
+    that reads from a string
+
+    @since version 1.0.0
+    */
+    static basic_json parse(std::istream& i,
+                            const parser_callback_t cb = nullptr)
+    {
+        return parser(i, cb).parse();
+    }
+
+    /*!
+    @copydoc parse(std::istream&, const parser_callback_t)
+    */
+    static basic_json parse(std::istream&& i,
+                            const parser_callback_t cb = nullptr)
+    {
+        return parser(i, cb).parse();
+    }
+
+    /*!
+    @brief deserialize from an iterator range with contiguous storage
+
+    This function reads from an iterator range of a container with contiguous
+    storage of 1-byte values. Compatible container types include
+    `std::vector`, `std::string`, `std::array`, `std::valarray`, and
+    `std::initializer_list`. Furthermore, C-style arrays can be used with
+    `std::begin()`/`std::end()`. User-defined containers can be used as long
+    as they implement random-access iterators and a contiguous storage.
+
+    @pre The iterator range is contiguous. Violating this precondition yields
+    undefined behavior. **This precondition is enforced with an assertion.**
+    @pre Each element in the range has a size of 1 byte. Violating this
+    precondition yields undefined behavior. **This precondition is enforced
+    with a static assertion.**
+
+    @warning There is no way to enforce all preconditions at compile-time. If
+             the function is called with noncompliant iterators and with
+             assertions switched off, the behavior is undefined and will most
+             likely yield segmentation violation.
+
+    @tparam IteratorType iterator of container with contiguous storage
+    @param[in] first  begin of the range to parse (included)
+    @param[in] last  end of the range to parse (excluded)
+    @param[in] cb  a parser callback function of type @ref parser_callback_t
+    which is used to control the deserialization by filtering unwanted values
+    (optional)
+
+    @return result of the deserialization
+
+    @complexity Linear in the length of the input. The parser is a predictive
+    LL(1) parser. The complexity can be higher if the parser callback function
+    @a cb has a super-linear complexity.
+
+    @note A UTF-8 byte order mark is silently ignored.
+
+    @liveexample{The example below demonstrates the `parse()` function reading
+    from an iterator range.,parse__iteratortype__parser_callback_t}
+
+    @since version 2.0.3
+    */
+    template<class IteratorType, typename std::enable_if<
+                 std::is_base_of<
+                     std::random_access_iterator_tag,
+                     typename std::iterator_traits<IteratorType>::iterator_category>::value, int>::type = 0>
+    static basic_json parse(IteratorType first, IteratorType last,
+                            const parser_callback_t cb = nullptr)
+    {
+        // assertion to check that the iterator range is indeed contiguous,
+        // see http://stackoverflow.com/a/35008842/266378 for more discussion
+        assert(std::accumulate(first, last, std::make_pair<bool, int>(true, 0),
+                               [&first](std::pair<bool, int> res, decltype(*first) val)
+        {
+            res.first &= (val == *(std::next(std::addressof(*first), res.second++)));
+            return res;
+        }).first);
+
+        // assertion to check that each element is 1 byte long
+        static_assert(sizeof(typename std::iterator_traits<IteratorType>::value_type) == 1,
+                      "each element in the iterator range must have the size of 1 byte");
+
+        // if iterator range is empty, create a parser with an empty string
+        // to generate "unexpected EOF" error message
+        if (std::distance(first, last) <= 0)
+        {
+            return parser("").parse();
+        }
+
+        return parser(first, last, cb).parse();
+    }
+
+    /*!
+    @brief deserialize from a container with contiguous storage
+
+    This function reads from a container with contiguous storage of 1-byte
+    values. Compatible container types include `std::vector`, `std::string`,
+    `std::array`, and `std::initializer_list`. User-defined containers can be
+    used as long as they implement random-access iterators and a contiguous
+    storage.
+
+    @pre The container storage is contiguous. Violating this precondition
+    yields undefined behavior. **This precondition is enforced with an
+    assertion.**
+    @pre Each element of the container has a size of 1 byte. Violating this
+    precondition yields undefined behavior. **This precondition is enforced
+    with a static assertion.**
+
+    @warning There is no way to enforce all preconditions at compile-time. If
+             the function is called with a noncompliant container and with
+             assertions switched off, the behavior is undefined and will most
+             likely yield segmentation violation.
+
+    @tparam ContiguousContainer container type with contiguous storage
+    @param[in] c  container to read from
+    @param[in] cb  a parser callback function of type @ref parser_callback_t
+    which is used to control the deserialization by filtering unwanted values
+    (optional)
+
+    @return result of the deserialization
+
+    @complexity Linear in the length of the input. The parser is a predictive
+    LL(1) parser. The complexity can be higher if the parser callback function
+    @a cb has a super-linear complexity.
+
+    @note A UTF-8 byte order mark is silently ignored.
+
+    @liveexample{The example below demonstrates the `parse()` function reading
+    from a contiguous container.,parse__contiguouscontainer__parser_callback_t}
+
+    @since version 2.0.3
+    */
+    template<class ContiguousContainer, typename std::enable_if<
+                 not std::is_pointer<ContiguousContainer>::value and
+                 std::is_base_of<
+                     std::random_access_iterator_tag,
+                     typename std::iterator_traits<decltype(std::begin(std::declval<ContiguousContainer const>()))>::iterator_category>::value
+                 , int>::type = 0>
+    static basic_json parse(const ContiguousContainer& c,
+                            const parser_callback_t cb = nullptr)
+    {
+        // delegate the call to the iterator-range parse overload
+        return parse(std::begin(c), std::end(c), cb);
+    }
+
+    /*!
+    @brief deserialize from stream
+
+    Deserializes an input stream to a JSON value.
+
+    @param[in,out] i  input stream to read a serialized JSON value from
+    @param[in,out] j  JSON value to write the deserialized input to
+
+    @throw std::invalid_argument in case of parse errors
+
+    @complexity Linear in the length of the input. The parser is a predictive
+    LL(1) parser.
+
+    @note A UTF-8 byte order mark is silently ignored.
+
+    @liveexample{The example below shows how a JSON value is constructed by
+    reading a serialization from a stream.,operator_deserialize}
+
+    @sa parse(std::istream&, const parser_callback_t) for a variant with a
+    parser callback function to filter values while parsing
+
+    @since version 1.0.0
+    */
+    friend std::istream& operator<<(basic_json& j, std::istream& i)
+    {
+        j = parser(i).parse();
+        return i;
+    }
+
+    /*!
+    @brief deserialize from stream
+    @copydoc operator<<(basic_json&, std::istream&)
+    */
+    friend std::istream& operator>>(std::istream& i, basic_json& j)
+    {
+        j = parser(i).parse();
+        return i;
+    }
+
+    /// @}
+
+
+  private:
+    ///////////////////////////
+    // convenience functions //
+    ///////////////////////////
+
+    /*!
+    @brief return the type as string
+
+    Returns the type name as string to be used in error messages - usually to
+    indicate that a function was called on a wrong JSON type.
+
+    @return basically a string representation of a the @a m_type member
+
+    @complexity Constant.
+
+    @since version 1.0.0
+    */
+    std::string type_name() const
+    {
+        switch (m_type)
+        {
+            case value_t::null:
+                return "null";
+            case value_t::object:
+                return "object";
+            case value_t::array:
+                return "array";
+            case value_t::string:
+                return "string";
+            case value_t::boolean:
+                return "boolean";
+            case value_t::discarded:
+                return "discarded";
+            default:
+                return "number";
+        }
+    }
+
+    /*!
+    @brief calculates the extra space to escape a JSON string
+
+    @param[in] s  the string to escape
+    @return the number of characters required to escape string @a s
+
+    @complexity Linear in the length of string @a s.
+    */
+    static std::size_t extra_space(const string_t& s) noexcept
+    {
+        return std::accumulate(s.begin(), s.end(), size_t{},
+                               [](size_t res, typename string_t::value_type c)
+        {
+            switch (c)
+            {
+                case '"':
+                case '\\':
+                case '\b':
+                case '\f':
+                case '\n':
+                case '\r':
+                case '\t':
+                {
+                    // from c (1 byte) to \x (2 bytes)
+                    return res + 1;
+                }
+
+                default:
+                {
+                    if (c >= 0x00 and c <= 0x1f)
+                    {
+                        // from c (1 byte) to \uxxxx (6 bytes)
+                        return res + 5;
+                    }
+                    else
+                    {
+                        return res;
+                    }
+                }
+            }
+        });
+    }
+
+    /*!
+    @brief escape a string
+
+    Escape a string by replacing certain special characters by a sequence of
+    an escape character (backslash) and another character and other control
+    characters by a sequence of "\u" followed by a four-digit hex
+    representation.
+
+    @param[in] s  the string to escape
+    @return  the escaped string
+
+    @complexity Linear in the length of string @a s.
+    */
+    static string_t escape_string(const string_t& s)
+    {
+        const auto space = extra_space(s);
+        if (space == 0)
+        {
+            return s;
+        }
+
+        // create a result string of necessary size
+        string_t result(s.size() + space, '\\');
+        std::size_t pos = 0;
+
+        for (const auto& c : s)
+        {
+            switch (c)
+            {
+                // quotation mark (0x22)
+                case '"':
+                {
+                    result[pos + 1] = '"';
+                    pos += 2;
+                    break;
+                }
+
+                // reverse solidus (0x5c)
+                case '\\':
+                {
+                    // nothing to change
+                    pos += 2;
+                    break;
+                }
+
+                // backspace (0x08)
+                case '\b':
+                {
+                    result[pos + 1] = 'b';
+                    pos += 2;
+                    break;
+                }
+
+                // formfeed (0x0c)
+                case '\f':
+                {
+                    result[pos + 1] = 'f';
+                    pos += 2;
+                    break;
+                }
+
+                // newline (0x0a)
+                case '\n':
+                {
+                    result[pos + 1] = 'n';
+                    pos += 2;
+                    break;
+                }
+
+                // carriage return (0x0d)
+                case '\r':
+                {
+                    result[pos + 1] = 'r';
+                    pos += 2;
+                    break;
+                }
+
+                // horizontal tab (0x09)
+                case '\t':
+                {
+                    result[pos + 1] = 't';
+                    pos += 2;
+                    break;
+                }
+
+                default:
+                {
+                    if (c >= 0x00 and c <= 0x1f)
+                    {
+                        // convert a number 0..15 to its hex representation
+                        // (0..f)
+                        static const char hexify[16] =
+                        {
+                            '0', '1', '2', '3', '4', '5', '6', '7',
+                            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+                        };
+
+                        // print character c as \uxxxx
+                        for (const char m :
+                    { 'u', '0', '0', hexify[c >> 4], hexify[c & 0x0f]
+                        })
+                        {
+                            result[++pos] = m;
+                        }
+
+                        ++pos;
+                    }
+                    else
+                    {
+                        // all other characters are added as-is
+                        result[pos++] = c;
+                    }
+                    break;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /*!
+    @brief internal implementation of the serialization function
+
+    This function is called by the public member function dump and organizes
+    the serialization internally. The indentation level is propagated as
+    additional parameter. In case of arrays and objects, the function is
+    called recursively. Note that
+
+    - strings and object keys are escaped using `escape_string()`
+    - integer numbers are converted implicitly via `operator<<`
+    - floating-point numbers are converted to a string using `"%g"` format
+
+    @param[out] o              stream to write to
+    @param[in] pretty_print    whether the output shall be pretty-printed
+    @param[in] indent_step     the indent level
+    @param[in] current_indent  the current indent level (only used internally)
+    */
+    void dump(std::ostream& o,
+              const bool pretty_print,
+              const unsigned int indent_step,
+              const unsigned int current_indent = 0) const
+    {
+        // variable to hold indentation for recursive calls
+        unsigned int new_indent = current_indent;
+
+        switch (m_type)
+        {
+            case value_t::object:
+            {
+                if (m_value.object->empty())
+                {
+                    o << "{}";
+                    return;
+                }
+
+                o << "{";
+
+                // increase indentation
+                if (pretty_print)
+                {
+                    new_indent += indent_step;
+                    o << "\n";
+                }
+
+                for (auto i = m_value.object->cbegin(); i != m_value.object->cend(); ++i)
+                {
+                    if (i != m_value.object->cbegin())
+                    {
+                        o << (pretty_print ? ",\n" : ",");
+                    }
+                    o << string_t(new_indent, ' ') << "\""
+                      << escape_string(i->first) << "\":"
+                      << (pretty_print ? " " : "");
+                    i->second.dump(o, pretty_print, indent_step, new_indent);
+                }
+
+                // decrease indentation
+                if (pretty_print)
+                {
+                    new_indent -= indent_step;
+                    o << "\n";
+                }
+
+                o << string_t(new_indent, ' ') + "}";
+                return;
+            }
+
+            case value_t::array:
+            {
+                if (m_value.array->empty())
+                {
+                    o << "[]";
+                    return;
+                }
+
+                o << "[";
+
+                // increase indentation
+                if (pretty_print)
+                {
+                    new_indent += indent_step;
+                    o << "\n";
+                }
+
+                for (auto i = m_value.array->cbegin(); i != m_value.array->cend(); ++i)
+                {
+                    if (i != m_value.array->cbegin())
+                    {
+                        o << (pretty_print ? ",\n" : ",");
+                    }
+                    o << string_t(new_indent, ' ');
+                    i->dump(o, pretty_print, indent_step, new_indent);
+                }
+
+                // decrease indentation
+                if (pretty_print)
+                {
+                    new_indent -= indent_step;
+                    o << "\n";
+                }
+
+                o << string_t(new_indent, ' ') << "]";
+                return;
+            }
+
+            case value_t::string:
+            {
+                o << string_t("\"") << escape_string(*m_value.string) << "\"";
+                return;
+            }
+
+            case value_t::boolean:
+            {
+                o << (m_value.boolean ? "true" : "false");
+                return;
+            }
+
+            case value_t::number_integer:
+            {
+                o << m_value.number_integer;
+                return;
+            }
+
+            case value_t::number_unsigned:
+            {
+                o << m_value.number_unsigned;
+                return;
+            }
+
+            case value_t::number_float:
+            {
+                if (m_value.number_float == 0)
+                {
+                    // special case for zero to get "0.0"/"-0.0"
+                    o << (std::signbit(m_value.number_float) ? "-0.0" : "0.0");
+                }
+                else
+                {
+                    o << m_value.number_float;
+                }
+                return;
+            }
+
+            case value_t::discarded:
+            {
+                o << "<discarded>";
+                return;
+            }
+
+            case value_t::null:
+            {
+                o << "null";
+                return;
+            }
+        }
+    }
+
+  private:
+    //////////////////////
+    // member variables //
+    //////////////////////
+
+    /// the type of the current element
+    value_t m_type = value_t::null;
+
+    /// the value of the current element
+    json_value m_value = {};
+
+
+  private:
+    ///////////////
+    // iterators //
+    ///////////////
+
+    /*!
+    @brief an iterator for primitive JSON types
+
+    This class models an iterator for primitive JSON types (boolean, number,
+    string). It's only purpose is to allow the iterator/const_iterator classes
+    to "iterate" over primitive values. Internally, the iterator is modeled by
+    a `difference_type` variable. Value begin_value (`0`) models the begin,
+    end_value (`1`) models past the end.
+    */
+    class primitive_iterator_t
+    {
+      public:
+        /// set iterator to a defined beginning
+        void set_begin() noexcept
+        {
+            m_it = begin_value;
+        }
+
+        /// set iterator to a defined past the end
+        void set_end() noexcept
+        {
+            m_it = end_value;
+        }
+
+        /// return whether the iterator can be dereferenced
+        constexpr bool is_begin() const noexcept
+        {
+            return (m_it == begin_value);
+        }
+
+        /// return whether the iterator is at end
+        constexpr bool is_end() const noexcept
+        {
+            return (m_it == end_value);
+        }
+
+        /// return reference to the value to change and compare
+        operator difference_type& () noexcept
+        {
+            return m_it;
+        }
+
+        /// return value to compare
+        constexpr operator difference_type () const noexcept
+        {
+            return m_it;
+        }
+
+      private:
+        static constexpr difference_type begin_value = 0;
+        static constexpr difference_type end_value = begin_value + 1;
+
+        /// iterator as signed integer type
+        difference_type m_it = std::numeric_limits<std::ptrdiff_t>::denorm_min();
+    };
+
+    /*!
+    @brief an iterator value
+
+    @note This structure could easily be a union, but MSVC currently does not
+    allow unions members with complex constructors, see
+    https://github.com/nlohmann/json/pull/105.
+    */
+    struct internal_iterator
+    {
+        /// iterator for JSON objects
+        typename object_t::iterator object_iterator;
+        /// iterator for JSON arrays
+        typename array_t::iterator array_iterator;
+        /// generic iterator for all other types
+        primitive_iterator_t primitive_iterator;
+
+        /// create an uninitialized internal_iterator
+        internal_iterator() noexcept
+            : object_iterator(), array_iterator(), primitive_iterator()
+        {}
+    };
+
+    /// proxy class for the iterator_wrapper functions
+    template<typename IteratorType>
+    class iteration_proxy
+    {
+      private:
+        /// helper class for iteration
+        class iteration_proxy_internal
+        {
+          private:
+            /// the iterator
+            IteratorType anchor;
+            /// an index for arrays (used to create key names)
+            size_t array_index = 0;
+
+          public:
+            explicit iteration_proxy_internal(IteratorType it) noexcept
+                : anchor(it)
+            {}
+
+            /// dereference operator (needed for range-based for)
+            iteration_proxy_internal& operator*()
+            {
+                return *this;
+            }
+
+            /// increment operator (needed for range-based for)
+            iteration_proxy_internal& operator++()
+            {
+                ++anchor;
+                ++array_index;
+
+                return *this;
+            }
+
+            /// inequality operator (needed for range-based for)
+            bool operator!= (const iteration_proxy_internal& o) const
+            {
+                return anchor != o.anchor;
+            }
+
+            /// return key of the iterator
+            typename basic_json::string_t key() const
+            {
+                assert(anchor.m_object != nullptr);
+
+                switch (anchor.m_object->type())
+                {
+                    // use integer array index as key
+                    case value_t::array:
+                    {
+                        return std::to_string(array_index);
+                    }
+
+                    // use key from the object
+                    case value_t::object:
+                    {
+                        return anchor.key();
+                    }
+
+                    // use an empty key for all primitive types
+                    default:
+                    {
+                        return "";
+                    }
+                }
+            }
+
+            /// return value of the iterator
+            typename IteratorType::reference value() const
+            {
+                return anchor.value();
+            }
+        };
+
+        /// the container to iterate
+        typename IteratorType::reference container;
+
+      public:
+        /// construct iteration proxy from a container
+        explicit iteration_proxy(typename IteratorType::reference cont)
+            : container(cont)
+        {}
+
+        /// return iterator begin (needed for range-based for)
+        iteration_proxy_internal begin() noexcept
+        {
+            return iteration_proxy_internal(container.begin());
+        }
+
+        /// return iterator end (needed for range-based for)
+        iteration_proxy_internal end() noexcept
+        {
+            return iteration_proxy_internal(container.end());
+        }
+    };
+
+  public:
+    /*!
+    @brief a const random access iterator for the @ref basic_json class
+
+    This class implements a const iterator for the @ref basic_json class. From
+    this class, the @ref iterator class is derived.
+
+    @note An iterator is called *initialized* when a pointer to a JSON value
+          has been set (e.g., by a constructor or a copy assignment). If the
+          iterator is default-constructed, it is *uninitialized* and most
+          methods are undefined. **The library uses assertions to detect calls
+          on uninitialized iterators.**
+
+    @requirement The class satisfies the following concept requirements:
+    - [RandomAccessIterator](http://en.cppreference.com/w/cpp/concept/RandomAccessIterator):
+      The iterator that can be moved to point (forward and backward) to any
+      element in constant time.
+
+    @since version 1.0.0
+    */
+    class const_iterator : public std::iterator<std::random_access_iterator_tag, const basic_json>
+    {
+        /// allow basic_json to access private members
+        friend class basic_json;
+
+      public:
+        /// the type of the values when the iterator is dereferenced
+        using value_type = typename basic_json::value_type;
+        /// a type to represent differences between iterators
+        using difference_type = typename basic_json::difference_type;
+        /// defines a pointer to the type iterated over (value_type)
+        using pointer = typename basic_json::const_pointer;
+        /// defines a reference to the type iterated over (value_type)
+        using reference = typename basic_json::const_reference;
+        /// the category of the iterator
+        using iterator_category = std::bidirectional_iterator_tag;
+
+        /// default constructor
+        const_iterator() = default;
+
+        /*!
+        @brief constructor for a given JSON instance
+        @param[in] object  pointer to a JSON object for this iterator
+        @pre object != nullptr
+        @post The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        explicit const_iterator(pointer object) noexcept
+            : m_object(object)
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    m_it.object_iterator = typename object_t::iterator();
+                    break;
+                }
+
+                case basic_json::value_t::array:
+                {
+                    m_it.array_iterator = typename array_t::iterator();
+                    break;
+                }
+
+                default:
+                {
+                    m_it.primitive_iterator = primitive_iterator_t();
+                    break;
+                }
+            }
+        }
+
+        /*!
+        @brief copy constructor given a non-const iterator
+        @param[in] other  iterator to copy from
+        @note It is not checked whether @a other is initialized.
+        */
+        explicit const_iterator(const iterator& other) noexcept
+            : m_object(other.m_object)
+        {
+            if (m_object != nullptr)
+            {
+                switch (m_object->m_type)
+                {
+                    case basic_json::value_t::object:
+                    {
+                        m_it.object_iterator = other.m_it.object_iterator;
+                        break;
+                    }
+
+                    case basic_json::value_t::array:
+                    {
+                        m_it.array_iterator = other.m_it.array_iterator;
+                        break;
+                    }
+
+                    default:
+                    {
+                        m_it.primitive_iterator = other.m_it.primitive_iterator;
+                        break;
+                    }
+                }
+            }
+        }
+
+        /*!
+        @brief copy constructor
+        @param[in] other  iterator to copy from
+        @note It is not checked whether @a other is initialized.
+        */
+        const_iterator(const const_iterator& other) noexcept
+            : m_object(other.m_object), m_it(other.m_it)
+        {}
+
+        /*!
+        @brief copy assignment
+        @param[in,out] other  iterator to copy from
+        @note It is not checked whether @a other is initialized.
+        */
+        const_iterator& operator=(const_iterator other) noexcept(
+            std::is_nothrow_move_constructible<pointer>::value and
+            std::is_nothrow_move_assignable<pointer>::value and
+            std::is_nothrow_move_constructible<internal_iterator>::value and
+            std::is_nothrow_move_assignable<internal_iterator>::value
+        )
+        {
+            std::swap(m_object, other.m_object);
+            std::swap(m_it, other.m_it);
+            return *this;
+        }
+
+      private:
+        /*!
+        @brief set the iterator to the first value
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        void set_begin() noexcept
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    m_it.object_iterator = m_object->m_value.object->begin();
+                    break;
+                }
+
+                case basic_json::value_t::array:
+                {
+                    m_it.array_iterator = m_object->m_value.array->begin();
+                    break;
+                }
+
+                case basic_json::value_t::null:
+                {
+                    // set to end so begin()==end() is true: null is empty
+                    m_it.primitive_iterator.set_end();
+                    break;
+                }
+
+                default:
+                {
+                    m_it.primitive_iterator.set_begin();
+                    break;
+                }
+            }
+        }
+
+        /*!
+        @brief set the iterator past the last value
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        void set_end() noexcept
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    m_it.object_iterator = m_object->m_value.object->end();
+                    break;
+                }
+
+                case basic_json::value_t::array:
+                {
+                    m_it.array_iterator = m_object->m_value.array->end();
+                    break;
+                }
+
+                default:
+                {
+                    m_it.primitive_iterator.set_end();
+                    break;
+                }
+            }
+        }
+
+      public:
+        /*!
+        @brief return a reference to the value pointed to by the iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        reference operator*() const
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    assert(m_it.object_iterator != m_object->m_value.object->end());
+                    return m_it.object_iterator->second;
+                }
+
+                case basic_json::value_t::array:
+                {
+                    assert(m_it.array_iterator != m_object->m_value.array->end());
+                    return *m_it.array_iterator;
+                }
+
+                case basic_json::value_t::null:
+                {
+                    throw std::out_of_range("cannot get value");
+                }
+
+                default:
+                {
+                    if (m_it.primitive_iterator.is_begin())
+                    {
+                        return *m_object;
+                    }
+                    else
+                    {
+                        throw std::out_of_range("cannot get value");
+                    }
+                }
+            }
+        }
+
+        /*!
+        @brief dereference the iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        pointer operator->() const
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    assert(m_it.object_iterator != m_object->m_value.object->end());
+                    return &(m_it.object_iterator->second);
+                }
+
+                case basic_json::value_t::array:
+                {
+                    assert(m_it.array_iterator != m_object->m_value.array->end());
+                    return &*m_it.array_iterator;
+                }
+
+                default:
+                {
+                    if (m_it.primitive_iterator.is_begin())
+                    {
+                        return m_object;
+                    }
+                    else
+                    {
+                        throw std::out_of_range("cannot get value");
+                    }
+                }
+            }
+        }
+
+        /*!
+        @brief post-increment (it++)
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator operator++(int)
+        {
+            auto result = *this;
+            ++(*this);
+            return result;
+        }
+
+        /*!
+        @brief pre-increment (++it)
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator& operator++()
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    std::advance(m_it.object_iterator, 1);
+                    break;
+                }
+
+                case basic_json::value_t::array:
+                {
+                    std::advance(m_it.array_iterator, 1);
+                    break;
+                }
+
+                default:
+                {
+                    ++m_it.primitive_iterator;
+                    break;
+                }
+            }
+
+            return *this;
+        }
+
+        /*!
+        @brief post-decrement (it--)
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator operator--(int)
+        {
+            auto result = *this;
+            --(*this);
+            return result;
+        }
+
+        /*!
+        @brief pre-decrement (--it)
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator& operator--()
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    std::advance(m_it.object_iterator, -1);
+                    break;
+                }
+
+                case basic_json::value_t::array:
+                {
+                    std::advance(m_it.array_iterator, -1);
+                    break;
+                }
+
+                default:
+                {
+                    --m_it.primitive_iterator;
+                    break;
+                }
+            }
+
+            return *this;
+        }
+
+        /*!
+        @brief  comparison: equal
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        bool operator==(const const_iterator& other) const
+        {
+            // if objects are not the same, the comparison is undefined
+            if (m_object != other.m_object)
+            {
+                throw std::domain_error("cannot compare iterators of different containers");
+            }
+
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    return (m_it.object_iterator == other.m_it.object_iterator);
+                }
+
+                case basic_json::value_t::array:
+                {
+                    return (m_it.array_iterator == other.m_it.array_iterator);
+                }
+
+                default:
+                {
+                    return (m_it.primitive_iterator == other.m_it.primitive_iterator);
+                }
+            }
+        }
+
+        /*!
+        @brief  comparison: not equal
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        bool operator!=(const const_iterator& other) const
+        {
+            return not operator==(other);
+        }
+
+        /*!
+        @brief  comparison: smaller
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        bool operator<(const const_iterator& other) const
+        {
+            // if objects are not the same, the comparison is undefined
+            if (m_object != other.m_object)
+            {
+                throw std::domain_error("cannot compare iterators of different containers");
+            }
+
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    throw std::domain_error("cannot compare order of object iterators");
+                }
+
+                case basic_json::value_t::array:
+                {
+                    return (m_it.array_iterator < other.m_it.array_iterator);
+                }
+
+                default:
+                {
+                    return (m_it.primitive_iterator < other.m_it.primitive_iterator);
+                }
+            }
+        }
+
+        /*!
+        @brief  comparison: less than or equal
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        bool operator<=(const const_iterator& other) const
+        {
+            return not other.operator < (*this);
+        }
+
+        /*!
+        @brief  comparison: greater than
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        bool operator>(const const_iterator& other) const
+        {
+            return not operator<=(other);
+        }
+
+        /*!
+        @brief  comparison: greater than or equal
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        bool operator>=(const const_iterator& other) const
+        {
+            return not operator<(other);
+        }
+
+        /*!
+        @brief  add to iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator& operator+=(difference_type i)
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    throw std::domain_error("cannot use offsets with object iterators");
+                }
+
+                case basic_json::value_t::array:
+                {
+                    std::advance(m_it.array_iterator, i);
+                    break;
+                }
+
+                default:
+                {
+                    m_it.primitive_iterator += i;
+                    break;
+                }
+            }
+
+            return *this;
+        }
+
+        /*!
+        @brief  subtract from iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator& operator-=(difference_type i)
+        {
+            return operator+=(-i);
+        }
+
+        /*!
+        @brief  add to iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator operator+(difference_type i)
+        {
+            auto result = *this;
+            result += i;
+            return result;
+        }
+
+        /*!
+        @brief  subtract from iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        const_iterator operator-(difference_type i)
+        {
+            auto result = *this;
+            result -= i;
+            return result;
+        }
+
+        /*!
+        @brief  return difference
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        difference_type operator-(const const_iterator& other) const
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    throw std::domain_error("cannot use offsets with object iterators");
+                }
+
+                case basic_json::value_t::array:
+                {
+                    return m_it.array_iterator - other.m_it.array_iterator;
+                }
+
+                default:
+                {
+                    return m_it.primitive_iterator - other.m_it.primitive_iterator;
+                }
+            }
+        }
+
+        /*!
+        @brief  access to successor
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        reference operator[](difference_type n) const
+        {
+            assert(m_object != nullptr);
+
+            switch (m_object->m_type)
+            {
+                case basic_json::value_t::object:
+                {
+                    throw std::domain_error("cannot use operator[] for object iterators");
+                }
+
+                case basic_json::value_t::array:
+                {
+                    return *std::next(m_it.array_iterator, n);
+                }
+
+                case basic_json::value_t::null:
+                {
+                    throw std::out_of_range("cannot get value");
+                }
+
+                default:
+                {
+                    if (m_it.primitive_iterator == -n)
+                    {
+                        return *m_object;
+                    }
+                    else
+                    {
+                        throw std::out_of_range("cannot get value");
+                    }
+                }
+            }
+        }
+
+        /*!
+        @brief  return the key of an object iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        typename object_t::key_type key() const
+        {
+            assert(m_object != nullptr);
+
+            if (m_object->is_object())
+            {
+                return m_it.object_iterator->first;
+            }
+            else
+            {
+                throw std::domain_error("cannot use key() for non-object iterators");
+            }
+        }
+
+        /*!
+        @brief  return the value of an iterator
+        @pre The iterator is initialized; i.e. `m_object != nullptr`.
+        */
+        reference value() const
+        {
+            return operator*();
+        }
+
+      private:
+        /// associated JSON instance
+        pointer m_object = nullptr;
+        /// the actual iterator of the associated instance
+        internal_iterator m_it = internal_iterator();
+    };
+
+    /*!
+    @brief a mutable random access iterator for the @ref basic_json class
+
+    @requirement The class satisfies the following concept requirements:
+    - [RandomAccessIterator](http://en.cppreference.com/w/cpp/concept/RandomAccessIterator):
+      The iterator that can be moved to point (forward and backward) to any
+      element in constant time.
+    - [OutputIterator](http://en.cppreference.com/w/cpp/concept/OutputIterator):
+      It is possible to write to the pointed-to element.
+
+    @since version 1.0.0
+    */
+    class iterator : public const_iterator
+    {
+      public:
+        using base_iterator = const_iterator;
+        using pointer = typename basic_json::pointer;
+        using reference = typename basic_json::reference;
+
+        /// default constructor
+        iterator() = default;
+
+        /// constructor for a given JSON instance
+        explicit iterator(pointer object) noexcept
+            : base_iterator(object)
+        {}
+
+        /// copy constructor
+        iterator(const iterator& other) noexcept
+            : base_iterator(other)
+        {}
+
+        /// copy assignment
+        iterator& operator=(iterator other) noexcept(
+            std::is_nothrow_move_constructible<pointer>::value and
+            std::is_nothrow_move_assignable<pointer>::value and
+            std::is_nothrow_move_constructible<internal_iterator>::value and
+            std::is_nothrow_move_assignable<internal_iterator>::value
+        )
+        {
+            base_iterator::operator=(other);
+            return *this;
+        }
+
+        /// return a reference to the value pointed to by the iterator
+        reference operator*() const
+        {
+            return const_cast<reference>(base_iterator::operator*());
+        }
+
+        /// dereference the iterator
+        pointer operator->() const
+        {
+            return const_cast<pointer>(base_iterator::operator->());
+        }
+
+        /// post-increment (it++)
+        iterator operator++(int)
+        {
+            iterator result = *this;
+            base_iterator::operator++();
+            return result;
+        }
+
+        /// pre-increment (++it)
+        iterator& operator++()
+        {
+            base_iterator::operator++();
+            return *this;
+        }
+
+        /// post-decrement (it--)
+        iterator operator--(int)
+        {
+            iterator result = *this;
+            base_iterator::operator--();
+            return result;
+        }
+
+        /// pre-decrement (--it)
+        iterator& operator--()
+        {
+            base_iterator::operator--();
+            return *this;
+        }
+
+        /// add to iterator
+        iterator& operator+=(difference_type i)
+        {
+            base_iterator::operator+=(i);
+            return *this;
+        }
+
+        /// subtract from iterator
+        iterator& operator-=(difference_type i)
+        {
+            base_iterator::operator-=(i);
+            return *this;
+        }
+
+        /// add to iterator
+        iterator operator+(difference_type i)
+        {
+            auto result = *this;
+            result += i;
+            return result;
+        }
+
+        /// subtract from iterator
+        iterator operator-(difference_type i)
+        {
+            auto result = *this;
+            result -= i;
+            return result;
+        }
+
+        /// return difference
+        difference_type operator-(const iterator& other) const
+        {
+            return base_iterator::operator-(other);
+        }
+
+        /// access to successor
+        reference operator[](difference_type n) const
+        {
+            return const_cast<reference>(base_iterator::operator[](n));
+        }
+
+        /// return the value of an iterator
+        reference value() const
+        {
+            return const_cast<reference>(base_iterator::value());
+        }
+    };
+
+    /*!
+    @brief a template for a reverse iterator class
+
+    @tparam Base the base iterator type to reverse. Valid types are @ref
+    iterator (to create @ref reverse_iterator) and @ref const_iterator (to
+    create @ref const_reverse_iterator).
+
+    @requirement The class satisfies the following concept requirements:
+    - [RandomAccessIterator](http://en.cppreference.com/w/cpp/concept/RandomAccessIterator):
+      The iterator that can be moved to point (forward and backward) to any
+      element in constant time.
+    - [OutputIterator](http://en.cppreference.com/w/cpp/concept/OutputIterator):
+      It is possible to write to the pointed-to element (only if @a Base is
+      @ref iterator).
+
+    @since version 1.0.0
+    */
+    template<typename Base>
+    class json_reverse_iterator : public std::reverse_iterator<Base>
+    {
+      public:
+        /// shortcut to the reverse iterator adaptor
+        using base_iterator = std::reverse_iterator<Base>;
+        /// the reference type for the pointed-to element
+        using reference = typename Base::reference;
+
+        /// create reverse iterator from iterator
+        json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept
+            : base_iterator(it)
+        {}
+
+        /// create reverse iterator from base class
+        json_reverse_iterator(const base_iterator& it) noexcept
+            : base_iterator(it)
+        {}
+
+        /// post-increment (it++)
+        json_reverse_iterator operator++(int)
+        {
+            return base_iterator::operator++(1);
+        }
+
+        /// pre-increment (++it)
+        json_reverse_iterator& operator++()
+        {
+            base_iterator::operator++();
+            return *this;
+        }
+
+        /// post-decrement (it--)
+        json_reverse_iterator operator--(int)
+        {
+            return base_iterator::operator--(1);
+        }
+
+        /// pre-decrement (--it)
+        json_reverse_iterator& operator--()
+        {
+            base_iterator::operator--();
+            return *this;
+        }
+
+        /// add to iterator
+        json_reverse_iterator& operator+=(difference_type i)
+        {
+            base_iterator::operator+=(i);
+            return *this;
+        }
+
+        /// add to iterator
+        json_reverse_iterator operator+(difference_type i) const
+        {
+            auto result = *this;
+            result += i;
+            return result;
+        }
+
+        /// subtract from iterator
+        json_reverse_iterator operator-(difference_type i) const
+        {
+            auto result = *this;
+            result -= i;
+            return result;
+        }
+
+        /// return difference
+        difference_type operator-(const json_reverse_iterator& other) const
+        {
+            return this->base() - other.base();
+        }
+
+        /// access to successor
+        reference operator[](difference_type n) const
+        {
+            return *(this->operator+(n));
+        }
+
+        /// return the key of an object iterator
+        typename object_t::key_type key() const
+        {
+            auto it = --this->base();
+            return it.key();
+        }
+
+        /// return the value of an iterator
+        reference value() const
+        {
+            auto it = --this->base();
+            return it.operator * ();
+        }
+    };
+
+
+  private:
+    //////////////////////
+    // lexer and parser //
+    //////////////////////
+
+    /*!
+    @brief lexical analysis
+
+    This class organizes the lexical analysis during JSON deserialization. The
+    core of it is a scanner generated by [re2c](http://re2c.org) that
+    processes a buffer and recognizes tokens according to RFC 7159.
+    */
+    class lexer
+    {
+      public:
+        /// token types for the parser
+        enum class token_type
+        {
+            uninitialized,   ///< indicating the scanner is uninitialized
+            literal_true,    ///< the `true` literal
+            literal_false,   ///< the `false` literal
+            literal_null,    ///< the `null` literal
+            value_string,    ///< a string -- use get_string() for actual value
+            value_number,    ///< a number -- use get_number() for actual value
+            begin_array,     ///< the character for array begin `[`
+            begin_object,    ///< the character for object begin `{`
+            end_array,       ///< the character for array end `]`
+            end_object,      ///< the character for object end `}`
+            name_separator,  ///< the name separator `:`
+            value_separator, ///< the value separator `,`
+            parse_error,     ///< indicating a parse error
+            end_of_input     ///< indicating the end of the input buffer
+        };
+
+        /// the char type to use in the lexer
+        using lexer_char_t = unsigned char;
+
+        /// a lexer from a buffer with given length
+        lexer(const lexer_char_t* buff, const size_t len) noexcept
+            : m_content(buff)
+        {
+            assert(m_content != nullptr);
+            m_start = m_cursor = m_content;
+            m_limit = m_content + len;
+        }
+
+        /// a lexer from an input stream
+        explicit lexer(std::istream& s)
+            : m_stream(&s), m_line_buffer()
+        {
+            // fill buffer
+            fill_line_buffer();
+        }
+
+        // switch off unwanted functions (due to pointer members)
+        lexer() = delete;
+        lexer(const lexer&) = delete;
+        lexer operator=(const lexer&) = delete;
+
+        /*!
+        @brief create a string from one or two Unicode code points
+
+        There are two cases: (1) @a codepoint1 is in the Basic Multilingual
+        Plane (U+0000 through U+FFFF) and @a codepoint2 is 0, or (2)
+        @a codepoint1 and @a codepoint2 are a UTF-16 surrogate pair to
+        represent a code point above U+FFFF.
+
+        @param[in] codepoint1  the code point (can be high surrogate)
+        @param[in] codepoint2  the code point (can be low surrogate or 0)
+
+        @return string representation of the code point; the length of the
+        result string is between 1 and 4 characters.
+
+        @throw std::out_of_range if code point is > 0x10ffff; example: `"code
+        points above 0x10FFFF are invalid"`
+        @throw std::invalid_argument if the low surrogate is invalid; example:
+        `""missing or wrong low surrogate""`
+
+        @complexity Constant.
+
+        @see <http://en.wikipedia.org/wiki/UTF-8#Sample_code>
+        */
+        static string_t to_unicode(const std::size_t codepoint1,
+                                   const std::size_t codepoint2 = 0)
+        {
+            // calculate the code point from the given code points
+            std::size_t codepoint = codepoint1;
+
+            // check if codepoint1 is a high surrogate
+            if (codepoint1 >= 0xD800 and codepoint1 <= 0xDBFF)
+            {
+                // check if codepoint2 is a low surrogate
+                if (codepoint2 >= 0xDC00 and codepoint2 <= 0xDFFF)
+                {
+                    codepoint =
+                        // high surrogate occupies the most significant 22 bits
+                        (codepoint1 << 10)
+                        // low surrogate occupies the least significant 15 bits
+                        + codepoint2
+                        // there is still the 0xD800, 0xDC00 and 0x10000 noise
+                        // in the result so we have to subtract with:
+                        // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00
+                        - 0x35FDC00;
+                }
+                else
+                {
+                    throw std::invalid_argument("missing or wrong low surrogate");
+                }
+            }
+
+            string_t result;
+
+            if (codepoint < 0x80)
+            {
+                // 1-byte characters: 0xxxxxxx (ASCII)
+                result.append(1, static_cast<typename string_t::value_type>(codepoint));
+            }
+            else if (codepoint <= 0x7ff)
+            {
+                // 2-byte characters: 110xxxxx 10xxxxxx
+                result.append(1, static_cast<typename string_t::value_type>(0xC0 | ((codepoint >> 6) & 0x1F)));
+                result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F)));
+            }
+            else if (codepoint <= 0xffff)
+            {
+                // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx
+                result.append(1, static_cast<typename string_t::value_type>(0xE0 | ((codepoint >> 12) & 0x0F)));
+                result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 6) & 0x3F)));
+                result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F)));
+            }
+            else if (codepoint <= 0x10ffff)
+            {
+                // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+                result.append(1, static_cast<typename string_t::value_type>(0xF0 | ((codepoint >> 18) & 0x07)));
+                result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 12) & 0x3F)));
+                result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 6) & 0x3F)));
+                result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F)));
+            }
+            else
+            {
+                throw std::out_of_range("code points above 0x10FFFF are invalid");
+            }
+
+            return result;
+        }
+
+        /// return name of values of type token_type (only used for errors)
+        static std::string token_type_name(const token_type t)
+        {
+            switch (t)
+            {
+                case token_type::uninitialized:
+                    return "<uninitialized>";
+                case token_type::literal_true:
+                    return "true literal";
+                case token_type::literal_false:
+                    return "false literal";
+                case token_type::literal_null:
+                    return "null literal";
+                case token_type::value_string:
+                    return "string literal";
+                case token_type::value_number:
+                    return "number literal";
+                case token_type::begin_array:
+                    return "'['";
+                case token_type::begin_object:
+                    return "'{'";
+                case token_type::end_array:
+                    return "']'";
+                case token_type::end_object:
+                    return "'}'";
+                case token_type::name_separator:
+                    return "':'";
+                case token_type::value_separator:
+                    return "','";
+                case token_type::parse_error:
+                    return "<parse error>";
+                case token_type::end_of_input:
+                    return "end of input";
+                default:
+                {
+                    // catch non-enum values
+                    return "unknown token"; // LCOV_EXCL_LINE
+                }
+            }
+        }
+
+        /*!
+        This function implements a scanner for JSON. It is specified using
+        regular expressions that try to follow RFC 7159 as close as possible.
+        These regular expressions are then translated into a minimized
+        deterministic finite automaton (DFA) by the tool
+        [re2c](http://re2c.org). As a result, the translated code for this
+        function consists of a large block of code with `goto` jumps.
+
+        @return the class of the next token read from the buffer
+
+        @complexity Linear in the length of the input.\n
+
+        Proposition: The loop below will always terminate for finite input.\n
+
+        Proof (by contradiction): Assume a finite input. To loop forever, the
+        loop must never hit code with a `break` statement. The only code
+        snippets without a `break` statement are the continue statements for
+        whitespace and byte-order-marks. To loop forever, the input must be an
+        infinite sequence of whitespace or byte-order-marks. This contradicts
+        the assumption of finite input, q.e.d.
+        */
+        token_type scan()
+        {
+            while (true)
+            {
+                // pointer for backtracking information
+                m_marker = nullptr;
+
+                // remember the begin of the token
+                m_start = m_cursor;
+                assert(m_start != nullptr);
+
+
+                {
+                    lexer_char_t yych;
+                    unsigned int yyaccept = 0;
+                    static const unsigned char yybm[] =
+                    {
+                        0,   0,   0,   0,   0,   0,   0,   0,
+                        0,  32,  32,   0,   0,  32,   0,   0,
+                        0,   0,   0,   0,   0,   0,   0,   0,
+                        0,   0,   0,   0,   0,   0,   0,   0,
+                        160, 128,   0, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        192, 192, 192, 192, 192, 192, 192, 192,
+                        192, 192, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128,   0, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                        128, 128, 128, 128, 128, 128, 128, 128,
+                    };
+                    if ((m_limit - m_cursor) < 5)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yybm[0 + yych] & 32)
+                    {
+                        goto basic_json_parser_6;
+                    }
+                    if (yych <= '\\')
+                    {
+                        if (yych <= '-')
+                        {
+                            if (yych <= '"')
+                            {
+                                if (yych <= 0x00)
+                                {
+                                    goto basic_json_parser_2;
+                                }
+                                if (yych <= '!')
+                                {
+                                    goto basic_json_parser_4;
+                                }
+                                goto basic_json_parser_9;
+                            }
+                            else
+                            {
+                                if (yych <= '+')
+                                {
+                                    goto basic_json_parser_4;
+                                }
+                                if (yych <= ',')
+                                {
+                                    goto basic_json_parser_10;
+                                }
+                                goto basic_json_parser_12;
+                            }
+                        }
+                        else
+                        {
+                            if (yych <= '9')
+                            {
+                                if (yych <= '/')
+                                {
+                                    goto basic_json_parser_4;
+                                }
+                                if (yych <= '0')
+                                {
+                                    goto basic_json_parser_13;
+                                }
+                                goto basic_json_parser_15;
+                            }
+                            else
+                            {
+                                if (yych <= ':')
+                                {
+                                    goto basic_json_parser_17;
+                                }
+                                if (yych == '[')
+                                {
+                                    goto basic_json_parser_19;
+                                }
+                                goto basic_json_parser_4;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        if (yych <= 't')
+                        {
+                            if (yych <= 'f')
+                            {
+                                if (yych <= ']')
+                                {
+                                    goto basic_json_parser_21;
+                                }
+                                if (yych <= 'e')
+                                {
+                                    goto basic_json_parser_4;
+                                }
+                                goto basic_json_parser_23;
+                            }
+                            else
+                            {
+                                if (yych == 'n')
+                                {
+                                    goto basic_json_parser_24;
+                                }
+                                if (yych <= 's')
+                                {
+                                    goto basic_json_parser_4;
+                                }
+                                goto basic_json_parser_25;
+                            }
+                        }
+                        else
+                        {
+                            if (yych <= '|')
+                            {
+                                if (yych == '{')
+                                {
+                                    goto basic_json_parser_26;
+                                }
+                                goto basic_json_parser_4;
+                            }
+                            else
+                            {
+                                if (yych <= '}')
+                                {
+                                    goto basic_json_parser_28;
+                                }
+                                if (yych == 0xEF)
+                                {
+                                    goto basic_json_parser_30;
+                                }
+                                goto basic_json_parser_4;
+                            }
+                        }
+                    }
+basic_json_parser_2:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::end_of_input;
+                        break;
+                    }
+basic_json_parser_4:
+                    ++m_cursor;
+basic_json_parser_5:
+                    {
+                        last_token_type = token_type::parse_error;
+                        break;
+                    }
+basic_json_parser_6:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yybm[0 + yych] & 32)
+                    {
+                        goto basic_json_parser_6;
+                    }
+                    {
+                        continue;
+                    }
+basic_json_parser_9:
+                    yyaccept = 0;
+                    yych = *(m_marker = ++m_cursor);
+                    if (yych <= 0x1F)
+                    {
+                        goto basic_json_parser_5;
+                    }
+                    goto basic_json_parser_32;
+basic_json_parser_10:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::value_separator;
+                        break;
+                    }
+basic_json_parser_12:
+                    yych = *++m_cursor;
+                    if (yych <= '/')
+                    {
+                        goto basic_json_parser_5;
+                    }
+                    if (yych <= '0')
+                    {
+                        goto basic_json_parser_13;
+                    }
+                    if (yych <= '9')
+                    {
+                        goto basic_json_parser_15;
+                    }
+                    goto basic_json_parser_5;
+basic_json_parser_13:
+                    yyaccept = 1;
+                    yych = *(m_marker = ++m_cursor);
+                    if (yych <= 'D')
+                    {
+                        if (yych == '.')
+                        {
+                            goto basic_json_parser_37;
+                        }
+                    }
+                    else
+                    {
+                        if (yych <= 'E')
+                        {
+                            goto basic_json_parser_38;
+                        }
+                        if (yych == 'e')
+                        {
+                            goto basic_json_parser_38;
+                        }
+                    }
+basic_json_parser_14:
+                    {
+                        last_token_type = token_type::value_number;
+                        break;
+                    }
+basic_json_parser_15:
+                    yyaccept = 1;
+                    m_marker = ++m_cursor;
+                    if ((m_limit - m_cursor) < 3)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yybm[0 + yych] & 64)
+                    {
+                        goto basic_json_parser_15;
+                    }
+                    if (yych <= 'D')
+                    {
+                        if (yych == '.')
+                        {
+                            goto basic_json_parser_37;
+                        }
+                        goto basic_json_parser_14;
+                    }
+                    else
+                    {
+                        if (yych <= 'E')
+                        {
+                            goto basic_json_parser_38;
+                        }
+                        if (yych == 'e')
+                        {
+                            goto basic_json_parser_38;
+                        }
+                        goto basic_json_parser_14;
+                    }
+basic_json_parser_17:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::name_separator;
+                        break;
+                    }
+basic_json_parser_19:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::begin_array;
+                        break;
+                    }
+basic_json_parser_21:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::end_array;
+                        break;
+                    }
+basic_json_parser_23:
+                    yyaccept = 0;
+                    yych = *(m_marker = ++m_cursor);
+                    if (yych == 'a')
+                    {
+                        goto basic_json_parser_39;
+                    }
+                    goto basic_json_parser_5;
+basic_json_parser_24:
+                    yyaccept = 0;
+                    yych = *(m_marker = ++m_cursor);
+                    if (yych == 'u')
+                    {
+                        goto basic_json_parser_40;
+                    }
+                    goto basic_json_parser_5;
+basic_json_parser_25:
+                    yyaccept = 0;
+                    yych = *(m_marker = ++m_cursor);
+                    if (yych == 'r')
+                    {
+                        goto basic_json_parser_41;
+                    }
+                    goto basic_json_parser_5;
+basic_json_parser_26:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::begin_object;
+                        break;
+                    }
+basic_json_parser_28:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::end_object;
+                        break;
+                    }
+basic_json_parser_30:
+                    yyaccept = 0;
+                    yych = *(m_marker = ++m_cursor);
+                    if (yych == 0xBB)
+                    {
+                        goto basic_json_parser_42;
+                    }
+                    goto basic_json_parser_5;
+basic_json_parser_31:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+basic_json_parser_32:
+                    if (yybm[0 + yych] & 128)
+                    {
+                        goto basic_json_parser_31;
+                    }
+                    if (yych <= 0x1F)
+                    {
+                        goto basic_json_parser_33;
+                    }
+                    if (yych <= '"')
+                    {
+                        goto basic_json_parser_34;
+                    }
+                    goto basic_json_parser_36;
+basic_json_parser_33:
+                    m_cursor = m_marker;
+                    if (yyaccept == 0)
+                    {
+                        goto basic_json_parser_5;
+                    }
+                    else
+                    {
+                        goto basic_json_parser_14;
+                    }
+basic_json_parser_34:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::value_string;
+                        break;
+                    }
+basic_json_parser_36:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yych <= 'e')
+                    {
+                        if (yych <= '/')
+                        {
+                            if (yych == '"')
+                            {
+                                goto basic_json_parser_31;
+                            }
+                            if (yych <= '.')
+                            {
+                                goto basic_json_parser_33;
+                            }
+                            goto basic_json_parser_31;
+                        }
+                        else
+                        {
+                            if (yych <= '\\')
+                            {
+                                if (yych <= '[')
+                                {
+                                    goto basic_json_parser_33;
+                                }
+                                goto basic_json_parser_31;
+                            }
+                            else
+                            {
+                                if (yych == 'b')
+                                {
+                                    goto basic_json_parser_31;
+                                }
+                                goto basic_json_parser_33;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        if (yych <= 'q')
+                        {
+                            if (yych <= 'f')
+                            {
+                                goto basic_json_parser_31;
+                            }
+                            if (yych == 'n')
+                            {
+                                goto basic_json_parser_31;
+                            }
+                            goto basic_json_parser_33;
+                        }
+                        else
+                        {
+                            if (yych <= 's')
+                            {
+                                if (yych <= 'r')
+                                {
+                                    goto basic_json_parser_31;
+                                }
+                                goto basic_json_parser_33;
+                            }
+                            else
+                            {
+                                if (yych <= 't')
+                                {
+                                    goto basic_json_parser_31;
+                                }
+                                if (yych <= 'u')
+                                {
+                                    goto basic_json_parser_43;
+                                }
+                                goto basic_json_parser_33;
+                            }
+                        }
+                    }
+basic_json_parser_37:
+                    yych = *++m_cursor;
+                    if (yych <= '/')
+                    {
+                        goto basic_json_parser_33;
+                    }
+                    if (yych <= '9')
+                    {
+                        goto basic_json_parser_44;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_38:
+                    yych = *++m_cursor;
+                    if (yych <= ',')
+                    {
+                        if (yych == '+')
+                        {
+                            goto basic_json_parser_46;
+                        }
+                        goto basic_json_parser_33;
+                    }
+                    else
+                    {
+                        if (yych <= '-')
+                        {
+                            goto basic_json_parser_46;
+                        }
+                        if (yych <= '/')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= '9')
+                        {
+                            goto basic_json_parser_47;
+                        }
+                        goto basic_json_parser_33;
+                    }
+basic_json_parser_39:
+                    yych = *++m_cursor;
+                    if (yych == 'l')
+                    {
+                        goto basic_json_parser_49;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_40:
+                    yych = *++m_cursor;
+                    if (yych == 'l')
+                    {
+                        goto basic_json_parser_50;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_41:
+                    yych = *++m_cursor;
+                    if (yych == 'u')
+                    {
+                        goto basic_json_parser_51;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_42:
+                    yych = *++m_cursor;
+                    if (yych == 0xBF)
+                    {
+                        goto basic_json_parser_52;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_43:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yych <= '@')
+                    {
+                        if (yych <= '/')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= '9')
+                        {
+                            goto basic_json_parser_54;
+                        }
+                        goto basic_json_parser_33;
+                    }
+                    else
+                    {
+                        if (yych <= 'F')
+                        {
+                            goto basic_json_parser_54;
+                        }
+                        if (yych <= '`')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= 'f')
+                        {
+                            goto basic_json_parser_54;
+                        }
+                        goto basic_json_parser_33;
+                    }
+basic_json_parser_44:
+                    yyaccept = 1;
+                    m_marker = ++m_cursor;
+                    if ((m_limit - m_cursor) < 3)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yych <= 'D')
+                    {
+                        if (yych <= '/')
+                        {
+                            goto basic_json_parser_14;
+                        }
+                        if (yych <= '9')
+                        {
+                            goto basic_json_parser_44;
+                        }
+                        goto basic_json_parser_14;
+                    }
+                    else
+                    {
+                        if (yych <= 'E')
+                        {
+                            goto basic_json_parser_38;
+                        }
+                        if (yych == 'e')
+                        {
+                            goto basic_json_parser_38;
+                        }
+                        goto basic_json_parser_14;
+                    }
+basic_json_parser_46:
+                    yych = *++m_cursor;
+                    if (yych <= '/')
+                    {
+                        goto basic_json_parser_33;
+                    }
+                    if (yych >= ':')
+                    {
+                        goto basic_json_parser_33;
+                    }
+basic_json_parser_47:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yych <= '/')
+                    {
+                        goto basic_json_parser_14;
+                    }
+                    if (yych <= '9')
+                    {
+                        goto basic_json_parser_47;
+                    }
+                    goto basic_json_parser_14;
+basic_json_parser_49:
+                    yych = *++m_cursor;
+                    if (yych == 's')
+                    {
+                        goto basic_json_parser_55;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_50:
+                    yych = *++m_cursor;
+                    if (yych == 'l')
+                    {
+                        goto basic_json_parser_56;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_51:
+                    yych = *++m_cursor;
+                    if (yych == 'e')
+                    {
+                        goto basic_json_parser_58;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_52:
+                    ++m_cursor;
+                    {
+                        continue;
+                    }
+basic_json_parser_54:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yych <= '@')
+                    {
+                        if (yych <= '/')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= '9')
+                        {
+                            goto basic_json_parser_60;
+                        }
+                        goto basic_json_parser_33;
+                    }
+                    else
+                    {
+                        if (yych <= 'F')
+                        {
+                            goto basic_json_parser_60;
+                        }
+                        if (yych <= '`')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= 'f')
+                        {
+                            goto basic_json_parser_60;
+                        }
+                        goto basic_json_parser_33;
+                    }
+basic_json_parser_55:
+                    yych = *++m_cursor;
+                    if (yych == 'e')
+                    {
+                        goto basic_json_parser_61;
+                    }
+                    goto basic_json_parser_33;
+basic_json_parser_56:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::literal_null;
+                        break;
+                    }
+basic_json_parser_58:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::literal_true;
+                        break;
+                    }
+basic_json_parser_60:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yych <= '@')
+                    {
+                        if (yych <= '/')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= '9')
+                        {
+                            goto basic_json_parser_63;
+                        }
+                        goto basic_json_parser_33;
+                    }
+                    else
+                    {
+                        if (yych <= 'F')
+                        {
+                            goto basic_json_parser_63;
+                        }
+                        if (yych <= '`')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= 'f')
+                        {
+                            goto basic_json_parser_63;
+                        }
+                        goto basic_json_parser_33;
+                    }
+basic_json_parser_61:
+                    ++m_cursor;
+                    {
+                        last_token_type = token_type::literal_false;
+                        break;
+                    }
+basic_json_parser_63:
+                    ++m_cursor;
+                    if (m_limit <= m_cursor)
+                    {
+                        fill_line_buffer();
+                    }
+                    yych = *m_cursor;
+                    if (yych <= '@')
+                    {
+                        if (yych <= '/')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= '9')
+                        {
+                            goto basic_json_parser_31;
+                        }
+                        goto basic_json_parser_33;
+                    }
+                    else
+                    {
+                        if (yych <= 'F')
+                        {
+                            goto basic_json_parser_31;
+                        }
+                        if (yych <= '`')
+                        {
+                            goto basic_json_parser_33;
+                        }
+                        if (yych <= 'f')
+                        {
+                            goto basic_json_parser_31;
+                        }
+                        goto basic_json_parser_33;
+                    }
+                }
+
+            }
+
+            return last_token_type;
+        }
+
+        /*!
+        @brief append data from the stream to the line buffer
+
+        This function is called by the scan() function when the end of the
+        buffer (`m_limit`) is reached and the `m_cursor` pointer cannot be
+        incremented without leaving the limits of the line buffer. Note re2c
+        decides when to call this function.
+
+        If the lexer reads from contiguous storage, there is no trailing null
+        byte. Therefore, this function must make sure to add these padding
+        null bytes.
+
+        If the lexer reads from an input stream, this function reads the next
+        line of the input.
+
+        @pre
+            p p p p p p u u u u u x . . . . . .
+            ^           ^       ^   ^
+            m_content   m_start |   m_limit
+                                m_cursor
+
+        @post
+            u u u u u x x x x x x x . . . . . .
+            ^       ^               ^
+            |       m_cursor        m_limit
+            m_start
+            m_content
+        */
+        void fill_line_buffer()
+        {
+            // number of processed characters (p)
+            const auto offset_start = m_start - m_content;
+            // offset for m_marker wrt. to m_start
+            const auto offset_marker = (m_marker == nullptr) ? 0 : m_marker - m_start;
+            // number of unprocessed characters (u)
+            const auto offset_cursor = m_cursor - m_start;
+
+            // no stream is used or end of file is reached
+            if (m_stream == nullptr or not * m_stream)
+            {
+                // copy unprocessed characters to line buffer
+                m_line_buffer.clear();
+                for (m_cursor = m_start; m_cursor != m_limit; ++m_cursor)
+                {
+                    m_line_buffer.append(1, static_cast<const char>(*m_cursor));
+                }
+
+                // append 5 characters (size of longest keyword "false") to
+                // make sure that there is sufficient space between m_cursor
+                // and m_limit
+                m_line_buffer.append(5, '\0');
+            }
+            else
+            {
+                // delete processed characters from line buffer
+                m_line_buffer.erase(0, static_cast<size_t>(offset_start));
+                // read next line from input stream
+                std::string line;
+                std::getline(*m_stream, line);
+                // add line with newline symbol to the line buffer
+                m_line_buffer += "\n" + line;
+            }
+
+            // set pointers
+            m_content = reinterpret_cast<const lexer_char_t*>(m_line_buffer.c_str());
+            assert(m_content != nullptr);
+            m_start  = m_content;
+            m_marker = m_start + offset_marker;
+            m_cursor = m_start + offset_cursor;
+            m_limit  = m_start + m_line_buffer.size();
+        }
+
+        /// return string representation of last read token
+        string_t get_token_string() const
+        {
+            assert(m_start != nullptr);
+            return string_t(reinterpret_cast<typename string_t::const_pointer>(m_start),
+                            static_cast<size_t>(m_cursor - m_start));
+        }
+
+        /*!
+        @brief return string value for string tokens
+
+        The function iterates the characters between the opening and closing
+        quotes of the string value. The complete string is the range
+        [m_start,m_cursor). Consequently, we iterate from m_start+1 to
+        m_cursor-1.
+
+        We differentiate two cases:
+
+        1. Escaped characters. In this case, a new character is constructed
+           according to the nature of the escape. Some escapes create new
+           characters (e.g., `"\\n"` is replaced by `"\n"`), some are copied
+           as is (e.g., `"\\\\"`). Furthermore, Unicode escapes of the shape
+           `"\\uxxxx"` need special care. In this case, to_unicode takes care
+           of the construction of the values.
+        2. Unescaped characters are copied as is.
+
+        @pre `m_cursor - m_start >= 2`, meaning the length of the last token
+        is at least 2 bytes which is trivially true for any string (which
+        consists of at least two quotes).
+
+            " c1 c2 c3 ... "
+            ^                ^
+            m_start          m_cursor
+
+        @complexity Linear in the length of the string.\n
+
+        Lemma: The loop body will always terminate.\n
+
+        Proof (by contradiction): Assume the loop body does not terminate. As
+        the loop body does not contain another loop, one of the called
+        functions must never return. The called functions are `std::strtoul`
+        and to_unicode. Neither function can loop forever, so the loop body
+        will never loop forever which contradicts the assumption that the loop
+        body does not terminate, q.e.d.\n
+
+        Lemma: The loop condition for the for loop is eventually false.\n
+
+        Proof (by contradiction): Assume the loop does not terminate. Due to
+        the above lemma, this can only be due to a tautological loop
+        condition; that is, the loop condition i < m_cursor - 1 must always be
+        true. Let x be the change of i for any loop iteration. Then
+        m_start + 1 + x < m_cursor - 1 must hold to loop indefinitely. This
+        can be rephrased to m_cursor - m_start - 2 > x. With the
+        precondition, we x <= 0, meaning that the loop condition holds
+        indefinitly if i is always decreased. However, observe that the value
+        of i is strictly increasing with each iteration, as it is incremented
+        by 1 in the iteration expression and never decremented inside the loop
+        body. Hence, the loop condition will eventually be false which
+        contradicts the assumption that the loop condition is a tautology,
+        q.e.d.
+
+        @return string value of current token without opening and closing
+        quotes
+        @throw std::out_of_range if to_unicode fails
+        */
+        string_t get_string() const
+        {
+            assert(m_cursor - m_start >= 2);
+
+            string_t result;
+            result.reserve(static_cast<size_t>(m_cursor - m_start - 2));
+
+            // iterate the result between the quotes
+            for (const lexer_char_t* i = m_start + 1; i < m_cursor - 1; ++i)
+            {
+                // process escaped characters
+                if (*i == '\\')
+                {
+                    // read next character
+                    ++i;
+
+                    switch (*i)
+                    {
+                        // the default escapes
+                        case 't':
+                        {
+                            result += "\t";
+                            break;
+                        }
+                        case 'b':
+                        {
+                            result += "\b";
+                            break;
+                        }
+                        case 'f':
+                        {
+                            result += "\f";
+                            break;
+                        }
+                        case 'n':
+                        {
+                            result += "\n";
+                            break;
+                        }
+                        case 'r':
+                        {
+                            result += "\r";
+                            break;
+                        }
+                        case '\\':
+                        {
+                            result += "\\";
+                            break;
+                        }
+                        case '/':
+                        {
+                            result += "/";
+                            break;
+                        }
+                        case '"':
+                        {
+                            result += "\"";
+                            break;
+                        }
+
+                        // unicode
+                        case 'u':
+                        {
+                            // get code xxxx from uxxxx
+                            auto codepoint = std::strtoul(std::string(reinterpret_cast<typename string_t::const_pointer>(i + 1),
+                                                          4).c_str(), nullptr, 16);
+
+                            // check if codepoint is a high surrogate
+                            if (codepoint >= 0xD800 and codepoint <= 0xDBFF)
+                            {
+                                // make sure there is a subsequent unicode
+                                if ((i + 6 >= m_limit) or * (i + 5) != '\\' or * (i + 6) != 'u')
+                                {
+                                    throw std::invalid_argument("missing low surrogate");
+                                }
+
+                                // get code yyyy from uxxxx\uyyyy
+                                auto codepoint2 = std::strtoul(std::string(reinterpret_cast<typename string_t::const_pointer>
+                                                               (i + 7), 4).c_str(), nullptr, 16);
+                                result += to_unicode(codepoint, codepoint2);
+                                // skip the next 10 characters (xxxx\uyyyy)
+                                i += 10;
+                            }
+                            else
+                            {
+                                // add unicode character(s)
+                                result += to_unicode(codepoint);
+                                // skip the next four characters (xxxx)
+                                i += 4;
+                            }
+                            break;
+                        }
+                    }
+                }
+                else
+                {
+                    // all other characters are just copied to the end of the
+                    // string
+                    result.append(1, static_cast<typename string_t::value_type>(*i));
+                }
+            }
+
+            return result;
+        }
+
+        /*!
+        @brief parse floating point number
+
+        This function (and its overloads) serves to select the most approprate
+        standard floating point number parsing function based on the type
+        supplied via the first parameter.  Set this to @a
+        static_cast<number_float_t*>(nullptr).
+
+        @param[in] type  the @ref number_float_t in use
+
+        @param[in,out] endptr recieves a pointer to the first character after
+        the number
+
+        @return the floating point number
+        */
+        long double str_to_float_t(long double* /* type */, char** endptr) const
+        {
+            return std::strtold(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr);
+        }
+
+        /*!
+        @brief parse floating point number
+
+        This function (and its overloads) serves to select the most approprate
+        standard floating point number parsing function based on the type
+        supplied via the first parameter.  Set this to @a
+        static_cast<number_float_t*>(nullptr).
+
+        @param[in] type  the @ref number_float_t in use
+
+        @param[in,out] endptr  recieves a pointer to the first character after
+        the number
+
+        @return the floating point number
+        */
+        double str_to_float_t(double* /* type */, char** endptr) const
+        {
+            return std::strtod(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr);
+        }
+
+        /*!
+        @brief parse floating point number
+
+        This function (and its overloads) serves to select the most approprate
+        standard floating point number parsing function based on the type
+        supplied via the first parameter.  Set this to @a
+        static_cast<number_float_t*>(nullptr).
+
+        @param[in] type  the @ref number_float_t in use
+
+        @param[in,out] endptr  recieves a pointer to the first character after
+        the number
+
+        @return the floating point number
+        */
+        float str_to_float_t(float* /* type */, char** endptr) const
+        {
+            return std::strtof(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr);
+        }
+
+        /*!
+        @brief return number value for number tokens
+
+        This function translates the last token into the most appropriate
+        number type (either integer, unsigned integer or floating point),
+        which is passed back to the caller via the result parameter.
+
+        This function parses the integer component up to the radix point or
+        exponent while collecting information about the 'floating point
+        representation', which it stores in the result parameter. If there is
+        no radix point or exponent, and the number can fit into a @ref
+        number_integer_t or @ref number_unsigned_t then it sets the result
+        parameter accordingly.
+
+        If the number is a floating point number the number is then parsed
+        using @a std:strtod (or @a std:strtof or @a std::strtold).
+
+        @param[out] result  @ref basic_json object to receive the number, or
+        NAN if the conversion read past the current token. The latter case
+        needs to be treated by the caller function.
+        */
+        void get_number(basic_json& result) const
+        {
+            assert(m_start != nullptr);
+
+            const lexer::lexer_char_t* curptr = m_start;
+
+            // accumulate the integer conversion result (unsigned for now)
+            number_unsigned_t value = 0;
+
+            // maximum absolute value of the relevant integer type
+            number_unsigned_t max;
+
+            // temporarily store the type to avoid unecessary bitfield access
+            value_t type;
+
+            // look for sign
+            if (*curptr == '-')
+            {
+                type = value_t::number_integer;
+                max = static_cast<uint64_t>((std::numeric_limits<number_integer_t>::max)()) + 1;
+                curptr++;
+            }
+            else
+            {
+                type = value_t::number_unsigned;
+                max = static_cast<uint64_t>((std::numeric_limits<number_unsigned_t>::max)());
+            }
+
+            // count the significant figures
+            for (; curptr < m_cursor; curptr++)
+            {
+                // quickly skip tests if a digit
+                if (*curptr < '0' || *curptr > '9')
+                {
+                    if (*curptr == '.')
+                    {
+                        // don't count '.' but change to float
+                        type = value_t::number_float;
+                        continue;
+                    }
+                    // assume exponent (if not then will fail parse): change to
+                    // float, stop counting and record exponent details
+                    type = value_t::number_float;
+                    break;
+                }
+
+                // skip if definitely not an integer
+                if (type != value_t::number_float)
+                {
+                    // multiply last value by ten and add the new digit
+                    auto temp = value * 10 + *curptr - '0';
+
+                    // test for overflow
+                    if (temp < value || temp > max)
+                    {
+                        // overflow
+                        type = value_t::number_float;
+                    }
+                    else
+                    {
+                        // no overflow - save it
+                        value = temp;
+                    }
+                }
+            }
+
+            // save the value (if not a float)
+            if (type == value_t::number_unsigned)
+            {
+                result.m_value.number_unsigned = value;
+            }
+            else if (type == value_t::number_integer)
+            {
+                result.m_value.number_integer = -static_cast<number_integer_t>(value);
+            }
+            else
+            {
+                // parse with strtod
+                result.m_value.number_float = str_to_float_t(static_cast<number_float_t*>(nullptr), NULL);
+            }
+
+            // save the type
+            result.m_type = type;
+        }
+
+      private:
+        /// optional input stream
+        std::istream* m_stream = nullptr;
+        /// line buffer buffer for m_stream
+        string_t m_line_buffer {};
+        /// the buffer pointer
+        const lexer_char_t* m_content = nullptr;
+        /// pointer to the beginning of the current symbol
+        const lexer_char_t* m_start = nullptr;
+        /// pointer for backtracking information
+        const lexer_char_t* m_marker = nullptr;
+        /// pointer to the current symbol
+        const lexer_char_t* m_cursor = nullptr;
+        /// pointer to the end of the buffer
+        const lexer_char_t* m_limit = nullptr;
+        /// the last token type
+        token_type last_token_type = token_type::end_of_input;
+    };
+
+    /*!
+    @brief syntax analysis
+
+    This class implements a recursive decent parser.
+    */
+    class parser
+    {
+      public:
+        /// a parser reading from a string literal
+        parser(const char* buff, const parser_callback_t cb = nullptr)
+            : callback(cb),
+              m_lexer(reinterpret_cast<const typename lexer::lexer_char_t*>(buff), strlen(buff))
+        {}
+
+        /// a parser reading from an input stream
+        parser(std::istream& is, const parser_callback_t cb = nullptr)
+            : callback(cb), m_lexer(is)
+        {}
+
+        /// a parser reading from an iterator range with contiguous storage
+        template<class IteratorType, typename std::enable_if<
+                     std::is_same<typename std::iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value
+                     , int>::type
+                 = 0>
+        parser(IteratorType first, IteratorType last, const parser_callback_t cb = nullptr)
+            : callback(cb),
+              m_lexer(reinterpret_cast<const typename lexer::lexer_char_t*>(&(*first)),
+                      static_cast<size_t>(std::distance(first, last)))
+        {}
+
+        /// public parser interface
+        basic_json parse()
+        {
+            // read first token
+            get_token();
+
+            basic_json result = parse_internal(true);
+            result.assert_invariant();
+
+            expect(lexer::token_type::end_of_input);
+
+            // return parser result and replace it with null in case the
+            // top-level value was discarded by the callback function
+            return result.is_discarded() ? basic_json() : std::move(result);
+        }
+
+      private:
+        /// the actual parser
+        basic_json parse_internal(bool keep)
+        {
+            auto result = basic_json(value_t::discarded);
+
+            switch (last_token)
+            {
+                case lexer::token_type::begin_object:
+                {
+                    if (keep and (not callback
+                                  or ((keep = callback(depth++, parse_event_t::object_start, result)) != 0)))
+                    {
+                        // explicitly set result to object to cope with {}
+                        result.m_type = value_t::object;
+                        result.m_value = value_t::object;
+                    }
+
+                    // read next token
+                    get_token();
+
+                    // closing } -> we are done
+                    if (last_token == lexer::token_type::end_object)
+                    {
+                        get_token();
+                        if (keep and callback and not callback(--depth, parse_event_t::object_end, result))
+                        {
+                            result = basic_json(value_t::discarded);
+                        }
+                        return result;
+                    }
+
+                    // no comma is expected here
+                    unexpect(lexer::token_type::value_separator);
+
+                    // otherwise: parse key-value pairs
+                    do
+                    {
+                        // ugly, but could be fixed with loop reorganization
+                        if (last_token == lexer::token_type::value_separator)
+                        {
+                            get_token();
+                        }
+
+                        // store key
+                        expect(lexer::token_type::value_string);
+                        const auto key = m_lexer.get_string();
+
+                        bool keep_tag = false;
+                        if (keep)
+                        {
+                            if (callback)
+                            {
+                                basic_json k(key);
+                                keep_tag = callback(depth, parse_event_t::key, k);
+                            }
+                            else
+                            {
+                                keep_tag = true;
+                            }
+                        }
+
+                        // parse separator (:)
+                        get_token();
+                        expect(lexer::token_type::name_separator);
+
+                        // parse and add value
+                        get_token();
+                        auto value = parse_internal(keep);
+                        if (keep and keep_tag and not value.is_discarded())
+                        {
+                            result[key] = std::move(value);
+                        }
+                    }
+                    while (last_token == lexer::token_type::value_separator);
+
+                    // closing }
+                    expect(lexer::token_type::end_object);
+                    get_token();
+                    if (keep and callback and not callback(--depth, parse_event_t::object_end, result))
+                    {
+                        result = basic_json(value_t::discarded);
+                    }
+
+                    return result;
+                }
+
+                case lexer::token_type::begin_array:
+                {
+                    if (keep and (not callback
+                                  or ((keep = callback(depth++, parse_event_t::array_start, result)) != 0)))
+                    {
+                        // explicitly set result to object to cope with []
+                        result.m_type = value_t::array;
+                        result.m_value = value_t::array;
+                    }
+
+                    // read next token
+                    get_token();
+
+                    // closing ] -> we are done
+                    if (last_token == lexer::token_type::end_array)
+                    {
+                        get_token();
+                        if (callback and not callback(--depth, parse_event_t::array_end, result))
+                        {
+                            result = basic_json(value_t::discarded);
+                        }
+                        return result;
+                    }
+
+                    // no comma is expected here
+                    unexpect(lexer::token_type::value_separator);
+
+                    // otherwise: parse values
+                    do
+                    {
+                        // ugly, but could be fixed with loop reorganization
+                        if (last_token == lexer::token_type::value_separator)
+                        {
+                            get_token();
+                        }
+
+                        // parse value
+                        auto value = parse_internal(keep);
+                        if (keep and not value.is_discarded())
+                        {
+                            result.push_back(std::move(value));
+                        }
+                    }
+                    while (last_token == lexer::token_type::value_separator);
+
+                    // closing ]
+                    expect(lexer::token_type::end_array);
+                    get_token();
+                    if (keep and callback and not callback(--depth, parse_event_t::array_end, result))
+                    {
+                        result = basic_json(value_t::discarded);
+                    }
+
+                    return result;
+                }
+
+                case lexer::token_type::literal_null:
+                {
+                    get_token();
+                    result.m_type = value_t::null;
+                    break;
+                }
+
+                case lexer::token_type::value_string:
+                {
+                    const auto s = m_lexer.get_string();
+                    get_token();
+                    result = basic_json(s);
+                    break;
+                }
+
+                case lexer::token_type::literal_true:
+                {
+                    get_token();
+                    result.m_type = value_t::boolean;
+                    result.m_value = true;
+                    break;
+                }
+
+                case lexer::token_type::literal_false:
+                {
+                    get_token();
+                    result.m_type = value_t::boolean;
+                    result.m_value = false;
+                    break;
+                }
+
+                case lexer::token_type::value_number:
+                {
+                    m_lexer.get_number(result);
+                    get_token();
+                    break;
+                }
+
+                default:
+                {
+                    // the last token was unexpected
+                    unexpect(last_token);
+                }
+            }
+
+            if (keep and callback and not callback(depth, parse_event_t::value, result))
+            {
+                result = basic_json(value_t::discarded);
+            }
+            return result;
+        }
+
+        /// get next token from lexer
+        typename lexer::token_type get_token()
+        {
+            last_token = m_lexer.scan();
+            return last_token;
+        }
+
+        void expect(typename lexer::token_type t) const
+        {
+            if (t != last_token)
+            {
+                std::string error_msg = "parse error - unexpected ";
+                error_msg += (last_token == lexer::token_type::parse_error ? ("'" +  m_lexer.get_token_string() +
+                              "'") :
+                              lexer::token_type_name(last_token));
+                error_msg += "; expected " + lexer::token_type_name(t);
+                throw std::invalid_argument(error_msg);
+            }
+        }
+
+        void unexpect(typename lexer::token_type t) const
+        {
+            if (t == last_token)
+            {
+                std::string error_msg = "parse error - unexpected ";
+                error_msg += (last_token == lexer::token_type::parse_error ? ("'" +  m_lexer.get_token_string() +
+                              "'") :
+                              lexer::token_type_name(last_token));
+                throw std::invalid_argument(error_msg);
+            }
+        }
+
+      private:
+        /// current level of recursion
+        int depth = 0;
+        /// callback function
+        const parser_callback_t callback = nullptr;
+        /// the type of the last read token
+        typename lexer::token_type last_token = lexer::token_type::uninitialized;
+        /// the lexer
+        lexer m_lexer;
+    };
+
+  public:
+    /*!
+    @brief JSON Pointer
+
+    A JSON pointer defines a string syntax for identifying a specific value
+    within a JSON document. It can be used with functions `at` and
+    `operator[]`. Furthermore, JSON pointers are the base for JSON patches.
+
+    @sa [RFC 6901](https://tools.ietf.org/html/rfc6901)
+
+    @since version 2.0.0
+    */
+    class json_pointer
+    {
+        /// allow basic_json to access private members
+        friend class basic_json;
+
+      public:
+        /*!
+        @brief create JSON pointer
+
+        Create a JSON pointer according to the syntax described in
+        [Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3).
+
+        @param[in] s  string representing the JSON pointer; if omitted, the
+                      empty string is assumed which references the whole JSON
+                      value
+
+        @throw std::domain_error if reference token is nonempty and does not
+        begin with a slash (`/`); example: `"JSON pointer must be empty or
+        begin with /"`
+        @throw std::domain_error if a tilde (`~`) is not followed by `0`
+        (representing `~`) or `1` (representing `/`); example: `"escape error:
+        ~ must be followed with 0 or 1"`
+
+        @liveexample{The example shows the construction several valid JSON
+        pointers as well as the exceptional behavior.,json_pointer}
+
+        @since version 2.0.0
+        */
+        explicit json_pointer(const std::string& s = "")
+            : reference_tokens(split(s))
+        {}
+
+        /*!
+        @brief return a string representation of the JSON pointer
+
+        @invariant For each JSON pointer `ptr`, it holds:
+        @code {.cpp}
+        ptr == json_pointer(ptr.to_string());
+        @endcode
+
+        @return a string representation of the JSON pointer
+
+        @liveexample{The example shows the result of `to_string`.,
+        json_pointer__to_string}
+
+        @since version 2.0.0
+        */
+        std::string to_string() const noexcept
+        {
+            return std::accumulate(reference_tokens.begin(),
+                                   reference_tokens.end(), std::string{},
+                                   [](const std::string & a, const std::string & b)
+            {
+                return a + "/" + escape(b);
+            });
+        }
+
+        /// @copydoc to_string()
+        operator std::string() const
+        {
+            return to_string();
+        }
+
+      private:
+        /// remove and return last reference pointer
+        std::string pop_back()
+        {
+            if (is_root())
+            {
+                throw std::domain_error("JSON pointer has no parent");
+            }
+
+            auto last = reference_tokens.back();
+            reference_tokens.pop_back();
+            return last;
+        }
+
+        /// return whether pointer points to the root document
+        bool is_root() const
+        {
+            return reference_tokens.empty();
+        }
+
+        json_pointer top() const
+        {
+            if (is_root())
+            {
+                throw std::domain_error("JSON pointer has no parent");
+            }
+
+            json_pointer result = *this;
+            result.reference_tokens = {reference_tokens[0]};
+            return result;
+        }
+
+        /*!
+        @brief create and return a reference to the pointed to value
+
+        @complexity Linear in the number of reference tokens.
+        */
+        reference get_and_create(reference j) const
+        {
+            pointer result = &j;
+
+            // in case no reference tokens exist, return a reference to the
+            // JSON value j which will be overwritten by a primitive value
+            for (const auto& reference_token : reference_tokens)
+            {
+                switch (result->m_type)
+                {
+                    case value_t::null:
+                    {
+                        if (reference_token == "0")
+                        {
+                            // start a new array if reference token is 0
+                            result = &result->operator[](0);
+                        }
+                        else
+                        {
+                            // start a new object otherwise
+                            result = &result->operator[](reference_token);
+                        }
+                        break;
+                    }
+
+                    case value_t::object:
+                    {
+                        // create an entry in the object
+                        result = &result->operator[](reference_token);
+                        break;
+                    }
+
+                    case value_t::array:
+                    {
+                        // create an entry in the array
+                        result = &result->operator[](static_cast<size_type>(std::stoi(reference_token)));
+                        break;
+                    }
+
+                    /*
+                    The following code is only reached if there exists a
+                    reference token _and_ the current value is primitive. In
+                    this case, we have an error situation, because primitive
+                    values may only occur as single value; that is, with an
+                    empty list of reference tokens.
+                    */
+                    default:
+                    {
+                        throw std::domain_error("invalid value to unflatten");
+                    }
+                }
+            }
+
+            return *result;
+        }
+
+        /*!
+        @brief return a reference to the pointed to value
+
+        @param[in] ptr  a JSON value
+
+        @return reference to the JSON value pointed to by the JSON pointer
+
+        @complexity Linear in the length of the JSON pointer.
+
+        @throw std::out_of_range      if the JSON pointer can not be resolved
+        @throw std::domain_error      if an array index begins with '0'
+        @throw std::invalid_argument  if an array index was not a number
+        */
+        reference get_unchecked(pointer ptr) const
+        {
+            for (const auto& reference_token : reference_tokens)
+            {
+                switch (ptr->m_type)
+                {
+                    case value_t::object:
+                    {
+                        // use unchecked object access
+                        ptr = &ptr->operator[](reference_token);
+                        break;
+                    }
+
+                    case value_t::array:
+                    {
+                        // error condition (cf. RFC 6901, Sect. 4)
+                        if (reference_token.size() > 1 and reference_token[0] == '0')
+                        {
+                            throw std::domain_error("array index must not begin with '0'");
+                        }
+
+                        if (reference_token == "-")
+                        {
+                            // explicityly treat "-" as index beyond the end
+                            ptr = &ptr->operator[](ptr->m_value.array->size());
+                        }
+                        else
+                        {
+                            // convert array index to number; unchecked access
+                            ptr = &ptr->operator[](static_cast<size_type>(std::stoi(reference_token)));
+                        }
+                        break;
+                    }
+
+                    default:
+                    {
+                        throw std::out_of_range("unresolved reference token '" + reference_token + "'");
+                    }
+                }
+            }
+
+            return *ptr;
+        }
+
+        reference get_checked(pointer ptr) const
+        {
+            for (const auto& reference_token : reference_tokens)
+            {
+                switch (ptr->m_type)
+                {
+                    case value_t::object:
+                    {
+                        // note: at performs range check
+                        ptr = &ptr->at(reference_token);
+                        break;
+                    }
+
+                    case value_t::array:
+                    {
+                        if (reference_token == "-")
+                        {
+                            // "-" always fails the range check
+                            throw std::out_of_range("array index '-' (" +
+                                                    std::to_string(ptr->m_value.array->size()) +
+                                                    ") is out of range");
+                        }
+
+                        // error condition (cf. RFC 6901, Sect. 4)
+                        if (reference_token.size() > 1 and reference_token[0] == '0')
+                        {
+                            throw std::domain_error("array index must not begin with '0'");
+                        }
+
+                        // note: at performs range check
+                        ptr = &ptr->at(static_cast<size_type>(std::stoi(reference_token)));
+                        break;
+                    }
+
+                    default:
+                    {
+                        throw std::out_of_range("unresolved reference token '" + reference_token + "'");
+                    }
+                }
+            }
+
+            return *ptr;
+        }
+
+        /*!
+        @brief return a const reference to the pointed to value
+
+        @param[in] ptr  a JSON value
+
+        @return const reference to the JSON value pointed to by the JSON
+                pointer
+        */
+        const_reference get_unchecked(const_pointer ptr) const
+        {
+            for (const auto& reference_token : reference_tokens)
+            {
+                switch (ptr->m_type)
+                {
+                    case value_t::object:
+                    {
+                        // use unchecked object access
+                        ptr = &ptr->operator[](reference_token);
+                        break;
+                    }
+
+                    case value_t::array:
+                    {
+                        if (reference_token == "-")
+                        {
+                            // "-" cannot be used for const access
+                            throw std::out_of_range("array index '-' (" +
+                                                    std::to_string(ptr->m_value.array->size()) +
+                                                    ") is out of range");
+                        }
+
+                        // error condition (cf. RFC 6901, Sect. 4)
+                        if (reference_token.size() > 1 and reference_token[0] == '0')
+                        {
+                            throw std::domain_error("array index must not begin with '0'");
+                        }
+
+                        // use unchecked array access
+                        ptr = &ptr->operator[](static_cast<size_type>(std::stoi(reference_token)));
+                        break;
+                    }
+
+                    default:
+                    {
+                        throw std::out_of_range("unresolved reference token '" + reference_token + "'");
+                    }
+                }
+            }
+
+            return *ptr;
+        }
+
+        const_reference get_checked(const_pointer ptr) const
+        {
+            for (const auto& reference_token : reference_tokens)
+            {
+                switch (ptr->m_type)
+                {
+                    case value_t::object:
+                    {
+                        // note: at performs range check
+                        ptr = &ptr->at(reference_token);
+                        break;
+                    }
+
+                    case value_t::array:
+                    {
+                        if (reference_token == "-")
+                        {
+                            // "-" always fails the range check
+                            throw std::out_of_range("array index '-' (" +
+                                                    std::to_string(ptr->m_value.array->size()) +
+                                                    ") is out of range");
+                        }
+
+                        // error condition (cf. RFC 6901, Sect. 4)
+                        if (reference_token.size() > 1 and reference_token[0] == '0')
+                        {
+                            throw std::domain_error("array index must not begin with '0'");
+                        }
+
+                        // note: at performs range check
+                        ptr = &ptr->at(static_cast<size_type>(std::stoi(reference_token)));
+                        break;
+                    }
+
+                    default:
+                    {
+                        throw std::out_of_range("unresolved reference token '" + reference_token + "'");
+                    }
+                }
+            }
+
+            return *ptr;
+        }
+
+        /// split the string input to reference tokens
+        static std::vector<std::string> split(const std::string& reference_string)
+        {
+            std::vector<std::string> result;
+
+            // special case: empty reference string -> no reference tokens
+            if (reference_string.empty())
+            {
+                return result;
+            }
+
+            // check if nonempty reference string begins with slash
+            if (reference_string[0] != '/')
+            {
+                throw std::domain_error("JSON pointer must be empty or begin with '/'");
+            }
+
+            // extract the reference tokens:
+            // - slash: position of the last read slash (or end of string)
+            // - start: position after the previous slash
+            for (
+                // search for the first slash after the first character
+                size_t slash = reference_string.find_first_of("/", 1),
+                // set the beginning of the first reference token
+                start = 1;
+                // we can stop if start == string::npos+1 = 0
+                start != 0;
+                // set the beginning of the next reference token
+                // (will eventually be 0 if slash == std::string::npos)
+                start = slash + 1,
+                // find next slash
+                slash = reference_string.find_first_of("/", start))
+            {
+                // use the text between the beginning of the reference token
+                // (start) and the last slash (slash).
+                auto reference_token = reference_string.substr(start, slash - start);
+
+                // check reference tokens are properly escaped
+                for (size_t pos = reference_token.find_first_of("~");
+                        pos != std::string::npos;
+                        pos = reference_token.find_first_of("~", pos + 1))
+                {
+                    assert(reference_token[pos] == '~');
+
+                    // ~ must be followed by 0 or 1
+                    if (pos == reference_token.size() - 1 or
+                            (reference_token[pos + 1] != '0' and
+                             reference_token[pos + 1] != '1'))
+                    {
+                        throw std::domain_error("escape error: '~' must be followed with '0' or '1'");
+                    }
+                }
+
+                // finally, store the reference token
+                unescape(reference_token);
+                result.push_back(reference_token);
+            }
+
+            return result;
+        }
+
+      private:
+        /*!
+        @brief replace all occurrences of a substring by another string
+
+        @param[in,out] s  the string to manipulate
+        @param[in]     f  the substring to replace with @a t
+        @param[in]     t  the string to replace @a f
+
+        @return The string @a s where all occurrences of @a f are replaced
+                with @a t.
+
+        @pre The search string @a f must not be empty.
+
+        @since version 2.0.0
+        */
+        static void replace_substring(std::string& s,
+                                      const std::string& f,
+                                      const std::string& t)
+        {
+            assert(not f.empty());
+
+            for (
+                size_t pos = s.find(f);         // find first occurrence of f
+                pos != std::string::npos;       // make sure f was found
+                s.replace(pos, f.size(), t),    // replace with t
+                pos = s.find(f, pos + t.size()) // find next occurrence of f
+            );
+        }
+
+        /// escape tilde and slash
+        static std::string escape(std::string s)
+        {
+            // escape "~"" to "~0" and "/" to "~1"
+            replace_substring(s, "~", "~0");
+            replace_substring(s, "/", "~1");
+            return s;
+        }
+
+        /// unescape tilde and slash
+        static void unescape(std::string& s)
+        {
+            // first transform any occurrence of the sequence '~1' to '/'
+            replace_substring(s, "~1", "/");
+            // then transform any occurrence of the sequence '~0' to '~'
+            replace_substring(s, "~0", "~");
+        }
+
+        /*!
+        @param[in] reference_string  the reference string to the current value
+        @param[in] value             the value to consider
+        @param[in,out] result        the result object to insert values to
+
+        @note Empty objects or arrays are flattened to `null`.
+        */
+        static void flatten(const std::string& reference_string,
+                            const basic_json& value,
+                            basic_json& result)
+        {
+            switch (value.m_type)
+            {
+                case value_t::array:
+                {
+                    if (value.m_value.array->empty())
+                    {
+                        // flatten empty array as null
+                        result[reference_string] = nullptr;
+                    }
+                    else
+                    {
+                        // iterate array and use index as reference string
+                        for (size_t i = 0; i < value.m_value.array->size(); ++i)
+                        {
+                            flatten(reference_string + "/" + std::to_string(i),
+                                    value.m_value.array->operator[](i), result);
+                        }
+                    }
+                    break;
+                }
+
+                case value_t::object:
+                {
+                    if (value.m_value.object->empty())
+                    {
+                        // flatten empty object as null
+                        result[reference_string] = nullptr;
+                    }
+                    else
+                    {
+                        // iterate object and use keys as reference string
+                        for (const auto& element : *value.m_value.object)
+                        {
+                            flatten(reference_string + "/" + escape(element.first),
+                                    element.second, result);
+                        }
+                    }
+                    break;
+                }
+
+                default:
+                {
+                    // add primitive value with its reference string
+                    result[reference_string] = value;
+                    break;
+                }
+            }
+        }
+
+        /*!
+        @param[in] value  flattened JSON
+
+        @return unflattened JSON
+        */
+        static basic_json unflatten(const basic_json& value)
+        {
+            if (not value.is_object())
+            {
+                throw std::domain_error("only objects can be unflattened");
+            }
+
+            basic_json result;
+
+            // iterate the JSON object values
+            for (const auto& element : *value.m_value.object)
+            {
+                if (not element.second.is_primitive())
+                {
+                    throw std::domain_error("values in object must be primitive");
+                }
+
+                // assign value to reference pointed to by JSON pointer; Note
+                // that if the JSON pointer is "" (i.e., points to the whole
+                // value), function get_and_create returns a reference to
+                // result itself. An assignment will then create a primitive
+                // value.
+                json_pointer(element.first).get_and_create(result) = element.second;
+            }
+
+            return result;
+        }
+
+      private:
+        /// the reference tokens
+        std::vector<std::string> reference_tokens {};
+    };
+
+    //////////////////////////
+    // JSON Pointer support //
+    //////////////////////////
+
+    /// @name JSON Pointer functions
+    /// @{
+
+    /*!
+    @brief access specified element via JSON Pointer
+
+    Uses a JSON pointer to retrieve a reference to the respective JSON value.
+    No bound checking is performed. Similar to @ref operator[](const typename
+    object_t::key_type&), `null` values are created in arrays and objects if
+    necessary.
+
+    In particular:
+    - If the JSON pointer points to an object key that does not exist, it
+      is created an filled with a `null` value before a reference to it
+      is returned.
+    - If the JSON pointer points to an array index that does not exist, it
+      is created an filled with a `null` value before a reference to it
+      is returned. All indices between the current maximum and the given
+      index are also filled with `null`.
+    - The special value `-` is treated as a synonym for the index past the
+      end.
+
+    @param[in] ptr  a JSON pointer
+
+    @return reference to the element pointed to by @a ptr
+
+    @complexity Constant.
+
+    @throw std::out_of_range      if the JSON pointer can not be resolved
+    @throw std::domain_error      if an array index begins with '0'
+    @throw std::invalid_argument  if an array index was not a number
+
+    @liveexample{The behavior is shown in the example.,operatorjson_pointer}
+
+    @since version 2.0.0
+    */
+    reference operator[](const json_pointer& ptr)
+    {
+        return ptr.get_unchecked(this);
+    }
+
+    /*!
+    @brief access specified element via JSON Pointer
+
+    Uses a JSON pointer to retrieve a reference to the respective JSON value.
+    No bound checking is performed. The function does not change the JSON
+    value; no `null` values are created. In particular, the the special value
+    `-` yields an exception.
+
+    @param[in] ptr  JSON pointer to the desired element
+
+    @return const reference to the element pointed to by @a ptr
+
+    @complexity Constant.
+
+    @throw std::out_of_range      if the JSON pointer can not be resolved
+    @throw std::domain_error      if an array index begins with '0'
+    @throw std::invalid_argument  if an array index was not a number
+
+    @liveexample{The behavior is shown in the example.,operatorjson_pointer_const}
+
+    @since version 2.0.0
+    */
+    const_reference operator[](const json_pointer& ptr) const
+    {
+        return ptr.get_unchecked(this);
+    }
+
+    /*!
+    @brief access specified element via JSON Pointer
+
+    Returns a reference to the element at with specified JSON pointer @a ptr,
+    with bounds checking.
+
+    @param[in] ptr  JSON pointer to the desired element
+
+    @return reference to the element pointed to by @a ptr
+
+    @complexity Constant.
+
+    @throw std::out_of_range      if the JSON pointer can not be resolved
+    @throw std::domain_error      if an array index begins with '0'
+    @throw std::invalid_argument  if an array index was not a number
+
+    @liveexample{The behavior is shown in the example.,at_json_pointer}
+
+    @since version 2.0.0
+    */
+    reference at(const json_pointer& ptr)
+    {
+        return ptr.get_checked(this);
+    }
+
+    /*!
+    @brief access specified element via JSON Pointer
+
+    Returns a const reference to the element at with specified JSON pointer @a
+    ptr, with bounds checking.
+
+    @param[in] ptr  JSON pointer to the desired element
+
+    @return reference to the element pointed to by @a ptr
+
+    @complexity Constant.
+
+    @throw std::out_of_range      if the JSON pointer can not be resolved
+    @throw std::domain_error      if an array index begins with '0'
+    @throw std::invalid_argument  if an array index was not a number
+
+    @liveexample{The behavior is shown in the example.,at_json_pointer_const}
+
+    @since version 2.0.0
+    */
+    const_reference at(const json_pointer& ptr) const
+    {
+        return ptr.get_checked(this);
+    }
+
+    /*!
+    @brief return flattened JSON value
+
+    The function creates a JSON object whose keys are JSON pointers (see [RFC
+    6901](https://tools.ietf.org/html/rfc6901)) and whose values are all
+    primitive. The original JSON value can be restored using the @ref
+    unflatten() function.
+
+    @return an object that maps JSON pointers to primitve values
+
+    @note Empty objects and arrays are flattened to `null` and will not be
+          reconstructed correctly by the @ref unflatten() function.
+
+    @complexity Linear in the size the JSON value.
+
+    @liveexample{The following code shows how a JSON object is flattened to an
+    object whose keys consist of JSON pointers.,flatten}
+
+    @sa @ref unflatten() for the reverse function
+
+    @since version 2.0.0
+    */
+    basic_json flatten() const
+    {
+        basic_json result(value_t::object);
+        json_pointer::flatten("", *this, result);
+        return result;
+    }
+
+    /*!
+    @brief unflatten a previously flattened JSON value
+
+    The function restores the arbitrary nesting of a JSON value that has been
+    flattened before using the @ref flatten() function. The JSON value must
+    meet certain constraints:
+    1. The value must be an object.
+    2. The keys must be JSON pointers (see
+       [RFC 6901](https://tools.ietf.org/html/rfc6901))
+    3. The mapped values must be primitive JSON types.
+
+    @return the original JSON from a flattened version
+
+    @note Empty objects and arrays are flattened by @ref flatten() to `null`
+          values and can not unflattened to their original type. Apart from
+          this example, for a JSON value `j`, the following is always true:
+          `j == j.flatten().unflatten()`.
+
+    @complexity Linear in the size the JSON value.
+
+    @liveexample{The following code shows how a flattened JSON object is
+    unflattened into the original nested JSON object.,unflatten}
+
+    @sa @ref flatten() for the reverse function
+
+    @since version 2.0.0
+    */
+    basic_json unflatten() const
+    {
+        return json_pointer::unflatten(*this);
+    }
+
+    /// @}
+
+    //////////////////////////
+    // JSON Patch functions //
+    //////////////////////////
+
+    /// @name JSON Patch functions
+    /// @{
+
+    /*!
+    @brief applies a JSON patch
+
+    [JSON Patch](http://jsonpatch.com) defines a JSON document structure for
+    expressing a sequence of operations to apply to a JSON) document. With
+    this funcion, a JSON Patch is applied to the current JSON value by
+    executing all operations from the patch.
+
+    @param[in] json_patch  JSON patch document
+    @return patched document
+
+    @note The application of a patch is atomic: Either all operations succeed
+          and the patched document is returned or an exception is thrown. In
+          any case, the original value is not changed: the patch is applied
+          to a copy of the value.
+
+    @throw std::out_of_range if a JSON pointer inside the patch could not
+    be resolved successfully in the current JSON value; example: `"key baz
+    not found"`
+    @throw invalid_argument if the JSON patch is malformed (e.g., mandatory
+    attributes are missing); example: `"operation add must have member path"`
+
+    @complexity Linear in the size of the JSON value and the length of the
+    JSON patch. As usually only a fraction of the JSON value is affected by
+    the patch, the complexity can usually be neglected.
+
+    @liveexample{The following code shows how a JSON patch is applied to a
+    value.,patch}
+
+    @sa @ref diff -- create a JSON patch by comparing two JSON values
+
+    @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902)
+    @sa [RFC 6901 (JSON Pointer)](https://tools.ietf.org/html/rfc6901)
+
+    @since version 2.0.0
+    */
+    basic_json patch(const basic_json& json_patch) const
+    {
+        // make a working copy to apply the patch to
+        basic_json result = *this;
+
+        // the valid JSON Patch operations
+        enum class patch_operations {add, remove, replace, move, copy, test, invalid};
+
+        const auto get_op = [](const std::string op)
+        {
+            if (op == "add")
+            {
+                return patch_operations::add;
+            }
+            if (op == "remove")
+            {
+                return patch_operations::remove;
+            }
+            if (op == "replace")
+            {
+                return patch_operations::replace;
+            }
+            if (op == "move")
+            {
+                return patch_operations::move;
+            }
+            if (op == "copy")
+            {
+                return patch_operations::copy;
+            }
+            if (op == "test")
+            {
+                return patch_operations::test;
+            }
+
+            return patch_operations::invalid;
+        };
+
+        // wrapper for "add" operation; add value at ptr
+        const auto operation_add = [&result](json_pointer & ptr, basic_json val)
+        {
+            // adding to the root of the target document means replacing it
+            if (ptr.is_root())
+            {
+                result = val;
+            }
+            else
+            {
+                // make sure the top element of the pointer exists
+                json_pointer top_pointer = ptr.top();
+                if (top_pointer != ptr)
+                {
+                    basic_json& x = result.at(top_pointer);
+                }
+
+                // get reference to parent of JSON pointer ptr
+                const auto last_path = ptr.pop_back();
+                basic_json& parent = result[ptr];
+
+                switch (parent.m_type)
+                {
+                    case value_t::null:
+                    case value_t::object:
+                    {
+                        // use operator[] to add value
+                        parent[last_path] = val;
+                        break;
+                    }
+
+                    case value_t::array:
+                    {
+                        if (last_path == "-")
+                        {
+                            // special case: append to back
+                            parent.push_back(val);
+                        }
+                        else
+                        {
+                            const auto idx = std::stoi(last_path);
+                            if (static_cast<size_type>(idx) > parent.size())
+                            {
+                                // avoid undefined behavior
+                                throw std::out_of_range("array index " + std::to_string(idx) + " is out of range");
+                            }
+                            else
+                            {
+                                // default case: insert add offset
+                                parent.insert(parent.begin() + static_cast<difference_type>(idx), val);
+                            }
+                        }
+                        break;
+                    }
+
+                    default:
+                    {
+                        // if there exists a parent it cannot be primitive
+                        assert(false);  // LCOV_EXCL_LINE
+                    }
+                }
+            }
+        };
+
+        // wrapper for "remove" operation; remove value at ptr
+        const auto operation_remove = [&result](json_pointer & ptr)
+        {
+            // get reference to parent of JSON pointer ptr
+            const auto last_path = ptr.pop_back();
+            basic_json& parent = result.at(ptr);
+
+            // remove child
+            if (parent.is_object())
+            {
+                // perform range check
+                auto it = parent.find(last_path);
+                if (it != parent.end())
+                {
+                    parent.erase(it);
+                }
+                else
+                {
+                    throw std::out_of_range("key '" + last_path + "' not found");
+                }
+            }
+            else if (parent.is_array())
+            {
+                // note erase performs range check
+                parent.erase(static_cast<size_type>(std::stoi(last_path)));
+            }
+        };
+
+        // type check
+        if (not json_patch.is_array())
+        {
+            // a JSON patch must be an array of objects
+            throw std::invalid_argument("JSON patch must be an array of objects");
+        }
+
+        // iterate and apply th eoperations
+        for (const auto& val : json_patch)
+        {
+            // wrapper to get a value for an operation
+            const auto get_value = [&val](const std::string & op,
+                                          const std::string & member,
+                                          bool string_type) -> basic_json&
+            {
+                // find value
+                auto it = val.m_value.object->find(member);
+
+                // context-sensitive error message
+                const auto error_msg = (op == "op") ? "operation" : "operation '" + op + "'";
+
+                // check if desired value is present
+                if (it == val.m_value.object->end())
+                {
+                    throw std::invalid_argument(error_msg + " must have member '" + member + "'");
+                }
+
+                // check if result is of type string
+                if (string_type and not it->second.is_string())
+                {
+                    throw std::invalid_argument(error_msg + " must have string member '" + member + "'");
+                }
+
+                // no error: return value
+                return it->second;
+            };
+
+            // type check
+            if (not val.is_object())
+            {
+                throw std::invalid_argument("JSON patch must be an array of objects");
+            }
+
+            // collect mandatory members
+            const std::string op = get_value("op", "op", true);
+            const std::string path = get_value(op, "path", true);
+            json_pointer ptr(path);
+
+            switch (get_op(op))
+            {
+                case patch_operations::add:
+                {
+                    operation_add(ptr, get_value("add", "value", false));
+                    break;
+                }
+
+                case patch_operations::remove:
+                {
+                    operation_remove(ptr);
+                    break;
+                }
+
+                case patch_operations::replace:
+                {
+                    // the "path" location must exist - use at()
+                    result.at(ptr) = get_value("replace", "value", false);
+                    break;
+                }
+
+                case patch_operations::move:
+                {
+                    const std::string from_path = get_value("move", "from", true);
+                    json_pointer from_ptr(from_path);
+
+                    // the "from" location must exist - use at()
+                    basic_json v = result.at(from_ptr);
+
+                    // The move operation is functionally identical to a
+                    // "remove" operation on the "from" location, followed
+                    // immediately by an "add" operation at the target
+                    // location with the value that was just removed.
+                    operation_remove(from_ptr);
+                    operation_add(ptr, v);
+                    break;
+                }
+
+                case patch_operations::copy:
+                {
+                    const std::string from_path = get_value("copy", "from", true);;
+                    const json_pointer from_ptr(from_path);
+
+                    // the "from" location must exist - use at()
+                    result[ptr] = result.at(from_ptr);
+                    break;
+                }
+
+                case patch_operations::test:
+                {
+                    bool success = false;
+                    try
+                    {
+                        // check if "value" matches the one at "path"
+                        // the "path" location must exist - use at()
+                        success = (result.at(ptr) == get_value("test", "value", false));
+                    }
+                    catch (std::out_of_range&)
+                    {
+                        // ignore out of range errors: success remains false
+                    }
+
+                    // throw an exception if test fails
+                    if (not success)
+                    {
+                        throw std::domain_error("unsuccessful: " + val.dump());
+                    }
+
+                    break;
+                }
+
+                case patch_operations::invalid:
+                {
+                    // op must be "add", "remove", "replace", "move", "copy", or
+                    // "test"
+                    throw std::invalid_argument("operation value '" + op + "' is invalid");
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /*!
+    @brief creates a diff as a JSON patch
+
+    Creates a [JSON Patch](http://jsonpatch.com) so that value @a source can
+    be changed into the value @a target by calling @ref patch function.
+
+    @invariant For two JSON values @a source and @a target, the following code
+    yields always `true`:
+    @code {.cpp}
+    source.patch(diff(source, target)) == target;
+    @endcode
+
+    @note Currently, only `remove`, `add`, and `replace` operations are
+          generated.
+
+    @param[in] source  JSON value to copare from
+    @param[in] target  JSON value to copare against
+    @param[in] path    helper value to create JSON pointers
+
+    @return a JSON patch to convert the @a source to @a target
+
+    @complexity Linear in the lengths of @a source and @a target.
+
+    @liveexample{The following code shows how a JSON patch is created as a
+    diff for two JSON values.,diff}
+
+    @sa @ref patch -- apply a JSON patch
+
+    @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902)
+
+    @since version 2.0.0
+    */
+    static basic_json diff(const basic_json& source,
+                           const basic_json& target,
+                           const std::string& path = "")
+    {
+        // the patch
+        basic_json result(value_t::array);
+
+        // if the values are the same, return empty patch
+        if (source == target)
+        {
+            return result;
+        }
+
+        if (source.type() != target.type())
+        {
+            // different types: replace value
+            result.push_back(
+            {
+                {"op", "replace"},
+                {"path", path},
+                {"value", target}
+            });
+        }
+        else
+        {
+            switch (source.type())
+            {
+                case value_t::array:
+                {
+                    // first pass: traverse common elements
+                    size_t i = 0;
+                    while (i < source.size() and i < target.size())
+                    {
+                        // recursive call to compare array values at index i
+                        auto temp_diff = diff(source[i], target[i], path + "/" + std::to_string(i));
+                        result.insert(result.end(), temp_diff.begin(), temp_diff.end());
+                        ++i;
+                    }
+
+                    // i now reached the end of at least one array
+                    // in a second pass, traverse the remaining elements
+
+                    // remove my remaining elements
+                    const auto end_index = static_cast<difference_type>(result.size());
+                    while (i < source.size())
+                    {
+                        // add operations in reverse order to avoid invalid
+                        // indices
+                        result.insert(result.begin() + end_index, object(
+                        {
+                            {"op", "remove"},
+                            {"path", path + "/" + std::to_string(i)}
+                        }));
+                        ++i;
+                    }
+
+                    // add other remaining elements
+                    while (i < target.size())
+                    {
+                        result.push_back(
+                        {
+                            {"op", "add"},
+                            {"path", path + "/" + std::to_string(i)},
+                            {"value", target[i]}
+                        });
+                        ++i;
+                    }
+
+                    break;
+                }
+
+                case value_t::object:
+                {
+                    // first pass: traverse this object's elements
+                    for (auto it = source.begin(); it != source.end(); ++it)
+                    {
+                        // escape the key name to be used in a JSON patch
+                        const auto key = json_pointer::escape(it.key());
+
+                        if (target.find(it.key()) != target.end())
+                        {
+                            // recursive call to compare object values at key it
+                            auto temp_diff = diff(it.value(), target[it.key()], path + "/" + key);
+                            result.insert(result.end(), temp_diff.begin(), temp_diff.end());
+                        }
+                        else
+                        {
+                            // found a key that is not in o -> remove it
+                            result.push_back(object(
+                            {
+                                {"op", "remove"},
+                                {"path", path + "/" + key}
+                            }));
+                        }
+                    }
+
+                    // second pass: traverse other object's elements
+                    for (auto it = target.begin(); it != target.end(); ++it)
+                    {
+                        if (source.find(it.key()) == source.end())
+                        {
+                            // found a key that is not in this -> add it
+                            const auto key = json_pointer::escape(it.key());
+                            result.push_back(
+                            {
+                                {"op", "add"},
+                                {"path", path + "/" + key},
+                                {"value", it.value()}
+                            });
+                        }
+                    }
+
+                    break;
+                }
+
+                default:
+                {
+                    // both primitive type: replace value
+                    result.push_back(
+                    {
+                        {"op", "replace"},
+                        {"path", path},
+                        {"value", target}
+                    });
+                    break;
+                }
+            }
+        }
+
+        return result;
+    }
+
+    /// @}
+};
+
+
+/////////////
+// presets //
+/////////////
+
+/*!
+@brief default JSON class
+
+This type is the default specialization of the @ref basic_json class which
+uses the standard template types.
+
+@since version 1.0.0
+*/
+using json = basic_json<>;
+}
+
+
+///////////////////////
+// nonmember support //
+///////////////////////
+
+// specialization of std::swap, and std::hash
+namespace std
+{
+/*!
+@brief exchanges the values of two JSON objects
+
+@since version 1.0.0
+*/
+template<>
+inline void swap(nlohmann::json& j1,
+                 nlohmann::json& j2) noexcept(
+                     is_nothrow_move_constructible<nlohmann::json>::value and
+                     is_nothrow_move_assignable<nlohmann::json>::value
+                 )
+{
+    j1.swap(j2);
+}
+
+/// hash value for JSON objects
+template<>
+struct hash<nlohmann::json>
+{
+    /*!
+    @brief return a hash value for a JSON object
+
+    @since version 1.0.0
+    */
+    std::size_t operator()(const nlohmann::json& j) const
+    {
+        // a naive hashing via the string representation
+        const auto& h = hash<nlohmann::json::string_t>();
+        return h(j.dump());
+    }
+};
+}
+
+/*!
+@brief user-defined string literal for JSON values
+
+This operator implements a user-defined string literal for JSON objects. It
+can be used by adding `"_json"` to a string literal and returns a JSON object
+if no parse error occurred.
+
+@param[in] s  a string representation of a JSON object
+@return a JSON object
+
+@since version 1.0.0
+*/
+inline nlohmann::json operator "" _json(const char* s, std::size_t)
+{
+    return nlohmann::json::parse(s);
+}
+
+/*!
+@brief user-defined string literal for JSON pointer
+
+This operator implements a user-defined string literal for JSON Pointers. It
+can be used by adding `"_json"` to a string literal and returns a JSON pointer
+object if no parse error occurred.
+
+@param[in] s  a string representation of a JSON Pointer
+@return a JSON pointer object
+
+@since version 2.0.0
+*/
+inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t)
+{
+    return nlohmann::json::json_pointer(s);
+}
+
+// restore GCC/clang diagnostic settings
+#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)
+    #pragma GCC diagnostic pop
+#endif
+
+#endif
diff --git a/fplll/io/thread_pool.hpp b/fplll/io/thread_pool.hpp
new file mode 100644 (file)
index 0000000..860bd10
--- /dev/null
@@ -0,0 +1,345 @@
+/*********************************************************************************\
+*                                                                                 *
+* https://github.com/cr-marcstevens/snippets/tree/master/cxxheaderonly            *
+*                                                                                 *
+* thread_pool.hpp - A header only C++ light-weight thread pool                    *
+* Copyright (c) 2017 Marc Stevens                                                 *
+*                                                                                 *
+* MIT License                                                                     *
+*                                                                                 *
+* Permission is hereby granted, free of charge, to any person obtaining a copy    *
+* of this software and associated documentation files (the "Software"), to deal   *
+* in the Software without restriction, including without limitation the rights    *
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell       *
+* copies of the Software, and to permit persons to whom the Software is           *
+* furnished to do so, subject to the following conditions:                        *
+*                                                                                 *
+* The above copyright notice and this permission notice shall be included in all  *
+* copies or substantial portions of the Software.                                 *
+*                                                                                 *
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR      *
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,        *
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE     *
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER          *
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,   *
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE   *
+* SOFTWARE.                                                                       *
+*                                                                                 *
+\*********************************************************************************/
+
+#ifndef THREAD_POOL_HPP
+#define THREAD_POOL_HPP
+
+#include <cstdint>
+#include <memory>
+#include <stdexcept>
+#include <vector>
+#include <queue>
+#include <functional>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <future>
+#include <atomic>
+
+/*************************** example usage ***************************************\
+grep "^//test.cpp" thread_pool.hpp -A33 > test.cpp
+g++ -std=c++11 -o test test.cpp -pthread -lpthread
+
+//test.cpp:
+#include "thread_pool.hpp"
+#include <iostream>
+
+int main()
+{
+       // use main thread also as worker using wait_work(), so init 1 less in thread pool
+       // (alternatively use wait_sleep() and make threads for all logical hardware cores)
+        thread_pool::thread_pool tp(std::thread::hardware_concurrency() - 1);
+
+        std::atomic_uint aui(0);
+        for (unsigned i = 0; i < 100; ++i)
+                tp.push( [&aui](){ ++aui; } );
+        std::cout << aui << std::endl;
+        tp.wait_work();
+        std::cout << aui << std::endl;
+
+       // blocking run 'void f()' function on all threads and main thread
+       tp.run( [&aui](){
+                       std::cout << "Run 1: Thread started." << std::endl;
+               }); 
+
+       // blocking run 'void f(int)' function on all threads and main thread
+       tp.run( [&aui](int threadid){
+                       std::cout << "Run 2: Thread " << threadid << " started." << std::endl;
+               }); 
+
+       // blocking run 'void f(int,int)' function on all threads and main thread
+       tp.run( [&aui](int threadid, int threads){
+                       std::cout << "Run 3: Thread " << threadid << " of " << threads << " started." << std::endl;
+               });  
+        return 0;
+}
+
+\************************* end example usage *************************************/
+
+namespace thread_pool {
+
+       class thread_pool {
+       public:
+               thread_pool(std::size_t nrthreads = 0);
+               ~thread_pool();
+
+               std::size_t size() const;
+
+               // resize the thread pool
+               void resize(std::size_t nrthreads);
+
+               // enqueue a function and obtain a future on its return value
+               template<typename F, typename... Args>
+               auto enqueue(F&& f, Args&&... args) -> std::future<typename std::result_of<F(Args...)>::type>;
+
+               // push a trivial function without a future
+               void push(const std::function<void()>& f);
+               void push(std::function<void()>&& f);
+
+               // stop the thread pool
+               void stop();
+
+               // process single task
+               bool work();
+
+               // process tasks & then wait until all threads are idle
+               void wait_work();
+
+               // sleep until all threads are idle
+               void wait_sleep();
+
+               // run a job 'void f()' on #threads <= #threadpoolsize+1
+               // (-1 => #threads = #threadpoolsize + 1)
+               void run(const std::function<void()>& f, int threads = -1);
+               // run a job given function 'void f(int threadid)'
+               void run(const std::function<void(int)>& f, int threads = -1);
+               // run a job given function 'void f(int threadid, int threads)' (0 <= threadid < threads)
+               void run(const std::function<void(int,int)>& f, int threads = -1);
+
+       private:
+               void _init_thread();
+
+               std::atomic_uint _threads_busy;
+               std::vector< std::unique_ptr<std::thread> > _threads;
+               std::vector< std::shared_ptr<std::atomic_bool> > _threads_stop;
+               std::queue< std::function<void()> > _tasks;
+               std::mutex _mutex;
+               std::condition_variable _condition;
+       };
+
+       class barrier {
+       public:
+               barrier(std::size_t count);
+               ~barrier() noexcept(false);
+
+               void wait();
+       private:
+               std::size_t _i, _count;
+               std::mutex _mutex;
+               std::condition_variable _condition;
+       };
+
+
+
+
+       inline thread_pool::thread_pool(std::size_t nrthreads)
+       {
+               _threads_busy = 0;
+               resize(nrthreads);
+       }
+
+       inline thread_pool::~thread_pool()
+       {
+               stop();
+       }
+
+       inline std::size_t thread_pool::size() const
+       {
+               return _threads.size();
+       }
+
+       inline void thread_pool::stop()
+       {
+               resize(0);
+       }
+
+       inline bool thread_pool::work()
+       {
+               std::function<void()> task;
+               {
+                       std::lock_guard<std::mutex> lock(_mutex);
+                       if (_tasks.empty())
+                               return false;
+                       task = std::move(this->_tasks.front());
+                       this->_tasks.pop();
+               }
+               task();
+               return true;
+       }
+
+       inline void thread_pool::wait_work()
+       {
+               while (work())
+                       ;
+               while (_threads_busy != 0)
+                       std::this_thread::yield();
+       }
+
+       inline void thread_pool::wait_sleep()
+       {
+               while (_tasks.size() != 0 || _threads_busy != 0)
+                       std::this_thread::yield();
+       }
+
+       inline void thread_pool::push(const std::function<void()>& f)
+       {
+               std::unique_lock<std::mutex> lock(_mutex);
+               _tasks.emplace(f);
+               _condition.notify_one();
+       }
+
+       inline void thread_pool::push(std::function<void()>&& f)
+       {
+               std::unique_lock<std::mutex> lock(_mutex);
+               _tasks.emplace(std::move(f));
+               _condition.notify_one();
+       }
+
+       template<typename F, typename... Args>
+       inline auto thread_pool::enqueue(F&& f, Args&&... args) 
+               -> std::future<typename std::result_of<F(Args...)>::type>
+       {
+               typedef typename std::result_of<F(Args...)>::type return_type;
+               auto task = std::make_shared< std::packaged_task<return_type()> >
+                               ( std::bind(std::forward<F>(f), std::forward<Args>(args)...) );
+               push( [task](){ (*task)(); } );
+               return task->get_future();
+       }
+
+       inline void thread_pool::run(const std::function<void()>& f, int threads)
+       {
+               if (threads < 1 || threads > int(_threads.size())+1)
+                       threads = int(_threads.size())+1;
+               for (int i = 0; i < threads; ++i)
+                       this->push(f);
+               this->wait_work();
+       }
+
+       inline void thread_pool::run(const std::function<void(int)>& f, int threads)
+       {
+               if (threads < 1 || threads > int(_threads.size())+1)
+                       threads = int(_threads.size())+1;
+               for (int i = 0; i < threads; ++i)
+                       this->push( [f,i](){f(i);} );
+               this->wait_work();
+       }
+
+       inline void thread_pool::run(const std::function<void(int,int)>& f, int threads)
+       {
+               if (threads < 1 || threads > int(_threads.size())+1)
+                       threads = int(_threads.size())+1;
+               for (int i = 0; i < threads; ++i)
+                       this->push( [f,i,threads](){f(i,threads);} );
+               this->wait_work();
+       }
+
+       inline void thread_pool::resize(std::size_t nrthreads)
+       {
+               if (nrthreads < _threads.size())
+               {
+                       // decreasing number of active threads
+                       std::unique_lock<std::mutex> lock(_mutex);
+                       for (std::size_t i = nrthreads; i < _threads.size(); ++i)
+                               *(_threads_stop[i]) = true;
+                       _condition.notify_all();
+                       lock.unlock();
+                       for (std::size_t i = nrthreads; i < _threads.size(); ++i)
+                               _threads[i]->join();
+
+                       lock.lock();
+                       _threads_stop.resize(nrthreads);
+                       _threads.resize(nrthreads);
+               } 
+               else if (nrthreads > _threads.size())
+               {
+                       // wait before resizing because it may cause reallocation
+                       wait_work();
+
+                       std::unique_lock<std::mutex> _lock(_mutex);
+                       _threads_stop.reserve(nrthreads);
+                       _threads.reserve(nrthreads);
+                       for (std::size_t i = _threads.size(); i < nrthreads; ++i)
+                       {
+                               _threads_stop.emplace_back(new std::atomic_bool(false));
+                               _init_thread();
+                       }
+               }
+       }
+
+       inline void thread_pool::_init_thread()
+       {
+               std::size_t i = _threads.size();
+               if (i >= _threads_stop.size())
+                       throw std::runtime_error("thread_pool::_init_thread(): index out of range!");
+               auto f = [this,i]() {
+                       std::function<void()> task;
+                       std::unique_lock<std::mutex> lock(this->_mutex);
+                       while (true) {
+                               if (this->_tasks.empty())
+                               {
+                                       if (*(this->_threads_stop[i]))
+                                               return;
+                                       this->_condition.wait(lock);
+                                       continue;
+                               }
+
+                               ++this->_threads_busy;
+                               task = std::move(this->_tasks.front());
+                               this->_tasks.pop();
+
+                               lock.unlock();
+                               task();
+                               --this->_threads_busy;
+                               lock.lock();
+                       }
+               };
+               _threads.emplace_back(new std::thread(f));
+       }
+
+
+
+
+       inline barrier::barrier(std::size_t count)
+               : _i(0), _count(count)
+       {
+       }
+
+       inline barrier::~barrier() noexcept(false)
+       {
+               if (_i != 0)
+                       throw std::runtime_error("barrier::~barrier: threads are still waiting on barrier");
+       }
+
+       inline void barrier::wait()
+       {
+               std::unique_lock<std::mutex> lock(_mutex);
+               if (++_i >= _count)
+               {
+                       _i = 0;
+                       _condition.notify_all();
+               }
+               else
+               {
+                       _condition.wait(lock);
+               }
+       }
+
+} // namespace thread_pool
+
+#endif // THREAD_POOL_HPP
diff --git a/fplll/latticegen.cpp b/fplll/latticegen.cpp
new file mode 100644 (file)
index 0000000..1a6599a
--- /dev/null
@@ -0,0 +1,242 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "util.h"
+
+using namespace fplll;
+
+void print_help()
+{
+  cout << "Usage: latticegen [-randseed [<int> | 'time']] options\n"
+       << "Options : " << endl
+       << " r <d> <b> : gen_intrel" << endl
+       << " s <d> <b> <b2> : gen_simdioph" << endl
+       << " u <d> <b> : gen_uniform" << endl
+       << " n <d> <b> <c> : gen_ntrulike" << endl
+       << " N <d> <b> <c> : gen_ntrulike2" << endl
+       << " q <d> <k> <b> <c>: gen_qary" << endl
+       << " t <d> <f> : gen_trg" << endl
+       << " T <d> : gen_trg2" << endl
+       << "See README.md for option descriptions:" << endl
+       << "https://github.com/fplll/fplll/blob/master/README.md#latticegen" << endl;
+}
+
+void print_version()
+{
+  cout << "latticegen (fplll) " << VERSION << endl
+       << "Copyright 2005-2011 Damien Stehle, David Cade, Xavier Pujol." << endl
+       << "fplll is free software. You can redistribute it and/or modify" << endl
+       << "it under the terms of the GNU Lesser General Public License as published by" << endl
+       << "the Free Software Foundation, either version 2.1 of the License, or" << endl
+       << "(at your option) any later version." << endl;
+}
+
+void fatal_error(const char *message)
+{
+  cerr << "latticegen: " << message << endl
+       << "Try 'latticegen --help' for more information" << endl;
+  exit(1);
+}
+
+int main(int argc, char *argv[])
+{
+  int iArg = 1;
+
+  if (argc - iArg < 1 || strcmp(argv[iArg], "--help") == 0)
+  {
+    print_help();
+    return 0;
+  }
+  else if (strcmp(argv[iArg], "--version") == 0)
+  {
+    print_version();
+    return 0;
+  }
+  else if (strcmp(argv[iArg], "-randseed") == 0)
+  {
+    iArg++;
+    if (argc - iArg < 1)
+      fatal_error("option '-randseed' requires an argument");
+    if (strcmp(argv[iArg], "time") == 0)
+    {
+      RandGen::init_with_time();
+    }
+    else
+    {
+      RandGen::init_with_seed(atol(argv[iArg]));
+    }
+    iArg++;
+  }
+
+  if (argc - iArg < 2)
+    fatal_error("you must specify a method and a dimension");
+  char genMethod = argv[iArg][0];
+  int d          = atoi(argv[iArg + 1]);
+  iArg += 2;
+
+  ZZ_mat<mpz_t> m;
+
+  // initialization+filling of the matrix
+  switch (genMethod)
+  {
+  case 'r':
+  {
+    if (argc - iArg < 1)
+      fatal_error("method 'r' requires 2 arguments");
+    int b = atoi(argv[iArg]);
+    m.resize(d, d + 1);
+    m.gen_intrel(b);
+    break;
+  }
+  case 's':
+  {
+    if (argc - iArg < 2)
+      fatal_error("method 's' requires 3 arguments");
+    int b  = atoi(argv[iArg]);
+    int b2 = atoi(argv[iArg + 1]);
+    m.resize(d + 1, d + 1);
+    m.gen_simdioph(b, b2);
+    break;
+  }
+  case 'u':
+  {
+    if (argc - iArg < 1)
+      fatal_error("method 'u' requires 2 arguments");
+    int b = atoi(argv[iArg]);
+    m.resize(d, d);
+    m.gen_uniform(b);
+    break;
+  }
+  case 'n':
+  {
+    if (argc - iArg < 1)
+      fatal_error("method 'n' requires 3 arguments");
+    int b  = atoi(argv[iArg]);
+    char c = argv[iArg + 1][0];
+    m.resize(2 * d, 2 * d);
+    switch (c)
+    {
+    case 'b':
+    {
+      m.gen_ntrulike(b);
+      break;
+    }
+    case 'q':
+    {
+      m.gen_ntrulike_withq(b);
+      break;
+    }
+    default:
+    {
+      fatal_error("parameter c must be 'b' or 'q'");
+    }
+    }
+    break;
+  }
+  case 'q':
+  {
+    if (argc - iArg < 1)
+      fatal_error("method 'q' requires 4 arguments");
+    int k  = atoi(argv[iArg]);
+    int b  = atoi(argv[iArg + 1]);
+    char c = argv[iArg + 2][0];
+    m.resize(d, d);
+    switch (c)
+    {
+    case 'b':
+    {
+      m.gen_qary(k, b);
+      break;
+    }
+    case 'q':
+    {
+      m.gen_qary_withq(k, b);
+      break;
+    }
+    case 'p':
+    {
+      m.gen_qary_prime(k, b);
+      break;
+    }
+    default:
+    {
+      fatal_error("parameter c must be 'b' or 'q' or 'p'");
+    }
+    }
+    break;
+  }
+  case 'N':
+  {
+    if (argc - iArg < 1)
+      fatal_error("method 'N' requires 3 arguments");
+    int b = atoi(argv[iArg]);
+    int c = argv[iArg + 1][0];
+    m.resize(2 * d, 2 * d);
+    switch (c)
+    {
+    case 'b':
+    {
+      m.gen_ntrulike2(b);
+      break;
+    }
+    case 'q':
+    {
+      m.gen_ntrulike2_withq(b);
+      break;
+    }
+    default:
+    {
+      fatal_error("parameter c must be 'b' or 'q'");
+    }
+    }
+    break;
+  }
+  case 't':
+  {
+    if (argc - iArg < 1)
+      fatal_error("method 't' requires 2 arguments");
+    double alpha = atof(argv[iArg]);
+    m.resize(d, d);
+    m.gen_trg(alpha);
+    break;
+  }
+  case 'T':
+  {
+    // clang-format off
+    FP_NR<mpfr_t> *w = new FP_NR<mpfr_t>[d];
+    // clang-format on
+
+    for (int i = 0; i < d; i++)
+      mpfr_inp_str(w[i].get_data(), stdin, 10, GMP_RNDN);
+
+    m.resize(d, d);
+    m.gen_trg2(w);
+
+    delete[] w;
+
+    break;
+  }
+  default:
+  {
+    fatal_error("invalid method");
+    break;
+  }
+  }
+  cout << m << endl;
+  return 0;
+}
diff --git a/fplll/lll.cpp b/fplll/lll.cpp
new file mode 100644 (file)
index 0000000..c8e1173
--- /dev/null
@@ -0,0 +1,347 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Template source file */
+
+#include "lll.h"
+#include "util.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+static inline bool is_power_of_2(int i) { return (i & (i - 1)) == 0; }
+
+template <class ZT, class FT>
+LLLReduction<ZT, FT>::LLLReduction(MatGSOInterface<ZT, FT> &m, double delta, double eta, int flags)
+    : status(RED_SUCCESS), final_kappa(0), last_early_red(0), n_swaps(0), m(m)
+{
+  /* No early reduction in proved mode (i.e. enable_int_gram=true).
+     NOTE: To make this possible, the hypothesis "g(i, j) is valid if
+     0 <= i < n_known_rows and j <= i" in gso.h should be changed and
+     MatGSOInterface<ZT, FT>::discover_row() should be rewritten. */
+  enable_early_red = (flags & LLL_EARLY_RED) && !m.enable_int_gram;
+  siegel           = flags & LLL_SIEGEL;
+  verbose          = flags & LLL_VERBOSE;
+  this->delta      = delta;
+  this->eta        = eta;
+  swap_threshold   = siegel ? delta - eta * eta : delta;
+  zeros            = 0;
+}
+
+template <class ZT, class FT>
+bool LLLReduction<ZT, FT>::lll(int kappa_min, int kappa_start, int kappa_end,
+                               int size_reduction_start)
+{
+  if (kappa_end == -1)
+    kappa_end = m.d;
+
+  FPLLL_DEBUG_CHECK(kappa_min <= kappa_start && kappa_start < kappa_end && kappa_end <= m.d);
+  int start_time = cputime();
+  int kappa      = kappa_start + 1;
+  int kappa_max  = 0;
+  int d          = kappa_end - kappa_min;
+
+  zeros       = 0;
+  n_swaps     = 0;
+  final_kappa = 0;
+  if (verbose)
+    print_params();
+  extend_vect(lovasz_tests, kappa_end);
+  extend_vect(babai_mu, kappa_end);
+  extend_vect(babai_expo, kappa_end);
+
+  for (; zeros < d && m.b_row_is_zero(0); zeros++)
+  {
+    m.move_row(kappa_min, kappa_end - 1 - zeros);
+  }
+
+  if (zeros < d && ((kappa_start > 0 && !babai(kappa_start, kappa_start, size_reduction_start)) ||
+                    !m.update_gso_row(kappa_start)))
+  {
+    final_kappa = kappa_start;
+    return false;
+  }
+
+  long long iter, max_iter;
+  max_iter = static_cast<long long>(d - 2 * d * (d + 1) *
+                                            ((m.get_max_exp_of_b() + 3) / std::log(delta.get_d())));
+
+  for (iter = 0; iter < max_iter && kappa < kappa_end - zeros; iter++)
+  {
+    if (kappa > kappa_max)
+    {
+      if (verbose)
+      {
+        cerr << "Discovering vector " << kappa - kappa_min + 1 + zeros << "/" << d
+             << " cputime=" << cputime() - start_time << endl;
+      }
+      kappa_max = kappa;
+      if (enable_early_red && is_power_of_2(kappa) && kappa > last_early_red)
+      {
+        if (!early_reduction(kappa, size_reduction_start))
+        {
+          final_kappa = kappa;
+          return false;
+        }
+      }
+    }
+
+    // Lazy size reduction
+    if (!babai(kappa, kappa, size_reduction_start))
+    {
+      final_kappa = kappa;
+      return false;
+    }
+
+    // Tests Lovasz's condition
+    m.get_gram(lovasz_tests[0], kappa, kappa);
+    for (int i = 1; i <= kappa; i++)
+    {
+      ftmp1.mul(m.get_mu_exp(kappa, i - 1), m.get_r_exp(kappa, i - 1));
+      lovasz_tests[i].sub(lovasz_tests[i - 1], ftmp1);
+    }
+    ftmp1.mul(m.get_r_exp(kappa - 1, kappa - 1), swap_threshold);
+    if (m.enable_row_expo)
+    {
+      ftmp1.mul_2si(ftmp1, 2 * (m.row_expo[kappa - 1] - m.row_expo[kappa]));
+    }
+
+    if (ftmp1 > lovasz_tests[siegel ? kappa : kappa - 1])
+    {
+      n_swaps++;
+      // Failure, computes the insertion index
+      int old_k = kappa;
+      for (kappa--; kappa > kappa_min; kappa--)
+      {
+        ftmp1.mul(m.get_r_exp(kappa - 1, kappa - 1), swap_threshold);
+        if (m.enable_row_expo)
+        {
+          ftmp1.mul_2si(ftmp1, 2 * (m.row_expo[kappa - 1] - m.row_expo[old_k]));
+        }
+        if (ftmp1 < lovasz_tests[siegel ? kappa : kappa - 1])
+          break;
+      }
+      // FPLLL_TRACE("Lovasz's condition is not satisfied, kappa=" << kappa << " old_kappa=" <<
+      // old_k);
+      // Moves the vector
+      if (lovasz_tests[kappa] > 0)
+      {
+        m.move_row(old_k, kappa);
+      }
+      else
+      {
+        zeros++;
+        m.move_row(old_k, kappa_end - zeros);
+        kappa = old_k;
+        continue;
+      }
+    }
+
+    m.set_r(kappa, kappa, lovasz_tests[kappa]);
+    kappa++;
+  }
+  // Symmetrize the Gram matrix
+  if (m.enable_int_gram)
+    m.symmetrize_g();
+
+  if (kappa < kappa_end - zeros)
+    return set_status(RED_LLL_FAILURE);
+  else
+    return set_status(RED_SUCCESS);
+}
+
+template <class ZT, class FT>
+bool LLLReduction<ZT, FT>::babai(int kappa, int size_reduction_end, int size_reduction_start)
+{
+  // FPLLL_TRACE_IN("kappa=" << kappa);
+  long max_expo = LONG_MAX;
+
+  for (int iter = 0;; iter++)
+  {
+    if (!m.update_gso_row(kappa, size_reduction_end - 1))
+      return set_status(RED_GSO_FAILURE);
+
+    bool loop_needed = false;
+    for (int j = size_reduction_end - 1; j >= size_reduction_start && !loop_needed; j--)
+    {
+      m.get_mu(ftmp1, kappa, j);
+      ftmp1.abs(ftmp1);
+      loop_needed |= (ftmp1 > eta);
+    }
+    if (!loop_needed)
+      break;
+
+    if (iter >= 2)
+    {
+      long new_max_expo = m.get_max_mu_exp(kappa, size_reduction_end);
+      if (new_max_expo > max_expo - SIZE_RED_FAILURE_THRESH)
+      {
+        return set_status(RED_BABAI_FAILURE);
+      }
+      max_expo = new_max_expo;
+    }
+
+    for (int j = size_reduction_start; j < size_reduction_end; j++)
+    {
+      babai_mu[j] = m.get_mu_exp(kappa, j, babai_expo[j]);
+    }
+    m.row_op_begin(kappa, kappa + 1);
+    for (int j = size_reduction_end - 1; j >= size_reduction_start; j--)
+    {
+      mu_m_ant.rnd_we(babai_mu[j], babai_expo[j]);
+      if (mu_m_ant.zero_p())
+        continue;
+      // Approximate update of the mu_(kappa,k)'s
+      for (int k = size_reduction_start; k < j; k++)
+      {
+        ftmp1.mul(mu_m_ant, m.get_mu_exp(j, k));
+        /* When enable_row_expo=true, the following line relies on the fact that
+           get_mu_exp(a, b, expo) returns expo = row_expo[a] - row_expo[b]. */
+        babai_mu[k].sub(babai_mu[k], ftmp1);
+      }
+      // Operation on the basis
+      // FPLLL_TRACE("Babai : row[" << kappa << "] += " << mu_m_ant << " * 2^" << babai_expo[j] << "
+      // * row[" << j << "]");
+      mu_m_ant.neg(mu_m_ant);
+      m.row_addmul_we(kappa, j, mu_m_ant, babai_expo[j]);
+    }
+    m.row_op_end(kappa, kappa + 1);
+  }
+  return true;
+}
+
+template <class ZT, class FT>
+bool is_lll_reduced(MatGSOInterface<ZT, FT> &m, double delta, double eta)
+{
+  FT ftmp1;
+  FT ftmp2;
+  FT delta_ = delta;
+  m.update_gso();
+  for (int i = 0; i < m.d; i++)
+  {
+    for (int j = 0; j < i; j++)
+    {
+      m.get_mu(ftmp1, i, j);
+      ftmp1.abs(ftmp1);
+      if (ftmp1 > eta)
+        return false;
+    }
+  }
+  for (int i = 1; i < m.d; i++)
+  {
+    m.get_mu(ftmp2, i, i - 1);
+    ftmp2.mul(ftmp2, ftmp2);  // Î¼^2
+
+    ftmp2.sub(delta_, ftmp2);  // Î´ - Î¼^2
+    m.get_r(ftmp1, i - 1, i - 1);
+    ftmp2.mul(ftmp1, ftmp2);  // (δ - Î¼^2) â‹… r_{i-1,i-1}
+
+    m.get_r(ftmp1, i, i);  // r_{i,i}
+
+    if (ftmp1 < ftmp2)
+      return false;
+  }
+  return true;
+}
+
+/** instantiate functions **/
+
+template class LLLReduction<Z_NR<long>, FP_NR<double>>;
+template class LLLReduction<Z_NR<double>, FP_NR<double>>;
+template class LLLReduction<Z_NR<mpz_t>, FP_NR<double>>;
+template bool
+is_lll_reduced<Z_NR<mpz_t>, FP_NR<double>>(MatGSOInterface<Z_NR<mpz_t>, FP_NR<double>> &m,
+                                           double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<long>, FP_NR<double>>(MatGSOInterface<Z_NR<long>, FP_NR<double>> &m,
+                                          double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<double>, FP_NR<double>>(MatGSOInterface<Z_NR<double>, FP_NR<double>> &m,
+                                            double delta, double eta);
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template class LLLReduction<Z_NR<long>, FP_NR<long double>>;
+template class LLLReduction<Z_NR<double>, FP_NR<long double>>;
+template class LLLReduction<Z_NR<mpz_t>, FP_NR<long double>>;
+
+template bool
+is_lll_reduced<Z_NR<mpz_t>, FP_NR<long double>>(MatGSOInterface<Z_NR<mpz_t>, FP_NR<long double>> &m,
+                                                double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<long>, FP_NR<long double>>(MatGSOInterface<Z_NR<long>, FP_NR<long double>> &m,
+                                               double delta, double eta);
+template bool is_lll_reduced<Z_NR<double>, FP_NR<long double>>(
+    MatGSOInterface<Z_NR<double>, FP_NR<long double>> &m, double delta, double eta);
+#endif
+
+#ifdef FPLLL_WITH_QD
+template class LLLReduction<Z_NR<long>, FP_NR<dd_real>>;
+template class LLLReduction<Z_NR<double>, FP_NR<dd_real>>;
+template class LLLReduction<Z_NR<mpz_t>, FP_NR<dd_real>>;
+
+template bool
+is_lll_reduced<Z_NR<mpz_t>, FP_NR<dd_real>>(MatGSOInterface<Z_NR<mpz_t>, FP_NR<dd_real>> &m,
+                                            double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<long>, FP_NR<dd_real>>(MatGSOInterface<Z_NR<long>, FP_NR<dd_real>> &m,
+                                           double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<double>, FP_NR<dd_real>>(MatGSOInterface<Z_NR<double>, FP_NR<dd_real>> &m,
+                                             double delta, double eta);
+
+template class LLLReduction<Z_NR<long>, FP_NR<qd_real>>;
+template class LLLReduction<Z_NR<double>, FP_NR<qd_real>>;
+template class LLLReduction<Z_NR<mpz_t>, FP_NR<qd_real>>;
+
+template bool
+is_lll_reduced<Z_NR<mpz_t>, FP_NR<qd_real>>(MatGSOInterface<Z_NR<mpz_t>, FP_NR<qd_real>> &m,
+                                            double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<long>, FP_NR<qd_real>>(MatGSOInterface<Z_NR<long>, FP_NR<qd_real>> &m,
+                                           double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<double>, FP_NR<qd_real>>(MatGSOInterface<Z_NR<double>, FP_NR<qd_real>> &m,
+                                             double delta, double eta);
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template class LLLReduction<Z_NR<long>, FP_NR<dpe_t>>;
+template class LLLReduction<Z_NR<double>, FP_NR<dpe_t>>;
+template class LLLReduction<Z_NR<mpz_t>, FP_NR<dpe_t>>;
+template bool
+is_lll_reduced<Z_NR<mpz_t>, FP_NR<dpe_t>>(MatGSOInterface<Z_NR<mpz_t>, FP_NR<dpe_t>> &m,
+                                          double delta, double eta);
+template bool is_lll_reduced<Z_NR<long>, FP_NR<dpe_t>>(MatGSOInterface<Z_NR<long>, FP_NR<dpe_t>> &m,
+                                                       double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<double>, FP_NR<dpe_t>>(MatGSOInterface<Z_NR<double>, FP_NR<dpe_t>> &m,
+                                           double delta, double eta);
+#endif
+
+template class LLLReduction<Z_NR<long>, FP_NR<mpfr_t>>;
+template class LLLReduction<Z_NR<double>, FP_NR<mpfr_t>>;
+template class LLLReduction<Z_NR<mpz_t>, FP_NR<mpfr_t>>;
+template bool
+is_lll_reduced<Z_NR<mpz_t>, FP_NR<mpfr_t>>(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &m,
+                                           double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<long>, FP_NR<mpfr_t>>(MatGSOInterface<Z_NR<long>, FP_NR<mpfr_t>> &m,
+                                          double delta, double eta);
+template bool
+is_lll_reduced<Z_NR<double>, FP_NR<mpfr_t>>(MatGSOInterface<Z_NR<double>, FP_NR<mpfr_t>> &m,
+                                            double delta, double eta);
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/lll.h b/fplll/lll.h
new file mode 100644 (file)
index 0000000..aa62320
--- /dev/null
@@ -0,0 +1,170 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_LLL_H
+#define FPLLL_LLL_H
+
+#include "gso.h"
+#include "gso_interface.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/* The precision of FT must be defined before creating an instance of
+   LLLReduction. The matrix b can be modified between each call to lll. */
+
+template <class ZT, class FT> class LLLReduction
+{
+public:
+  /**
+   * Constructor.
+   * The precision of FT must be defined before creating an instance of the
+   * class and must remain the same until the object is destroyed (or no longer
+   * needed).
+   */
+  LLLReduction(MatGSOInterface<ZT, FT> &m, double delta, double eta, int flags);
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  ~LLLReduction() { LDConvHelper::free(); }
+#endif
+
+  /**
+     @brief LLL reduction.
+
+     @param kappa_min minimal index to go back to
+     @param kappa_start index to start processing at
+     @param kappa_end end index (exclusive)
+     @param size_reduction_start only perform size reductions using vectors starting at this index
+     @return success or failure (due to numerical instability)
+  */
+
+  bool lll(int kappa_min = 0, int kappa_start = 0, int kappa_end = -1,
+           int size_reduction_start = 0);
+
+  /**
+     @brief Size reduction.
+
+     Perform size reduction for all vectors between `kappa_start` and `kappa_end`.
+
+     @param kappa_min start index
+     @param kappa_end end index (exclusive)
+     @param size_reduction_start only perform size reductions using vectors starting at this index
+     @return success or failure (due to numerical instability)
+  */
+
+  inline bool size_reduction(int kappa_min = 0, int kappa_end = -1, int size_reduction_start = 0);
+
+  int status;
+  int final_kappa;
+  int last_early_red;
+  int zeros;
+  int n_swaps;
+
+private:
+  /**
+     @brief Size reduction.
+
+     @param kappa index to size reduce
+     @param size_reduction_end only perform size reductions using vectors up to this index
+     @param size_reduction_start only perform size reductions using vectors starting at this index
+     @return
+  */
+
+  bool babai(int kappa, int size_reduction_end, int size_reduction_start = 0);
+  inline bool early_reduction(int start, int size_reduction_start = 0);
+  inline void print_params();
+  inline bool set_status(int new_status);
+
+  MatGSOInterface<ZT, FT> &m;
+  FT delta, eta, swap_threshold;
+
+  bool enable_early_red;
+  bool siegel;
+  bool verbose;
+
+  vector<FT> lovasz_tests;
+  vector<FT> babai_mu;
+  vector<long> babai_expo;
+  ZT ztmp1;
+  FT mu_m_ant, ftmp1;
+};
+
+template <class ZT, class FT>
+bool is_lll_reduced(MatGSOInterface<ZT, FT> &m, double delta, double eta);
+
+template <class ZT, class FT>
+inline bool LLLReduction<ZT, FT>::size_reduction(int kappa_min, int kappa_end,
+                                                 int size_reduction_start)
+{
+  if (kappa_end == -1)
+    kappa_end = m.d;
+
+  extend_vect(babai_mu, kappa_end);
+  extend_vect(babai_expo, kappa_end);
+
+  for (int k = kappa_min; k < kappa_end; k++)
+  {
+    if ((k > 0 && !babai(k, k, size_reduction_start)) || !m.update_gso_row(k))
+      return false;
+  }
+  return set_status(RED_SUCCESS);
+}
+
+template <class ZT, class FT>
+inline bool LLLReduction<ZT, FT>::early_reduction(int start, int size_reduction_start)
+{
+  m.lock_cols();
+  if (verbose)
+  {
+    cerr << "Early reduction start=" << start + 1 << endl;
+  }
+  for (int i = start; i < m.d; i++)
+  {
+    if (!babai(i, start, size_reduction_start))
+      return false;
+  }
+  m.unlock_cols();
+  last_early_red = start;
+  return true;
+}
+
+template <class ZT, class FT> inline void LLLReduction<ZT, FT>::print_params()
+{
+  cerr << "Entering LLL"
+       << "\ndelta = " << delta << "\neta = " << eta << "\nprecision = " << FT::get_prec()
+       << "\nexact_dot_product = " << static_cast<int>(m.enable_int_gram)
+       << "\nrow_expo = " << static_cast<int>(m.enable_row_expo)
+       << "\nearly_red = " << static_cast<int>(enable_early_red)
+       << "\nsiegel_cond = " << static_cast<int>(siegel)
+       << "\nlong_in_babai = " << static_cast<int>(m.row_op_force_long) << endl;
+}
+
+template <class ZT, class FT> inline bool LLLReduction<ZT, FT>::set_status(int new_status)
+{
+  status = new_status;
+  if (verbose)
+  {
+    if (status == RED_SUCCESS)
+      cerr << "End of LLL: success" << endl;
+    else
+      cerr << "End of LLL: failure: " << RED_STATUS_STR[status] << endl;
+  }
+  return status == RED_SUCCESS;
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/llldiff.cpp b/fplll/llldiff.cpp
new file mode 100644 (file)
index 0000000..8bfe9bb
--- /dev/null
@@ -0,0 +1,129 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+
+This file is part of the fplll Library.
+
+The fplll Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The fplll Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the fplll Library; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+#include "util.h"
+
+using namespace fplll;
+
+template <class ZT> int llldiff(ZZ_mat<ZT> &B1, ZZ_mat<ZT> &B2, int c, int r)
+{
+  int test = 1, i, j, sg;
+  Z_NR<ZT> tmp1;
+  Z_NR<ZT> tmp2;
+
+  for (i = 0; i < r; i++)
+  {
+    sg = 1;
+    tmp1.abs(B1(i, 0));
+    tmp2.abs(B2(i, 0));
+    if (tmp1.cmp(tmp2) != 0)
+    {
+      // cerr << r << ", 0\n";
+      test = 0;
+    }
+    if (tmp1.cmp(B1(i, 0)) != 0)
+      sg *= -1;
+    if (tmp1.cmp(B2(i, 0)) != 0)
+      sg *= -1;
+
+    if (sg == 1)
+    {
+      for (j = 1; j < c; j++)
+      {
+        if (B1(i, j).cmp(B2(i, j)) != 0)
+        {
+          // cerr << i << " " << j << "\n";
+          test = 0;
+        }
+      }
+    }
+    else
+    {
+      for (j = 1; j < c; j++)
+      {
+        tmp1.mul_si(B1(i, j), -1);
+        if (tmp1.cmp(B2(i, j)) != 0)
+        {
+          // cerr << i << " " << j << "\n";
+          test = 0;
+        }
+      }
+    }
+  }
+
+  return (test);
+}
+
+/* ********************** */
+/*  MAIN **************** */
+/* ********************** */
+
+int main(int argc, char **argv)
+{
+  int c, r, ac;
+  ZZ_mat<mpz_t> mat1, mat2;
+
+  for (ac = 1; ac < argc; ac++)
+  {
+    if (strcmp(argv[ac], "-c") == 0 || strcmp(argv[ac], "-r") == 0)
+    {
+      if (ac < argc - 1)
+        ++ac;
+    }
+    else if (strcmp(argv[ac], "--help") == 0)
+    {
+      cout << "Usage: cat matrix1 matrix2 | " << argv[0] << endl;
+      return 0;
+    }
+    else if (argv[ac][0] == '-')
+    {
+      cerr << "llldiff: invalid option '" << argv[ac] << "'" << endl;
+      return 1;
+    }
+    else
+    {
+      break;
+    }
+  }
+
+  istream *inputStream;
+  if (argv[ac])
+    inputStream = new ifstream(argv[ac]);
+  else
+    inputStream = &cin;
+
+  *inputStream >> mat1;
+  *inputStream >> mat2;
+
+  if (argv[ac])
+    delete inputStream;
+
+  r = mat1.get_rows();
+  c = mat1.get_cols();
+
+  int difference = !llldiff<mpz_t>(mat1, mat2, c, r);
+
+  if (difference)
+  {
+    cerr << "===INVALID RESULT===" << endl;
+  }
+
+  return difference;
+}
diff --git a/fplll/main.cpp b/fplll/main.cpp
new file mode 100644 (file)
index 0000000..c095a1c
--- /dev/null
@@ -0,0 +1,795 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2008-2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "main.h"
+#include <config.h>
+
+template <class ZT> int lll(Options &o, ZZ_mat<ZT> &b)
+{
+  // Stupid initialization of u and u_inv to be not empty.
+  ZZ_mat<ZT> u(1, 1), u_inv(1, 1);
+  const char *format = o.output_format ? o.output_format : "b";
+  int status, flags = 0;
+  if (o.verbose)
+    flags |= LLL_VERBOSE;
+  if (o.early_red)
+    flags |= LLL_EARLY_RED;
+  if (o.siegel)
+    flags |= LLL_SIEGEL;
+
+  if (strchr(format, 'v') != NULL)
+  {
+    // LLL-reduction with transform and inverse transform
+    status = lll_reduction(b, u, u_inv, o.delta, o.eta, o.method, o.float_type, o.precision, flags);
+  }
+  else if (strchr(format, 'u') != NULL)
+  {
+    // LLL-reduction with transform
+    status = lll_reduction(b, u, o.delta, o.eta, o.method, o.float_type, o.precision, flags);
+  }
+  else
+  {
+    status = lll_reduction(b, o.delta, o.eta, o.method, o.float_type, o.precision, flags);
+  }
+
+  for (int i = 0; format[i]; i++)
+  {
+    switch (format[i])
+    {
+    case 'b':
+      if (format[i + 1] == 'k')
+      {
+        b.print_comma(cout);
+        i++;
+      }
+      else
+        cout << b << endl;
+      break;
+    case 'u':
+      if (format[i + 1] == 'k')
+      {
+        u.print_comma(cout);
+        i++;
+      }
+      else
+        cout << u << endl;
+      break;
+    case 'v':
+      if (format[i + 1] == 'k')
+      {
+        u_inv.print_comma(cout);
+        i++;
+      }
+      else
+        cout << u_inv << endl;
+      break;
+    case 't':
+      cout << status << endl;
+      break;
+    case ' ':
+      cout << endl;
+      break;
+    }
+  }
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+  }
+  return status;
+}
+
+/* BKZ reduction */
+
+void read_pruning_vector(const char *file_name, PruningParams &pr, int n)
+{
+  double x;
+  FILE *file = fopen(file_name, "r");
+  CHECK(file, "Cannot open '" << file_name << "'");
+
+  pr.coefficients.clear();
+  for (int i = 0; i <= n && fscanf(file, "%lf", &x) == 1; i++)
+  {
+    pr.coefficients.push_back(x);
+    CHECK(x > 0 && x <= 1,
+          "Number " << x << " in file '" << file_name << "' is not in the interval (0,1]");
+    if (i == 0)
+    {
+      CHECK(x == 1, "The first number in file '" << file_name << "' should be 1");
+    }
+    else
+    {
+      CHECK(pr.coefficients[i] <= pr.coefficients[i - 1],
+            "File '" << file_name << "' should contain a non-increasing sequence of numbers");
+    }
+  }
+  CHECK(static_cast<int>(pr.coefficients.size()) == n,
+        "File '" << file_name << "' should contain exactly " << n << " numbers");
+}
+
+template <class ZT> int bkz(Options &, ZZ_mat<ZT> &) { ABORT_MSG("mpz required for BKZ"); }
+
+template <> int bkz(Options &o, ZZ_mat<mpz_t> &b)
+{
+  CHECK(o.block_size > 0, "Option -b is missing");
+  vector<Strategy> strategies;
+  if (!o.bkz_strategy_file.empty())
+  {
+    strategies = load_strategies_json(strategy_full_path(o.bkz_strategy_file));
+  }
+
+  BKZParam param(o.block_size, strategies);
+  // Stupid initialization of u to be not empty.
+  ZZ_mat<mpz_t> u(1, 1);
+  const char *format = o.output_format ? o.output_format : "b";
+  int status;
+
+  param.delta = o.delta;
+  param.flags = o.bkz_flags;
+
+  if (o.bkz_flags & BKZ_DUMP_GSO)
+    param.dump_gso_filename = o.bkz_dump_gso_filename;
+  if (o.bkz_flags & BKZ_GH_BND)
+    param.gh_factor = o.bkz_gh_factor;
+  if (o.bkz_flags & BKZ_MAX_LOOPS)
+    param.max_loops = o.bkz_max_loops;
+  if (o.verbose)
+    param.flags |= BKZ_VERBOSE;
+  if (o.no_lll)
+    param.flags |= BKZ_NO_LLL;
+
+  status = bkz_reduction(&b, strchr(format, 'u') ? &u : NULL, param, o.float_type, o.precision);
+
+  for (int i = 0; format[i]; i++)
+  {
+    switch (format[i])
+    {
+    case 'b':
+      if (format[i + 1] == 'k')
+      {
+        b.print_comma(cout);
+        i++;
+      }
+      else
+        cout << b << endl;
+      break;
+    case 'u':
+      if (format[i + 1] == 'k')
+      {
+        u.print_comma(cout);
+        i++;
+      }
+      else
+        cout << u << endl;
+      break;
+    case 't':
+      cout << status << endl;
+      break;
+    case ' ':
+      cout << endl;
+      break;
+    }
+  }
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+  }
+  return status;
+}
+
+/* HKZ reduction
+   Note: since we only force |mu_i,j| <= eta with eta > 0.5, the solution
+   is not unique even for a generic matrix */
+
+template <class ZT> int hkz(Options &, ZZ_mat<ZT> &) { ABORT_MSG("mpz required for HKZ"); }
+
+template <> int hkz(Options &o, ZZ_mat<mpz_t> &b)
+{
+  const char *format = o.output_format ? o.output_format : "b";
+  int flags          = 0;
+  if (o.verbose)
+    flags |= HKZ_VERBOSE;
+  int status = hkz_reduction(b, flags, o.float_type, o.precision);
+  for (int i = 0; format[i]; i++)
+  {
+    if (format[i] == 'b')
+    {
+      if (format[i + 1] == 'k')
+      {
+        b.print_comma(cout);
+        i++;
+      }
+      else
+        cout << b << endl;
+    }
+  }
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+  }
+  return status;
+}
+
+/* Shortest vector problem and closest vector problem */
+
+template <class ZT> int svpcvp(Options &, ZZ_mat<ZT> &, const vector<Z_NR<ZT>> &target)
+{
+  if (target.empty())
+  {
+    ABORT_MSG("mpz required for SVP");
+  }
+  else
+  {
+    ABORT_MSG("mpz required for CVP");
+  }
+}
+
+template <> int svpcvp(Options &o, ZZ_mat<mpz_t> &b, const vector<Z_NR<mpz_t>> &target)
+{
+  const char *format = o.output_format ? o.output_format : "s";
+  vector<Z_NR<mpz_t>> sol_coord;    // In the LLL-reduced basis
+  vector<Z_NR<mpz_t>> sol_coord_2;  // In the initial basis
+  vector<Z_NR<mpz_t>> solution;
+  ZZ_mat<mpz_t> u;
+  bool with_coord     = strchr(format, 'c') != NULL;
+  bool with_coord_std = strchr(format, 's') != NULL;
+  int flags           = SVP_DEFAULT | (o.verbose ? SVP_VERBOSE : 0);
+  int flagsLLL        = LLL_DEFAULT | (o.verbose ? LLL_VERBOSE : 0);
+  int status;
+
+  if (!o.no_lll)
+  {
+    if (with_coord)
+    {
+      status = lll_reduction(b, u, LLL_DEF_DELTA, LLL_DEF_ETA, LM_WRAPPER, FT_DEFAULT, 0, flagsLLL);
+    }
+    else
+    {
+      status = lll_reduction(b, LLL_DEF_DELTA, LLL_DEF_ETA, LM_WRAPPER, FT_DEFAULT, 0, flagsLLL);
+    }
+    if (status != RED_SUCCESS)
+    {
+      cerr << "LLL reduction failed: " << get_red_status_str(status) << endl;
+      return status;
+    }
+  }
+
+  if (target.empty())
+    status = shortest_vector(b, sol_coord, SVPM_PROVED, flags);
+  else
+    status = closest_vector(b, target, sol_coord, flags);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+    return status;
+  }
+  if (with_coord)
+  {
+    if (o.no_lll)
+      sol_coord_2 = sol_coord;
+    else
+      vector_matrix_product(sol_coord_2, sol_coord, u);
+  }
+  if (with_coord_std)
+  {
+    vector_matrix_product(solution, sol_coord, b);
+  }
+
+  for (int i = 0; format[i]; i++)
+  {
+    switch (format[i])
+    {
+    case 'c':
+      cout << sol_coord_2 << endl;
+      break;
+    case 's':
+      cout << solution << endl;
+      break;
+    case 't':
+      cout << status << endl;
+      break;
+    case ' ':
+      cout << endl;
+      break;
+    }
+  }
+  return status;
+}
+
+template <class ZT> int hlll(Options &o, ZZ_mat<ZT> &b)
+{
+  // Stupid initialization of u and u_inv to be not empty.
+  ZZ_mat<ZT> u(1, 1), u_inv(1, 1);
+  const char *format = o.output_format ? o.output_format : "b";
+  int status, flags = 0;
+  if (o.verbose)
+    flags |= LLL_VERBOSE;
+
+  if (strchr(format, 'v') != NULL)
+  {
+    status = hlll_reduction(b, u, u_inv, o.delta, o.eta, o.theta, o.c, o.method, o.float_type,
+                            o.precision, flags, o.no_lll);
+  }
+  else if (strchr(format, 'u') != NULL)
+  {
+    status = hlll_reduction(b, u, o.delta, o.eta, o.theta, o.c, o.method, o.float_type, o.precision,
+                            flags, o.no_lll);
+  }
+  else
+  {
+    status = hlll_reduction(b, o.delta, o.eta, o.theta, o.c, o.method, o.float_type, o.precision,
+                            flags, o.no_lll);
+  }
+
+  for (int i = 0; format[i]; i++)
+  {
+    switch (format[i])
+    {
+    case 'b':
+      if (format[i + 1] == 'k')
+      {
+        b.print_comma(cout);
+        i++;
+      }
+      else
+        cout << b << endl;
+      break;
+    case 'u':
+      if (format[i + 1] == 'k')
+      {
+        u.print_comma(cout);
+        i++;
+      }
+      else
+        cout << u << endl;
+      break;
+    case 'v':
+      if (format[i + 1] == 'k')
+      {
+        u_inv.print_comma(cout);
+        i++;
+      }
+      else
+        cout << u_inv << endl;
+      break;
+    case ' ':
+      cout << endl;
+      break;
+    }
+  }
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+  }
+  return status;
+}
+
+template <class ZT> int prune(Options &, ZZ_mat<ZT> &) { ABORT_MSG("mpz required for pruner"); }
+
+template <> int prune(Options &o, ZZ_mat<mpz_t> &b)
+{
+
+  int status, prune_start = 0, prune_end = b.get_rows();
+  double gh_factor = 1.0, prune_pre_nodes = 1e6, prune_min_prob = -1.0;
+
+  if (o.bkz_flags & BKZ_GH_BND)
+    gh_factor = o.bkz_gh_factor;
+
+  if (o.prune_start)
+    prune_start = o.prune_start;
+
+  if (o.prune_end)
+    prune_end = o.prune_end;
+
+  if (o.prune_pre_nodes)
+    prune_pre_nodes = o.prune_pre_nodes;
+
+  if (o.prune_min_prob)
+    prune_min_prob = o.prune_min_prob;
+
+  status = run_pruner(b, o.float_type, o.precision, prune_start, prune_end, prune_pre_nodes,
+                      prune_min_prob, gh_factor);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+  }
+  return status;
+}
+
+template <class ZT> int run_action(Options &o)
+{
+  istream *is;
+  ZZ_mat<ZT> m;
+  vector<Z_NR<ZT>> target;
+
+  if (o.input_file)
+    is = new ifstream(o.input_file);
+  else
+    is = &cin;
+
+  *is >> m;
+  if (o.action == ACTION_CVP)
+  {
+    *is >> target;
+  }
+  if (!*is)
+    ABORT_MSG("invalid input");
+  if (o.input_file)
+    delete is;
+
+  int result = 0;
+  switch (o.action)
+  {
+  case ACTION_LLL:
+    result = lll(o, m);
+    break;
+  case ACTION_SVP:
+    result = svpcvp(o, m, target);
+    break;
+  case ACTION_CVP:
+    result = svpcvp(o, m, target);
+    break;
+  case ACTION_HKZ:
+    result = hkz(o, m);
+    break;
+  case ACTION_BKZ:
+    result = bkz(o, m);
+    break;
+  case ACTION_HLLL:
+    result = hlll(o, m);
+    break;
+  case ACTION_PRU:
+    result = prune(o, m);
+    break;
+  default:
+    ABORT_MSG("unimplemented action");
+    break;
+  }
+  return result;
+}
+
+/* Command line parsing */
+
+void read_options(int argc, char **argv, Options &o)
+{
+  for (int ac = 1; ac < argc; ac++)
+  {
+    if (strcmp(argv[ac], "-a") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -a switch");
+      if (strcmp(argv[ac], "lll") == 0)
+        o.action = ACTION_LLL;
+      else if (strcmp(argv[ac], "hkz") == 0)
+        o.action = ACTION_HKZ;
+      else if (strcmp(argv[ac], "bkz") == 0)
+        o.action = ACTION_BKZ;
+      else if (strcmp(argv[ac], "svp") == 0)
+        o.action = ACTION_SVP;
+      else if (strcmp(argv[ac], "cvp") == 0)
+        o.action = ACTION_CVP;
+      else if (strcmp(argv[ac], "sdb") == 0)
+      {
+        o.action = ACTION_BKZ;
+        o.bkz_flags |= BKZ_SD_VARIANT;
+      }
+      else if (strcmp(argv[ac], "sld") == 0)
+      {
+        o.action = ACTION_BKZ;
+        o.bkz_flags |= BKZ_SLD_RED;
+      }
+      else if (strcmp(argv[ac], "hlll") == 0)
+        o.action = ACTION_HLLL;
+      else if (strcmp(argv[ac], "pru") == 0)
+        o.action = ACTION_PRU;
+      else
+        ABORT_MSG("parse error in -a switch: lll or svp expected");
+    }
+    else if (strcmp(argv[ac], "-b") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -b switch");
+      o.block_size = atoi(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-prustart") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -prustart switch");
+      o.prune_start = atoi(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-pruend") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -pruend switch");
+      o.prune_end = atoi(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-pruprenodes") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after '-pruprenodes'");
+      o.prune_pre_nodes = atof(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-pruminprob") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after '-pruminprob'");
+      o.prune_min_prob = atof(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-bkzboundedlll") == 0)
+    {
+      o.bkz_flags |= BKZ_BOUNDED_LLL;
+    }
+    else if (strcmp(argv[ac], "-bkzmaxloops") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after '-bkzmaxloops'");
+      o.bkz_max_loops = atoi(argv[ac]);
+      o.bkz_flags |= BKZ_MAX_LOOPS;
+    }
+    else if (strcmp(argv[ac], "-bkzmaxtime") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after '-bkzmaxtime'");
+      o.bkz_max_time = atof(argv[ac]);
+      o.bkz_flags |= BKZ_MAX_TIME;
+    }
+    else if (strcmp(argv[ac], "-bkzautoabort") == 0)
+    {
+      o.bkz_flags |= BKZ_AUTO_ABORT;
+    }
+    else if (strcmp(argv[ac], "-bkzdumpgso") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing filename after -bkzdumpgso switch");
+      o.bkz_dump_gso_filename = argv[ac];
+      o.bkz_flags |= BKZ_DUMP_GSO;
+    }
+    else if (strcmp(argv[ac], "-c") == 0 || strcmp(argv[ac], "-r") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -c switch");
+      o.c = atof(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-bkzghbound") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after '-bkzghbound'");
+      o.bkz_gh_factor = atof(argv[ac]);
+      o.bkz_flags |= BKZ_GH_BND;
+    }
+    else if (strcmp(argv[ac], "-d") == 0 || strcmp(argv[ac], "-delta") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -d switch");
+      o.delta = atof(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-e") == 0 || strcmp(argv[ac], "-eta") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -e switch");
+      o.eta = atof(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-t") == 0 || strcmp(argv[ac], "-theta") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -t switch");
+      o.theta = atof(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-f") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -f switch");
+      if (strcmp("mpfr", argv[ac]) == 0)
+        o.float_type = FT_MPFR;
+      else if (strcmp("dpe", argv[ac]) == 0)
+        o.float_type = FT_DPE;
+      else if (strcmp("dd", argv[ac]) == 0)
+        o.float_type = FT_DD;
+      else if (strcmp("qd", argv[ac]) == 0)
+        o.float_type = FT_QD;
+      else if (strcmp("double", argv[ac]) == 0)
+        o.float_type = FT_DOUBLE;
+      else if (strcmp("longdouble", argv[ac]) == 0)
+        o.float_type = FT_LONG_DOUBLE;
+      else
+        ABORT_MSG("parse error in -f switch : mpfr, qd, dd, dpe or double expected");
+    }
+    else if (strcmp(argv[ac], "-s") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -s switch");
+      o.bkz_strategy_file = argv[ac];
+    }
+    else if (strcmp(argv[ac], "-l") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -l switch");
+      o.siegel = !atoi(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-m") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -m switch");
+      if (strcmp("wrapper", argv[ac]) == 0)
+        o.method = LM_WRAPPER;
+      else if (strcmp("proved", argv[ac]) == 0)
+        o.method = LM_PROVED;
+      else if (strcmp("heuristic", argv[ac]) == 0)
+        o.method = LM_HEURISTIC;
+      else if (strcmp("fast", argv[ac]) == 0)
+        o.method = LM_FAST;
+      else if (strcmp("fastearly", argv[ac]) == 0 || strcmp("heuristicearly", argv[ac]) == 0)
+      {
+        string m = string(argv[ac]);
+        // m.substr(0, m.size() - 4) remove early from the string
+        ABORT_MSG("use '-m " << m.substr(0, m.size() - 5) << " -y' instead of " << argv[ac]);
+      }
+      else
+        ABORT_MSG("parse error in -m switch : proved, heuristic, fast, "
+                  << "or wrapper expected");
+    }
+    else if (strcmp(argv[ac], "-nolll") == 0)
+    {
+      o.no_lll = true;
+    }
+    else if (strcmp(argv[ac], "-of") == 0)
+    {
+      ac++;
+      CHECK(ac < argc, "missing value after -of switch");
+      o.output_format = argv[ac];
+    }
+    else if (strcmp(argv[ac], "-p") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -p switch");
+      o.precision = atoi(argv[ac]);
+    }
+    else if (strcmp(argv[ac], "-v") == 0)
+    {
+      o.verbose = true;
+    }
+    else if (strcmp(argv[ac], "-y") == 0)
+    {
+      o.early_red = true;
+    }
+    else if (strcmp(argv[ac], "-z") == 0)
+    {
+      ++ac;
+      CHECK(ac < argc, "missing value after -z switch");
+      if (strcmp("mpz", argv[ac]) == 0)
+        o.int_type = ZT_MPZ;
+      else if (strcmp("long", argv[ac]) == 0 || strcmp("int", argv[ac]) == 0)
+        o.int_type = ZT_LONG;
+      else if (strcmp("double", argv[ac]) == 0)
+        o.int_type = ZT_DOUBLE;
+      else
+        ABORT_MSG("parse error in -z switch : int, double or mpz expected");
+    }
+    else if ((strcmp(argv[ac], "-h") == 0) || (strcmp(argv[ac], "--help") == 0))
+    {
+      cout << "Usage: " << argv[0] << " [options] [file]\n"
+
+           << "List of options:\n"
+           << "  -a [lll|bkz|hkz|svp|sdb|sld|cvp]\n"
+           << "       lll = LLL-reduce the input matrix (default)\n"
+           << "       bkz = BKZ-reduce the input matrix\n"
+           << "       hkz = HKZ-reduce the input matrix\n"
+           << "       svp = compute a shortest non-zero vector of the lattice\n"
+           << "       sdb = reduce the input matrix using the self dual BKZ variant\n"
+           << "       sld = slide reduce the input matrix\n"
+           << "       cvp = compute the vector in the input lattice closest to an input vector\n"
+           << "       hlll = HLLL-reduce the input matrix\n"
+           << "  -v\n"
+           << "       Enable verbose mode\n"
+           << "  -nolll\n"
+           << "       Does not apply initial LLL-reduction (for bkz, hkz and svp)\n"
+           << "  -c <c>\n"
+           << "       An arbitrary double constant > 0 for HLLL (default=0.1)\n"
+           << "  -r <size>\n"
+           << "       Was the number of rows (ignored)\n"
+
+           << "  -d <delta> (default=0.99; alias to -delta <delta>)\n"
+           << "  -e <eta> (default=0.51; alias to -eta <eta>)\n"
+           << "  -t <theta> (default=0.001; alias to -theta <theta>)\n"
+           << "  -l <lovasz>\n"
+           << "       If <lovasz> != 0, Lovasz's condition, otherwise, Siegel's condition\n"
+           << "  -f [mpfr|dd|qd|dpe|double|longdouble]\n"
+           << "       Floating-point type in LLL\n"
+           << "  -p <precision>\n"
+           << "       Floating-point precision (only with -f mpfr)\n"
+           << "  -z [mpz|int|long|double]\n"
+           << "       Integer type in LLL (default: mpz; long is an alias to int)\n"
+           << "  -m [wrapper|fast|heuristic|proved]\n"
+           << "       LLL version (default: wrapper)\n"
+           << "  -y\n"
+           << "       Enable early reduction\n"
+
+           << "  -b <block_size>\n"
+           << "       Size of BKZ blocks\n"
+           << "  -bkzmaxloops <loops>\n"
+           << "       Maximum number of full loop iterations\n"
+           << "  -bkzmaxtime <time>\n"
+           << "        Stops after <time> seconds\n"
+           << "  -bkzautoabort\n"
+           << "        Stops when the average slope does not decrease fast enough\n"
+           << "  -s <filename.json>\n"
+           << "        Load BKZ strategies from filename\n"
+           << "  -bkzghbound <factor>\n"
+           << "        Multiplies the Gaussian heuristic by <factor> (of float type)\n"
+           << "  -bkzboundedlll\n"
+           << "        Restricts the LLL call\n"
+           << "  -bkzdumpgso <file_name>\n"
+           << "        Dumps the log of the Gram-Schmidt vectors in specified file\n"
+           << "  -of [b|c|s|t|u|v|bk|uk|vk]\n"
+           << "        Output formats.\n"
+
+           << "Please refer to https://github.com/fplll/fplll/README.md for more information.\n";
+      exit(0);
+    }
+    else if (strcmp(argv[ac], "--version") == 0)
+    {
+      cout << "fplll " << VERSION << endl
+           << "Copyright 2005-2012 Damien Stehle, David Cade, Xavier Pujol." << endl
+           << "fplll is free software. You can redistribute it and/or modify" << endl
+           << "it under the terms of the GNU Lesser General Public License as published by" << endl
+           << "the Free Software Foundation, either version 2.1 of the License, or" << endl
+           << "(at your option) any later version." << endl;
+      exit(0);
+    }
+    else if (argv[ac][0] == '-')
+    {
+      ABORT_MSG("invalid option '" << argv[ac]
+                                   << "'.\n"
+                                      "Try '"
+                                   << argv[0] << " --help' for more information.");
+    }
+    else
+    {
+      CHECK(!o.input_file, "too many input files");
+      o.input_file = argv[ac];
+    }
+  }
+}
+
+int main(int argc, char **argv)
+{
+  int result;
+  Options o;
+  read_options(argc, argv, o);
+  ZZ_mat<mpz_t>::set_print_mode(MAT_PRINT_REGULAR);
+  switch (o.int_type)
+  {
+  case ZT_MPZ:
+    result = run_action<mpz_t>(o);
+    break;
+#ifdef FPLLL_WITH_ZLONG
+  case ZT_LONG:
+    result = run_action<long int>(o);
+    break;
+#endif
+#ifdef FPLLL_WITH_ZDOUBLE
+  case ZT_DOUBLE:
+    result = run_action<double>(o);
+    break;
+#endif
+  default:
+    ABORT_MSG("compiled without support for this integer type");
+  }
+  return result;
+}
diff --git a/fplll/main.h b/fplll/main.h
new file mode 100644 (file)
index 0000000..4018ba7
--- /dev/null
@@ -0,0 +1,90 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2008-2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_MAIN_H
+#define FPLLL_MAIN_H
+
+#include "fplll.h"
+#include <cstring>
+
+#define ABORT_MSG(y)                                                                               \
+  {                                                                                                \
+    cerr << "fplll: " << y << endl;                                                                \
+    exit(1);                                                                                       \
+  }
+#define CHECK(x, y)                                                                                \
+  if (!(x))                                                                                        \
+  ABORT_MSG(y)
+
+using namespace std;
+using namespace fplll;
+
+enum Action
+{
+  ACTION_LLL,
+  ACTION_HKZ,
+  ACTION_BKZ,
+  ACTION_SVP,
+  ACTION_CVP,
+  ACTION_HLLL,
+  ACTION_PRU
+};
+
+struct Options
+{
+  Options()
+      : action(ACTION_LLL), method(LM_WRAPPER), int_type(ZT_MPZ), float_type(FT_DEFAULT),
+        delta(LLL_DEF_DELTA), eta(LLL_DEF_ETA), precision(0), early_red(false), siegel(false),
+        no_lll(false), block_size(0), bkz_gh_factor(1.1), verbose(false), input_file(NULL),
+        output_format(NULL), theta(HLLL_DEF_THETA), c(HLLL_DEF_C)
+  {
+    bkz_flags     = 0;
+    bkz_max_loops = 0;
+    bkz_max_time  = 0;
+  }
+  Action action;
+  LLLMethod method;
+  IntType int_type;
+  FloatType float_type;
+  double delta;
+  double eta;
+  int precision;
+  bool early_red;
+  bool siegel;
+
+  bool no_lll;
+  int block_size;
+  int bkz_flags;
+  int bkz_max_loops;
+  int prune_start;
+  int prune_end;
+  double prune_pre_nodes;
+  double prune_min_prob;
+  double bkz_max_time;
+  string bkz_dump_gso_filename;
+  double bkz_gh_factor;
+  string bkz_strategy_file;
+
+  bool verbose;
+  const char *input_file;
+  const char *output_format;
+
+  double theta;
+  double c;
+};
+
+#endif
diff --git a/fplll/nr/dpe.h b/fplll/nr/dpe.h
new file mode 100644 (file)
index 0000000..c132378
--- /dev/null
@@ -0,0 +1,753 @@
+/* Copyright (C) 2004, 2005, 2006, 2008 Patrick Pelissier, Paul Zimmermann,
+   LORIA/INRIA Nancy - Grand-Est.
+
+   This file is part of the DPE Library.
+
+   The DPE Library is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1 of the License, or (at your
+   option) any later version.
+
+   The DPE Library is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+   License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with the DPE Library; see the file COPYING.LIB.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+   MA 02110-1301, USA. */
+
+/* WARNING: Patched version */
+
+#ifndef FPLLL_DPE_H
+#define FPLLL_DPE_H
+#define __DPE
+
+#include <math.h>   /* for round, floor, ceil */
+#include <stdio.h>  /* For fprintf and fscanf */
+#include <stdlib.h> /* For exit */
+#if defined(__sun)  /* for round on Solaris 10 */
+#include "ieeefp.h"
+#include "tgmath.h"
+#undef NAN
+#define NAN 0.0 / 0.0
+#endif
+#include <limits.h>
+
+#define DPE_VERSION_MAJOR 1
+#define DPE_VERSION_MINOR 5
+
+#if defined(__GNUC__) && (__GNUC__ >= 3)
+#define DPE_LIKELY(x) (__builtin_expect(!!(x), 1))
+#define DPE_UNLIKELY(x) (__builtin_expect((x), 0))
+#define DPE_UNUSED_ATTR __attribute__((unused))
+#else
+#define DPE_LIKELY(x) (x)
+#define DPE_UNLIKELY(x) (x)
+#define DPE_UNUSED_ATTR
+#endif
+
+#if !defined(DPE_USE_DOUBLE) && !defined(DPE_USE_LONGDOUBLE)
+#define DPE_USE_DOUBLE
+#endif
+
+#if (defined(__i386) || defined(__x86_64)) && !defined(DPE_LITTLEENDIAN32) &&                      \
+    defined(DPE_USE_DOUBLE)
+#define DPE_LITTLEENDIAN32
+#endif
+
+#if defined(DPE_USE_DOUBLE)
+#define DPE_DOUBLE double /* mantissa type */
+#define DPE_BITSIZE 53    /* bitsize of DPE_DOUBLE */
+#define DPE_2_POW_BITSIZE 9007199254740992
+/* DPE_LDEXP(DPE_DOUBLE m, DPEEXP e) return x = m * 2^e */
+#define DPE_LDEXP ldexp
+/* DPE_FREXP(DPE_DOUBLE x, DPEEXP *e) returns m, e such that x = m * 2^e with
+   1/2 <= m < 1 */
+#define DPE_FREXP frexp
+/* DPE_ROUND(DPE_DOUBLE x) returns the nearest integer to x */
+#define DPE_ROUND round
+#define DPE_RINT rint
+#define DPE_FLOOR floor
+#define DPE_CEIL ceil
+#define DPE_TRUNC trunc
+#elif defined(DPE_USE_LONGDOUBLE)
+#define DPE_DOUBLE long double
+#define DPE_BITSIZE 64
+#define DPE_2_POW_BITSIZE 18446744073709551616
+#define DPE_LDEXP ldexpl
+#define DPE_FREXP frexpl
+#define DPE_ROUND roundl
+#define DPE_RINT rintl
+#define DPE_FLOOR floorl
+#define DPE_CEIL ceill
+#define DPE_TRUNC truncl
+#else
+#error "neither DPE_USE_DOUBLE nor DPE_USE_LONGDOUBLE is defined"
+#endif
+
+#if defined(DPE_USE_LONG)
+#define DPE_EXP_T long      /* exponent type */
+#define DPE_EXPMIN LONG_MIN /* smallest possible exponent */
+#elif defined(DPE_USE_LONGLONG)
+#define DPE_EXP_T long long
+#define DPE_EXPMIN LONG_LONG_MIN
+#else
+#define DPE_EXP_T int      /* exponent type */
+#define DPE_EXPMIN INT_MIN /* smallest possible exponent */
+#endif
+
+typedef union {
+  double d;
+  int i[2];
+} dpe_double_words;
+
+typedef struct
+{
+  DPE_DOUBLE d;  /* significand */
+  DPE_EXP_T exp; /* exponent */
+} dpe_struct;
+
+typedef dpe_struct dpe_t[1];
+
+#define DPE_MANT(x) ((x)->d)
+#define DPE_EXP(x) ((x)->exp)
+#define DPE_SIGN(x) ((DPE_MANT(x) < 0.0) ? -1 : (DPE_MANT(x) > 0.0))
+
+#define DPE_INLINE static inline
+
+/* initialize */
+DPE_INLINE void dpe_init(dpe_t x DPE_UNUSED_ATTR) {}
+
+/* clear */
+DPE_INLINE void dpe_clear(dpe_t x DPE_UNUSED_ATTR) {}
+
+/* set x to y */
+DPE_INLINE void dpe_set(dpe_t x, const dpe_t y)
+{
+  DPE_MANT(x) = DPE_MANT(y);
+  DPE_EXP(x)  = DPE_EXP(y);
+}
+
+/* set x to -y */
+DPE_INLINE void dpe_neg(dpe_t x, const dpe_t y)
+{
+  DPE_MANT(x) = -DPE_MANT(y);
+  DPE_EXP(x)  = DPE_EXP(y);
+}
+
+/* set x to |y| */
+DPE_INLINE void dpe_abs(dpe_t x, const dpe_t y)
+{
+  DPE_MANT(x) = (DPE_MANT(y) >= 0) ? DPE_MANT(y) : -DPE_MANT(y);
+  DPE_EXP(x)  = DPE_EXP(y);
+}
+
+/* set mantissa in [1/2, 1), except for 0 which has minimum exponent */
+static void dpe_normalize(dpe_t x)
+{
+  if (DPE_UNLIKELY(DPE_MANT(x) == 0.0 || std::isfinite(DPE_MANT(x)) == 0))
+  {
+    if (DPE_MANT(x) == 0.0)
+      DPE_EXP(x) = DPE_EXPMIN;
+    /* otherwise let the exponent of NaN, Inf unchanged */
+  }
+  else
+  {
+    DPE_EXP_T e;
+#ifdef DPE_LITTLEENDIAN32 /* 32-bit little endian */
+    dpe_double_words dw;
+    dw.d = DPE_MANT(x);
+    e    = (dw.i[1] >> 20) & 0x7FF; /* unbiased exponent, 1022 for m=1/2 */
+    DPE_EXP(x) += e - 1022;
+    dw.i[1]     = (dw.i[1] & 0x800FFFFF) | 0x3FE00000;
+    DPE_MANT(x) = dw.d;
+#else /* portable code */
+    double m    = DPE_MANT(x);
+    DPE_MANT(x) = DPE_FREXP(m, &e);
+    DPE_EXP(x) += e;
+#endif
+  }
+}
+
+#if defined(DPE_USE_DOUBLE)
+static const double dpe_scale_tab[54] = {
+    1.0000000000000000000,  0.5000000000000000000,  0.2500000000000000000,  0.1250000000000000000,
+    0.0625000000000000000,  0.0312500000000000000,  0.0156250000000000000,  0.0078125000000000000,
+    0.0039062500000000000,  0.0019531250000000000,  0.0009765625000000000,  0.0004882812500000000,
+    0.0002441406250000000,  0.0001220703125000000,  0.0000610351562500000,  0.0000305175781250000,
+    0.0000152587890625000,  7.6293945312500000e-6,  3.8146972656250000e-6,  1.9073486328125000e-6,
+    9.5367431640625000e-7,  4.7683715820312500e-7,  2.3841857910156250e-7,  1.1920928955078125e-7,
+    5.9604644775390625e-8,  2.9802322387695312e-8,  1.4901161193847656e-8,  7.4505805969238281e-9,
+    3.7252902984619141e-9,  1.8626451492309570e-9,  9.3132257461547852e-10, 4.6566128730773926e-10,
+    2.3283064365386963e-10, 1.1641532182693481e-10, 5.8207660913467407e-11, 2.9103830456733704e-11,
+    1.4551915228366852e-11, 7.2759576141834259e-12, 3.6379788070917130e-12, 1.8189894035458565e-12,
+    9.0949470177292824e-13, 4.5474735088646412e-13, 2.2737367544323206e-13, 1.1368683772161603e-13,
+    5.6843418860808015e-14, 2.8421709430404007e-14, 1.4210854715202004e-14, 7.1054273576010019e-15,
+    3.5527136788005009e-15, 1.7763568394002505e-15, 8.8817841970012523e-16, 4.4408920985006262e-16,
+    2.2204460492503131e-16, 1.1102230246251565e-16};
+#endif
+
+DPE_INLINE double dpe_scale(double d, int s)
+{
+/* -DPE_BITSIZE < s <= 0 and 1/2 <= d < 1 */
+#if defined(DPE_USE_DOUBLE)
+  return d * dpe_scale_tab[-s];
+#else /* portable code */
+  return DPE_LDEXP(d, s);
+#endif
+}
+
+/* set x to y */
+DPE_INLINE void dpe_set_d(dpe_t x, double y)
+{
+  DPE_MANT(x) = (DPE_DOUBLE)y;
+  DPE_EXP(x)  = 0;
+  dpe_normalize(x);
+}
+
+/* set x to y */
+DPE_INLINE void dpe_set_ld(dpe_t x, long double y)
+{
+  DPE_MANT(x) = (DPE_DOUBLE)y;
+  DPE_EXP(x)  = 0;
+  dpe_normalize(x);
+}
+
+/* set x to y */
+DPE_INLINE void dpe_set_ui(dpe_t x, unsigned long y)
+{
+  DPE_MANT(x) = (DPE_DOUBLE)y;
+  DPE_EXP(x)  = 0;
+  dpe_normalize(x);
+}
+
+/* set x to y */
+DPE_INLINE void dpe_set_si(dpe_t x, long y)
+{
+  DPE_MANT(x) = (DPE_DOUBLE)y;
+  DPE_EXP(x)  = 0;
+  dpe_normalize(x);
+}
+
+DPE_INLINE long dpe_get_si(const dpe_t x)
+{
+  DPE_DOUBLE d = DPE_LDEXP(DPE_MANT(x), DPE_EXP(x));
+  return (long)d;
+}
+
+DPE_INLINE unsigned long dpe_get_ui(const dpe_t x)
+{
+  DPE_DOUBLE d = DPE_LDEXP(DPE_MANT(x), DPE_EXP(x));
+  return (d < 0.0) ? 0 : (unsigned long)d;
+}
+
+DPE_INLINE double dpe_get_d(const dpe_t x) { return DPE_LDEXP(DPE_MANT(x), DPE_EXP(x)); }
+
+DPE_INLINE long double dpe_get_ld(const dpe_t x) { return DPE_LDEXP(DPE_MANT(x), DPE_EXP(x)); }
+
+#ifdef __GMP_H__
+/* set x to y */
+DPE_INLINE void dpe_set_z(dpe_t x, const mpz_t y)
+{
+  long e;
+  DPE_MANT(x) = mpz_get_d_2exp(&e, y);
+  DPE_EXP(x)  = (DPE_EXP_T)e;
+}
+
+/* set x to y, rounded to nearest */
+DPE_INLINE void dpe_get_z(mpz_t x, const dpe_t y)
+{
+  DPE_EXP_T ey = DPE_EXP(y);
+  if (ey >= DPE_BITSIZE) /* y is an integer */
+  {
+    DPE_DOUBLE d = DPE_MANT(y) * DPE_2_POW_BITSIZE; /* d is an integer */
+    mpz_set_d(x, d);                                /* should be exact */
+    mpz_mul_2exp(x, x, (unsigned long)ey - DPE_BITSIZE);
+  }
+  else /* DPE_EXP(y) < DPE_BITSIZE */
+  {
+    if (DPE_UNLIKELY(ey < 0)) /* |y| < 1/2 */
+      mpz_set_ui(x, 0);
+    else
+    {
+      DPE_DOUBLE d = DPE_LDEXP(DPE_MANT(y), ey);
+      mpz_set_d(x, (double)DPE_ROUND(d));
+    }
+  }
+}
+
+/* return e and x such that y = x*2^e */
+DPE_INLINE mp_exp_t dpe_get_z_exp(mpz_t x, const dpe_t y)
+{
+  mpz_set_d(x, DPE_MANT(y) * DPE_2_POW_BITSIZE);
+  return DPE_EXP(y) - DPE_BITSIZE;
+}
+
+#endif  //#ifdef __GMP_H__
+
+#ifdef __MPFR_H
+/* set x to y where y is mpfr_t. */
+DPE_INLINE void dpe_get_mpfr(mpfr_t y, const dpe_t x, const mp_rnd_t rnd)
+{
+  mpfr_set_d(y, DPE_MANT(x), rnd);
+  mpfr_mul_2si(y, y, DPE_EXP(x), rnd);
+}
+
+/* set y to x */
+DPE_INLINE void dpe_set_mpfr(dpe_t x, const mpfr_t y)
+{
+  long exp;
+  DPE_MANT(x) = mpfr_get_d_2exp(&exp, y, GMP_RNDN);
+  DPE_EXP(x)  = exp;
+  dpe_normalize(x);
+}
+
+#endif  // __MPFR_H
+
+/* x <- y + z, assuming y and z are normalized, returns x normalized */
+DPE_INLINE void dpe_add(dpe_t x, const dpe_t y, const dpe_t z)
+{
+  if (DPE_UNLIKELY(DPE_EXP(y) > DPE_EXP(z) + DPE_BITSIZE))
+    /* |z| < 1/2*ulp(y), thus o(y+z) = y */
+    dpe_set(x, y);
+  else if (DPE_UNLIKELY(DPE_EXP(z) > DPE_EXP(y) + DPE_BITSIZE))
+    dpe_set(x, z);
+  else
+  {
+    DPE_EXP_T d = DPE_EXP(y) - DPE_EXP(z); /* |d| <= DPE_BITSIZE */
+
+    if (d >= 0)
+    {
+      DPE_MANT(x) = DPE_MANT(y) + dpe_scale(DPE_MANT(z), -d);
+      DPE_EXP(x)  = DPE_EXP(y);
+    }
+    else
+    {
+      DPE_MANT(x) = DPE_MANT(z) + dpe_scale(DPE_MANT(y), d);
+      DPE_EXP(x)  = DPE_EXP(z);
+    }
+    dpe_normalize(x);
+  }
+}
+
+/* x <- y - z, assuming y and z are normalized, returns x normalized */
+DPE_INLINE void dpe_sub(dpe_t x, const dpe_t y, const dpe_t z)
+{
+  if (DPE_UNLIKELY(DPE_EXP(y) > DPE_EXP(z) + DPE_BITSIZE))
+    /* |z| < 1/2*ulp(y), thus o(y-z) = y */
+    dpe_set(x, y);
+  else if (DPE_UNLIKELY(DPE_EXP(z) > DPE_EXP(y) + DPE_BITSIZE))
+    dpe_neg(x, z);
+  else
+  {
+    DPE_EXP_T d = DPE_EXP(y) - DPE_EXP(z); /* |d| <= DPE_BITSIZE */
+
+    if (d >= 0)
+    {
+      DPE_MANT(x) = DPE_MANT(y) - dpe_scale(DPE_MANT(z), -d);
+      DPE_EXP(x)  = DPE_EXP(y);
+    }
+    else
+    {
+      DPE_MANT(x) = dpe_scale(DPE_MANT(y), d) - DPE_MANT(z);
+      DPE_EXP(x)  = DPE_EXP(z);
+    }
+    dpe_normalize(x);
+  }
+}
+
+/* x <- y * z, assuming y and z are normalized, returns x normalized */
+DPE_INLINE void dpe_mul(dpe_t x, const dpe_t y, const dpe_t z)
+{
+  DPE_MANT(x) = DPE_MANT(y) * DPE_MANT(z);
+  DPE_EXP(x)  = DPE_EXP(y) + DPE_EXP(z);
+  dpe_normalize(x);
+}
+
+/* x <- y * z, assuming y and z are normalized, returns x normalized */
+DPE_INLINE void dpe_mul_d(dpe_t x, const dpe_t y, const double z)
+{
+  dpe_t zt;
+  dpe_set_d(zt, z);
+  DPE_MANT(x) = DPE_MANT(y) * DPE_MANT(zt);
+  DPE_EXP(x)  = DPE_EXP(y) + DPE_EXP(zt);
+  dpe_normalize(x);
+}
+
+/* x <- x + y * z, assuming y and z are normalized, returns x normalized */
+DPE_INLINE void dpe_addmul(dpe_t x, const dpe_t y, const dpe_t z)
+{
+  dpe_t yz;
+  dpe_mul(yz, y, z);
+  dpe_add(x, x, yz);
+}
+
+/* x <- x - y * z, assuming y and z are normalized, returns x normalized */
+DPE_INLINE void dpe_submul(dpe_t x, const dpe_t y, const dpe_t z)
+{
+  dpe_t yz;
+  dpe_mul(yz, y, z);
+  dpe_sub(x, x, yz);
+}
+
+/* x <- sqrt(y), assuming y is normalized, returns x normalized */
+DPE_INLINE void dpe_sqrt(dpe_t x, const dpe_t y)
+{
+  DPE_EXP_T ey = DPE_EXP(y);
+  if (ey % 2)
+  {
+    /* since 1/2 <= my < 1, 1/4 <= my/2 < 1 */
+    DPE_MANT(x) = sqrt(0.5 * DPE_MANT(y));
+    DPE_EXP(x)  = (ey + 1) / 2;
+  }
+  else
+  {
+    DPE_MANT(x) = sqrt(DPE_MANT(y));
+    DPE_EXP(x)  = ey / 2;
+  }
+}
+
+/* x <- y / z, assuming y and z are normalized, returns x normalized.
+   Assumes z is not zero. */
+DPE_INLINE void dpe_div(dpe_t x, const dpe_t y, const dpe_t z)
+{
+  DPE_MANT(x) = DPE_MANT(y) / DPE_MANT(z);
+  DPE_EXP(x)  = DPE_EXP(y) - DPE_EXP(z);
+  dpe_normalize(x);
+}
+
+/* x <- y * z, assuming y normalized, returns x normalized */
+DPE_INLINE void dpe_mul_ui(dpe_t x, const dpe_t y, unsigned long z)
+{
+  DPE_MANT(x) = DPE_MANT(y) * (DPE_DOUBLE)z;
+  DPE_EXP(x)  = DPE_EXP(y);
+  dpe_normalize(x);
+}
+
+/* x <- y / z, assuming y normalized, z non-zero, returns x normalized */
+DPE_INLINE void dpe_div_ui(dpe_t x, const dpe_t y, unsigned long z)
+{
+  DPE_MANT(x) = DPE_MANT(y) / (DPE_DOUBLE)z;
+  DPE_EXP(x)  = DPE_EXP(y);
+  dpe_normalize(x);
+}
+
+/* x <- y * 2^e */
+DPE_INLINE void dpe_mul_2si(dpe_t x, const dpe_t y, long e)
+{
+  DPE_MANT(x) = DPE_MANT(y);
+  DPE_EXP(x)  = DPE_EXP(y) + (DPE_EXP_T)e;
+}
+
+/* x <- y * 2^e */
+DPE_INLINE void dpe_mul_2exp(dpe_t x, const dpe_t y, unsigned long e)
+{
+  DPE_MANT(x) = DPE_MANT(y);
+  DPE_EXP(x)  = DPE_EXP(y) + (DPE_EXP_T)e;
+}
+
+/* x <- y / 2^e */
+DPE_INLINE void dpe_div_2exp(dpe_t x, const dpe_t y, unsigned long e)
+{
+  DPE_MANT(x) = DPE_MANT(y);
+  DPE_EXP(x)  = DPE_EXP(y) - (DPE_EXP_T)e;
+}
+
+/* return e and x such that y = x*2^e (equality is not guaranteed if the 'long'
+   type has fewer bits than the significand in dpe_t) */
+DPE_INLINE DPE_EXP_T dpe_get_si_exp(long *x, const dpe_t y)
+{
+  if (sizeof(long) == 4) /* 32-bit word: long has 31 bits */
+  {
+    *x = (long)(DPE_MANT(y) * 2147483648.0);
+    return DPE_EXP(y) - 31;
+  }
+  else if (sizeof(long) == 8) /* 64-bit word: long has 63 bits */
+  {
+    *x = (long)(DPE_MANT(y) * 9223372036854775808.0);
+    return DPE_EXP(y) - 63;
+  }
+  else
+  {
+    fprintf(stderr, "Error, neither 32-bit nor 64-bit word\n");
+    abort();
+  }
+}
+
+static DPE_UNUSED_ATTR int dpe_str_prec = 16;
+static int dpe_out_str(FILE *s, int base, const dpe_t x) DPE_UNUSED_ATTR;
+
+static int dpe_out_str(FILE *s, int base, const dpe_t x)
+{
+  DPE_DOUBLE d = DPE_MANT(x);
+  DPE_EXP_T e2 = DPE_EXP(x);
+  int e10      = 0;
+  char sign    = ' ';
+  if (DPE_UNLIKELY(base != 10))
+  {
+    fprintf(stderr, "Error in dpe_out_str, only base 10 allowed\n");
+    abort();
+  }
+  if (d == 0.0)
+#ifdef DPE_USE_DOUBLE
+    return fprintf(s, "%1.*f", dpe_str_prec, d);
+#else
+    return fprintf(s, "foo\n %1.*Lf", dpe_str_prec, d);
+#endif
+  if (d < 0)
+  {
+    d    = -d;
+    sign = '-';
+  }
+  if (e2 > 0)
+  {
+    while (e2 > 0)
+    {
+      e2--;
+      d *= 2.0;
+      if (d >= 10.0)
+      {
+        d /= 10.0;
+        e10++;
+      }
+    }
+  }
+  else /* e2 <= 0 */
+  {
+    while (e2 < 0)
+    {
+      e2++;
+      d /= 2.0;
+      if (d < 1.0)
+      {
+        d *= 10.0;
+        e10--;
+      }
+    }
+  }
+#ifdef DPE_USE_DOUBLE
+  return fprintf(s, "%c%1.*f*10^%d", sign, dpe_str_prec, d, e10);
+#else
+  return fprintf(s, "%c%1.*Lf*10^%d", sign, dpe_str_prec, d, e10);
+#endif
+}
+
+static size_t dpe_inp_str(dpe_t x, FILE *s, int base) DPE_UNUSED_ATTR;
+
+static size_t dpe_inp_str(dpe_t x, FILE *s, int base)
+{
+  size_t res;
+  DPE_DOUBLE d;
+  if (DPE_UNLIKELY(base != 10))
+  {
+    fprintf(stderr, "Error in dpe_out_str, only base 10 allowed\n");
+    abort();
+  }
+#ifdef DPE_USE_DOUBLE
+  res = fscanf(s, "%lf", &d);
+#else
+  res = fscanf(s, "%Lf", &d);
+#endif
+  dpe_set_d(x, d);
+  return res;
+}
+
+DPE_INLINE void dpe_dump(const dpe_t x)
+{
+  dpe_out_str(stdout, 10, x);
+  putchar('\n');
+}
+
+DPE_INLINE int dpe_zero_p(const dpe_t x) { return DPE_MANT(x) == 0; }
+
+/* return a positive value if x > y
+   a negative value if x < y
+   and 0 otherwise (x=y). */
+DPE_INLINE int dpe_cmp(const dpe_t x, const dpe_t y)
+{
+  int sx = DPE_SIGN(x);
+  int d  = sx - DPE_SIGN(y);
+
+  if (d != 0)
+    return d;
+  else if (DPE_EXP(x) > DPE_EXP(y))
+    return (sx > 0) ? 1 : -1;
+  else if (DPE_EXP(y) > DPE_EXP(x))
+    return (sx > 0) ? -1 : 1;
+  else /* DPE_EXP(x) = DPE_EXP(y) */
+    return (DPE_MANT(x) < DPE_MANT(y)) ? -1 : (DPE_MANT(x) > DPE_MANT(y));
+}
+
+DPE_INLINE int dpe_cmp_d(const dpe_t x, double d)
+{
+  dpe_t y;
+  dpe_set_d(y, d);
+  return dpe_cmp(x, y);
+}
+
+DPE_INLINE int dpe_cmp_ui(const dpe_t x, unsigned long d)
+{
+  dpe_t y;
+  dpe_set_ui(y, d);
+  return dpe_cmp(x, y);
+}
+
+DPE_INLINE int dpe_cmp_si(const dpe_t x, long d)
+{
+  dpe_t y;
+  dpe_set_si(y, d);
+  return dpe_cmp(x, y);
+}
+
+/* set x to integer nearest to y */
+DPE_INLINE void dpe_round(dpe_t x, const dpe_t y)
+{
+  if (DPE_EXP(y) < 0) /* |y| < 1/2 */
+    dpe_set_ui(x, 0);
+  else if (DPE_EXP(y) >= DPE_BITSIZE) /* y is an integer */
+    dpe_set(x, y);
+  else
+  {
+    DPE_DOUBLE d;
+    d = DPE_LDEXP(DPE_MANT(y), DPE_EXP(y));
+    dpe_set_d(x, DPE_ROUND(d));
+  }
+}
+
+/* set x to integer nearest to y */
+DPE_INLINE void dpe_rint(dpe_t x, const dpe_t y)
+{
+  if (DPE_EXP(y) < 0) /* |y| < 1/2 */
+    dpe_set_ui(x, 0);
+  else if (DPE_EXP(y) >= DPE_BITSIZE) /* y is an integer */
+    dpe_set(x, y);
+  else
+  {
+    DPE_DOUBLE d;
+    d = DPE_LDEXP(DPE_MANT(y), DPE_EXP(y));
+    dpe_set_d(x, DPE_RINT(d));
+  }
+}
+
+/* set x to the fractional part of y, defined as y - trunc(y), thus the
+   fractional part has absolute value in [0, 1), and same sign as y */
+DPE_INLINE void dpe_frac(dpe_t x, const dpe_t y)
+{
+  /* If |y| is smaller than 1, keep it */
+  if (DPE_EXP(y) <= 0)
+    dpe_set(x, y);
+  else if (DPE_EXP(y) >= DPE_BITSIZE) /* y is an integer */
+    dpe_set_ui(x, 0);
+  else
+  {
+    DPE_DOUBLE d;
+    d = DPE_LDEXP(DPE_MANT(y), DPE_EXP(y));
+    dpe_set_d(x, d - DPE_TRUNC(d));
+  }
+}
+
+/* set x to largest integer <= y */
+DPE_INLINE void dpe_floor(dpe_t x, const dpe_t y)
+{
+  if (DPE_EXP(y) <= 0) /* |y| < 1 */
+  {
+    if (DPE_SIGN(y) >= 0) /* 0 <= y < 1 */
+      dpe_set_ui(x, 0);
+    else /* -1 < y < 0 */
+      dpe_set_si(x, -1);
+  }
+  else if (DPE_EXP(y) >= DPE_BITSIZE) /* y is an integer */
+    dpe_set(x, y);
+  else
+  {
+    DPE_DOUBLE d;
+    d = DPE_LDEXP(DPE_MANT(y), DPE_EXP(y));
+    dpe_set_d(x, DPE_FLOOR(d));
+  }
+}
+
+/* set x to smallest integer >= y */
+DPE_INLINE void dpe_ceil(dpe_t x, const dpe_t y)
+{
+  if (DPE_EXP(y) <= 0) /* |y| < 1 */
+  {
+    if (DPE_SIGN(y) > 0) /* 0 < y < 1 */
+      dpe_set_ui(x, 1);
+    else /* -1 < y <= 0 */
+      dpe_set_si(x, 0);
+  }
+  else if (DPE_EXP(y) >= DPE_BITSIZE) /* y is an integer */
+    dpe_set(x, y);
+  else
+  {
+    DPE_DOUBLE d;
+    d = DPE_LDEXP(DPE_MANT(y), DPE_EXP(y));
+    dpe_set_d(x, DPE_CEIL(d));
+  }
+}
+
+DPE_INLINE void dpe_swap(dpe_t x, dpe_t y)
+{
+  DPE_EXP_T i  = DPE_EXP(x);
+  DPE_DOUBLE d = DPE_MANT(x);
+  DPE_EXP(x)   = DPE_EXP(y);
+  DPE_MANT(x)  = DPE_MANT(y);
+  DPE_EXP(y)   = i;
+  DPE_MANT(y)  = d;
+}
+
+/* Ugly hacks: No correct rounding guaranteed */
+
+DPE_INLINE void dpe_ugly_log(dpe_t x, const dpe_t y)
+{
+  dpe_set_d(x, ((double)DPE_EXP(y)) * M_LN2 + log(DPE_MANT(y)));
+}
+
+DPE_INLINE void dpe_ugly_exp(dpe_t x, const dpe_t y)
+{
+  // printf ("## exp is %ld\n", DPE_EXP(y));
+  dpe_set_d(x, exp(((double)DPE_MANT(y)) * pow(2.0, ((double)DPE_EXP(y)))));
+}
+
+/* More hacks */
+/* x = y^k */
+DPE_INLINE void dpe_pow_si(dpe_t x, const dpe_t y, const unsigned int k)
+{
+  DPE_MANT(x) = pow(DPE_MANT(y), (double)k);
+  DPE_EXP(x)  = DPE_EXP(y) * k;
+  dpe_normalize(x);
+}
+
+#ifdef __MPFR_H
+/* x = e^y */
+DPE_INLINE void dpe_exponential(dpe_t x, const dpe_t y)
+{
+  /* floor(log(DBL_MAX)) = 709 */
+  if (dpe_cmp_ui(y, 709) <= 0 && dpe_cmp_si(y, -709) >= 0)
+    dpe_ugly_exp(x, y);
+  else
+  {
+    mpfr_t t, s;
+    mpfr_init(t);
+    mpfr_init(s);
+    mpfr_set_d(t, 2.0, GMP_RNDN);
+    mpfr_pow_si(t, t, DPE_EXP(y), GMP_RNDN);
+    mpfr_set_d(s, DPE_MANT(y), GMP_RNDN);
+    mpfr_mul(t, t, s, GMP_RNDN);
+    mpfr_exp(t, t, GMP_RNDN);
+    dpe_set_mpfr(x, t);
+    mpfr_clear(t);
+    mpfr_clear(s);
+    mpfr_free_cache();
+  }
+}
+#endif
+
+DPE_INLINE void dpe_log(dpe_t x, const dpe_t y)
+{
+  dpe_set_d(x, (double)DPE_EXP(y) * log(2.0) + log(DPE_MANT(y)));
+}
+
+#endif /* FPLLL_DPE_H */
diff --git a/fplll/nr/matrix.cpp b/fplll/nr/matrix.cpp
new file mode 100644 (file)
index 0000000..965f0eb
--- /dev/null
@@ -0,0 +1,658 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_MATRIX_CPP
+#define FPLLL_MATRIX_CPP
+
+#include "matrix.h"
+#include "../defs.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class T> void Matrix<T>::resize(int rows, int cols)
+{
+  int old_size = matrix.size();
+  if (old_size < rows)
+  {
+    vector<NumVect<T>> m2(max(old_size * 2, rows));
+    for (int i = 0; i < old_size; i++)
+    {
+      matrix[i].swap(m2[i]);
+    }
+    matrix.swap(m2);
+  }
+  for (int i = r; i < rows; i++)
+  {
+    matrix[i].resize(cols);
+  }
+  if (cols != c)
+  {
+    for (int i = min(r, rows) - 1; i >= 0; i--)
+    {
+      matrix[i].resize(cols);
+    }
+  }
+  r    = rows;
+  c    = cols;
+  cols = c;
+}
+
+template <class T> template <class U> void Matrix<T>::fill(U value)
+{
+  for (int i = 0; i < r; i++)
+  {
+    for (int j = 0; j < c; j++)
+    {
+      matrix[i][j] = value;
+    }
+  }
+}
+
+template <class T> void Matrix<T>::rotate_gram_left(int first, int last, int n_valid_rows)
+{
+  FPLLL_DEBUG_CHECK(0 <= first && first <= last && last < n_valid_rows && n_valid_rows <= r);
+  matrix[first][first].swap(matrix[first][last]);
+  for (int i = first; i < last; i++)
+  {
+    matrix[i + 1][first].swap(matrix[first][i]);
+  }
+  for (int i = first; i < n_valid_rows; i++)
+  {
+    matrix[i].rotate_left(first, min(last, i));  // most expensive step
+  }
+  rotate_left(first, last);
+}
+
+template <class T> void Matrix<T>::rotate_gram_right(int first, int last, int n_valid_rows)
+{
+  FPLLL_DEBUG_CHECK(0 <= first && first <= last && last < n_valid_rows && n_valid_rows <= r);
+  rotate_right(first, last);
+  for (int i = first; i < n_valid_rows; i++)
+  {
+    matrix[i].rotate_right(first, min(last, i));  // most expensive step
+  }
+  for (int i = first; i < last; i++)
+  {
+    matrix[i + 1][first].swap(matrix[first][i]);
+  }
+  matrix[first][first].swap(matrix[first][last]);
+}
+
+template <class T> void Matrix<T>::transpose()
+{
+  extend_vect(matrix, c);
+  for (int i = 0; i < c; i++)
+  {
+    matrix[i].extend(r);
+  }
+  for (int i = 0; i < min(r, c); i++)
+  {
+    for (int j = i + 1; j < max(r, c); j++)
+    {
+      matrix[i][j].swap(matrix[j][i]);
+    }
+    if (c > r)
+      matrix[i].resize(r);
+  }
+  std::swap(r, c);
+}
+
+template <class T> T Matrix<T>::get_max()
+{
+  T m, a;
+  m = 0.0;
+  for (int i = 0; i < r; i++)
+    for (int j = 0; j < c; j++)
+    {
+      a.abs(matrix[i][j]);
+      m = max(m, a);
+    }
+  return m;
+}
+
+template <class T> long Matrix<T>::get_max_exp()
+{
+  long max_exp = 0;
+  for (int i = 0; i < r; i++)
+    for (int j = 0; j < c; j++)
+      max_exp = max(max_exp, matrix[i][j].exponent());
+  return max_exp;
+}
+
+template <class T> void Matrix<T>::print(ostream &os, int nrows, int ncols) const
+{
+  if (nrows < 0 || nrows > r)
+    nrows = r;
+  if (ncols < 0 || ncols > c)
+    ncols = c;
+  os << '[';
+  for (int i = 0; i < nrows; i++)
+  {
+    if (i > 0)
+      os << '\n';
+    os << '[';
+    for (int j = 0; j < ncols; j++)
+    {
+      if (j > 0)
+        os << ' ';
+      os << matrix[i][j];
+    }
+    if (print_mode == MAT_PRINT_REGULAR && ncols > 0)
+      os << ' ';
+    os << ']';
+  }
+  if (print_mode == MAT_PRINT_REGULAR && nrows > 0)
+    os << '\n';
+  os << ']';
+}
+
+template <class T> void Matrix<T>::read(istream &is)
+{
+  char ch;
+  matrix.clear();
+  if (!(is >> ch))
+    return;
+  if (ch != '[')
+  {
+    is.setstate(ios::failbit);
+    return;
+  }
+  while (is >> ch && ch != ']')
+  {
+    is.putback(ch);
+    matrix.resize(matrix.size() + 1);
+    if (!(is >> matrix.back()))
+    {
+      matrix.pop_back();
+      break;
+    }
+  }
+
+  r = matrix.size();
+  c = 0;
+  for (int i = 0; i < r; i++)
+  {
+    c = max(c, matrix[i].size());
+  }
+  for (int i = 0; i < r; i++)
+  {
+    int old_c = matrix[i].size();
+    if (old_c < c)
+    {
+      matrix[i].resize(c);
+      for (int j = old_c; j < c; j++)
+      {
+        matrix[i][j] = 0;
+      }
+    }
+  }
+}
+
+template <class T> ostream &Matrix<T>::print_comma(ostream &os) const
+{
+  os << '[';
+  for (int i = 0; i < r - 1; i++)
+  {
+    os << '[';
+    for (int j = 0; j < c - 1; j++)
+    {
+      os << matrix[i][j] << ", ";
+    }
+    os << matrix[i][c - 1] << "],\n";
+  }
+  os << '[';
+  for (int j = 0; j < c - 1; j++)
+  {
+    os << matrix[r - 1][j] << ", ";
+  }
+  os << matrix[r - 1][c - 1] << "]]\n";
+
+  return os;
+}
+
+/* ZZ_mat */
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_intrel(int bits)
+{
+  if (c != r + 1)
+  {
+    FPLLL_ABORT("gen_intrel called on an ill-formed matrix");
+    return;
+  }
+  int i, j;
+  for (i = 0; i < r; i++)
+  {
+    matrix[i][0].randb(bits);
+    for (j = 1; j <= i; j++)
+    {
+      matrix[i][j] = 0;
+    }
+    matrix[i][i + 1] = 1;
+    for (j = i + 2; j < c; j++)
+    {
+      matrix[i][j] = 0;
+    }
+  }
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_simdioph(int bits, int bits2)
+{
+  if (c != r)
+  {
+    FPLLL_ABORT("gen_simdioph called on an ill-formed matrix");
+    return;
+  }
+  int i, j;
+
+  matrix[0][0] = 1;
+  matrix[0][0].mul_2si(matrix[0][0], bits2);
+  for (i = 1; i < r; i++)
+    matrix[0][i].randb(bits);
+  for (i = 1; i < r; i++)
+  {
+    for (j = 1; j < i; j++)
+      matrix[j][i] = 0;
+    matrix[i][i] = 1;
+    matrix[i][i].mul_2si(matrix[i][i], bits);
+    for (j = i + 1; j < c; j++)
+      matrix[j][i] = 0;
+  }
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_uniform(int bits)
+{
+  if (c != r)
+  {
+    FPLLL_ABORT("gen_uniform called on an ill-formed matrix");
+    return;
+  }
+  for (int i = 0; i < r; i++)
+    for (int j = 0; j < c; j++)
+      matrix[i][j].randb(bits);
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_ntrulike(int bits)
+{
+  // [A00 A01]
+  // [A10 A11]
+
+  int i, j, k;
+  int d = r / 2;
+  if (c != r || c != 2 * d)
+  {
+    FPLLL_ABORT("gen_ntrulike called on an ill-formed matrix");
+    return;
+  }
+  // clang-format off
+  Z_NR<ZT> *h = new Z_NR<ZT>[d];
+  // clang-format on
+  Z_NR<ZT> q;
+
+  q.randb(bits);
+  if (q.sgn() == 0)
+    q = 1;
+  h[0] = 0;
+  for (i = 1; i < d; i++)
+  {
+    h[i].randm(q);
+    h[0].sub(h[0], h[i]);
+    if (h[0].sgn() < 0)
+      h[0].add(h[0], q);
+    // set h0 such that h(1) = 0 mod q.
+  }
+
+  // I in A00
+  for (i = 0; i < d; i++)
+  {
+    for (j = 0; j < i; j++)
+      matrix[i][j] = 0;
+    matrix[i][i] = 1;
+    for (j = i + 1; j < d; j++)
+      matrix[i][j] = 0;
+  }
+
+  // 0 in A10
+  for (i = d; i < r; i++)
+  {
+    for (j = 0; j < d; j++)
+      matrix[i][j] = 0;
+  }
+  // qI in A11
+  for (i = d; i < r; i++)
+  {
+    for (j = d; j < i; j++)
+      matrix[i][j] = 0;
+    matrix[i][i] = q;
+    for (j = i + 1; j < c; j++)
+      matrix[i][j] = 0;
+  }
+  // H in A01
+  for (i = 0; i < d; i++)
+    for (j = d; j < c; j++)
+    {
+      k = j - d - i;
+      while (k < 0)
+      {
+        k += d;
+      }
+      matrix[i][j] = h[k];
+    }
+
+  delete[] h;
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_ntrulike_withq(int q)
+{
+  // Same as above, except q is specified by the user rather than chosen
+  // randomly with a prescribed bit-length.
+
+  int i, j, k;
+  int d = r / 2;
+  if (c != r || c != 2 * d)
+  {
+    FPLLL_ABORT("gen_ntrulike called on an ill-formed matrix");
+    return;
+  }
+  // clang-format off
+  Z_NR<ZT> *h = new Z_NR<ZT>[d];
+  // clang-format on
+  Z_NR<ZT> q2;
+
+  q2   = q;
+  h[0] = 0;
+  for (i = 1; i < d; i++)
+  {
+    h[i].randm(q2);
+    h[0].sub(h[0], h[i]);
+    if (h[0].sgn() < 0)
+      h[0].add(h[0], q2);
+    // set h0 such that h(1) = 0 mod q.
+  }
+
+  // I in A00
+  for (i = 0; i < d; i++)
+  {
+    for (j = 0; j < i; j++)
+      matrix[i][j] = 0;
+    matrix[i][i] = 1;
+    for (j = i + 1; j < d; j++)
+      matrix[i][j] = 0;
+  }
+
+  // 0 in A10
+  for (i = d; i < r; i++)
+  {
+    for (j = 0; j < d; j++)
+      matrix[i][j] = 0;
+  }
+  // qI in A11
+  for (i = d; i < r; i++)
+  {
+    for (j = d; j < i; j++)
+      matrix[i][j] = 0;
+    matrix[i][i] = q2;
+    for (j = i + 1; j < c; j++)
+      matrix[i][j] = 0;
+  }
+  // H in A01
+  for (i = 0; i < d; i++)
+    for (j = d; j < c; j++)
+    {
+      k = j - d - i;
+      while (k < 0)
+      {
+        k += d;
+      }
+      matrix[i][j] = h[k];
+    }
+
+  delete[] h;
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_ntrulike2(int bits)
+{
+
+  int i, j, k;
+  int d = r / 2;
+  if (c != r || c != 2 * d)
+  {
+    FPLLL_ABORT("gen_ntrulike2 called on an ill-formed matrix");
+    return;
+  }
+  // clang-format off
+  Z_NR<ZT> *h = new Z_NR<ZT>[d];
+  Z_NR<ZT> q;
+  // clang-format on
+
+  q.randb(bits);
+  h[0] = 0;
+  for (i = 1; i < d; i++)
+  {
+    h[i].randm(q);
+    h[0].sub(h[0], h[i]);
+    if (h[0].sgn() < 0)
+      h[0].add(h[0], q);
+    // set h0 such that h(1) = 0 mod q.
+  }
+
+  for (i = 0; i < d; i++)
+  {
+    for (j = 0; j < c; j++)
+      matrix[i][j] = 0;
+  }
+
+  for (i = 0; i < d; i++)
+    matrix[i][i] = q;
+  for (i = d; i < r; i++)
+    for (j = d; j < c; j++)
+      matrix[i][j] = 0;
+  for (i = d; i < c; i++)
+    matrix[i][i] = 1;
+
+  for (i = d; i < r; i++)
+  {
+    for (j = 0; j < d; j++)
+    {
+      k = i - d - j;
+      while (k < 0)
+      {
+        k += d;
+      }
+      matrix[i][j] = h[k];
+    }
+  }
+
+  delete[] h;
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_ntrulike2_withq(int q)
+{
+
+  int i, j, k;
+  int d = r / 2;
+  if (c != r || c != 2 * d)
+  {
+    FPLLL_ABORT("gen_ntrulike2 called on an ill-formed matrix");
+    return;
+  }
+  // clang-format off
+  Z_NR<ZT> *h = new Z_NR<ZT>[d];
+  Z_NR<ZT> q2;
+  // clang-format on
+
+  q2   = q;
+  h[0] = 0;
+  for (i = 1; i < d; i++)
+  {
+    h[i].randm(q2);
+    h[0].sub(h[0], h[i]);
+    if (h[0].sgn() < 0)
+      h[0].add(h[0], q2);
+    // set h0 such that h(1) = 0 mod q.
+  }
+
+  for (i = 0; i < d; i++)
+  {
+    for (j = 0; j < c; j++)
+      matrix[i][j] = 0;
+  }
+
+  for (i = 0; i < d; i++)
+    matrix[i][i] = q2;
+  for (i = d; i < r; i++)
+    for (j = d; j < c; j++)
+      matrix[i][j] = 0;
+  for (i = d; i < c; i++)
+    matrix[i][i] = 1;
+
+  for (i = d; i < r; i++)
+  {
+    for (j = 0; j < d; j++)
+    {
+      k = i - d - j;
+      while (k < 0)
+      {
+        k += d;
+      }
+      matrix[i][j] = h[k];
+    }
+  }
+
+  delete[] h;
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_qary(int k, Z_NR<ZT> &q)
+{
+  int i, j;
+  int d = r;
+  if (c != r || k > r)
+  {
+    FPLLL_ABORT("gen_qary called on an ill-formed matrix");
+    return;
+  }
+
+  for (i = 0; i < d - k; i++)
+    for (j = 0; j < d - k; j++)
+      matrix[i][j] = 0;
+
+  for (i = 0; i < d - k; i++)
+    matrix[i][i] = 1;
+
+  for (i = 0; i < d - k; i++)
+    for (j = d - k; j < d; j++)
+      matrix[i][j].randm(q);
+
+  for (i = d - k; i < d; i++)
+    for (j = 0; j < d; j++)
+      matrix[i][j] = 0;
+
+  for (i = d - k; i < d; i++)
+    matrix[i][i] = q;
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_trg(double alpha)
+{
+  int i, j, bits;
+  Z_NR<ZT> ztmp, ztmp2, zone, sign;
+
+  ztmp2 = 0;
+  zone  = 1;
+
+  int d = r;
+  if (c != r)
+  {
+    FPLLL_ABORT("gen_trg called on an ill-formed matrix");
+    return;
+  }
+
+  for (i = 0; i < d; i++)
+  {
+    bits = (int)pow((double)(2 * d - i), alpha);
+    ztmp = 1;
+    ztmp.mul_2si(ztmp, bits);
+    ztmp.sub(ztmp, zone);
+    matrix[i][i].randm(ztmp);
+    matrix[i][i].add_ui(matrix[i][i], 2);
+    ztmp.div_2si(matrix[i][i], 1);
+    for (j = i + 1; j < d; j++)
+    {
+      matrix[j][i].randm(ztmp);
+      sign.randb(1);
+      if (sign == 1)
+        matrix[j][i].sub(ztmp2, matrix[j][i]);
+      matrix[i][j] = 0;
+    }
+  }
+}
+
+template <class ZT> inline void ZZ_mat<ZT>::gen_trg2(FP_NR<mpfr_t> *w)
+{
+  int i, j;
+  Z_NR<ZT> ztmp, ztmp2;
+
+  int d = r;
+  if (c != r)
+  {
+    FPLLL_ABORT("gen_trg2 called on an ill-formed matrix");
+    return;
+  }
+
+  for (i = 0; i < d; i++)
+  {
+    matrix[i][i].set_f(w[i]);
+    ztmp.div_2si(matrix[i][i], 1);
+    ztmp2 = 1;
+    ztmp.add(ztmp, ztmp2);
+    for (j = i + 1; j < d; j++)
+    {
+      ztmp2 = 0;
+      matrix[j][i].randm(ztmp);
+      if (rand() % 2 == 1)
+        matrix[j][i].sub(ztmp2, matrix[j][i]);
+      matrix[i][j] = 0;
+    }
+  }
+}
+
+template <class ZTto, class ZTfrom>
+bool convert(ZZ_mat<ZTto> &Ato, const ZZ_mat<ZTfrom> &Afrom, int buffer)
+{
+  Ato.clear();
+  int r = Afrom.get_rows();
+  int c = Afrom.get_cols();
+  Ato.resize(r, c);
+  long threshold = (1L << (numeric_limits<long>::digits - buffer - 1));
+  Z_NR<ZTfrom> ztmp;
+  for (int i = 0; i < r; ++i)
+  {
+    for (int j = 0; j < c; ++j)
+    {
+      ztmp.abs(Afrom[i][j]);
+      if (ztmp > threshold)
+      {
+        return false;
+      }
+      Ato[i][j] = Afrom[i][j].get_si();
+    }
+  }
+
+  return true;
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/matrix.h b/fplll/nr/matrix.h
new file mode 100644 (file)
index 0000000..426ffd1
--- /dev/null
@@ -0,0 +1,359 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_MATRIX_H
+#define FPLLL_MATRIX_H
+
+#include "fplll/nr/numvect.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+enum MatPrintMode
+{
+  MAT_PRINT_COMPACT = 0,
+  MAT_PRINT_REGULAR = 1
+};
+
+template <class T> class Matrix;
+
+/** MatrixRow stores a reference to a row of a Matrix. It supports a subset
+    of operations available on vectors. */
+template <class T> class MatrixRow
+{
+public:
+  /** Returns a reference to the i-th element of this row. */
+  T &operator[](int i) { return row[i]; }
+  /** Returns a const reference to the i-th element of this row on constant
+      objects. */
+  const T &operator[](int i) const { return row[i]; }
+  /** Returns the number of columns. */
+  int size() const { return row.size(); }
+  /** Prints this object on stream os. */
+  void print(ostream &os) const { os << row; }
+
+  bool is_zero(int from = 0) const { return row.is_zero(from); }
+  int size_nz() const { return row.size_nz(); }
+  void fill(long value) { row.fill(value); }
+  void add(const MatrixRow<T> &v) { row.add(v.row); }
+  void add(const MatrixRow<T> &v, int n) { row.add(v.row, n); }
+  void sub(const MatrixRow<T> &v) { row.sub(v.row); }
+  void sub(const MatrixRow<T> &v, int n) { row.sub(v.row, n); }
+  void mul(const MatrixRow<T> &v, int b, int n, T x) { row.mul(v.row, b, n, x); }
+  void div(const MatrixRow<T> &v, int b, int n, T x) { row.div(v.row, b, n, x); }
+  void addmul(const MatrixRow<T> &v, T x) { row.addmul(v.row, x); }
+  void addmul(const MatrixRow<T> &v, T x, int n) { row.addmul(v.row, x, n); }
+  void addmul(const MatrixRow<T> &v, T x, int b, int n) { row.addmul(v.row, x, b, n); }
+  void addmul_2exp(const MatrixRow<T> &v, const T &x, long expo, T &tmp)
+  {
+    row.addmul_2exp(v.row, x, expo, tmp);
+  }
+  void addmul_2exp(const MatrixRow<T> &v, const T &x, long expo, int /*n*/, T &tmp)
+  {
+    row.addmul_2exp(v.row, x, expo, tmp);
+  }
+  void addmul_si(const MatrixRow<T> &v, long x) { row.addmul_si(v.row, x); }
+  void addmul_si(const MatrixRow<T> &v, long x, int n) { row.addmul_si(v.row, x, n); }
+  void addmul_si_2exp(const MatrixRow<T> &v, long x, long expo, T &tmp)
+  {
+    row.addmul_si_2exp(v.row, x, expo, tmp);
+  }
+  void addmul_si_2exp(const MatrixRow<T> &v, long x, long expo, int n, T &tmp)
+  {
+    row.addmul_si_2exp(v.row, x, expo, n, tmp);
+  }
+
+  /** Computes the truncated dot product between two rows of a Matrix.
+   * Constraint: n > beg.
+   */
+  inline void dot_product(T &result, const MatrixRow<T> &v0, int beg, int n) const
+  {
+    fplll::dot_product(result, this->row, v0.row, beg, n);
+  }
+
+  /** Computes the dot product between two rows of a Matrix */
+  inline void dot_product(T &result, const MatrixRow<T> &v0, int n) const
+  {
+    fplll::dot_product(result, this->row, v0.row, n);
+  }
+
+  /** Computes the truncated dot product between two rows of a Matrix */
+  inline void dot_product(T &result, const MatrixRow<T> &v0) const
+  {
+    fplll::dot_product(result, this->row, v0.row);
+  }
+
+  friend class Matrix<T>;
+
+private:
+  MatrixRow(const NumVect<T> &row) : row(const_cast<NumVect<T> &>(row)) {}
+  NumVect<T> &row;
+};
+
+/** Prints a MatrixRow on stream os. */
+template <class T> ostream &operator<<(ostream &os, const MatrixRow<T> &row)
+{
+  row.print(os);
+  return os;
+}
+
+/** Matrix is a two-dimensional container. Read and write operations on single
+    elements are in constant time. The amortized complexity of resizing the
+    matrix is proportional to the number of added/removed elements. All indices
+    are 0-based. */
+template <class T> class Matrix
+{
+public:
+  /** Creates an empty matrix (0 x 0). */
+  Matrix() : r(0), c(0) {}
+  /** Creates a matrix of dimensions rows x cols. All elements are
+      initialized with the default constructor of T. */
+  Matrix(int rows, int cols) : r(0), c(0) { resize(rows, cols); }
+
+  /** Sets number of rows and the number of columns to 0. */
+  void clear()
+  {
+    r = c = 0;
+    matrix.clear();
+  }
+  /** Returns true if the matrix has 0 rows, false otherwise. */
+  bool empty() const { return r == 0; }
+  /** Sets the dimensions of this matrix, preserving as much as possible of the
+      content. The value of new elements is undefined. */
+  void resize(int rows, int cols);
+  /** Sets the number of rows. Content is not erased except for deleted rows.
+      The value of new elements is undefined. */
+  void set_rows(int rows) { resize(rows, c); }
+  /** Sets the number of columns. Content is not erased except for deleted
+      columns. The value of new elements is undefined. */
+  void set_cols(int cols) { resize(r, cols); }
+  /** Fills this matrix with a given value. */
+  template <class U> void fill(U value);
+  /** Efficiently swaps two matrices. */
+  void swap(Matrix<T> &m)
+  {
+    matrix.swap(m.matrix);
+    std::swap(r, m.r);
+    std::swap(c, m.c);
+  }
+
+  /** Returns the number of rows */
+  int get_rows() const { return r; }
+  /** Returns the number of columns */
+  int get_cols() const { return c; }
+  /** Returns a reference to the element (i, j). */
+  T &operator()(int i, int j)
+  {
+    FPLLL_DEBUG_CHECK(i >= 0 && i < r && j >= 0 && j < c);
+    return matrix[i][j];
+  }
+  /** Returns a constant reference to the element (i, j) on constant objects. */
+  const T &operator()(int i, int j) const
+  {
+    FPLLL_DEBUG_CHECK(i >= 0 && i < r && j >= 0 && j < c);
+    return matrix[i][j];
+  }
+  /** Returns a MatrixRow object pointing to the i-th row of this matrix. */
+  MatrixRow<T> operator[](int i)
+  {
+    FPLLL_DEBUG_CHECK(i >= 0 && i < r);
+    return MatrixRow<T>(matrix[i]);
+  }
+  /** Returns a MatrixRow object pointing to the i-th row of this matrix
+      on constant objects. */
+  const MatrixRow<T> operator[](int i) const
+  {
+    FPLLL_DEBUG_CHECK(i >= 0 && i < r);
+    return MatrixRow<T>(matrix[i]);
+  }
+  /** Rows swap. */
+  void swap_rows(int r1, int r2) { matrix[r1].swap(matrix[r2]); }
+  /** Rows permutation.
+      (m[first],...,m[last]) becomes (m[first+1],...,m[last],m[first]) */
+  void rotate_left(int first, int last) { rotate_left_by_swap(matrix, first, last); }
+  /** Rows permutation.
+      (m[first],...,m[last]) becomes (m[last],m[first],...,m[last-1]) */
+  void rotate_right(int first, int last) { rotate_right_by_swap(matrix, first, last); }
+  /** Rows permutation.
+      (m[first],...,m[middle-1],m[middle],m[last]) becomes
+      (m[middle],...,m[last],m[first],...,m[middle-1]) */
+  void rotate(int first, int middle, int last) { rotate_by_swap(matrix, first, middle, last); }
+  /** Transformation needed to update the lower triangular Gram matrix when
+     rotate_left(first, last) is done on the basis of the lattice. */
+  void rotate_gram_left(int first, int last, int n_valid_rows);
+  /** Transformation needed to update the lower triangular Gram matrix when
+      rotate_right(first, last) is done on the basis of the lattice. */
+  void rotate_gram_right(int first, int last, int n_valid_rows);
+  /** Transpose. */
+  void transpose();
+  T get_max();
+  long get_max_exp();
+  /** Prints this matrix. No end-of-line is printed after the last line.
+      @param os      output stream
+      @param nrows   maximum number of rows to display (optional)
+      @param ncols   maximum number of columns to display (optional) */
+  void print(ostream &os, int nrows = -1, int ncols = -1) const;
+  /** Reads this matrix from a stream. */
+  void read(istream &is);
+  /** Print the matrix, sage format style */
+  ostream &print_comma(ostream &os) const;
+  /** Change the output format style of Matrix */
+  static int set_print_mode(int new_print_mode)
+  {
+    int old_mode = print_mode;
+    print_mode   = new_print_mode;
+    return old_mode;
+  }
+
+protected:
+  int r, c;
+  vector<NumVect<T>> matrix;
+
+  static int print_mode;
+};
+
+template <class T> int Matrix<T>::print_mode = MAT_PRINT_COMPACT;
+
+template <class T> ostream &operator<<(ostream &os, const Matrix<T> &m)
+{
+  m.print(os);
+  return os;
+}
+
+template <class T> istream &operator>>(istream &is, Matrix<T> &m)
+{
+  m.read(is);
+  return is;
+}
+
+/** ZZ_mat is a matrix of integers. */
+template <class ZT> class ZZ_mat : public Matrix<Z_NR<ZT>>
+{
+public:
+  typedef Z_NR<ZT> T;
+  using Matrix<T>::r;
+  using Matrix<T>::c;
+  using Matrix<T>::matrix;
+  using Matrix<T>::resize;
+  using Matrix<T>::get_cols;
+  using Matrix<T>::get_rows;
+
+  /** Creates an empty matrix (0 x 0). */
+  ZZ_mat() : Matrix<T>() {}
+  /** Creates a matrix of dimensions rows x cols. All elements are
+      initialized with the default constructor of Z_NR&lt;T&gt;. */
+  ZZ_mat(int rows, int cols) : Matrix<T>(rows, cols) {}
+
+  /** Generate a zero matrix */
+  void gen_zero(int d, int n)
+  {
+    resize(d, n);
+    for (int i = 0; i < d; i++)
+      matrix[i].fill(0);
+  }
+  /** Generate an identity matrix */
+  void gen_identity(int d)
+  {
+    gen_zero(d, d);
+    for (int i = 0; i < d; i++)
+      matrix[i][i] = 1;
+  }
+  /** Generate an augmented matrix of random coefficients for the first column */
+  void gen_intrel(int bits);
+  /** Generate a matrix with coefficients of the first row and the diagonal */
+  void gen_simdioph(int bits, int bits2);
+  /** Generate a random matrix of uniform distribution. */
+  void gen_uniform(int bits);
+
+  /** Construct a matrix `[[I,H],[0,qI]]` where `H` is constructed from rotations of a vector ``h``.
+
+     @note The constructed matrix will not come with a guarantee of unusually short vectors.
+  **/
+
+  void gen_ntrulike(int bits);
+  void gen_ntrulike_withq(int q);
+
+  /** Construct a matrix ``[[qI,0],[H,I]]`` where ``H`` is constructed from rotations of a vector
+    ``h``.
+
+    @note The constructed matrix will not come with a guarantee of unusually short vectors.
+  */
+
+  void gen_ntrulike2(int bits);
+  void gen_ntrulike2_withq(int q);
+
+  /** Construct a matrix ``[[I,H],[0,Iq]]`` where ``H`` is uniform mod q, of dimensions (n-k) x k.
+   */
+
+  void gen_qary(int k, Z_NR<ZT> &q);
+
+  void gen_qary(int k, int bits)
+  {
+    Z_NR<ZT> q;
+    q.randb(bits);
+    gen_qary(k, q);
+  }
+
+  void gen_qary_withq(int k, int q)
+  {
+    Z_NR<ZT> q2;
+    q2 = q;
+    gen_qary(k, q2);
+  }
+
+  void gen_qary_prime(int k, int bits)
+  {
+    Z_NR<ZT> q;
+    q.randb(bits);
+    q.nextprime(q);
+    gen_qary(k, q);
+  }
+
+  /** Construct a lower triangular matrices with specified diagonal coefficients
+and random sub-diagonal coefficients.
+  */
+
+  void gen_trg(double alpha);
+  void gen_trg2(FP_NR<mpfr_t> *w);
+};
+
+/**
+ * Converts integer matrices. Conversion is coing through get_si(), so ONLY use for
+ * small numbers that fit into longs. More specifically, Afrom is converted to Ato
+ * (and true is returned) if all numbers in Afrom fit into
+ * numeric_limits<long>::digits - buffer bits. Otherwise, conversion is aborted and
+ * false is returned.
+ */
+template <class ZTto, class ZTfrom>
+bool convert(ZZ_mat<ZTto> &Ato, const ZZ_mat<ZTfrom> &Afrom, int buffer = 0);
+
+/** FP_mat is a matrix of floating-point numbers. */
+template <class FT> class FP_mat : public Matrix<FP_NR<FT>>
+{
+public:
+  typedef FP_NR<FT> T;
+  /** Creates an empty matrix (0 x 0). */
+  FP_mat() : Matrix<T>() {}
+  /** Creates a matrix of dimensions rows x cols. All elements are
+      initialized with the default constructor of FP_NR&lt;T&gt;. */
+  FP_mat(int rows, int cols) : Matrix<T>(rows, cols) {}
+};
+
+FPLLL_END_NAMESPACE
+
+#include "fplll/nr/matrix.cpp"
+
+#endif
diff --git a/fplll/nr/nr.h b/fplll/nr/nr.h
new file mode 100644 (file)
index 0000000..f1be817
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef FPLLL_NR_H
+#define FPLLL_NR_H
+
+/**
+ * loading definitions
+ */
+#include "../defs.h"
+#include <iostream>
+
+#include "fplll/nr/nr_rand.inl"
+
+#include "fplll/nr/nr_Z.inl"
+#include "fplll/nr/nr_Z_d.inl"
+#include "fplll/nr/nr_Z_l.inl"
+#include "fplll/nr/nr_Z_mpz.inl"
+
+#include "fplll/nr/nr_FP.inl"
+#include "fplll/nr/nr_FP_d.inl"
+#include "fplll/nr/nr_FP_ld.inl"
+
+#ifdef FPLLL_WITH_DPE
+#include "fplll/nr/nr_FP_dpe.inl"
+#endif
+
+#ifdef FPLLL_WITH_QD
+#include "fplll/nr/nr_FP_dd.inl"
+#include "fplll/nr/nr_FP_qd.inl"
+#endif
+
+#include "fplll/nr/nr_FP_mpfr.inl"
+
+#include "fplll/nr/nr_FP_misc.inl"
+#include "fplll/nr/nr_Z_misc.inl"
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+ * Some defaults.
+ */
+
+/* Floating-point type inside the SVP/CVP solver */
+typedef double enumf;
+typedef double enumxt;
+// typedef int enumxt;
+
+/**
+ * return type
+ */
+template <class T> inline const char *num_type_str() { return ""; }
+#ifdef FPLLL_WITH_ZLONG
+template <> inline const char *num_type_str<long>() { return "long"; }
+#endif
+template <> inline const char *num_type_str<double>() { return "double"; }
+template <> inline const char *num_type_str<mpz_t>() { return "mpz_t"; }
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> inline const char *num_type_str<long double>() { return "long double"; }
+#endif
+#ifdef FPLLL_WITH_DPE
+template <> inline const char *num_type_str<dpe_t>() { return "dpe_t"; }
+#endif
+#ifdef FPLLL_WITH_QD
+template <> inline const char *num_type_str<dd_real>() { return "dd_real"; }
+template <> inline const char *num_type_str<qd_real>() { return "qd_real"; }
+#endif
+template <> inline const char *num_type_str<mpfr_t>() { return "mpfr_t"; }
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP.inl b/fplll/nr/nr_FP.inl
new file mode 100644 (file)
index 0000000..08abe3d
--- /dev/null
@@ -0,0 +1,644 @@
+/*********************
+ *   Float Class
+ *********************/
+
+#include "../defs.h"
+
+#ifndef FPLLL_NR_FP_H
+#define FPLLL_NR_FP_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* declaration Z_NR */
+template <class F> class Z_NR;
+
+/**
+ * FP_NR stores floating-point numbers. This template provides a uniform
+ * interface for doing floating-point computations with several underlying
+ * types (double, dpe_t and mpfr_t). For all functions, the rounding
+ * mode rnd is ignored unless F=mpfr_t.
+ */
+template <class F = mpfr_t> class FP_NR
+{
+
+  F data;
+
+public:
+  /**
+   * Constructors.
+   */
+  inline FP_NR<F>();
+  inline FP_NR<F>(const FP_NR<F> &f);
+  inline ~FP_NR<F>();
+  inline FP_NR<F>(const double d) : FP_NR<F>() { *this = d; };
+  inline FP_NR<F>(const char *s) : FP_NR<F>() { *this = s; };
+
+  /**
+   * Returns the current precision for new FP_NR&lt;F&gt; objects.
+   */
+  static inline unsigned int get_prec();
+
+  /**
+   * Sets the precision of new FP_NR&lt;F&gt; objects. Returns the
+     previous value. This has no effect is F != mpfr_t.
+   */
+  static inline unsigned int set_prec(unsigned int prec);
+
+  /** get data */
+
+  /**
+   * Returns the internal representation of the data.
+   */
+  inline F &get_data() { return data; }
+
+  /**
+   * Returns the internal representation of the data.
+   */
+  inline const F &get_data() const { return data; }
+
+  /**
+   * Converts this object to a double. If it does not fit in a double,
+   * the result is undefined.
+   */
+  inline double get_d(mp_rnd_t rnd = GMP_RNDN) const;
+
+  /**
+   * Convert this object to a mpfr_t r.
+   */
+  inline void get_mpfr(mpfr_t r, mp_rnd_t rnd = GMP_RNDN) const;
+
+  /**
+   * Convert this object from a mpfr_t r.
+   */
+  inline void set_mpfr(mpfr_t r, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * Converts this object to a long. The rounding direction is undefined.
+   * If it does not fit in a long, the result is undefined.
+   */
+  inline long get_si() const;
+
+  /**
+   * Returns expo such value 2^(expo-1) <= value < 2^expo
+   *  (expo = floor(abs(log2(abs(value)))) + 1).
+   * The return value is undefined if *this == 0.
+   */
+  inline long exponent() const;
+
+  /**
+   * Returns x and defines expo such that
+   *  trunc(value * 2^expo_add) ~= x * 2^expo
+   * The '~=' is an equality if trunc(value * 2^expo_add) <= LONG_MAX.
+   * expo is the minimum non-negative value such that x <= LONG_MAX.
+   * expo_add must be 0 if T=dpe_t or T=mpfr_t.
+   */
+  inline long get_si_exp_we(long &expo, long expo_add) const;
+
+  /**
+   * Returns x and defines expo such that trunc(value) ~= x * 2^expo.
+   * The '~=' is an equality if trunc(value) <= LONG_MAX.
+   * expo is the minimum non-negative value such that |x| <= LONG_MAX.
+   * (x is the largest among all possible |x| <= LONG_MAX).
+   */
+  inline long get_si_exp(long &expo) const;
+
+  /**
+   * Computes a and expo such that trunc(value) ~= a * 2^expo.
+   *  The '~=' is an equality if Z=mpz_t. expo is always non-negative.
+   *  Note that expo might be very close to LONG_MAX when value = 0.
+   *  (in nr_FP_misc.h)
+   */
+  template <class Z> inline void get_z_exp(Z_NR<Z> &a, long &expo) const;
+
+  /**
+   * Computes a and expo such that trunc(value) * 2^expo_add ~= a * 2^expo.
+   * The '~=' is an equality if Z=mpz_t. expo is always non-negative.
+   * expo_add must be 0 if T=dpe_t or T=mpfr_t.
+   *  (in nr_FP_misc.h)
+   */
+  template <class Z> inline void get_z_exp_we(Z_NR<Z> &a, long &expo, long expo_add) const;
+
+  /** set data */
+
+  /**
+   * Sets the value to z.
+   * (in nr_FP_misc.h)
+   */
+  template <class Z> inline void set_z(const Z_NR<Z> &z, mp_rnd_t rnd = GMP_RNDN);
+
+  /** comparison */
+
+  /**
+   * 3-way comparison. Returns a positive number if *this > b,
+   * a negative number if *this < b or zero is *this == b.
+   */
+  inline int cmp(const FP_NR<F> &b) const;
+
+  /**
+   * 3-way comparison. Returns a positive number if *this > d,
+   * a negative number if *this < d or zero is *this == d.
+   */
+  inline int cmp(double d) const;
+
+  /**
+   * Sign. Returns a positive number, a negative number or zero if the
+   * value of this object is respectively positive, negative or null.
+   */
+  inline int sgn() const;
+
+  /**
+   * Operator
+   */
+  inline FP_NR<F> &operator=(const FP_NR<F> &a);
+  inline FP_NR<F> &operator=(const char *s);
+  inline FP_NR<F> &operator=(double a);
+  // inline FP_NR<F>& operator=(mpfr_t& a);
+  inline FP_NR<F> &operator=(mpfr_t &a) { set_mpfr(a, GMP_RNDN); };
+
+  inline bool operator==(const FP_NR<F> &a) const { return cmp(a) == 0; }
+  inline bool operator==(double a) const { return cmp(a) == 0; }
+  inline bool operator!=(const FP_NR<F> &a) const { return cmp(a) != 0; }
+  inline bool operator!=(double a) const { return cmp(a) != 0; }
+
+  inline bool operator<(const FP_NR<F> &a) const;
+  inline bool operator<(double a) const;
+  inline bool operator>(const FP_NR<F> &a) const;
+  inline bool operator>(double a) const;
+  inline bool operator<=(const FP_NR<F> &a) const;
+  inline bool operator<=(double a) const;
+  inline bool operator>=(const FP_NR<F> &a) const;
+  inline bool operator>=(double a) const;
+
+  inline FP_NR<F> &operator+=(const FP_NR<F> &a)
+  {
+    this->add(*this, a);
+    return *this;
+  };
+  inline FP_NR<F> &operator-=(const FP_NR<F> &a)
+  {
+    this->sub(*this, a);
+    return *this;
+  };
+  inline FP_NR<F> &operator*=(const FP_NR<F> &a)
+  {
+    this->mul(*this, a);
+    return *this;
+  };
+  inline FP_NR<F> &operator/=(const FP_NR<F> &a)
+  {
+    this->div(*this, a);
+    return *this;
+  };
+
+  inline FP_NR<F> &operator+=(const double a)
+  {
+    FP_NR<F> t = a;
+    this->add(*this, t);
+    return *this;
+  };
+  inline FP_NR<F> &operator-=(const double a)
+  {
+    FP_NR<F> t = a;
+    this->sub(*this, t);
+    return *this;
+  };
+  inline FP_NR<F> &operator*=(const double a)
+  {
+    this->mul_d(*this, a);
+    return *this;
+  };
+  inline FP_NR<F> &operator/=(const double a)
+  {
+    this->div(*this, FP_NR<F>(a));
+    return *this;
+  };
+
+  /**
+   * max between a and b
+   */
+  inline FP_NR &max_f(FP_NR<F> &b)
+  {
+    if ((*this) <= b)
+      return b;
+    else
+      return (*this);
+  }
+
+  /**
+   * Returns non-zero if the current value is zero, 0 otherwise.
+   */
+  inline bool is_zero() const;
+  inline int zero_p() const { return is_zero(); }
+
+  /**
+   * Returns non-zero if the current value is NaN, 0 otherwise.
+   */
+  inline int is_nan() const;
+
+  /**
+   * Returns non-zero if !isnan(value) and !isinf(value), 0 otherwise.
+   */
+  inline int is_finite() const;
+
+  /** arithmetic */
+
+  /**
+   * value := a + b.
+   */
+  inline void add(const FP_NR<F> &a, const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := a - b.
+   */
+  inline void sub(const FP_NR<F> &a, const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := a * b.
+   */
+  inline void mul(const FP_NR<F> &a, const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := a * b where b is double.
+   */
+  inline void mul_d(const FP_NR<F> &a, const double b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := a * b where b is mpfr_t.
+   */
+  inline void mul_mpfr(const FP_NR<mpfr_t> &a, const mpfr_t b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := a * 2^b.
+   */
+  inline void mul_2si(const FP_NR<F> &a, long b);
+
+  /**
+   * value := a / b.
+   */
+  inline void div(const FP_NR<F> &a, const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := a / b.
+   */
+  inline void div_d(const FP_NR<F> &a, const double b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := value + a * b.
+   */
+  inline void addmul(const FP_NR<F> &a, const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := value - a * b.
+   */
+  inline void submul(const FP_NR<F> &a, const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := a^b.
+   */
+  inline void pow_si(const FP_NR<F> &a, long b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := e^b.
+   */
+  inline void exponential(const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := natural logarithm of a.
+   */
+  inline void log(const FP_NR<F> &a, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := square root of b.
+   */
+  inline void sqrt(const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := k-th root of b.
+   */
+  inline void root(const FP_NR<F> &b, unsigned int k, mp_rnd_t rnd = GMP_RNDN);
+
+  /**
+   * value := -b.
+   */
+  inline void neg(const FP_NR<F> &b);
+  inline FP_NR<F> operator-() const
+  {
+    FP_NR<F> r;
+    r.neg(*this);
+    return r;
+  }
+
+  /**
+   * value := absolute value of b.
+   */
+  inline void abs(const FP_NR<F> &b);
+
+  /**
+   * value := rounding of b to the nearest integer.
+   */
+  inline void rnd(const FP_NR<F> &b);
+
+  /**
+   * value <- (rounding of a * 2^expo_add) / 2^expo_add, but never overflows.
+   * expo_add must be 0 if T=dpe_t or T=mpfr_t.
+   */
+  inline void rnd_we(const FP_NR<F> &b, long expo_add);
+
+  /**
+   * value := largest integer not greater than b.
+   */
+  inline void floor(const FP_NR<F> &b);
+
+  /**
+   * value := NaN.
+   */
+  inline void set_nan();
+
+  /**
+   * Efficiently swaps the values of two FP_NR.
+   */
+  inline void swap(FP_NR<F> &a);
+  /**
+   * value := sqrt(a^2 + b^2).
+   * Needed for givens rotations
+   */
+  inline void hypot(const FP_NR<F> &a, const FP_NR<F> &b, mp_rnd_t rnd = GMP_RNDN);
+
+};  // End class FP_NR
+
+template <class F> inline FP_NR<F> operator+(const FP_NR<F> &a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r.add(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&operator+(FP_NR<F> &&a, const FP_NR<F> &b)
+{
+  a.add(a, b);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> operator+(const FP_NR<F> &a, double b)
+{
+  FP_NR<F> r;
+  r = b;
+  r.add(r, a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator+(double a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r = a;
+  r.add(r, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator+(const FP_NR<F> &a, long b)
+{
+  FP_NR<F> r;
+  r = b;
+  r.add(a, r);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator+(long a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r = a;
+  r.add(r, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator-(const FP_NR<F> &a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r.sub(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator-(const FP_NR<F> &a, double b)
+{
+  FP_NR<F> r;
+  r = b;
+  r.sub(a, r);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator-(double a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r = a;
+  r.sub(r, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator-(const FP_NR<F> &a, long b)
+{
+  FP_NR<F> r;
+  r = b;
+  r.sub(a, r);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator-(long a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r = a;
+  r.sub(r, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator*(const FP_NR<F> &a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r.mul(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&operator*(FP_NR<F> &&a, const FP_NR<F> &b)
+{
+  a.mul(a, b);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> operator*(const FP_NR<F> &a, double b)
+{
+  FP_NR<F> r;
+  r.mul_d(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator*(const FP_NR<F> &a, long b)
+{
+  FP_NR<F> r;
+  r = b;
+  r.mul(r, a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator*(double a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r.mul_d(b, a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&operator*(FP_NR<F> &&a, double b)
+{
+  a.mul_d(a, b);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> operator/(const FP_NR<F> &a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r.div(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator/(const FP_NR<F> &a, const double b)
+{
+  FP_NR<F> r;
+  r.div(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> operator/(const double a, const FP_NR<F> &b)
+{
+  FP_NR<F> r;
+  r.div(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> sqrt(const FP_NR<F> &a)
+{
+  FP_NR<F> r;
+  r.sqrt(a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&sqrt(FP_NR<F> &&a)
+{
+  a.sqrt(a);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> abs(const FP_NR<F> &a)
+{
+  FP_NR<F> r;
+  r.abs(a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&abs(FP_NR<F> &&a)
+{
+  a.abs(a);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> floor(const FP_NR<F> &a)
+{
+  FP_NR<F> r;
+  r.floor(a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&floor(FP_NR<F> &&a)
+{
+  a.floor(a);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> log(const FP_NR<F> &a)
+{
+  FP_NR<F> r;
+  r.log(a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&log(FP_NR<F> &&a)
+{
+  a.log(a);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> exp(const FP_NR<F> &a)
+{
+  FP_NR<F> r;
+  r.exponential(a);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&exp(FP_NR<F> &&a)
+{
+  a.exponential(a);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> pow_si(const FP_NR<F> &a, long b)
+{
+  FP_NR<F> r;
+  r.pow_si(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&pow_si(FP_NR<F> &&a, long b)
+{
+  a.pow_si(a, b);
+  return std::move(a);
+}
+
+template <class F> inline FP_NR<F> root(const FP_NR<F> &a, unsigned int b)
+{
+  FP_NR<F> r;
+  r.root(a, b);
+  return r;
+}
+
+template <class F> inline FP_NR<F> &&root(FP_NR<F> &&a, unsigned int b)
+{
+  a.root(a, b);
+  return std::move(a);
+}
+
+/**
+ * FP_NR: some generic functions.
+ */
+template <class F> inline void FP_NR<F>::addmul(const FP_NR<F> &b, const FP_NR<F> &c, mp_rnd_t rnd)
+{
+  FP_NR<F> product;
+  product.mul(b, c, rnd);
+  add(*this, product, rnd);
+}
+template <class F> inline void FP_NR<F>::submul(const FP_NR<F> &b, const FP_NR<F> &c, mp_rnd_t rnd)
+{
+  FP_NR<F> product;
+  product.mul(b, c, rnd);
+  sub(*this, product, rnd);
+}
+template <class F> inline bool FP_NR<F>::operator<(const FP_NR<F> &a) const { return cmp(a) < 0; }
+template <class F> inline bool FP_NR<F>::operator>(const FP_NR<F> &a) const { return cmp(a) > 0; }
+template <class F> inline bool FP_NR<F>::operator<(double a) const { return cmp(a) < 0; }
+template <class F> inline bool FP_NR<F>::operator>(double a) const { return cmp(a) > 0; }
+
+/** overloading stream operators */
+
+/**
+ * Prints x on stream os.
+ */
+template <class T> ostream &operator<<(ostream &os, const FP_NR<T> &x)
+{
+  return os << x.get_data();
+}
+
+#ifdef FPLLL_WITH_DPE
+template <> ostream &operator<<(ostream &os, const FP_NR<dpe_t> &x);
+#endif
+
+template <> ostream &operator<<(ostream &os, const FP_NR<mpfr_t> &x);
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP_d.inl b/fplll/nr/nr_FP_d.inl
new file mode 100644 (file)
index 0000000..52e18fa
--- /dev/null
@@ -0,0 +1,250 @@
+/****************************
+ *  F=double specialization
+ ****************************/
+
+#ifndef FPLLL_NR_FP_D_H
+#define FPLLL_NR_FP_D_H
+
+#include "../defs.h"
+#include "nr_FP.inl"
+
+FPLLL_BEGIN_NAMESPACE
+
+/* Double specialization */
+
+/* constructor */
+template <> inline FP_NR<double>::FP_NR() : data(0.0) {}
+
+template <> inline FP_NR<double>::FP_NR(const FP_NR<double> &f) { data = f.data; }
+
+template <> inline FP_NR<double>::~FP_NR() {}
+
+template <> inline unsigned int FP_NR<double>::get_prec() { return PREC_DOUBLE; }
+
+template <> inline unsigned int FP_NR<double>::set_prec(unsigned int)
+{
+  return get_prec();  // ignored
+}
+
+/* return data */
+template <> inline double FP_NR<double>::get_d(mp_rnd_t) const { return static_cast<double>(data); }
+
+template <> inline void FP_NR<double>::get_mpfr(mpfr_t r, mp_rnd_t rnd) const
+{
+  mpfr_set_d(r, data, rnd);
+}
+
+template <> inline void FP_NR<double>::set_mpfr(mpfr_t r, mp_rnd_t rnd)
+{
+  data = mpfr_get_d(r, rnd);
+}
+
+template <> inline long FP_NR<double>::get_si() const { return static_cast<long>(data); }
+
+template <> inline long FP_NR<double>::exponent() const { return ilogb(data) + 1; }
+
+template <> inline long FP_NR<double>::get_si_exp_we(long &expo, long expo_add) const
+{
+  if (data == 0)
+    expo = 0;
+  else
+    expo = max(exponent() + expo_add - numeric_limits<long>::digits, 0L);
+  return static_cast<long>(ldexp(data, expo_add - expo));
+}
+
+template <> inline long FP_NR<double>::get_si_exp(long &expo) const
+{
+  return get_si_exp_we(expo, 0);
+}
+
+/*  comparison */
+template <> inline int FP_NR<double>::cmp(const FP_NR<double> &b) const
+{
+  if (data > b.data)
+    return 1;
+  if (data < b.data)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<double>::cmp(double b) const
+{
+  if (data > b)
+    return 1;
+  if (data < b)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<double>::sgn() const
+{
+  if (data > 0)
+    return 1;
+  if (data < 0)
+    return -1;
+  return 0;
+}
+
+/* operators */
+template <> inline FP_NR<double> &FP_NR<double>::operator=(const FP_NR<double> &f)
+{
+  data = f.data;
+  return *this;
+}
+
+template <> inline FP_NR<double> &FP_NR<double>::operator=(double d)
+{
+  data = d;
+  return *this;
+}
+
+template <> inline FP_NR<double> &FP_NR<double>::operator=(const char *s)
+{
+  data = strtod(s, NULL);
+  return *this;
+}
+
+template <> inline bool FP_NR<double>::operator<=(const FP_NR<double> &a) const
+{
+  return data <= a.data;
+}
+
+template <> inline bool FP_NR<double>::operator<=(double a) const { return data <= a; }
+
+template <> inline bool FP_NR<double>::operator>=(const FP_NR<double> &a) const
+{
+  return data >= a.data;
+}
+
+template <> inline bool FP_NR<double>::operator>=(double a) const { return data >= a; }
+
+template <> inline bool FP_NR<double>::operator<(const FP_NR<double> &a) const
+{
+  return data < a.data;
+}
+
+template <> inline bool FP_NR<double>::operator<(double a) const { return data < a; }
+
+template <> inline bool FP_NR<double>::operator>(const FP_NR<double> &a) const
+{
+  return data > a.data;
+}
+
+template <> inline bool FP_NR<double>::operator>(double a) const { return data > a; }
+
+template <> inline bool FP_NR<double>::is_zero() const { return data == 0; }
+
+template <> inline int FP_NR<double>::is_nan() const { return data != data; }
+
+template <> inline int FP_NR<double>::is_finite() const { return isfinite(data); }
+
+/* arithmetic */
+template <>
+inline void FP_NR<double>::add(const FP_NR<double> &b, const FP_NR<double> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data + c.data;
+}
+
+template <>
+inline void FP_NR<double>::sub(const FP_NR<double> &b, const FP_NR<double> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data - c.data;
+}
+
+template <>
+inline void FP_NR<double>::mul(const FP_NR<double> &b, const FP_NR<double> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data * c.data;
+}
+
+template <>
+inline void FP_NR<double>::mul_d(const FP_NR<double> &b, const double c, mp_rnd_t /*rnd*/)
+{
+  data = b.data * c;
+}
+
+template <> inline void FP_NR<double>::mul_2si(const FP_NR<double> &b, long c)
+{
+  data = ldexp(b.data, static_cast<int>(c));
+}
+
+template <>
+inline void FP_NR<double>::div(const FP_NR<double> &b, const FP_NR<double> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data / c.data;
+}
+
+template <>
+inline void FP_NR<double>::addmul(const FP_NR<double> &b, const FP_NR<double> &c, mp_rnd_t /*rnd*/)
+{
+  data = data + b.data * c.data;
+}
+
+template <>
+inline void FP_NR<double>::submul(const FP_NR<double> &b, const FP_NR<double> &c, mp_rnd_t /*rnd*/)
+{
+  data = data - b.data * c.data;
+}
+
+template <> inline void FP_NR<double>::pow_si(const FP_NR<double> &a, long b, mp_rnd_t /*rnd*/)
+{
+  data = ::pow(a.data, static_cast<double>(b));
+}
+
+template <> inline void FP_NR<double>::exponential(const FP_NR<double> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::exp(a.data);
+}
+
+template <> inline void FP_NR<double>::log(const FP_NR<double> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::log(a.data);
+}
+
+template <> inline void FP_NR<double>::sqrt(const FP_NR<double> &s, mp_rnd_t /*rnd*/)
+{
+  data = ::sqrt(s.data);
+}
+
+template <>
+inline void FP_NR<double>::root(const FP_NR<double> &a, unsigned int k, mp_rnd_t /*rnd*/)
+{
+  data = ::pow(a.data, 1 / (static_cast<double>(k)));
+}
+
+template <> inline void FP_NR<double>::neg(const FP_NR<double> &b) { data = -b.data; }
+
+template <> inline void FP_NR<double>::abs(const FP_NR<double> &b)
+{
+  data = b.data;
+  if (data < 0)
+    data = -data;
+}
+
+template <> inline void FP_NR<double>::rnd(const FP_NR<double> &b) { data = rint(b.data); }
+
+template <> inline void FP_NR<double>::rnd_we(const FP_NR<double> &b, long expo_add)
+{
+  // If data == 0.0, exponent() is undefined, but both branches will work
+  if (b.exponent() + expo_add >= numeric_limits<double>::digits)
+    data = b.data;
+  else
+    data = ldexp(::rint(ldexp(b.data, expo_add)), -expo_add);
+}
+
+template <> inline void FP_NR<double>::floor(const FP_NR<double> &b) { data = ::floor(b.data); }
+
+template <> inline void FP_NR<double>::set_nan() { data = NAN; }
+
+template <> inline void FP_NR<double>::swap(FP_NR<double> &a) { std::swap(data, a.data); }
+
+/* hypot function for Givens */
+template <>
+inline void FP_NR<double>::hypot(const FP_NR<double> &a, const FP_NR<double> &b, mp_rnd_t /*rnd*/)
+{
+  data = ::hypot(a.data, b.data);
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP_dd.inl b/fplll/nr/nr_FP_dd.inl
new file mode 100644 (file)
index 0000000..0ce9ee0
--- /dev/null
@@ -0,0 +1,282 @@
+#ifndef FPLLL_NR_FP_DD_H
+#define FPLLL_NR_FP_DD_H
+/**********************************
+ *  F=dd_real specialization
+ *********************************/
+
+#include "../defs.h"
+#include "nr_FP.inl"
+#include <qd/dd_real.h>
+
+FPLLL_BEGIN_NAMESPACE
+
+/* DD specialization if defined QD */
+
+/* constructor */
+template <> inline FP_NR<dd_real>::FP_NR() {}
+
+template <> inline FP_NR<dd_real>::FP_NR(const FP_NR<dd_real> &f) { data = f.data; }
+
+template <> inline FP_NR<dd_real>::~FP_NR() {}
+
+template <> inline unsigned int FP_NR<dd_real>::get_prec() { return PREC_DD; }
+
+template <> inline unsigned int FP_NR<dd_real>::set_prec(unsigned int)
+{
+  return get_prec();  // ignored
+}
+
+/* return data */
+template <> inline double FP_NR<dd_real>::get_d(mp_rnd_t) const { return ::to_double(data); }
+
+template <> inline void FP_NR<dd_real>::get_mpfr(mpfr_t r, mp_rnd_t rnd) const
+{
+  mpfr_set_prec(r, get_prec());
+  mpfr_set_d(r, data._lo(), rnd);
+  mpfr_add_d(r, r, data._hi(), rnd);
+}
+
+template <> inline void FP_NR<dd_real>::set_mpfr(mpfr_t r, mp_rnd_t rnd)
+{
+
+  double hi;
+  hi = mpfr_get_d(r, rnd);
+
+  mpfr_t tf;
+  mpfr_init(tf);
+  mpfr_sub_d(tf, r, hi, rnd);
+
+  data = dd_real(hi, mpfr_get_d(tf, rnd));
+  mpfr_clear(tf);
+}
+
+template <> inline long FP_NR<dd_real>::get_si() const { return to_int(data); }
+
+template <> inline long FP_NR<dd_real>::exponent() const { return ilogb(::to_double(data)) + 1; }
+
+template <> inline long FP_NR<dd_real>::get_si_exp_we(long &expo, long expo_add) const
+{
+  if (data == 0)
+    expo = 0;
+  else
+    expo = max(exponent() + expo_add - numeric_limits<long>::digits, 0L);
+  return static_cast<long>((::ldexp(data, expo_add - expo)).x[0]);
+}
+
+template <> inline long FP_NR<dd_real>::get_si_exp(long &expo) const
+{
+  return get_si_exp_we(expo, 0);
+}
+
+/*  comparison */
+template <> inline int FP_NR<dd_real>::cmp(const FP_NR<dd_real> &b) const
+{
+  if (data > b.data)
+    return 1;
+  if (data < b.data)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<dd_real>::cmp(double b) const
+{
+  if (data > b)
+    return 1;
+  if (data < b)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<dd_real>::sgn() const
+{
+  if (data > 0)
+    return 1;
+  if (data < 0)
+    return -1;
+  return 0;
+}
+
+/* operators */
+template <> inline FP_NR<dd_real> &FP_NR<dd_real>::operator=(const FP_NR<dd_real> &a)
+{
+  data = a.data;
+  return *this;
+}
+
+template <> inline FP_NR<dd_real> &FP_NR<dd_real>::operator=(double a)
+{
+  data = a;
+  return *this;
+}
+
+template <> inline FP_NR<dd_real> &FP_NR<dd_real>::operator=(const char *s)
+{
+  data.read(s, data);
+  return *this;
+}
+
+template <> inline bool FP_NR<dd_real>::operator<=(const FP_NR<dd_real> &a) const
+{
+  return data <= a.data;
+}
+
+template <> inline bool FP_NR<dd_real>::operator<=(double a) const { return data <= a; }
+
+template <> inline bool FP_NR<dd_real>::operator>=(const FP_NR<dd_real> &a) const
+{
+  return data >= a.data;
+}
+
+template <> inline bool FP_NR<dd_real>::operator>=(double a) const { return data >= a; }
+
+template <> inline bool FP_NR<dd_real>::operator<(const FP_NR<dd_real> &a) const
+{
+  return data < a.data;
+}
+
+template <> inline bool FP_NR<dd_real>::operator<(double a) const { return data < a; }
+
+template <> inline bool FP_NR<dd_real>::operator>(const FP_NR<dd_real> &a) const
+{
+  return data > a.data;
+}
+
+template <> inline bool FP_NR<dd_real>::operator>(double a) const { return data > a; }
+
+template <> inline bool FP_NR<dd_real>::is_zero() const { return data == 0; }
+
+template <> inline int FP_NR<dd_real>::is_nan() const { return data.isnan(); }
+
+template <> inline int FP_NR<dd_real>::is_finite() const { return data.isfinite(); }
+
+/* arithmetic */
+template <>
+inline void FP_NR<dd_real>::add(const FP_NR<dd_real> &b, const FP_NR<dd_real> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data + c.data;
+}
+
+template <>
+inline void FP_NR<dd_real>::sub(const FP_NR<dd_real> &b, const FP_NR<dd_real> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data - c.data;
+}
+
+template <>
+inline void FP_NR<dd_real>::mul(const FP_NR<dd_real> &b, const FP_NR<dd_real> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data * c.data;
+}
+
+template <>
+inline void FP_NR<dd_real>::mul_d(const FP_NR<dd_real> &b, const double c, mp_rnd_t /*rnd*/)
+{
+  data = b.data * c;
+}
+
+template <> inline void FP_NR<dd_real>::mul_2si(const FP_NR<dd_real> &b, long c)
+{
+  data = ::ldexp(b.data, static_cast<int>(c));
+}
+
+template <>
+inline void FP_NR<dd_real>::div(const FP_NR<dd_real> &a, const FP_NR<dd_real> &b, mp_rnd_t /*rnd*/)
+{
+  data = a.data / b.data;
+}
+
+template <>
+inline void FP_NR<dd_real>::addmul(const FP_NR<dd_real> &b, const FP_NR<dd_real> &c,
+                                   mp_rnd_t /*rnd*/)
+{
+  data = data + b.data * c.data;
+}
+
+template <>
+inline void FP_NR<dd_real>::submul(const FP_NR<dd_real> &b, const FP_NR<dd_real> &c,
+                                   mp_rnd_t /*rnd*/)
+{
+  data = data - b.data * c.data;
+}
+
+template <> inline void FP_NR<dd_real>::pow_si(const FP_NR<dd_real> &a, long b, mp_rnd_t /*rnd*/)
+{
+  data = ::pow(a.data, static_cast<int>(b));
+}
+
+template <> inline void FP_NR<dd_real>::exponential(const FP_NR<dd_real> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::exp(a.data);
+}
+
+template <> inline void FP_NR<dd_real>::log(const FP_NR<dd_real> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::log(a.data);
+}
+
+template <> inline void FP_NR<dd_real>::sqrt(const FP_NR<dd_real> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::sqrt(a.data);
+}
+
+template <>
+inline void FP_NR<dd_real>::root(const FP_NR<dd_real> &a, unsigned int k, mp_rnd_t /*rnd*/)
+{
+  data = ::nroot(a.data, k);
+}
+
+template <> inline void FP_NR<dd_real>::neg(const FP_NR<dd_real> &b) { data = -b.data; }
+
+template <> inline void FP_NR<dd_real>::abs(const FP_NR<dd_real> &b) { data = ::abs(b.data); }
+
+template <> inline void FP_NR<dd_real>::rnd(const FP_NR<dd_real> &b) { data = ::nint(b.data); }
+
+template <> inline void FP_NR<dd_real>::rnd_we(const FP_NR<dd_real> &b, long expo_add)
+{
+  /* double-double has same expo limit as double format*/
+  if (b.exponent() + expo_add >= numeric_limits<double>::digits)
+    data = b.data;
+  else
+    data = ::ldexp(::nint(::ldexp(b.data, expo_add)), -expo_add);
+}
+
+template <> inline void FP_NR<dd_real>::floor(const FP_NR<dd_real> &b) { data = ::floor(b.data); }
+
+template <> inline void FP_NR<dd_real>::set_nan() { data = NAN; }
+
+template <> inline void FP_NR<dd_real>::swap(FP_NR<dd_real> &a)
+{
+  dd_real t = a.data;
+  a.data    = data;
+  data      = t;
+}
+
+/*  implemented hypot, since it
+    it is not implemented for
+    double-double
+*/
+template <>
+inline void FP_NR<dd_real>::hypot(const FP_NR<dd_real> &a, const FP_NR<dd_real> &b,
+                                  mp_rnd_t /*rnd*/)
+{
+  // Maybe decrease temporary
+  // variables with one, by
+  // putting the absolute value of a
+  // into this.data
+
+  dd_real abs_a = ::abs(a.data);
+  dd_real abs_b = ::abs(b.data);
+
+  if (abs_a > abs_b)
+  {
+    data = abs_a * ::sqrt(1.0 + (::pow(abs_b / abs_a, 2)));
+  }
+  else
+  {
+    data = abs_b * ::sqrt(1.0 + (::pow(abs_a / abs_b, 2)));
+  }
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP_dpe.inl b/fplll/nr/nr_FP_dpe.inl
new file mode 100644 (file)
index 0000000..21ba2ca
--- /dev/null
@@ -0,0 +1,289 @@
+/****************************
+ *  F=dpe_t specialization
+ ****************************/
+
+#ifndef FPLLL_NR_FP_DPE_H
+#define FPLLL_NR_FP_DPE_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* DPE specialization if defined */
+#ifdef FPLLL_WITH_DPE
+
+/* constructor */
+template <> inline FP_NR<dpe_t>::FP_NR() { dpe_init(data); }
+
+template <> inline FP_NR<dpe_t>::FP_NR(const FP_NR<dpe_t> &f)
+{
+  dpe_init(data);
+  dpe_set(data, f.data);
+}
+
+template <> inline FP_NR<dpe_t>::~FP_NR() { dpe_clear(data); }
+
+template <> inline unsigned int FP_NR<dpe_t>::get_prec() { return DPE_BITSIZE; }
+
+template <> inline unsigned int FP_NR<dpe_t>::set_prec(unsigned int /*prec*/)
+{
+  return get_prec();  // ignored
+}
+
+/* return data */
+template <> inline double FP_NR<dpe_t>::get_d(mp_rnd_t /*rnd*/) const { return dpe_get_d(data); }
+
+template <> inline void FP_NR<dpe_t>::get_mpfr(mpfr_t r, mp_rnd_t rnd) const
+{
+  dpe_get_mpfr(r, data, rnd);
+}
+
+template <> inline void FP_NR<dpe_t>::set_mpfr(mpfr_t r, mp_rnd_t /*rnd*/)
+{
+  dpe_set_mpfr(data, r);
+}
+
+template <> inline long FP_NR<dpe_t>::get_si() const { return dpe_get_si(data); }
+
+template <> inline long FP_NR<dpe_t>::exponent() const { return DPE_EXP(data); }
+
+template <> inline long FP_NR<dpe_t>::get_si_exp(long &expo) const
+{
+  long result;
+  expo = dpe_get_si_exp(&result, data);
+  if (dpe_zero_p(data))
+    expo = 0;
+  else if (expo < 0)
+  {
+    /* NOTE: conversion of result to double is exact even if
+        sizeof(long) = 8 */
+    result = static_cast<long>(ldexp(static_cast<double>(result), expo));
+    expo   = 0;
+  }
+  return result;
+}
+
+template <> inline long FP_NR<dpe_t>::get_si_exp_we(long &expo, long /*expo_add*/) const
+{
+  return get_si_exp(expo);  // NOTE: expo_add = 0
+}
+
+/*  comparison */
+template <> inline int FP_NR<dpe_t>::cmp(const FP_NR<dpe_t> &a) const
+{
+  return dpe_cmp(data, a.data);
+}
+
+template <> inline int FP_NR<dpe_t>::cmp(double a) const { return dpe_cmp_d(data, a); }
+
+template <> inline int FP_NR<dpe_t>::sgn() const { return cmp(0.0); }
+
+/* operators */
+template <> inline FP_NR<dpe_t> &FP_NR<dpe_t>::operator=(const FP_NR<dpe_t> &f)
+{
+  dpe_set(data, f.data);
+  return *this;
+}
+
+template <> inline FP_NR<dpe_t> &FP_NR<dpe_t>::operator=(double d)
+{
+  dpe_set_d(data, d);
+  return *this;
+}
+
+template <> inline FP_NR<dpe_t> &FP_NR<dpe_t>::operator=(const char *s)
+{
+  DPE_DOUBLE d;
+#ifdef DPE_USE_DOUBLE
+  d = strtod(s, NULL);
+#else
+  d = strtold(s, NULL);
+#endif
+  dpe_set_d(data, d);
+  return *this;
+}
+
+template <> inline bool FP_NR<dpe_t>::operator<=(const FP_NR<dpe_t> &a) const
+{
+  return dpe_cmp(data, a.data) <= 0;
+}
+
+template <> inline bool FP_NR<dpe_t>::operator<=(double a) const { return dpe_cmp_d(data, a) <= 0; }
+
+template <> inline bool FP_NR<dpe_t>::operator>=(const FP_NR<dpe_t> &a) const
+{
+  return dpe_cmp(data, a.data) >= 0;
+}
+
+template <> inline bool FP_NR<dpe_t>::operator>=(double a) const { return dpe_cmp_d(data, a) >= 0; }
+
+template <> inline bool FP_NR<dpe_t>::operator<(const FP_NR<dpe_t> &a) const
+{
+  return dpe_cmp(data, a.data) < 0;
+}
+
+template <> inline bool FP_NR<dpe_t>::operator<(double a) const { return dpe_cmp_d(data, a) < 0; }
+
+template <> inline bool FP_NR<dpe_t>::operator>(const FP_NR<dpe_t> &a) const
+{
+  return dpe_cmp(data, a.data) > 0;
+}
+
+template <> inline bool FP_NR<dpe_t>::operator>(double a) const { return dpe_cmp_d(data, a) > 0; }
+
+template <> inline bool FP_NR<dpe_t>::is_zero() const { return dpe_zero_p(data); }
+
+template <> inline int FP_NR<dpe_t>::is_nan() const { return DPE_MANT(data) != DPE_MANT(data); }
+
+template <> inline int FP_NR<dpe_t>::is_finite() const { return isfinite(DPE_MANT(data)); }
+
+/* arithmetic */
+template <>
+inline void FP_NR<dpe_t>::add(const FP_NR<dpe_t> &a, const FP_NR<dpe_t> &b, mp_rnd_t /*rnd*/)
+{
+  dpe_add(data, a.data, b.data);
+}
+
+template <>
+inline void FP_NR<dpe_t>::sub(const FP_NR<dpe_t> &a, const FP_NR<dpe_t> &b, mp_rnd_t /*rnd*/)
+{
+  dpe_sub(data, a.data, b.data);
+}
+
+template <>
+inline void FP_NR<dpe_t>::mul(const FP_NR<dpe_t> &a, const FP_NR<dpe_t> &b, mp_rnd_t /*rnd*/)
+{
+  dpe_mul(data, a.data, b.data);
+}
+
+template <> inline void FP_NR<dpe_t>::mul_d(const FP_NR<dpe_t> &a, const double b, mp_rnd_t /*rnd*/)
+{
+  dpe_mul_d(data, a.data, b);
+}
+
+template <> inline void FP_NR<dpe_t>::mul_2si(const FP_NR<dpe_t> &a, long b)
+{
+  dpe_mul_2si(data, a.data, b);
+}
+
+template <>
+inline void FP_NR<dpe_t>::div(const FP_NR<dpe_t> &a, const FP_NR<dpe_t> &b, mp_rnd_t /*rnd*/)
+{
+  dpe_div(data, a.data, b.data);
+}
+
+template <>
+inline void FP_NR<dpe_t>::addmul(const FP_NR<dpe_t> &a, const FP_NR<dpe_t> &b, mp_rnd_t /*rnd*/)
+{
+  dpe_addmul(data, a.data, b.data);
+}
+
+template <>
+inline void FP_NR<dpe_t>::submul(const FP_NR<dpe_t> &a, const FP_NR<dpe_t> &b, mp_rnd_t /*rnd*/)
+{
+  dpe_submul(data, a.data, b.data);
+}
+
+template <> inline void FP_NR<dpe_t>::pow_si(const FP_NR<dpe_t> &a, long b, mp_rnd_t /*rnd*/)
+{
+  dpe_pow_si(data, a.data, b);
+}
+
+template <> inline void FP_NR<dpe_t>::exponential(const FP_NR<dpe_t> &a, mp_rnd_t /*rnd*/)
+{
+  // dpe_ugly_exp(data, a.data);
+  dpe_exponential(data, a.data);
+}
+
+template <> inline void FP_NR<dpe_t>::log(const FP_NR<dpe_t> &a, mp_rnd_t /*rnd*/)
+{
+  dpe_log(data, a.data);
+  // dpe_ugly_log(data, a.data);
+}
+
+template <> inline void FP_NR<dpe_t>::sqrt(const FP_NR<dpe_t> &a, mp_rnd_t /*rnd*/)
+{
+  dpe_sqrt(data, a.data);
+}
+
+/* root() function not available */
+
+template <> inline void FP_NR<dpe_t>::neg(const FP_NR<dpe_t> &a) { dpe_neg(data, a.data); }
+
+template <> inline void FP_NR<dpe_t>::abs(const FP_NR<dpe_t> &a) { dpe_abs(data, a.data); }
+
+template <> inline void FP_NR<dpe_t>::rnd(const FP_NR<dpe_t> &a) { dpe_round(data, a.data); }
+
+template <> inline void FP_NR<dpe_t>::rnd_we(const FP_NR<dpe_t> &a, long /*expo_add*/)
+{
+  dpe_round(data, a.data);  // NOTE: expo_add = 0
+}
+
+template <> inline void FP_NR<dpe_t>::floor(const FP_NR<dpe_t> &a) { dpe_floor(data, a.data); }
+
+template <> inline void FP_NR<dpe_t>::set_nan()
+{
+  // dpe_set_d(data, NAN); // DPE_UNLIKELY branch in dpe_normalize
+  DPE_MANT(data) = NAN;
+}
+
+template <> inline void FP_NR<dpe_t>::swap(FP_NR<dpe_t> &a) { dpe_swap(data, a.data); }
+
+template <>
+inline void FP_NR<dpe_t>::hypot(const FP_NR<dpe_t> &a, const FP_NR<dpe_t> &b, mp_rnd_t /*rnd*/)
+{
+  dpe_t tmp1;
+  dpe_t one;
+  dpe_set_d(one, 1.0);
+  dpe_abs(data, a.data);  // this <- abs(a)
+  dpe_abs(tmp1, b.data);  // tmp1 <- abs(b)
+  if (dpe_cmp(data, tmp1))
+  {                             // if this = abs_a <= abs_b = tmp1
+    dpe_div(data, data, tmp1);  // this <- abs_a/abs_b = this/tmp1
+    dpe_mul(data, data, data);  // this <- (abs_a/abs_b)^2
+    dpe_add(data, data, one);   // this <- 1 + (abs_a/abs_b)^2
+    dpe_sqrt(data, data);       // this <- sqrt(1 + (abs_a/abs_b)^2)
+    dpe_mul(data, data, tmp1);  // this <- sqrt(1 + (abs_a/abs_b)^2)*abs_b
+  }
+  else
+  {
+    dpe_div(tmp1, tmp1, data);  // tmp1 <- abs_b/abs_a = tmp1/this
+    dpe_mul(tmp1, tmp1, tmp1);  // tmp1 <- (abs_b/abs_a)^2
+    dpe_add(tmp1, tmp1, one);   // tmp1 <- 1 + (abs_a/abs_b)^2
+    dpe_sqrt(tmp1, tmp1);       // tmp1 <- sqrt(1 + (abs_b/abs_a)^2)
+    dpe_mul(data, data, tmp1);  // this <- abs)a*sqrt(1 + (abs_b/abs_a)^2)
+  }
+
+  // Naive implementation:
+  //
+  // dpe_mul(data,a.data,a.data);
+  // dpe_addmul(data,b.data,b.data);
+  // dpe_sqrt(data,data);
+}
+
+/* operators FP_NR<dpe_t> */
+template <> inline ostream &operator<<(ostream &os, const FP_NR<dpe_t> &x)
+{
+  double m = DPE_MANT(x.get_data());
+  if (!isfinite(m))
+    os << m;
+  else
+  {
+    double mm = DPE_EXP(x.get_data()) * log10(2.0);
+    long e10  = static_cast<long>(mm);
+    m *= pow(10.0, mm - e10);
+    while (m != 0 && fabs(m) < 1)
+    {
+      m *= 10;
+      e10--;
+    }
+    os << m;
+    if (m != 0 && e10 != 0)
+      os << "e" << e10;
+  }
+  return os;
+}
+
+#endif  // #ifdef FPLLL_WITH_DPE
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP_ld.inl b/fplll/nr/nr_FP_ld.inl
new file mode 100644 (file)
index 0000000..6367e17
--- /dev/null
@@ -0,0 +1,276 @@
+/****************************
+ *  F=long double specialization
+ ****************************/
+
+#ifndef FPLLL_NR_FP_LD_H
+#define FPLLL_NR_FP_LD_H
+
+#include "../defs.h"
+#include "nr_FP.inl"
+
+FPLLL_BEGIN_NAMESPACE
+
+/* LD specialization if defined */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+
+/* constructor */
+template <> inline FP_NR<long double>::FP_NR() : data(0.0) {}
+
+template <> inline FP_NR<long double>::FP_NR(const FP_NR<long double> &f) : data(f.data) {}
+
+template <> inline FP_NR<long double>::~FP_NR() {}
+
+template <> inline unsigned int FP_NR<long double>::get_prec()
+{
+  return numeric_limits<long double>::digits;
+}
+
+template <> inline unsigned int FP_NR<long double>::set_prec(unsigned int /*prec*/)
+{
+  return get_prec();  // ignored
+}
+
+/* return data */
+template <> inline double FP_NR<long double>::get_d(mp_rnd_t /*rnd*/) const
+{
+  return static_cast<double>(data);
+}
+
+template <> inline void FP_NR<long double>::get_mpfr(mpfr_t r, mp_rnd_t rnd) const
+{
+  mpfr_set_ld(r, data, rnd);
+}
+
+template <> inline void FP_NR<long double>::set_mpfr(mpfr_t r, mp_rnd_t rnd)
+{
+  data = mpfr_get_ld(r, rnd);
+}
+
+template <> inline long FP_NR<long double>::get_si() const { return static_cast<long>(data); }
+
+template <> inline long FP_NR<long double>::exponent() const
+{
+  return static_cast<long>(ilogbl(data) + 1);
+}
+
+template <> inline long FP_NR<long double>::get_si_exp_we(long &expo, long expo_add) const
+{
+  if (data == 0.0)
+    expo = 0;
+  else
+    expo = max(exponent() + expo_add - numeric_limits<long>::digits, 0L);
+  return static_cast<long>(ldexpl(data, expo_add - expo));
+}
+
+template <> inline long FP_NR<long double>::get_si_exp(long &expo) const
+{
+  return get_si_exp_we(expo, 0);
+}
+
+/*  comparison */
+template <> inline int FP_NR<long double>::cmp(const FP_NR<long double> &b) const
+{
+  if (data > b.data)
+    return 1;
+  if (data < b.data)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<long double>::cmp(double b) const
+{
+  if (data > b)
+    return 1;
+  if (data < b)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<long double>::sgn() const
+{
+  if (data > 0)
+    return 1;
+  if (data < 0)
+    return -1;
+  return 0;
+}
+
+/* operators */
+template <> inline FP_NR<long double> &FP_NR<long double>::operator=(const FP_NR<long double> &f)
+{
+  data = f.data;
+  return *this;
+}
+
+template <> inline FP_NR<long double> &FP_NR<long double>::operator=(double d)
+{
+  data = d;
+  return *this;
+}
+
+template <> inline FP_NR<long double> &FP_NR<long double>::operator=(const char *s)
+{
+  data = strtold(s, NULL);
+  return *this;
+}
+
+template <> inline bool FP_NR<long double>::operator<=(const FP_NR<long double> &a) const
+{
+  return data <= a.data;
+}
+
+template <> inline bool FP_NR<long double>::operator<=(double a) const { return data <= a; }
+
+template <> inline bool FP_NR<long double>::operator>=(const FP_NR<long double> &a) const
+{
+  return data >= a.data;
+}
+
+template <> inline bool FP_NR<long double>::operator>=(double a) const { return data >= a; }
+
+template <> inline bool FP_NR<long double>::operator<(const FP_NR<long double> &a) const
+{
+  return data < a.data;
+}
+
+template <> inline bool FP_NR<long double>::operator<(double a) const { return data < a; }
+
+template <> inline bool FP_NR<long double>::operator>(const FP_NR<long double> &a) const
+{
+  return data > a.data;
+}
+
+template <> inline bool FP_NR<long double>::operator>(double a) const { return data > a; }
+
+template <> inline bool FP_NR<long double>::is_zero() const { return data == 0; }
+
+template <> inline int FP_NR<long double>::is_nan() const { return data != data; }
+
+template <> inline int FP_NR<long double>::is_finite() const { return isfinite(data); }
+
+/* arithmetic */
+template <>
+inline void FP_NR<long double>::add(const FP_NR<long double> &b, const FP_NR<long double> &c,
+                                    mp_rnd_t /*rnd*/)
+{
+  data = b.data + c.data;
+}
+
+template <>
+inline void FP_NR<long double>::sub(const FP_NR<long double> &b, const FP_NR<long double> &c,
+                                    mp_rnd_t /*rnd*/)
+{
+  data = b.data - c.data;
+}
+
+template <>
+inline void FP_NR<long double>::mul(const FP_NR<long double> &b, const FP_NR<long double> &c,
+                                    mp_rnd_t /*rnd*/)
+{
+  data = b.data * c.data;
+}
+
+template <>
+inline void FP_NR<long double>::mul_d(const FP_NR<long double> &b, const double c, mp_rnd_t /*rnd*/)
+{
+  data = b.data * c;
+}
+
+template <> inline void FP_NR<long double>::mul_2si(const FP_NR<long double> &b, long c)
+{
+  data = ldexpl(b.data, static_cast<int>(c));
+}
+
+template <>
+inline void FP_NR<long double>::div(const FP_NR<long double> &b, const FP_NR<long double> &c,
+                                    mp_rnd_t /*rnd*/)
+{
+  data = b.data / c.data;
+}
+
+template <>
+inline void FP_NR<long double>::addmul(const FP_NR<long double> &b, const FP_NR<long double> &c,
+                                       mp_rnd_t /*rnd*/)
+{
+  data = data + b.data * c.data;
+}
+
+template <>
+inline void FP_NR<long double>::submul(const FP_NR<long double> &b, const FP_NR<long double> &c,
+                                       mp_rnd_t /*rnd*/)
+{
+  data = data - b.data * c.data;
+}
+
+template <>
+inline void FP_NR<long double>::pow_si(const FP_NR<long double> &a, long b, mp_rnd_t /*rnd*/)
+{
+  data = powl(a.data, static_cast<long double>(b));
+}
+
+template <>
+inline void FP_NR<long double>::exponential(const FP_NR<long double> &a, mp_rnd_t /*rnd*/)
+{
+  data = expl(a.data);
+}
+
+template <> inline void FP_NR<long double>::log(const FP_NR<long double> &a, mp_rnd_t /*rnd*/)
+{
+  data = logl(a.data);
+}
+
+template <> inline void FP_NR<long double>::sqrt(const FP_NR<long double> &s, mp_rnd_t /*rnd*/)
+{
+  data = sqrtl(s.data);
+}
+
+template <>
+inline void FP_NR<long double>::root(const FP_NR<long double> &a, unsigned int k, mp_rnd_t /*rnd*/)
+{
+  data = powl(a.data, 1 / (static_cast<double>(k)));
+}
+
+template <> inline void FP_NR<long double>::neg(const FP_NR<long double> &b) { data = -b.data; }
+
+template <> inline void FP_NR<long double>::abs(const FP_NR<long double> &b)
+{
+  data = b.data;
+  if (data < 0)
+    data = -data;
+}
+
+template <> inline void FP_NR<long double>::rnd(const FP_NR<long double> &b)
+{
+  data = rintl(b.data);
+}
+
+template <> inline void FP_NR<long double>::rnd_we(const FP_NR<long double> &b, long expo_add)
+{
+  // If data == 0.0, exponent() is undefined, but both branches will work
+  if (b.exponent() + expo_add >= numeric_limits<long double>::digits)
+    data = b.data;
+  else
+    data = ldexpl(rintl(ldexpl(b.data, expo_add)), -expo_add);
+}
+
+template <> inline void FP_NR<long double>::floor(const FP_NR<long double> &b)
+{
+  data = floorl(b.data);
+}
+
+template <> inline void FP_NR<long double>::set_nan() { data = NAN; }
+
+template <> inline void FP_NR<long double>::swap(FP_NR<long double> &a) { std::swap(data, a.data); }
+
+template <>
+inline void FP_NR<long double>::hypot(const FP_NR<long double> &a, const FP_NR<long double> &b,
+                                      mp_rnd_t /*rnd*/)
+{
+  data = hypotl(a.data, b.data);
+}
+
+#endif  // End FPLLL_WITH_LONG_DOUBLE
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP_misc.inl b/fplll/nr/nr_FP_misc.inl
new file mode 100644 (file)
index 0000000..c8fd2b0
--- /dev/null
@@ -0,0 +1,428 @@
+/************************
+ *  Extra utils for NR_FP
+ ************************/
+
+#ifndef FPLLL_NR_FP_MISC_H
+#define FPLLL_NR_FP_MISC_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* -------------------------
+ *   set_z (Z_NR --> FP_NR)
+ * ------------------------- */
+
+/* set_z (to double) */
+#ifdef FPLLL_WITH_ZLONG
+
+/** set_z (from long to double) */
+template <> template <> inline void FP_NR<double>::set_z(const Z_NR<long> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_d();
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** set_z (from double to double) */
+template <> template <> inline void FP_NR<double>::set_z(const Z_NR<double> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_d();
+}
+#endif
+
+/** set_z (from default mpz_t to double) */
+template <> template <> inline void FP_NR<double>::set_z(const Z_NR<mpz_t> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_d();
+}
+
+/* set_z (to long double) */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+
+#ifdef FPLLL_WITH_ZLONG
+/** set_z (from long to long double) */
+template <> template <> inline void FP_NR<long double>::set_z(const Z_NR<long> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_ld();
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** set_z (from double to long double) */
+template <>
+template <>
+inline void FP_NR<long double>::set_z(const Z_NR<double> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_ld();
+}
+#endif
+
+/** set_z (from default mpz_t to long double) */
+template <>
+template <>
+inline void FP_NR<long double>::set_z(const Z_NR<mpz_t> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_ld();
+}
+
+#endif
+
+/* set_z (to dpe_t) */
+#ifdef FPLLL_WITH_DPE
+
+#ifdef FPLLL_WITH_ZLONG
+/** set_z (from long to dpe_t) */
+template <> template <> inline void FP_NR<dpe_t>::set_z(const Z_NR<long> &a, mp_rnd_t /*rnd*/)
+{
+  dpe_set_si(data, a.get_data());
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/* set_z (from double to dpe_t) */
+template <> template <> inline void FP_NR<dpe_t>::set_z(const Z_NR<double> &a, mp_rnd_t /*rnd*/)
+{
+  dpe_set_d(data, a.get_data());
+}
+#endif
+
+/* set_z (from default mpz_t to dpe_t) */
+template <> template <> inline void FP_NR<dpe_t>::set_z(const Z_NR<mpz_t> &a, mp_rnd_t /*rnd*/)
+{
+  dpe_set_z(data, const_cast<mpz_t &>(a.get_data()));
+}
+
+#endif
+
+/* set_z (to dd_real) */
+#ifdef FPLLL_WITH_QD
+
+#ifdef FPLLL_WITH_ZLONG
+/** set_z (from long to dd_real) */
+template <> template <> inline void FP_NR<dd_real>::set_z(const Z_NR<long> &a, mp_rnd_t)
+{
+  data = a.get_data();
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** set_z (from double to dd_real) */
+template <> template <> inline void FP_NR<dd_real>::set_z(const Z_NR<double> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_data();
+}
+#endif
+
+/** set_z (from default mpz_t to dd_real) */
+template <> template <> inline void FP_NR<dd_real>::set_z(const Z_NR<mpz_t> &a, mp_rnd_t /*rnd*/)
+{
+
+  double hi = mpz_get_d(a.get_data());
+
+  mpz_t tz;
+  mpz_init(tz);
+  mpz_set_d(tz, hi);
+  mpz_sub(tz, a.get_data(), tz);
+
+  data = dd_real(hi, mpz_get_d(tz));
+  mpz_clear(tz);
+}
+
+#endif
+
+/* set_z (to qd_real) */
+#ifdef FPLLL_WITH_QD
+
+#ifdef FPLLL_WITH_ZLONG
+/** set_z (from long to qd_real) */
+template <> template <> inline void FP_NR<qd_real>::set_z(const Z_NR<long> &a, mp_rnd_t)
+{
+  data = a.get_data();
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** set_z (from double to qd_real) */
+template <> template <> inline void FP_NR<qd_real>::set_z(const Z_NR<double> &a, mp_rnd_t /*rnd*/)
+{
+  data = a.get_data();
+}
+#endif
+
+/** set_z (from default mpz_t to qd_real) */
+template <> template <> inline void FP_NR<qd_real>::set_z(const Z_NR<mpz_t> &a, mp_rnd_t /*rnd*/)
+{
+  data = mpz_get_d(a.get_data());
+}
+
+#endif
+
+/* set_z (to mpfr_t) */
+#ifdef FPLLL_WITH_ZLONG
+
+/** set_z (from long to mpfr_t) */
+template <> template <> inline void FP_NR<mpfr_t>::set_z(const Z_NR<long> &a, mp_rnd_t rnd)
+{
+  mpfr_set_si(data, a.get_data(), rnd);
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** set_z (from double to mpfr_t) */
+template <> template <> inline void FP_NR<mpfr_t>::set_z(const Z_NR<double> &a, mp_rnd_t rnd)
+{
+  mpfr_set_d(data, a.get_data(), rnd);
+}
+#endif
+
+/** set_z (from default mpz_t to mpfr_t) */
+template <> template <> inline void FP_NR<mpfr_t>::set_z(const Z_NR<mpz_t> &a, mp_rnd_t rnd)
+{
+  mpfr_set_z(data, a.get_data(), rnd);
+}
+
+/* -----------------------------
+ *   get_z_exp (FP_NR --> Z_NR)
+ * ----------------------------- */
+
+/* get_z_exp_we (double --> Z_NR) */
+#ifdef FPLLL_WITH_ZLONG
+
+/** get_z_exp_we (from double to Z_NR<long>) */
+template <>
+template <>
+inline void FP_NR<double>::get_z_exp_we(Z_NR<long> &a, long &expo, long expo_add) const
+{
+  expo = 0;
+  a    = static_cast<long>(ldexp(data, expo_add));
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** get_z_exp_we (from double to Z_NR<double>) */
+template <>
+template <>
+inline void FP_NR<double>::get_z_exp_we(Z_NR<double> &a, long &expo, long expo_add) const
+{
+  expo         = 0;
+  a.get_data() = trunc(ldexp(data, expo_add));
+}
+#endif
+
+/** get_z_exp_we (from double to default mpz_t Z_NR<mpz_t>) */
+template <>
+template <>
+inline void FP_NR<double>::get_z_exp_we(Z_NR<mpz_t> &a, long &expo, long expo_add) const
+{
+  expo = max(exponent() + expo_add - numeric_limits<double>::digits, 0L);
+  mpz_set_d(a.get_data(), ldexp(data, expo_add - expo));
+}
+
+/** get_z_exp_we (from double to Z_NR<class Z>) */
+template <> template <class Z> inline void FP_NR<double>::get_z_exp(Z_NR<Z> &a, long &expo) const
+{
+  return get_z_exp_we(a, expo, 0);
+}
+
+/* get_z_exp_we (long double --> Z_NR) */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+
+/** get_z_exp_we (from long double to Z_NR<long>) */
+#ifdef FPLLL_WITH_ZLONG
+template <>
+template <>
+inline void FP_NR<long double>::get_z_exp_we(Z_NR<long> &a, long &expo, long expo_add) const
+{
+  expo = 0;
+  a    = static_cast<long>(ldexpl(data, expo_add));
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** get_z_exp_we (from long double to Z_NR<double>) */
+template <>
+template <>
+inline void FP_NR<long double>::get_z_exp_we(Z_NR<double> &a, long &expo, long expo_add) const
+{
+  expo         = 0;
+  a.get_data() = trunc(static_cast<double>(ldexpl(data, expo_add)));
+}
+#endif
+
+/** get_z_exp_we (from long double to default mpz_t Z_NR<mpz_t>) */
+template <>
+template <>
+inline void FP_NR<long double>::get_z_exp_we(Z_NR<mpz_t> &a, long &expo, long expo_add) const
+{
+  expo = max(exponent() + expo_add - numeric_limits<long double>::digits, 0L);
+  /* If expo > 0, then
+     expo_add - expo = numeric_limits<long double>::digits - exponent()
+     which implies that ldexpl(data, expo_add - expo) is an integer */
+  LDConvHelper::mpz_set_ld(a.get_data(), trunc(ldexpl(data, expo_add - expo)));
+}
+
+/** get_z_exp_we (from long double to Z_NR<class Z>) */
+template <>
+template <class Z>
+inline void FP_NR<long double>::get_z_exp(Z_NR<Z> &a, long &expo) const
+{
+  return get_z_exp_we(a, expo, 0);
+}
+
+#endif
+
+/* get_z_exp_we (dpe_t --> Z_NR) */
+#ifdef FPLLL_WITH_DPE
+
+#ifdef FPLLL_WITH_ZLONG
+/** get_z_exp_we (from dpe_t to Z_NR<long>) */
+template <> template <> inline void FP_NR<dpe_t>::get_z_exp(Z_NR<long> &a, long &expo) const
+{
+  expo = 0;
+  a    = get_si();
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** get_z_exp_we (from dpe_t to Z_NR<double>) */
+template <> template <> inline void FP_NR<dpe_t>::get_z_exp(Z_NR<double> &a, long &expo) const
+{
+  expo         = max(DPE_EXP(data) - numeric_limits<double>::digits, 0);
+  a.get_data() = trunc(ldexp(DPE_MANT(data), DPE_EXP(data) - expo));
+}
+#endif
+
+/** get_z_exp_we (from dpe_t to default mpz_t Z_NR<mpz_t>) */
+template <> template <> inline void FP_NR<dpe_t>::get_z_exp(Z_NR<mpz_t> &a, long &expo) const
+{
+  expo = max(DPE_EXP(data) - DPE_BITSIZE, 0);
+  mpz_set_d(a.get_data(), trunc(ldexp(DPE_MANT(data), DPE_EXP(data) - expo)));
+}
+
+/** get_z_exp_we (from dpe_t to Z_NR<class Z>) */
+template <>
+template <class Z>
+inline void FP_NR<dpe_t>::get_z_exp_we(Z_NR<Z> &a, long &expo, long /*expo_add*/) const
+{
+  return get_z_exp(a, expo);
+}
+
+#endif
+
+/* get_z_exp and get_z_exp_we (dd_real and qd_real --> Z_NR) */
+#ifdef FPLLL_WITH_QD
+
+/** get_z_exp_we (from dd_real to default mpz_t Z_NR<mpz_t>) */
+template <>
+template <>
+inline void FP_NR<dd_real>::get_z_exp_we(Z_NR<mpz_t> &a, long &expo, long expo_add) const
+{
+  // double-double has almost the same exp as double
+  expo = max(exponent() + expo_add - numeric_limits<double>::digits, 0L);
+  // losing precision here
+  mpz_set_d(a.get_data(), ::to_double(::ldexp(data, expo_add - expo)));
+}
+
+/** get_z_exp_we (from qd_real to default mpz_t Z_NR<mpz_t>) */
+template <>
+template <>
+inline void FP_NR<qd_real>::get_z_exp_we(Z_NR<mpz_t> &a, long &expo, long expo_add) const
+{
+  expo = max(exponent() + expo_add - numeric_limits<double>::digits, 0L);
+  mpz_set_d(a.get_data(), ::to_double(::ldexp(data, expo_add - expo)));
+}
+
+#ifdef FPLLL_WITH_ZLONG
+
+/** get_z_exp_we (from dd_real to Z_NR<long>) */
+template <>
+template <>
+inline void FP_NR<dd_real>::get_z_exp_we(Z_NR<long> &a, long &expo, long expo_add) const
+{
+  expo = 0;
+  a    = ::to_int(::ldexp(data, expo_add));
+}
+/** get_z_exp_we (from qd_real to Z_NR<long>) */
+template <>
+template <>
+inline void FP_NR<qd_real>::get_z_exp_we(Z_NR<long> &a, long &expo, long expo_add) const
+{
+  expo = 0;
+  a    = ::to_int(::ldexp(data, expo_add));
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+/** get_z_exp_we (from dd_real to Z_NR<double>) */
+template <>
+template <>
+inline void FP_NR<dd_real>::get_z_exp_we(Z_NR<double> &a, long &expo, long) const
+{
+  expo = 0;
+  a    = get_si();
+}
+/** get_z_exp_we (from qd_real to Z_NR<double>) */
+template <>
+template <>
+inline void FP_NR<qd_real>::get_z_exp_we(Z_NR<double> &a, long &expo, long) const
+{
+  expo = 0;
+  a    = get_si();
+}
+#endif
+
+/** get_z_exp (from dd_real to Z_NR<class Z>) */
+template <> template <class Z> inline void FP_NR<dd_real>::get_z_exp(Z_NR<Z> &a, long &expo) const
+{
+  return get_z_exp_we(a, expo, 0);
+}
+/** get_z_exp (from qd_real to Z_NR<class Z>) */
+template <> template <class Z> inline void FP_NR<qd_real>::get_z_exp(Z_NR<Z> &a, long &expo) const
+{
+  return get_z_exp_we(a, expo, 0);
+}
+
+#endif
+
+/* get_z_exp and get_z_exp_we (mpfr_t --> Z_NR) */
+#ifdef FPLLL_WITH_ZLONG
+
+/** get_z_exp (from mpfr_t to Z_NR<long>) */
+template <> template <> inline void FP_NR<mpfr_t>::get_z_exp(Z_NR<long> &a, long &expo) const
+{
+  expo = 0;
+  a    = get_si();
+}
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+
+/** get_z_exp (from mpfr_t to Z_NR<double>) */
+template <> template <> inline void FP_NR<mpfr_t>::get_z_exp(Z_NR<double> &a, long &expo) const
+{
+  expo         = 0;
+  a.get_data() = trunc(mpfr_get_d(data, GMP_RNDZ));
+}
+#endif
+
+/** get_z_exp (from mpfr_t to default mpz_t Z_NR<mpz_t>) */
+template <> template <> inline void FP_NR<mpfr_t>::get_z_exp(Z_NR<mpz_t> &a, long &expo) const
+{
+  expo = mpfr_get_z_exp(a.get_data(), data);
+  if (expo < 0)
+  {
+    a.mul_2si(a, expo);
+    expo = 0;
+  }
+}
+
+/** get_z_exp_we (from mpfr_t to Z_NR<class Z>) */
+template <>
+template <class Z>
+inline void FP_NR<mpfr_t>::get_z_exp_we(Z_NR<Z> &a, long &expo, long /*expo_add*/) const
+{
+  return get_z_exp(a, expo);
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP_mpfr.inl b/fplll/nr/nr_FP_mpfr.inl
new file mode 100644 (file)
index 0000000..71ecdf5
--- /dev/null
@@ -0,0 +1,284 @@
+/****************************
+ *  F=mpfr_t specialization
+ ****************************/
+
+#ifndef FPLLL_NR_FP_MPFR_H
+#define FPLLL_NR_FP_MPFR_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* MPFR specialization */
+
+/* constructor */
+template <> inline FP_NR<mpfr_t>::FP_NR() { mpfr_init(data); }
+
+template <> inline FP_NR<mpfr_t>::FP_NR(const FP_NR<mpfr_t> &f)
+{
+  mpfr_init_set(data, f.data, GMP_RNDN);
+}
+
+template <> inline FP_NR<mpfr_t>::~FP_NR() { mpfr_clear(data); }
+
+template <> inline unsigned int FP_NR<mpfr_t>::get_prec() { return mpfr_get_default_prec(); }
+
+template <> inline unsigned int FP_NR<mpfr_t>::set_prec(unsigned int prec)
+{
+  int old_prec = get_prec();
+  mpfr_set_default_prec(prec);
+  return old_prec;
+}
+
+/* return data */
+template <> inline double FP_NR<mpfr_t>::get_d(mp_rnd_t rnd) const { return mpfr_get_d(data, rnd); }
+
+template <> inline void FP_NR<mpfr_t>::get_mpfr(mpfr_t r, mp_rnd_t rnd) const
+{
+  mpfr_set(r, data, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::set_mpfr(mpfr_t r, mp_rnd_t rnd) { mpfr_set(data, r, rnd); }
+
+template <> inline long FP_NR<mpfr_t>::get_si() const { return mpfr_get_si(data, GMP_RNDN); }
+
+template <> inline long FP_NR<mpfr_t>::exponent() const { return mpfr_get_exp(data); }
+
+template <> inline long FP_NR<mpfr_t>::get_si_exp(long &expo) const
+{
+  if (mpfr_zero_p(data))
+  {
+    expo = 0;
+  }
+  else
+  {
+    expo = max(exponent() - numeric_limits<long>::digits, 0L);
+  }
+  mpfr_t &nc_data = const_cast<mpfr_t &>(data);
+  mpfr_div_2si(nc_data, nc_data, expo, GMP_RNDN);
+  long result = mpfr_get_si(nc_data, GMP_RNDZ);
+  mpfr_mul_2si(nc_data, nc_data, expo, GMP_RNDN);
+  return result;
+}
+
+template <> inline long FP_NR<mpfr_t>::get_si_exp_we(long &expo, long /*expo_add*/) const
+{
+  return get_si_exp(expo);  // NOTE: expo_add = 0
+}
+
+/*  comparison */
+template <> inline int FP_NR<mpfr_t>::cmp(const FP_NR<mpfr_t> &a) const
+{
+  return mpfr_cmp(data, a.data);
+}
+
+template <> inline int FP_NR<mpfr_t>::cmp(double a) const { return mpfr_cmp_d(data, a); }
+
+template <> inline int FP_NR<mpfr_t>::sgn() const { return mpfr_sgn(data); }
+
+/*operators */
+template <> inline FP_NR<mpfr_t> &FP_NR<mpfr_t>::operator=(const FP_NR<mpfr_t> &a)
+{
+  mpfr_set(data, a.data, GMP_RNDN);
+  return *this;
+}
+
+template <> inline FP_NR<mpfr_t> &FP_NR<mpfr_t>::operator=(double a)
+{
+  mpfr_set_d(data, a, GMP_RNDN);
+  return *this;
+}
+
+template <> inline FP_NR<mpfr_t> &FP_NR<mpfr_t>::operator=(const char *s)
+{
+  mpfr_set_str(data, s, 10, GMP_RNDN);
+  return *this;
+}
+
+template <> inline FP_NR<mpfr_t> &FP_NR<mpfr_t>::operator=(mpfr_t &a)
+{
+  mpfr_set(data, a, GMP_RNDN);
+  return *this;
+}
+
+template <> inline bool FP_NR<mpfr_t>::operator<=(const FP_NR<mpfr_t> &a) const
+{
+  return mpfr_cmp(data, a.data) <= 0;
+}
+
+template <> inline bool FP_NR<mpfr_t>::operator<=(double a) const
+{
+  return mpfr_cmp_d(data, a) <= 0;
+}
+
+template <> inline bool FP_NR<mpfr_t>::operator>=(const FP_NR<mpfr_t> &a) const
+{
+  return mpfr_cmp(data, a.data) >= 0;
+}
+
+template <> inline bool FP_NR<mpfr_t>::operator>=(double a) const
+{
+  return mpfr_cmp_d(data, a) >= 0;
+}
+
+template <> inline bool FP_NR<mpfr_t>::operator<(const FP_NR<mpfr_t> &a) const
+{
+  return mpfr_cmp(data, a.data) < 0;
+}
+
+template <> inline bool FP_NR<mpfr_t>::operator<(double a) const { return mpfr_cmp_d(data, a) < 0; }
+
+template <> inline bool FP_NR<mpfr_t>::operator>(const FP_NR<mpfr_t> &a) const
+{
+  return mpfr_cmp(data, a.data) > 0;
+}
+
+template <> inline bool FP_NR<mpfr_t>::operator>(double a) const { return mpfr_cmp_d(data, a) > 0; }
+
+template <> inline bool FP_NR<mpfr_t>::is_zero() const { return mpfr_zero_p(data); }
+
+template <> inline int FP_NR<mpfr_t>::is_nan() const { return mpfr_nan_p(data); }
+
+template <> inline int FP_NR<mpfr_t>::is_finite() const { return mpfr_number_p(data); }
+
+/* arithmetic */
+template <>
+inline void FP_NR<mpfr_t>::add(const FP_NR<mpfr_t> &a, const FP_NR<mpfr_t> &b, mp_rnd_t rnd)
+{
+  mpfr_add(data, a.data, b.data, rnd);
+}
+
+template <>
+inline void FP_NR<mpfr_t>::sub(const FP_NR<mpfr_t> &a, const FP_NR<mpfr_t> &b, mp_rnd_t rnd)
+{
+  mpfr_sub(data, a.data, b.data, rnd);
+}
+
+template <>
+inline void FP_NR<mpfr_t>::mul(const FP_NR<mpfr_t> &a, const FP_NR<mpfr_t> &b, mp_rnd_t rnd)
+{
+  mpfr_mul(data, a.data, b.data, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::mul_d(const FP_NR<mpfr_t> &a, double b, mp_rnd_t rnd)
+{
+  mpfr_mul_d(data, a.data, b, rnd);
+}
+
+template <>
+inline void FP_NR<mpfr_t>::mul_mpfr(const FP_NR<mpfr_t> &a, const mpfr_t b, mp_rnd_t rnd)
+{
+  mpfr_mul(data, a.data, b, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::mul_2si(const FP_NR<mpfr_t> &a, long b)
+{
+  mpfr_mul_2si(data, a.data, b, GMP_RNDN);
+}
+
+template <>
+inline void FP_NR<mpfr_t>::div(const FP_NR<mpfr_t> &a, const FP_NR<mpfr_t> &b, mp_rnd_t rnd)
+{
+  mpfr_div(data, a.data, b.data, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::div_d(const FP_NR<mpfr_t> &a, const double b, mp_rnd_t rnd)
+{
+  mpfr_div_d(data, a.data, b, rnd);
+}
+
+template <>
+inline void FP_NR<mpfr_t>::addmul(const FP_NR<mpfr_t> &b, const FP_NR<mpfr_t> &c, mp_rnd_t rnd)
+{
+  mpfr_fma(data, b.data, c.data, data, rnd);
+}
+
+template <>
+inline void FP_NR<mpfr_t>::submul(const FP_NR<mpfr_t> &b, const FP_NR<mpfr_t> &c, mp_rnd_t rnd)
+{
+  mpfr_fms(data, b.data, c.data, data, rnd);
+  mpfr_neg(data, data, GMP_RNDN);  // Exact
+}
+
+template <> inline void FP_NR<mpfr_t>::pow_si(const FP_NR<mpfr_t> &a, long b, mp_rnd_t rnd)
+{
+  mpfr_pow_si(data, a.data, b, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::exponential(const FP_NR<mpfr_t> &a, mp_rnd_t rnd)
+{
+  mpfr_exp(data, a.data, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::log(const FP_NR<mpfr_t> &a, mp_rnd_t rnd)
+{
+  mpfr_log(data, a.data, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::sqrt(const FP_NR<mpfr_t> &a, mp_rnd_t rnd)
+{
+  mpfr_sqrt(data, a.data, rnd);
+}
+
+template <> inline void FP_NR<mpfr_t>::root(const FP_NR<mpfr_t> &a, unsigned int k, mp_rnd_t rnd)
+{
+#if MPFR_VERSION_MAJOR >= 4
+  mpfr_rootn_ui(data, a.data, k, rnd);
+#else   // MPFR_VERSION_MAJOR >= 4
+  mpfr_root(data, a.data, k, rnd);
+#endif  // MPFR_VERSION_MAJOR >= 4
+}
+
+template <> inline void FP_NR<mpfr_t>::neg(const FP_NR<mpfr_t> &a)
+{
+  mpfr_neg(data, a.data, GMP_RNDN);
+}
+
+template <> inline void FP_NR<mpfr_t>::abs(const FP_NR<mpfr_t> &a)
+{
+  mpfr_abs(data, a.data, GMP_RNDN);
+}
+template <> inline void FP_NR<mpfr_t>::rnd(const FP_NR<mpfr_t> &a) { mpfr_round(data, a.data); }
+template <> inline void FP_NR<mpfr_t>::rnd_we(const FP_NR<mpfr_t> &a, long /*expo_add*/)
+{
+  mpfr_round(data, a.data);  // NOTE: expo_add = 0
+}
+template <> inline void FP_NR<mpfr_t>::floor(const FP_NR<mpfr_t> &a) { mpfr_floor(data, a.data); }
+
+template <> inline void FP_NR<mpfr_t>::set_nan() { mpfr_set_nan(data); }
+
+template <> inline void FP_NR<mpfr_t>::swap(FP_NR<mpfr_t> &a) { mpfr_swap(data, a.data); }
+
+/* the hypot function for Givens rotations */
+template <>
+inline void FP_NR<mpfr_t>::hypot(const FP_NR<mpfr_t> &a, const FP_NR<mpfr_t> &b, mp_rnd_t rnd)
+{
+  mpfr_hypot(data, a.data, b.data, rnd);
+}
+
+/* operators FP_NR<mpfr_t> */
+template <> inline ostream &operator<<(ostream &os, const FP_NR<mpfr_t> &x)
+{
+  mp_exp_t e;
+  char *s = mpfr_get_str(NULL, &e, 10, os.precision(), x.get_data(), GMP_RNDN);
+  char *p = s;
+  if (*p == '-')
+  {
+    os << *p;
+    p++;
+  }
+  if (*p == '@' || *p == 0)
+    os << p;
+  else if (*p == '0')
+    os << *p;
+  else
+  {
+    os << *p << '.' << p + 1;
+    if (e - 1 != 0)
+      os << 'e' << e - 1;
+  }
+  mpfr_free_str(s);
+  return os;
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_FP_qd.inl b/fplll/nr/nr_FP_qd.inl
new file mode 100644 (file)
index 0000000..76be8fb
--- /dev/null
@@ -0,0 +1,274 @@
+#ifndef FPLLL_NR_FP_QD_H
+#define FPLLL_NR_FP_QD_H
+/**********************************
+ *  F=qd_real specialization
+ *********************************/
+
+#include "../defs.h"
+#include "nr_FP.inl"
+#include <qd/qd_real.h>
+
+FPLLL_BEGIN_NAMESPACE
+
+/* QD specialization if defined QD */
+
+/* constructor */
+template <> inline FP_NR<qd_real>::FP_NR() {}
+
+template <> inline FP_NR<qd_real>::FP_NR(const FP_NR<qd_real> &f) { data = f.data; }
+
+template <> inline FP_NR<qd_real>::~FP_NR() {}
+
+template <> inline unsigned int FP_NR<qd_real>::get_prec() { return PREC_QD; }
+
+template <> inline unsigned int FP_NR<qd_real>::set_prec(unsigned int)
+{
+  return get_prec();  // ignored
+}
+
+/* return data */
+template <> inline double FP_NR<qd_real>::get_d(mp_rnd_t /*rnd*/) const
+{
+  return ::to_double(data);
+}
+
+template <> inline void FP_NR<qd_real>::get_mpfr(mpfr_t r, mp_rnd_t rnd) const
+{
+  mpfr_set_prec(r, get_prec());
+  mpfr_set_d(r, data.x[0], rnd);
+  mpfr_add_d(r, r, data.x[1], rnd);
+  mpfr_add_d(r, r, data.x[2], rnd);
+  mpfr_add_d(r, r, data.x[3], rnd);
+}
+
+template <> inline void FP_NR<qd_real>::set_mpfr(mpfr_t r, mp_rnd_t rnd)
+{
+  data = mpfr_get_ld(r, rnd);
+}
+
+template <> inline long FP_NR<qd_real>::get_si() const { return to_int(data); }
+
+template <> inline long FP_NR<qd_real>::exponent() const { return ilogb(::to_double(data)) + 1; }
+
+template <> inline long FP_NR<qd_real>::get_si_exp_we(long &expo, long expo_add) const
+{
+  if (data == 0)
+    expo = 0;
+  else
+    expo = max(exponent() + expo_add - numeric_limits<long>::digits, 0L);
+  return static_cast<long>((::ldexp(data, expo_add - expo)).x[0]);
+}
+
+template <> inline long FP_NR<qd_real>::get_si_exp(long &expo) const
+{
+  return get_si_exp_we(expo, 0);
+}
+
+/*  comparison */
+template <> inline int FP_NR<qd_real>::cmp(const FP_NR<qd_real> &b) const
+{
+  if (data > b.data)
+    return 1;
+  if (data < b.data)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<qd_real>::cmp(double b) const
+{
+  if (data > b)
+    return 1;
+  if (data < b)
+    return -1;
+  return 0;
+}
+
+template <> inline int FP_NR<qd_real>::sgn() const
+{
+  if (data > 0)
+    return 1;
+  if (data < 0)
+    return -1;
+  return 0;
+}
+
+/* operators */
+template <> inline FP_NR<qd_real> &FP_NR<qd_real>::operator=(const FP_NR<qd_real> &f)
+{
+  data = f.data;
+  return *this;
+}
+
+template <> inline FP_NR<qd_real> &FP_NR<qd_real>::operator=(double d)
+{
+  data = d;
+  return *this;
+}
+
+template <> inline FP_NR<qd_real> &FP_NR<qd_real>::operator=(const char *s)
+{
+  data.read(s, data);
+  return *this;
+}
+
+template <> inline bool FP_NR<qd_real>::operator<=(const FP_NR<qd_real> &a) const
+{
+  return data <= a.data;
+}
+
+template <> inline bool FP_NR<qd_real>::operator<=(double a) const { return data <= a; }
+
+template <> inline bool FP_NR<qd_real>::operator>=(const FP_NR<qd_real> &a) const
+{
+  return data >= a.data;
+}
+
+template <> inline bool FP_NR<qd_real>::operator>=(double a) const { return data >= a; }
+
+template <> inline bool FP_NR<qd_real>::operator<(const FP_NR<qd_real> &a) const
+{
+  return data < a.data;
+}
+
+template <> inline bool FP_NR<qd_real>::operator<(double a) const { return data < a; }
+
+template <> inline bool FP_NR<qd_real>::operator>(const FP_NR<qd_real> &a) const
+{
+  return data > a.data;
+}
+
+template <> inline bool FP_NR<qd_real>::operator>(double a) const { return data > a; }
+
+template <> inline bool FP_NR<qd_real>::is_zero() const { return data == 0; }
+
+template <> inline int FP_NR<qd_real>::is_nan() const { return data.isnan(); }
+
+template <> inline int FP_NR<qd_real>::is_finite() const { return ::isfinite(data); }
+
+/* arithmetic */
+template <>
+inline void FP_NR<qd_real>::add(const FP_NR<qd_real> &b, const FP_NR<qd_real> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data + c.data;
+}
+
+template <>
+inline void FP_NR<qd_real>::sub(const FP_NR<qd_real> &b, const FP_NR<qd_real> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data - c.data;
+}
+
+template <>
+inline void FP_NR<qd_real>::mul(const FP_NR<qd_real> &b, const FP_NR<qd_real> &c, mp_rnd_t /*rnd*/)
+{
+  data = b.data * c.data;
+}
+
+template <>
+inline void FP_NR<qd_real>::mul_d(const FP_NR<qd_real> &b, const double c, mp_rnd_t /*rnd*/)
+{
+  data = b.data * c;
+}
+
+template <> inline void FP_NR<qd_real>::mul_2si(const FP_NR<qd_real> &b, long c)
+{
+  data = ::ldexp(b.data, static_cast<int>(c));
+}
+
+template <>
+inline void FP_NR<qd_real>::div(const FP_NR<qd_real> &a, const FP_NR<qd_real> &b, mp_rnd_t /*rnd*/)
+{
+  data = a.data / b.data;
+}
+
+template <>
+inline void FP_NR<qd_real>::addmul(const FP_NR<qd_real> &b, const FP_NR<qd_real> &c,
+                                   mp_rnd_t /*rnd*/)
+{
+  data = data + b.data * c.data;
+}
+
+template <>
+inline void FP_NR<qd_real>::submul(const FP_NR<qd_real> &b, const FP_NR<qd_real> &c,
+                                   mp_rnd_t /*rnd*/)
+{
+  data = data - b.data * c.data;
+}
+
+template <> inline void FP_NR<qd_real>::pow_si(const FP_NR<qd_real> &a, long b, mp_rnd_t /*rnd*/)
+{
+  data = ::pow(a.data, static_cast<int>(b));
+}
+
+template <> inline void FP_NR<qd_real>::exponential(const FP_NR<qd_real> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::exp(a.data);
+}
+
+template <> inline void FP_NR<qd_real>::log(const FP_NR<qd_real> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::log(a.data);
+}
+
+template <> inline void FP_NR<qd_real>::sqrt(const FP_NR<qd_real> &a, mp_rnd_t /*rnd*/)
+{
+  data = ::sqrt(a.data);
+}
+
+template <>
+inline void FP_NR<qd_real>::root(const FP_NR<qd_real> &a, unsigned int k, mp_rnd_t /*rnd*/)
+{
+  data = ::nroot(a.data, k);
+}
+
+template <> inline void FP_NR<qd_real>::neg(const FP_NR<qd_real> &b) { data = -b.data; }
+
+template <> inline void FP_NR<qd_real>::abs(const FP_NR<qd_real> &b) { data = ::abs(b.data); }
+
+template <> inline void FP_NR<qd_real>::rnd(const FP_NR<qd_real> &b) { data = ::nint(b.data); }
+
+template <> inline void FP_NR<qd_real>::rnd_we(const FP_NR<qd_real> &b, long expo_add)
+{
+  /* quad-double has same expo limit as double format*/
+  if (b.exponent() + expo_add >= numeric_limits<double>::digits)
+    data = b.data;
+  else
+    data = ::ldexp(::nint(::ldexp(b.data, expo_add)), -expo_add);
+}
+
+template <> inline void FP_NR<qd_real>::floor(const FP_NR<qd_real> &b) { data = ::floor(b.data); }
+
+template <> inline void FP_NR<qd_real>::set_nan() { data = NAN; }
+
+template <> inline void FP_NR<qd_real>::swap(FP_NR<qd_real> &a)
+{
+  qd_real t = a.data;
+  a.data    = data;
+  data      = t;
+}
+
+template <>
+inline void FP_NR<qd_real>::hypot(const FP_NR<qd_real> &a, const FP_NR<qd_real> &b,
+                                  mp_rnd_t /*rnd*/)
+{
+  // Maybe decrease temporary
+  // variables with one, by
+  // putting the absolute value of a
+  // into this.data
+
+  qd_real abs_a = ::abs(a.data);
+  qd_real abs_b = ::abs(b.data);
+
+  if (abs_a > abs_b)
+  {
+    data = abs_a * ::sqrt(1.0 + (::pow(abs_b / abs_a, 2)));
+  }
+  else
+  {
+    data = abs_b * ::sqrt(1.0 + (::pow(abs_a / abs_b, 2)));
+  }
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_Z.inl b/fplll/nr/nr_Z.inl
new file mode 100644 (file)
index 0000000..456473c
--- /dev/null
@@ -0,0 +1,305 @@
+/*********************
+ *   Integer Class
+ *********************/
+
+#ifndef FPLLL_NR_Z_H
+#define FPLLL_NR_Z_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* declaration FP_NR */
+template <class F> class FP_NR;
+
+/**
+ * Z_NR stores integers. This template provides a uniform interface
+ *  for doing integer computations with several underlying types
+ *  (long, double and mpz_t).
+ */
+template <class Z = mpz_t> class Z_NR
+{
+
+  Z data;
+
+public:
+  /**
+   * Constructors.
+   */
+  inline Z_NR<Z>();
+  inline Z_NR<Z>(const Z_NR<Z> &z);
+  inline ~Z_NR<Z>();
+
+  /** get data */
+
+  /**
+   * Returns the internal representation of the data.
+   */
+  inline Z &get_data() { return data; }
+
+  /**
+   * Returns the internal representation of the data.
+   */
+  inline const Z &get_data() const { return data; }
+
+  /**
+   * Converts this object to a double. If it does not fit in
+   *  a double, the result is undefined.
+   */
+  inline double get_d() const;
+
+  /**
+   * Converts this object to a long double. If it does not fit in
+   * a long double, the result is undefined.
+   */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  inline long double get_ld() const;
+#endif
+
+  /**
+   * Converts this object to a long. If it does not fit in a long,
+   * the result is undefined.
+   */
+  inline long get_si() const;
+
+  /**
+   * Converts this object to a mpz.
+   */
+  inline void get_mpz(mpz_t r) const;
+
+  /**
+   * Returns the smallest non-negative expo such that |value| < 2^expo.
+   */
+  inline long exponent() const;
+
+  /**
+   * Computes f and expo such that 0.5 <= f < 1 and value ~= 2^expo * f.
+   *   The rounding direction is undefined.
+   *   This function is implemented only for native floating-point types
+   *   (double and long double), otherwise the behaviour is undefined.
+   */
+  template <class F> inline void get_f_exp(F &f, long &expo);
+
+  /** set data */
+
+  /**
+   * Sets the value to x. When FT=mpfr_t, x is rounded to the nearest
+   * integer and if the fractional part of x is 0.5, the even integer
+   * is chosen when. Otherwise, the rounding direction is undefined.
+   */
+  template <class F> inline void set_f(const FP_NR<F> &f);
+
+  /**
+   * Sets the value to s, signed integer in basis 10.
+   */
+  inline void set_str(const char *s);
+
+  /** comparison */
+
+  /**
+   * 3-way comparison. Returns a positive number if *this > m, a
+   * negative number if *this &lt; m or zero is *this == m.
+   */
+  inline int cmp(const Z_NR<Z> &m) const;
+
+  /**
+   * Sign. Returns a positive number, a negative number or zero
+   * if the value of this object is respectively positive,
+   * negative or null.
+   */
+  inline int sgn() const;
+
+  /**
+   * Operator
+   */
+  inline void operator=(const Z_NR<Z> &z);
+  inline void operator=(const mpz_t &z);
+  inline void operator=(long i);
+  inline bool operator<(const Z_NR<Z> &a) const;
+  inline bool operator<(long a) const;
+  inline bool operator>(const Z_NR<Z> &a) const;
+  inline bool operator>(long a) const;
+  inline bool operator<=(const Z_NR<Z> &a) const;
+  inline bool operator<=(long a) const;
+  inline bool operator>=(const Z_NR<Z> &a) const;
+  inline bool operator>=(long a) const;
+  inline bool operator==(const Z_NR<Z> &a) const;
+  inline bool operator==(long a) const;
+  inline bool operator!=(const Z_NR<Z> &a) const;
+  inline bool operator!=(long a) const;
+
+  /**
+   * max between a and b
+   */
+  inline Z_NR &max_z(Z_NR<Z> &b)
+  {
+    if ((*this) <= b)
+      return b;
+    else
+      return (*this);
+  }
+
+  /**
+   * Returns non-zero if the current value is zero, 0 otherwise.
+   */
+  inline bool is_zero() const { return *this == 0; }
+
+  /** arithmetic */
+
+  /**
+   * value := a + b.
+   */
+  inline void add(const Z_NR<Z> &a, const Z_NR<Z> &b);
+  inline void add_ui(const Z_NR<Z> &a, unsigned int b);
+  /**
+   * value := a - b.
+   */
+  inline void sub(const Z_NR<Z> &a, const Z_NR<Z> &b);
+  inline void sub_ui(const Z_NR<Z> &a, unsigned int b);
+
+  /**
+   * value := -a.
+   */
+  inline void neg(const Z_NR<Z> &a);
+
+  /**
+   * value := a * b.
+   */
+  inline void mul(const Z_NR<Z> &a, const Z_NR<Z> &b);
+
+  /**
+   * value := a * b.
+   */
+  inline void mul_si(const Z_NR<Z> &a, long b);
+  inline void mul_ui(const Z_NR<Z> &a, unsigned long b);
+
+  /**
+   * value := a * 2^b.
+   * if Z=long and |b| >= size_in_bits(a), the result is undefined.
+   */
+  inline void mul_2si(const Z_NR<Z> &a, long b);
+
+  /**
+   * value := a / 2^b.
+   * if Z=long and |b| >= size_in_bits(a), the result is undefined.
+   */
+  inline void div_2si(const Z_NR<Z> &a, long b);
+
+  /**
+   * value := value + a * b.
+   */
+  inline void addmul(const Z_NR<Z> &a, const Z_NR<Z> &b);
+  inline void addmul_ui(const Z_NR<Z> &a, unsigned long b);
+  inline void addmul_si(const Z_NR<Z> &a, long b);
+
+  /**
+   * value := value - a * b.
+   */
+  inline void submul(const Z_NR<Z> &a, const Z_NR<Z> &b);
+  inline void submul_ui(const Z_NR<Z> &a, unsigned long b);
+
+  /**
+   * value := absolute value of a.
+   */
+  inline void abs(const Z_NR<Z> &a);
+
+  /**
+   * Efficiently swaps the values of two Z_NR.
+   */
+  inline void swap(Z_NR<Z> &a);
+
+  /**
+   * Generates random integer between 0 and 2^bits-1.
+   */
+  inline void randb(int bits);
+  inline void randb_si(int bits);
+
+  /**
+   * Generates random integer between 0 and max - 1
+   */
+  inline void randm(const Z_NR<Z> &max);
+  inline void randm_si(const Z_NR<Z> &max);
+
+  /**
+   * Generates smallest prime number above nbr
+   */
+  inline void nextprime(const Z_NR<Z> &nbr);
+};
+
+/**
+ * LDConvHelper provides conversion functions between mpz_t and
+ * long double which are not (yet) in GMP. It uses mpfr so it is slow.
+ */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+
+class LDConvHelper
+{
+public:
+  /** Converts op to a long double with rounding to nearest. */
+  static long double mpz_get_ld(const mpz_t op)
+  {
+    init_temp();
+    mpfr_set_z(temp, op, GMP_RNDN);
+    return mpfr_get_ld(temp, GMP_RNDN);  // exact
+  }
+
+  static void free() { free_temp(); }
+
+  /**
+   * Returns d and sets exp such that 0.5 <= |d| < 1 and d * 2^exp is equal
+   * to op rounded to the nearest long double.
+   */
+  static long double mpz_get_ld_2exp(long *exp, const mpz_t op)
+  {
+    init_temp();
+    mpfr_set_z(temp, op, GMP_RNDN);
+    return mpfr_get_ld_2exp(exp, temp, GMP_RNDN);  // exact
+  }
+
+  /** Sets the value of rop from op. */
+  static void mpz_set_ld(mpz_t rop, long double op)
+  {
+    init_temp();
+    mpfr_set_ld(temp, op, GMP_RNDN);  // exact
+    mpfr_get_z(rop, temp, GMP_RNDN);
+  }
+
+private:
+  static inline void init_temp()
+  {
+    if (!temp_initialized)
+    {
+      mpfr_init2(temp, numeric_limits<long double>::digits);
+      temp_initialized = true;
+    }
+  }
+
+  static inline void free_temp()
+  {
+    if (temp_initialized)
+    {
+      mpfr_clear(temp);
+      temp_initialized = false;
+    }
+  }
+
+  // These static members are initialized in util.cpp
+  static mpfr_t temp;
+  static bool temp_initialized;
+};
+
+#endif
+
+/** overloading stream operators */
+
+/**
+ * Prints x on stream os.
+ */
+template <class T> ostream &operator<<(ostream &os, const Z_NR<T> &x);
+
+/**
+ * Reads x from stream is.
+ */
+template <class T> istream &operator>>(istream &is, Z_NR<T> &x);
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_Z_d.inl b/fplll/nr/nr_Z_d.inl
new file mode 100644 (file)
index 0000000..9de2be6
--- /dev/null
@@ -0,0 +1,262 @@
+/****************************
+ *  Z=double specialization
+ ****************************/
+
+#ifndef FPLLL_NR_Z_D_H
+#define FPLLL_NR_Z_D_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* specialization double as z */
+#ifdef FPLLL_WITH_ZDOUBLE
+
+template <> inline Z_NR<double>::Z_NR() {}
+
+template <> inline Z_NR<double>::Z_NR(const Z_NR<double> &z) : data(z.data) {}
+
+template <> inline Z_NR<double>::~Z_NR() {}
+
+/** get data */
+template <> inline double Z_NR<double>::get_d() const { return data; }
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> inline long double Z_NR<double>::get_ld() const
+{
+  return static_cast<long double>(data);
+}
+#endif
+
+template <> inline long Z_NR<double>::get_si() const { return static_cast<long>(rint(data)); }
+
+template <> inline void Z_NR<double>::get_mpz(mpz_t r) const { mpz_set_d(r, data); }
+
+template <> inline long Z_NR<double>::exponent() const
+{
+  int int_expo;
+  frexp(data, &int_expo);
+  return static_cast<long>(int_expo);
+}
+
+/** set data */
+template <> inline void Z_NR<double>::set_str(const char *s) { data = atof(s); }
+
+/** comparison */
+template <> inline int Z_NR<double>::cmp(const Z_NR<double> &m) const
+{
+  if (data > m.data)
+    return 1;
+  if (data == m.data)
+    return 0;
+  return -1;
+}
+
+template <> inline int Z_NR<double>::sgn() const
+{
+  if (data > 0.0)
+    return 1;
+  if (data == 0.0)
+    return 0;
+  return -1;
+}
+
+/** operator */
+template <> inline void Z_NR<double>::operator=(const Z_NR<double> &a) { data = a.data; }
+
+template <> inline void Z_NR<double>::operator=(long a) { data = static_cast<double>(a); }
+
+template <> inline bool Z_NR<double>::operator<(const Z_NR<double> &a) const
+{
+  return data < a.data;
+}
+
+template <> inline bool Z_NR<double>::operator<(long a) const
+{
+  return data < static_cast<double>(a);
+}
+
+template <> inline bool Z_NR<double>::operator>(const Z_NR<double> &a) const
+{
+  return data > a.data;
+}
+
+template <> inline bool Z_NR<double>::operator>(long a) const
+{
+  return data > static_cast<double>(a);
+}
+
+template <> inline bool Z_NR<double>::operator<=(const Z_NR<double> &a) const
+{
+  return data <= a.data;
+}
+
+template <> inline bool Z_NR<double>::operator<=(long a) const
+{
+  return data <= static_cast<double>(a);
+}
+
+template <> inline bool Z_NR<double>::operator>=(const Z_NR<double> &a) const
+{
+  return data >= a.data;
+}
+
+template <> inline bool Z_NR<double>::operator>=(long a) const
+{
+  return data >= static_cast<double>(a);
+}
+
+template <> inline bool Z_NR<double>::operator==(const Z_NR<double> &a) const
+{
+  return data == a.data;
+}
+
+template <> inline bool Z_NR<double>::operator==(long a) const
+{
+  return data == static_cast<double>(a);
+}
+
+template <> inline bool Z_NR<double>::operator!=(const Z_NR<double> &a) const
+{
+  return data != a.data;
+}
+
+template <> inline bool Z_NR<double>::operator!=(long a) const
+{
+  return data != static_cast<double>(a);
+}
+
+/** arithmetic */
+template <> inline void Z_NR<double>::add(const Z_NR<double> &a, const Z_NR<double> &b)
+{
+  data = a.data + b.data;
+}
+
+template <> inline void Z_NR<double>::add_ui(const Z_NR<double> &a, unsigned int b)
+{
+  data = a.data + static_cast<double>(b);
+}
+
+template <> inline void Z_NR<double>::sub(const Z_NR<double> &a, const Z_NR<double> &b)
+{
+  data = a.data - b.data;
+}
+
+template <> inline void Z_NR<double>::sub_ui(const Z_NR<double> &a, unsigned int b)
+{
+  data = a.data - static_cast<double>(b);
+}
+
+template <> inline void Z_NR<double>::neg(const Z_NR<double> &a) { data = -a.data; }
+
+template <> inline void Z_NR<double>::mul(const Z_NR<double> &a, const Z_NR<double> &b)
+{
+  data = a.data * b.data;
+}
+
+template <> inline void Z_NR<double>::mul_si(const Z_NR<double> &a, long int b)
+{
+  data = a.data * static_cast<double>(b);
+}
+
+template <> inline void Z_NR<double>::mul_ui(const Z_NR<double> &a, long unsigned int b)
+{
+  data = a.data * static_cast<double>(b);
+}
+
+template <> inline void Z_NR<double>::mul_2si(const Z_NR<double> &a, long b)
+{
+  data = ldexp(a.data, b);
+}
+
+template <> inline void Z_NR<double>::div_2si(const Z_NR<double> &a, long b)
+{
+  data = ldexp(a.data, -b);
+}
+
+template <> inline void Z_NR<double>::addmul(const Z_NR<double> &a, const Z_NR<double> &b)
+{
+  data += a.data * b.data;
+}
+
+template <> inline void Z_NR<double>::addmul_ui(const Z_NR<double> &a, unsigned long b)
+{
+  data += a.data * static_cast<double>(b);
+}
+
+template <> inline void Z_NR<double>::addmul_si(const Z_NR<double> &a, long b)
+{
+  data += a.data * static_cast<double>(b);
+}
+
+template <> inline void Z_NR<double>::submul(const Z_NR<double> &a, const Z_NR<double> &b)
+{
+  data -= a.data * b.data;
+}
+
+template <> inline void Z_NR<double>::submul_ui(const Z_NR<double> &a, unsigned long b)
+{
+  data -= a.data * static_cast<double>(b);
+}
+
+template <> inline void Z_NR<double>::abs(const Z_NR<double> &a) { data = fabs(a.data); }
+
+template <> inline void Z_NR<double>::swap(Z_NR<double> &a) { std::swap(data, a.data); }
+
+/** random numbers */
+template <> inline void Z_NR<double>::randb(int bits)
+{
+  mpz_t temp;
+  mpz_init(temp);
+  mpz_urandomb(temp, RandGen::get_gmp_state(), bits);
+  data = mpz_get_d(temp);
+  mpz_clear(temp);
+}
+
+template <> inline void Z_NR<double>::randb_si(int bits)
+{
+  randb(bits);
+  data = data * RandGenInt::get_bit();
+}
+
+template <> inline void Z_NR<double>::randm(const Z_NR<double> &max)
+{
+  mpz_t temp, lim;
+  mpz_init(temp);
+  mpz_init(lim);
+  mpz_set_d(lim, max.data);
+  mpz_urandomm(temp, RandGen::get_gmp_state(), lim);
+  data = mpz_get_d(temp);
+  mpz_clear(temp);
+  mpz_clear(lim);
+}
+
+template <> inline void Z_NR<double>::randm_si(const Z_NR<double> &max)
+{
+  randm(max);
+  data = data * RandGenInt::get_bit();
+}
+
+template <> inline void Z_NR<double>::nextprime(const Z_NR<double> &nbr)
+{
+  mpz_t temp, temp2;
+  mpz_init(temp);
+  mpz_init(temp2);
+  mpz_set_d(temp, nbr.data);
+  mpz_nextprime(temp2, temp);
+  data = mpz_get_d(temp2);
+  mpz_clear(temp);
+  mpz_clear(temp2);
+}
+
+/* operator Z_NR<double> */
+template <> inline ostream &operator<<(ostream &os, const Z_NR<double> &x)
+{
+  return os << x.get_data();
+}
+
+template <> inline istream &operator>>(istream &is, Z_NR<double> &x) { return is >> x.get_data(); }
+
+#endif  // #ifdef FPLLL_WITH_ZDOUBLE
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_Z_l.inl b/fplll/nr/nr_Z_l.inl
new file mode 100644 (file)
index 0000000..e12ab08
--- /dev/null
@@ -0,0 +1,240 @@
+/************************
+ * Z=long specialization
+ ************************/
+
+#ifndef FPLLL_NR_Z_L_H
+#define FPLLL_NR_Z_L_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* specialization long */
+#ifdef FPLLL_WITH_ZLONG
+
+template <> inline Z_NR<long>::Z_NR() {}
+
+template <> inline Z_NR<long>::Z_NR(const Z_NR<long> &z) : data(z.data) {}
+
+template <> inline Z_NR<long>::~Z_NR() {}
+
+/** get data */
+template <> inline double Z_NR<long>::get_d() const { return static_cast<double>(data); }
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> inline long double Z_NR<long>::get_ld() const { return static_cast<long double>(data); }
+#endif
+
+template <> inline long Z_NR<long>::get_si() const { return data; }
+
+template <> inline void Z_NR<long>::get_mpz(mpz_t r) const { mpz_set_si(r, data); }
+
+inline long compute_long_exponent(long data)
+{
+  unsigned long y = static_cast<unsigned long>(abs(data));
+  long e;
+  for (e = 0; y; e++, y >>= 1)
+  {
+  }
+  return e;
+}
+
+template <> inline long Z_NR<long>::exponent() const
+{
+  int int_expo;
+  double f_norm = frexp(static_cast<double>(data), &int_expo);
+  if (data > MAX_LONG_FAST && fabs(f_norm) == 0.5)
+    return compute_long_exponent(data);
+  else
+    return static_cast<long>(int_expo);
+}
+
+/** set data */
+template <> inline void Z_NR<long>::set_str(const char *s) { data = atol(s); }
+
+/** comparison */
+template <> inline int Z_NR<long>::cmp(const Z_NR<long> &m) const
+{
+  if (data > m.data)
+    return 1;
+  if (data == m.data)
+    return 0;
+  return -1;
+}
+
+template <> inline int Z_NR<long>::sgn() const
+{
+  if (data > 0)
+    return 1;
+  if (data == 0)
+    return 0;
+  return -1;
+}
+
+/** operator */
+template <> inline void Z_NR<long>::operator=(const Z_NR<long> &a) { data = a.data; }
+
+template <> inline void Z_NR<long>::operator=(long a) { data = static_cast<long>(a); }
+
+template <> inline void Z_NR<long>::operator=(const mpz_t &a) { data = mpz_get_si(a); }
+
+template <> inline bool Z_NR<long>::operator<(const Z_NR<long> &a) const { return data < a.data; }
+
+template <> inline bool Z_NR<long>::operator<(long a) const { return data < a; }
+
+template <> inline bool Z_NR<long>::operator>(const Z_NR<long> &a) const { return data > a.data; }
+
+template <> inline bool Z_NR<long>::operator>(long a) const { return data > a; }
+
+template <> inline bool Z_NR<long>::operator<=(const Z_NR<long> &a) const { return data <= a.data; }
+
+template <> inline bool Z_NR<long>::operator<=(long a) const { return data <= a; }
+
+template <> inline bool Z_NR<long>::operator>=(const Z_NR<long> &a) const { return data >= a.data; }
+
+template <> inline bool Z_NR<long>::operator>=(long a) const { return data >= a; }
+
+template <> inline bool Z_NR<long>::operator==(const Z_NR<long> &a) const { return data == a.data; }
+
+template <> inline bool Z_NR<long>::operator==(long a) const { return data == a; }
+
+template <> inline bool Z_NR<long>::operator!=(const Z_NR<long> &a) const { return data != a.data; }
+
+template <> inline bool Z_NR<long>::operator!=(long a) const { return data != a; }
+
+/** arithmetic */
+template <> inline void Z_NR<long>::add(const Z_NR<long> &a, const Z_NR<long> &b)
+{
+  data = a.data + b.data;
+}
+
+template <> inline void Z_NR<long>::add_ui(const Z_NR<long> &a, unsigned int b)
+{
+  data = a.data + b;
+}
+
+template <> inline void Z_NR<long>::sub(const Z_NR<long> &a, const Z_NR<long> &b)
+{
+  data = a.data - b.data;
+}
+
+template <> inline void Z_NR<long>::sub_ui(const Z_NR<long> &a, unsigned int b)
+{
+  data = a.data - b;
+}
+
+template <> inline void Z_NR<long>::neg(const Z_NR<long> &a) { data = -a.data; }
+
+template <> inline void Z_NR<long>::mul(const Z_NR<long> &a, const Z_NR<long> &b)
+{
+  data = a.data * b.data;
+}
+
+template <> inline void Z_NR<long>::mul_si(const Z_NR<long> &a, long b) { data = a.data * b; }
+
+template <> inline void Z_NR<long>::mul_ui(const Z_NR<long> &a, unsigned long b)
+{
+  data = a.data * b;
+}
+
+template <> inline void Z_NR<long>::mul_2si(const Z_NR<long> &a, long b)
+{
+  // NOTE: if b >= size_in_bits(a), the result is undefined
+  if (b >= 0)
+    data = a.data << b;
+  else
+    data = a.data >> -b;
+}
+
+template <> inline void Z_NR<long>::div_2si(const Z_NR<long> &a, long b)
+{
+  // NOTE: if b >= size_in_bits(a), the result is undefined
+  if (b >= 0)
+    data = a.data >> b;
+  else
+    data = a.data << -b;
+}
+
+template <> inline void Z_NR<long>::addmul(const Z_NR<long> &a, const Z_NR<long> &b)
+{
+  data += a.data * b.data;
+}
+
+template <> inline void Z_NR<long>::addmul_ui(const Z_NR<long> &a, unsigned long b)
+{
+  data += a.data * b;
+}
+
+template <> inline void Z_NR<long>::addmul_si(const Z_NR<long> &a, long b) { data += a.data * b; }
+
+template <> inline void Z_NR<long>::submul(const Z_NR<long> &a, const Z_NR<long> &b)
+{
+  data -= a.data * b.data;
+}
+
+template <> inline void Z_NR<long>::submul_ui(const Z_NR<long> &a, unsigned long b)
+{
+  data -= a.data * b;
+}
+
+template <> inline void Z_NR<long>::abs(const Z_NR<long> &a) { data = labs(a.data); }
+
+template <> inline void Z_NR<long>::swap(Z_NR<long> &a) { std::swap(data, a.data); }
+
+/** random numbers */
+template <> inline void Z_NR<long>::randb(int bits)
+{
+  mpz_t temp;
+  mpz_init(temp);
+  mpz_urandomb(temp, RandGen::get_gmp_state(), bits);
+  data = mpz_get_si(temp);
+  mpz_clear(temp);
+}
+
+template <> inline void Z_NR<long>::randb_si(int bits)
+{
+  randb(bits);
+  data = data * RandGenInt::get_bit();
+}
+
+template <> inline void Z_NR<long>::randm(const Z_NR<long> &max)
+{
+  mpz_t temp, lim;
+  mpz_init(temp);
+  mpz_init(lim);
+  mpz_set_si(lim, max.data);
+  mpz_urandomm(temp, RandGen::get_gmp_state(), lim);
+  data = mpz_get_si(temp);
+  mpz_clear(temp);
+  mpz_clear(lim);
+}
+
+template <> inline void Z_NR<long>::randm_si(const Z_NR<long> &max)
+{
+  randm(max);
+  data = data * RandGenInt::get_bit();
+}
+
+template <> inline void Z_NR<long>::nextprime(const Z_NR<long> &nbr)
+{
+  mpz_t temp, temp2;
+  mpz_init(temp);
+  mpz_init(temp2);
+  mpz_set_ui(temp, nbr.data);
+  mpz_nextprime(temp2, temp);
+  data = mpz_get_ui(temp2);
+  mpz_clear(temp);
+  mpz_clear(temp2);
+}
+
+/* operators Z_NR<long> */
+template <> inline ostream &operator<<(ostream &os, const Z_NR<long> &x)
+{
+  return os << x.get_data();
+}
+
+template <> inline istream &operator>>(istream &is, Z_NR<long> &x) { return is >> x.get_data(); }
+
+#endif  // #ifdef FPLLL_WITH_ZLONG
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_Z_misc.inl b/fplll/nr/nr_Z_misc.inl
new file mode 100644 (file)
index 0000000..fde3e13
--- /dev/null
@@ -0,0 +1,269 @@
+/************************
+ * Extra utils for NR_Z
+ ************************/
+
+#ifndef FPLLL_NR_Z_MISC_H
+#define FPLLL_NR_Z_MISC_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* -----------------------------
+ *   get_f_exp (Z_NR --> FP_NR)
+ * ----------------------------- */
+
+/* get_f_exp (long to double) */
+#ifdef FPLLL_WITH_ZLONG
+
+template <> template <> inline void Z_NR<long>::get_f_exp(FP_NR<double> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = frexp(static_cast<double>(data), &int_expo);
+  expo         = int_expo;
+}
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> template <> inline void Z_NR<long>::get_f_exp(FP_NR<long double> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = frexpl(static_cast<long double>(data), &int_expo);
+  expo         = int_expo;
+}
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template <> template <> inline void Z_NR<long>::get_f_exp(FP_NR<dpe_t> & /*f*/, long & /*expo*/)
+{
+  FPLLL_DEBUG_ABORT("get_f_exp unimplemented for dpe_t");
+}
+#endif
+
+#ifdef FPLLL_WITH_QD
+template <> template <> inline void Z_NR<long>::get_f_exp(FP_NR<dd_real> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = frexp(static_cast<double>(data), &int_expo);
+  expo         = int_expo;
+}
+template <> template <> inline void Z_NR<long>::get_f_exp(FP_NR<qd_real> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = frexp(static_cast<double>(data), &int_expo);
+  expo         = int_expo;
+}
+#endif
+
+template <> template <> inline void Z_NR<long>::get_f_exp(FP_NR<mpfr_t> & /*f*/, long & /*expo*/)
+{
+  FPLLL_DEBUG_ABORT("get_f_exp unimplemented for mpfr_t");
+}
+
+#endif
+
+/* get_f_exp (double to double) */
+#ifdef FPLLL_WITH_ZDOUBLE
+
+template <> template <> inline void Z_NR<double>::get_f_exp(FP_NR<double> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = frexp(data, &int_expo);
+  expo         = int_expo;
+}
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> template <> inline void Z_NR<double>::get_f_exp(FP_NR<long double> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = static_cast<long double>(frexp(data, &int_expo));
+  expo         = int_expo;
+}
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template <> template <> inline void Z_NR<double>::get_f_exp(FP_NR<dpe_t> & /*f*/, long & /*expo*/)
+{
+  FPLLL_DEBUG_ABORT("get_f_exp unimplemented for dpe_t");
+}
+#endif
+
+#ifdef FPLLL_WITH_QD
+template <> template <> inline void Z_NR<double>::get_f_exp(FP_NR<dd_real> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = frexp(data, &int_expo);
+  expo         = int_expo;
+}
+template <> template <> inline void Z_NR<double>::get_f_exp(FP_NR<qd_real> &f, long &expo)
+{
+  int int_expo;
+  f.get_data() = frexp(data, &int_expo);
+  expo         = int_expo;
+}
+#endif
+
+template <> template <> inline void Z_NR<double>::get_f_exp(FP_NR<mpfr_t> &f, long &expo)
+{
+  int int_expo;
+  f    = frexp(data, &int_expo);
+  expo = int_expo;
+  FPLLL_DEBUG_ABORT("get_f_exp unimplemented for mpfr_t");
+}
+
+#endif
+
+/* get_f_exp (mpz_t to double) */
+template <> template <> inline void Z_NR<mpz_t>::get_f_exp(FP_NR<double> &f, long &expo)
+{
+  f.get_data() = mpz_get_d_2exp(&expo, data);
+}
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> template <> inline void Z_NR<mpz_t>::get_f_exp(FP_NR<long double> &f, long &expo)
+{
+  f.get_data() = LDConvHelper::mpz_get_ld_2exp(&expo, data);
+}
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template <> template <> inline void Z_NR<mpz_t>::get_f_exp(FP_NR<dpe_t> & /*f*/, long & /*expo*/)
+{
+  FPLLL_DEBUG_ABORT("get_f_exp unimplemented for dpe_t");
+}
+#endif
+
+#ifdef FPLLL_WITH_QD
+template <> template <> inline void Z_NR<mpz_t>::get_f_exp(FP_NR<dd_real> &f, long &expo)
+{
+  f.get_data() = mpz_get_d_2exp(&expo, data);
+}
+template <> template <> inline void Z_NR<mpz_t>::get_f_exp(FP_NR<qd_real> &f, long &expo)
+{
+  f.get_data() = mpz_get_d_2exp(&expo, data);
+}
+#endif
+
+template <> template <> inline void Z_NR<mpz_t>::get_f_exp(FP_NR<mpfr_t> &f, long &expo)
+{
+  f = mpz_get_d_2exp(&expo, data);
+}
+
+/* -------------------------
+ *   set_f (FP_NR --> Z_NR)
+ * ------------------------- */
+
+/* set_f (FP_NR to long) */
+#ifdef FPLLL_WITH_ZLONG
+
+template <> template <> inline void Z_NR<long>::set_f(const FP_NR<double> &a) { data = a.get_si(); }
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> template <> inline void Z_NR<long>::set_f(const FP_NR<long double> &a)
+{
+  data = a.get_si();
+}
+#endif
+
+#ifdef FPLLL_WITH_QD
+template <> template <> inline void Z_NR<long>::set_f(const FP_NR<dd_real> &a)
+{
+  data = a.get_si();
+}
+
+template <> template <> inline void Z_NR<long>::set_f(const FP_NR<qd_real> &a)
+{
+  data = a.get_si();
+}
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template <> template <> inline void Z_NR<long>::set_f(const FP_NR<dpe_t> &a) { data = a.get_si(); }
+#endif
+
+template <> template <> inline void Z_NR<long>::set_f(const FP_NR<mpfr_t> &a) { data = a.get_si(); }
+
+#endif  // #ifdef FPLLL_WITH_ZLONG
+
+/* set_f (FP_NR to Zdouble) */
+#ifdef FPLLL_WITH_ZDOUBLE
+
+template <> template <> inline void Z_NR<double>::set_f(const FP_NR<double> &a)
+{
+  data = a.get_d();
+}
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> template <> inline void Z_NR<double>::set_f(const FP_NR<long double> &a)
+{
+  data = a.get_d();
+}
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template <> template <> inline void Z_NR<double>::set_f(const FP_NR<dpe_t> &a) { data = a.get_d(); }
+#endif
+
+#ifdef FPLLL_WITH_QD
+template <> template <> inline void Z_NR<double>::set_f(const FP_NR<dd_real> &a)
+{
+  data = a.get_d();
+}
+
+template <> template <> inline void Z_NR<double>::set_f(const FP_NR<qd_real> &a)
+{
+  data = a.get_d();
+}
+#endif
+
+template <> template <> inline void Z_NR<double>::set_f(const FP_NR<mpfr_t> &a)
+{
+  data = a.get_d();
+}
+#endif  // #ifdef FPLLL_WITH_ZDOUBLE
+
+/* set_f (FP_NR to mpz_t) */
+template <> template <> inline void Z_NR<mpz_t>::set_f(const FP_NR<double> &a)
+{
+  mpz_set_d(data, a.get_data());
+}
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> template <> inline void Z_NR<mpz_t>::set_f(const FP_NR<long double> &a)
+{
+  LDConvHelper::mpz_set_ld(data, a.get_data());
+}
+#endif
+
+#ifdef FPLLL_WITH_DPE
+template <> template <> inline void Z_NR<mpz_t>::set_f(const FP_NR<dpe_t> &a)
+{
+  dpe_get_z(data, const_cast<dpe_t &>(a.get_data()));
+}
+#endif
+
+#ifdef FPLLL_WITH_QD
+template <> template <> inline void Z_NR<mpz_t>::set_f(const FP_NR<dd_real> &a)
+{
+  mpfr_t t;
+  mpfr_init(t);
+  a.get_mpfr(t, GMP_RNDN);
+  mpfr_get_z(data, t, GMP_RNDN);
+  mpfr_clear(t);
+}
+
+template <> template <> inline void Z_NR<mpz_t>::set_f(const FP_NR<qd_real> &a)
+{
+  mpfr_t t;
+  mpfr_init(t);
+  a.get_mpfr(t, GMP_RNDN);
+  mpfr_get_z(data, t, GMP_RNDN);
+  mpfr_clear(t);
+}
+#endif
+
+template <> template <> inline void Z_NR<mpz_t>::set_f(const FP_NR<mpfr_t> &a)
+{
+  mpfr_get_z(data, a.get_data(), GMP_RNDN);
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_Z_mpz.inl b/fplll/nr/nr_Z_mpz.inl
new file mode 100644 (file)
index 0000000..e309e56
--- /dev/null
@@ -0,0 +1,276 @@
+/****************************
+ *  Z=mpz_t specialization
+ ****************************/
+
+#ifndef FPLLL_NR_Z_MPZ_H
+#define FPLLL_NR_Z_MPZ_H
+
+FPLLL_BEGIN_NAMESPACE
+
+/* specialization */
+template <> inline Z_NR<mpz_t>::Z_NR() { mpz_init(data); }
+
+template <> inline Z_NR<mpz_t>::Z_NR(const Z_NR<mpz_t> &z) { mpz_init_set(data, z.data); }
+
+template <> inline Z_NR<mpz_t>::~Z_NR() { mpz_clear(data); }
+
+/** get data */
+template <> inline double Z_NR<mpz_t>::get_d() const { return mpz_get_d(data); }
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+template <> inline long double Z_NR<mpz_t>::get_ld() const
+{
+  return LDConvHelper::mpz_get_ld(data);
+}
+#endif
+
+template <> inline long Z_NR<mpz_t>::get_si() const { return mpz_get_si(data); }
+
+template <> inline void Z_NR<mpz_t>::get_mpz(mpz_t r) const { mpz_set(r, data); }
+
+template <> inline long Z_NR<mpz_t>::exponent() const
+{
+  long expo;
+  mpz_get_d_2exp(&expo, data);
+  return expo;
+}
+
+/** set data */
+template <> inline void Z_NR<mpz_t>::set_str(const char *s) { mpz_set_str(data, s, 10); }
+
+/** comparison */
+template <> inline int Z_NR<mpz_t>::cmp(const Z_NR<mpz_t> &m) const
+{
+  int c = mpz_cmp(data, m.data);
+  if (c > 0)
+    return 1;
+  if (c == 0)
+    return 0;
+  return -1;
+}
+
+template <> inline int Z_NR<mpz_t>::sgn() const { return mpz_sgn(data); }
+
+/** operator */
+template <> inline void Z_NR<mpz_t>::operator=(const Z_NR<mpz_t> &a) { mpz_set(data, a.data); }
+
+template <> inline void Z_NR<mpz_t>::operator=(const mpz_t &a) { mpz_set(data, a); }
+
+template <> inline void Z_NR<mpz_t>::operator=(long a) { mpz_set_si(data, a); }
+
+template <> inline bool Z_NR<mpz_t>::operator<(const Z_NR<mpz_t> &a) const
+{
+  return mpz_cmp(data, a.data) < 0;
+}
+
+template <> inline bool Z_NR<mpz_t>::operator<(long a) const { return mpz_cmp_si(data, a) < 0; }
+
+template <> inline bool Z_NR<mpz_t>::operator>(const Z_NR<mpz_t> &a) const
+{
+  return mpz_cmp(data, a.data) > 0;
+}
+
+template <> inline bool Z_NR<mpz_t>::operator>(long a) const { return mpz_cmp_si(data, a) > 0; }
+
+template <> inline bool Z_NR<mpz_t>::operator<=(const Z_NR<mpz_t> &a) const
+{
+  return mpz_cmp(data, a.data) <= 0;
+}
+
+template <> inline bool Z_NR<mpz_t>::operator<=(long a) const { return mpz_cmp_si(data, a) <= 0; }
+
+template <> inline bool Z_NR<mpz_t>::operator>=(const Z_NR<mpz_t> &a) const
+{
+  return mpz_cmp(data, a.data) >= 0;
+}
+
+template <> inline bool Z_NR<mpz_t>::operator>=(long a) const { return mpz_cmp_si(data, a) >= 0; }
+
+template <> inline bool Z_NR<mpz_t>::operator==(const Z_NR<mpz_t> &a) const
+{
+  return mpz_cmp(data, a.data) == 0;
+}
+
+template <> inline bool Z_NR<mpz_t>::operator==(long a) const { return mpz_cmp_si(data, a) == 0; }
+
+template <> inline bool Z_NR<mpz_t>::operator!=(const Z_NR<mpz_t> &a) const
+{
+  return mpz_cmp(data, a.data) != 0;
+}
+
+template <> inline bool Z_NR<mpz_t>::operator!=(long a) const { return mpz_cmp_si(data, a) != 0; }
+
+/** arithmetic */
+template <> inline void Z_NR<mpz_t>::add(const Z_NR<mpz_t> &a, const Z_NR<mpz_t> &b)
+{
+  mpz_add(data, a.data, b.data);
+}
+
+template <> inline void Z_NR<mpz_t>::add_ui(const Z_NR<mpz_t> &a, unsigned int b)
+{
+  mpz_add_ui(data, a.data, b);
+}
+
+template <> inline void Z_NR<mpz_t>::sub(const Z_NR<mpz_t> &a, const Z_NR<mpz_t> &b)
+{
+  mpz_sub(data, a.data, b.data);
+}
+
+template <> inline void Z_NR<mpz_t>::sub_ui(const Z_NR<mpz_t> &a, unsigned int b)
+{
+  mpz_sub_ui(data, a.data, b);
+}
+
+template <> inline void Z_NR<mpz_t>::neg(const Z_NR<mpz_t> &a) { mpz_neg(data, a.data); }
+
+template <> inline void Z_NR<mpz_t>::mul(const Z_NR<mpz_t> &a, const Z_NR<mpz_t> &b)
+{
+  mpz_mul(data, a.data, b.data);
+}
+
+template <> inline void Z_NR<mpz_t>::mul_si(const Z_NR<mpz_t> &a, long b)
+{
+  mpz_mul_si(data, a.data, b);
+}
+
+template <> inline void Z_NR<mpz_t>::mul_ui(const Z_NR<mpz_t> &a, unsigned long b)
+{
+  mpz_mul_ui(data, a.data, b);
+}
+
+template <> inline void Z_NR<mpz_t>::mul_2si(const Z_NR<mpz_t> &a, long b)
+{
+  if (b >= 0)
+    mpz_mul_2exp(data, a.data, b);
+  else
+    mpz_div_2exp(data, a.data, -b);
+}
+
+template <> inline void Z_NR<mpz_t>::div_2si(const Z_NR<mpz_t> &a, long b)
+{
+  if (b >= 0)
+    mpz_div_2exp(data, a.data, b);
+  else
+    mpz_mul_2exp(data, a.data, -b);
+}
+
+template <> inline void Z_NR<mpz_t>::addmul(const Z_NR<mpz_t> &a, const Z_NR<mpz_t> &b)
+{
+  mpz_addmul(data, a.data, b.data);
+}
+
+template <> inline void Z_NR<mpz_t>::addmul_ui(const Z_NR<mpz_t> &a, unsigned long b)
+{
+  mpz_addmul_ui(data, a.data, b);
+}
+
+template <> inline void Z_NR<mpz_t>::addmul_si(const Z_NR<mpz_t> &a, long b)
+{
+  if (b >= 0)
+    mpz_addmul_ui(data, a.data, static_cast<unsigned long>(b));
+  else
+    mpz_submul_ui(data, a.data, static_cast<unsigned long>(-b));
+}
+
+template <> inline void Z_NR<mpz_t>::submul(const Z_NR<mpz_t> &a, const Z_NR<mpz_t> &b)
+{
+  mpz_submul(data, a.data, b.data);
+}
+
+template <> inline void Z_NR<mpz_t>::submul_ui(const Z_NR<mpz_t> &a, unsigned long b)
+{
+  mpz_submul_ui(data, a.data, b);
+}
+
+template <> inline void Z_NR<mpz_t>::abs(const Z_NR<mpz_t> &x) { mpz_abs(data, x.data); }
+
+template <> inline void Z_NR<mpz_t>::swap(Z_NR<mpz_t> &a) { mpz_swap(data, a.data); }
+
+/** random numbers */
+template <> inline void Z_NR<mpz_t>::randb(int bits)
+{
+  mpz_urandomb(data, RandGen::get_gmp_state(), bits);
+  if (bits > 32)
+  {
+    unsigned long long tmp = static_cast<unsigned long long>(mpz_get_ui(data) & ~((1ULL) << 31));
+    gmp_randseed_ui(RandGen::gmp_state, tmp * tmp);
+  }
+}
+
+template <> inline void Z_NR<mpz_t>::randb_si(int bits)
+{
+  randb(bits);
+  if (RandGenInt::get_bit() < 0)
+    mpz_neg(data, data);
+}
+
+template <> inline void Z_NR<mpz_t>::randm(const Z_NR<mpz_t> &max)
+{
+  mpz_urandomm(data, RandGen::get_gmp_state(), max.data);
+}
+
+template <> inline void Z_NR<mpz_t>::randm_si(const Z_NR<mpz_t> &max)
+{
+  randm(max);
+  if (RandGenInt::get_bit() < 0)
+    mpz_neg(data, data);
+}
+
+template <> inline void Z_NR<mpz_t>::nextprime(const Z_NR<mpz_t> &nbr)
+{
+  mpz_nextprime(data, nbr.data);
+}
+
+/* operators Z_NR<mpz_t> */
+template <> inline ostream &operator<<(ostream &os, const Z_NR<mpz_t> &x)
+{
+  int size = mpz_sizeinbase(x.get_data(), 10) + 2;
+  char *s  = new char[size];
+  mpz_get_str(s, 10, x.get_data());
+  os << s;
+  delete[] s;
+  return os;
+}
+
+template <> inline istream &operator>>(istream &is, Z_NR<mpz_t> &x)
+{
+  static string s;
+  char c;
+
+  s.clear();
+  if (!(is >> c))
+    return is;
+  if (c == '-')
+  {
+    s += c;
+    if (!(is >> c))
+      return is;
+  }
+  if (!(c >= '0' && c <= '9'))
+  {
+    is.setstate(ios::failbit);
+    return is;
+  }
+
+  do
+  {
+    s += c;
+  } while (is.get(c) && c >= '0' && c <= '9');
+
+  if (is.fail())
+    return is;
+  if (is.eof())
+    is.clear();
+  else
+    is.putback(c);
+
+  if (mpz_set_str(x.get_data(), s.c_str(), 10))
+  {
+    is.setstate(ios::failbit);
+  }
+  return is;
+}
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/nr_rand.inl b/fplll/nr/nr_rand.inl
new file mode 100644 (file)
index 0000000..cecb25b
--- /dev/null
@@ -0,0 +1,78 @@
+/* ---------------------------
+   Random generator for mpz_t
+   --------------------------- */
+
+#include <time.h>
+
+#ifndef FPLLL_NR_RAND_H
+#define FPLLL_NR_RAND_H
+
+FPLLL_BEGIN_NAMESPACE
+
+class RandGen
+{
+public:
+  static void init()
+  {
+    initialized = true;
+    gmp_randinit_default(gmp_state);
+  }
+  static void init_with_seed(unsigned long seed)
+  {
+    init();
+    gmp_randseed_ui(gmp_state, seed);
+  }
+  static void init_with_time()
+  {
+    init();
+    gmp_randseed_ui(gmp_state, time(NULL));
+  }
+  static void init_with_time2()
+  {
+    init();
+    struct timeval time;
+    gettimeofday(&time, NULL);
+    gmp_randseed_ui(gmp_state, (time.tv_sec * 1000) + (time.tv_usec / 1000));
+  }
+  static bool get_initialized() { return initialized; }
+  static gmp_randstate_t &get_gmp_state()
+  {
+    if (!initialized)
+      init();
+    return gmp_state;
+  }
+  static gmp_randstate_t gmp_state;
+
+private:
+  static bool initialized;
+};
+
+class RandGenInt
+{
+public:
+  static void init()
+  {
+    initialized = true;
+    srand(time(NULL));
+  }
+  static int get()
+  {
+    if (!initialized)
+      init();
+    return rand();
+  }
+  static int get_bit()
+  {
+    if (!initialized)
+      init();
+    if (rand() % 2 == 0)
+      return -1;
+    else
+      return 1;
+  }
+  static bool initialized;
+};
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/nr/numvect.h b/fplll/nr/numvect.h
new file mode 100644 (file)
index 0000000..bec3c70
--- /dev/null
@@ -0,0 +1,422 @@
+/* Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_NUMVECT_H
+#define FPLLL_NUMVECT_H
+
+#include "fplll/nr/nr.h"
+#include <vector>
+
+FPLLL_BEGIN_NAMESPACE
+
+/** Extends the size of the given vector. */
+template <class T> void extend_vect(vector<T> &v, int size)
+{
+  if (static_cast<int>(v.size()) < size)
+  {
+    v.resize(size);
+  }
+}
+
+/** Reverses a vector by consecutive swaps. */
+template <class T> void reverse_by_swap(vector<T> &v, int first, int last)
+{
+  for (; first < last; first++, last--)
+    v[first].swap(v[last]);
+}
+
+/** Rotates a vector by consecutive swaps. */
+template <class T> void rotate_by_swap(vector<T> &v, int first, int middle, int last)
+{
+  // Algorithm from STL code
+  reverse_by_swap(v, first, middle - 1);
+  reverse_by_swap(v, middle, last);
+  for (; first < middle && middle <= last; first++, last--)
+  {
+    v[first].swap(v[last]);
+  }
+  if (first == middle)
+    reverse_by_swap(v, middle, last);
+  else
+    reverse_by_swap(v, first, middle - 1);
+}
+
+/** Rotates a vector left-wise by consecutive swaps. */
+template <class T> void rotate_left_by_swap(vector<T> &v, int first, int last)
+{
+  FPLLL_DEBUG_CHECK(0 <= first && first <= last && last < static_cast<int>(v.size()));
+  for (int i = first; i < last; i++)
+  {
+    v[i].swap(v[i + 1]);
+  }
+}
+
+/** Rotates a vector right-wise by consecutive swaps. */
+template <class T> void rotate_right_by_swap(vector<T> &v, int first, int last)
+{
+  FPLLL_DEBUG_CHECK(0 <= first && first <= last && last < static_cast<int>(v.size()));
+  for (int i = last - 1; i >= first; i--)
+  {
+    v[i].swap(v[i + 1]);
+  }
+}
+
+/** Print a vector on stream os. */
+template <class T> ostream &operator<<(ostream &os, const vector<T> &v)
+{
+  os << "[";
+  int n = v.size();
+  for (int i = 0; i < n; i++)
+  {
+    if (i > 0)
+      os << " ";
+    os << v[i];
+  }
+  os << "]";
+  return os;
+}
+
+/** Reads a vector from stream is. */
+template <class T> istream &operator>>(istream &is, vector<T> &v)
+{
+  char c;
+  v.clear();
+  if (!(is >> c))
+    return is;
+  if (c != '[')
+  {
+    is.setstate(ios::failbit);
+    return is;
+  }
+  while (is >> c && c != ']')
+  {
+    is.putback(c);
+    v.resize(v.size() + 1);
+    if (!(is >> v.back()))
+    {
+      v.pop_back();
+      return is;
+    }
+  }
+  return is;
+}
+
+/** Generate a zero vector. */
+template <class T> void gen_zero_vect(vector<T> &v, int n)
+{
+  v.resize(n);
+  fill(v.begin(), v.end(), 0);
+}
+
+template <class T> class NumVect;
+
+template <class T> ostream &operator<<(ostream &os, const NumVect<T> &v);
+
+template <class T> istream &operator>>(istream &is, NumVect<T> &v);
+
+template <class T> class NumVect
+{
+public:
+  typedef typename vector<T>::iterator iterator;
+  /** Creates an empty NumVect (0). */
+  NumVect() {}
+  /** Initializes NumVect with the elements of the given NumVect. */
+  NumVect(const NumVect &v) : data(v.data) {}
+  /** Initializes NumVect with the elements of a given vector. */
+  NumVect(const vector<T> &v) : data(v) {}
+  /** Initializes NumVect of specific size, The initial content is
+      undefined. */
+  NumVect(int size) : data(size) {}
+  NumVect(int size, const T &t) : data(size, t) {}
+  /** Sets the NumVect to the elements of the given NumVect. */
+  void operator=(const NumVect &v)
+  {
+    if (this != &v)
+      data = v.data;
+  }
+  /** Swaps the data between the NumVect and the given NumVect. */
+  void swap(NumVect &v) { data.swap(v.data); }
+  /** Returns an iterator to the beginning of NumVect.*/
+  const iterator begin() { return data.begin(); }
+  /** Returns an iterator to the end of NumVect. */
+  iterator end() { return data.end(); }
+  /** Returns the number of elements in NumVect. */
+  int size() const { return data.size(); }
+  /** Checks whether NumVect is empty. */
+  bool empty() const { return data.empty(); }
+  /** Sets the size of NumVect. */
+  void resize(int size) { data.resize(size); }
+  /** Sets the size of NumVect and all its elemnts to t.*/
+  void resize(int size, const T &t) { data.resize(size, t); }
+  /** Sets the size of NumVect and all its elements to zero. */
+  void gen_zero(int size)
+  {
+    data.resize(size);
+    fill(0);
+  }
+
+  /**Compares two NumVects by comparing the underlying vectors. Returns true if equivalent & false
+   * otherwise.
+   * Note that this only works if the two NumVects have the same template type parameter. **/
+  bool operator==(NumVect<T> &other) { return other.data == data; }
+
+  /** Inserts an element in the back of NumVect. */
+  void push_back(const T &t) { data.push_back(t); }
+  /** Removes the back element of NumVect. */
+  void pop_back() { data.pop_back(); }
+  /** Returns a reference to the front element of NumVect. */
+  T &front() { return data.front(); }
+  /** Returns a const reference to the front element of NumVect,
+      on constant object. */
+  const T &front() const { return data.front(); }
+  /** Returns a reference to the back element of NumVect. */
+  T &back() { return data.back(); }
+  /** Returns a const reference to the back element of NumVect,
+      on constant object. */
+  const T &back() const { return data.back(); }
+  /** Extends the size of NumVect, only if it is needed. */
+  void extend(int maxSize)
+  {
+    if (size() < maxSize)
+      data.resize(maxSize);
+  }
+  void clear() { data.clear(); }
+  /** Returns a reference to the i-th element of NumVect. */
+  T &operator[](int i) { return data[i]; }
+  /** Returns a const reference to the i-th element of NumVect on constant
+      object. */
+  const T &operator[](int i) const { return data[i]; }
+  /** Addition of two NumVector objects, till index n. */
+  void add(const NumVect<T> &v, int n);
+  /** Addition of two NumVector objects. */
+  void add(const NumVect<T> &v) { add(v, size()); }
+  /** Subtraction of two NumVector objects, till index n. */
+  void sub(const NumVect<T> &v, int n);
+  /** Subtraction of two NumVector objects. */
+  void sub(const NumVect<T> &v) { sub(v, size()); }
+  /** Multiplication of NumVector and a number c, from index b till index n. */
+  void mul(const NumVect<T> &v, int b, int n, T c);
+  /** Multiplication of NumVector and a number c, till index n. */
+  void mul(const NumVect<T> &v, int n, T c);
+  /** Multiplication of NumVector and a number c. */
+  void mul(const NumVect<T> &v, T c) { mul(v, size(), c); }
+  /** Division of NumVector and a number c, from index b till index n. */
+  void div(const NumVect<T> &v, int b, int n, T c);
+  /** Division of NumVector and a number c, till index n. */
+  void div(const NumVect<T> &v, int n, T c);
+  /** Division of NumVector and a number c. */
+  void div(const NumVect<T> &v, T c) { div(v, size(), c); }
+  /** Incremeanting each coefficient of NumVector by its product with
+      number c, from beg to index n - 1. */
+  void addmul(const NumVect<T> &v, T x, int beg, int n);
+  /** Incremeanting each coefficient of NumVector by its product with
+      number c, till index n. */
+  void addmul(const NumVect<T> &v, T x, int n);
+  /** Incremeanting each coefficient of NumVector by its product with
+      number c. */
+  void addmul(const NumVect<T> &v, T x) { addmul(v, x, size()); }
+  void addmul_2exp(const NumVect<T> &v, const T &x, long expo, T &tmp)
+  {
+    addmul_2exp(v, x, expo, size(), tmp);
+  }
+  void addmul_2exp(const NumVect<T> &v, const T &x, long expo, int n, T &tmp);
+  void addmul_si(const NumVect<T> &v, long x) { addmul_si(v, x, size()); }
+  void addmul_si(const NumVect<T> &v, long x, int n);
+  void addmul_si_2exp(const NumVect<T> &v, long x, long expo, T &tmp)
+  {
+    addmul_si_2exp(v, x, expo, size(), tmp);
+  }
+  void addmul_si_2exp(const NumVect<T> &v, long x, long expo, int n, T &tmp);
+
+  /** (v[first],...,v[last]) becomes (v[first+1],...,v[last],v[first]) */
+  void rotate_left(int first, int last) { rotate_left_by_swap(data, first, last); }
+
+  /** (v[first],...,v[last]) becomes (v[last],v[first],...,v[last-1]) */
+  void rotate_right(int first, int last) { rotate_right_by_swap(data, first, last); }
+
+  /** Returns expo >= 0 such that all elements are < 2^expo. */
+  long get_max_exponent();
+
+  /** Fills NumVect with the value given. */
+  void fill(long value);
+
+  /** Checks if NumVect has zero elements from fromCol. */
+  bool is_zero(int fromCol = 0) const;
+
+  /** Returns last non-zero index of NumVector. */
+  int size_nz() const;
+
+  friend ostream &operator<<<T>(ostream &os, const NumVect<T> &v);
+  friend istream &operator>><T>(istream &is, NumVect<T> &v);
+
+private:
+  vector<T> data;
+};
+
+template <class T> void NumVect<T>::add(const NumVect<T> &v, int n)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= 0; i--)
+    data[i].add(data[i], v[i]);
+}
+
+template <class T> void NumVect<T>::sub(const NumVect<T> &v, int n)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= 0; i--)
+    data[i].sub(data[i], v[i]);
+}
+
+template <class T> void NumVect<T>::mul(const NumVect<T> &v, int b, int n, T c)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= b; i--)
+    data[i].mul(v[i], c);
+}
+
+template <class T> void NumVect<T>::mul(const NumVect<T> &v, int n, T c) { mul(v, 0, n, c); }
+
+template <class T> void NumVect<T>::div(const NumVect<T> &v, int b, int n, T c)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= b; i--)
+    data[i].div(v[i], c);
+}
+
+template <class T> void NumVect<T>::div(const NumVect<T> &v, int n, T c) { div(v, 0, n, c); }
+
+template <class T> void NumVect<T>::addmul(const NumVect<T> &v, T x, int beg, int n)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= beg; i--)
+    data[i].addmul(v[i], x);
+}
+
+template <class T> void NumVect<T>::addmul(const NumVect<T> &v, T x, int n)
+{
+  this->addmul(v, x, 0, n);
+}
+
+template <class T>
+void NumVect<T>::addmul_2exp(const NumVect<T> &v, const T &x, long expo, int n, T &tmp)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= 0; i--)
+  {
+    tmp.mul(v[i], x);
+    tmp.mul_2si(tmp, expo);
+    data[i].add(data[i], tmp);
+  }
+}
+
+template <class T> void NumVect<T>::addmul_si(const NumVect<T> &v, long x, int n)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= 0; i--)
+    data[i].addmul_si(v[i], x);
+}
+
+template <class T>
+void NumVect<T>::addmul_si_2exp(const NumVect<T> &v, long x, long expo, int n, T &tmp)
+{
+  FPLLL_DEBUG_CHECK(n <= size() && size() == v.size() && v.is_zero(n));
+  for (int i = n - 1; i >= 0; i--)
+  {
+    tmp.mul_si(v[i], x);
+    tmp.mul_2si(tmp, expo);
+    data[i].add(data[i], tmp);
+  }
+}
+
+template <class T> long NumVect<T>::get_max_exponent()
+{
+  long max_expo = 0;
+  for (int i = 0; i < size(); i++)
+  {
+    max_expo = max(max_expo, data[i].exponent());
+  }
+  return max_expo;
+}
+
+template <class T> void NumVect<T>::fill(long value)
+{
+  for (int i = 0; i < size(); i++)
+  {
+    data[i] = value;
+  }
+}
+
+template <class T> bool NumVect<T>::is_zero(int fromCol) const
+{
+  for (int i = fromCol; i < size(); i++)
+  {
+    if (!data[i].is_zero())
+      return false;
+  }
+  return true;
+}
+
+template <class T> int NumVect<T>::size_nz() const
+{
+  int i;
+  for (i = data.size(); i > 0; i--)
+  {
+    if (data[i - 1] != 0)
+      break;
+  }
+  return i;
+}
+
+/** Compute the truncated dot product between tow Numvect using coefficients [beg, n).
+ * Constraint: n > beg.
+ */
+template <class T>
+inline void dot_product(T &result, const NumVect<T> &v1, const NumVect<T> &v2, int beg, int n)
+{
+  FPLLL_DEBUG_CHECK(beg >= 0 && n > beg && n <= v1.size() && n <= v2.size());
+  //(v1.is_zero(n) || v2.is_zero(n))); tested previously
+  result.mul(v1[beg], v2[beg]);
+  for (int i = beg + 1; i < n; i++)
+  {
+    result.addmul(v1[i], v2[i]);
+  }
+}
+
+template <class T>
+inline void dot_product(T &result, const NumVect<T> &v1, const NumVect<T> &v2, int n)
+{
+  FPLLL_DEBUG_CHECK(n <= v1.size() && v1.size() == v2.size() && (v1.is_zero(n) || v2.is_zero(n)));
+  dot_product(result, v1, v2, 0, n);
+}
+
+template <class T> inline void dot_product(T &result, const NumVect<T> &v1, const NumVect<T> &v2)
+{
+  dot_product(result, v1, v2, v1.size());
+}
+
+template <class T> inline void squared_norm(T &result, const NumVect<T> &v)
+{
+  dot_product(result, v, v);
+}
+
+/** Prints a NumVect on stream os. */
+template <class T> ostream &operator<<(ostream &os, const NumVect<T> &v) { return os << v.data; }
+
+/** Reads a NumVect from stream is. */
+template <class T> istream &operator>>(istream &is, NumVect<T> &v) { return is >> v.data; }
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/pruner/pruner.cpp b/fplll/pruner/pruner.cpp
new file mode 100644 (file)
index 0000000..9ecb163
--- /dev/null
@@ -0,0 +1,300 @@
+/* Copyright (C) 2015-2016 Martin Albrecht, Leo Ducas.
+
+  This file is part of fplll. fplll is free software: you
+  can redistribute it and/or modify it under the terms of the GNU Lesser
+  General Public License as published by the Free Software Foundation,
+  either version 2.1 of the License, or (at your option) any later version.
+
+  fplll is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "pruner.h"
+#include "ballvol.const"
+#include "factorial.const"
+#include "fplll.h"
+
+// add components
+#include "pruner_cost.cpp"
+#include "pruner_optimize.cpp"
+#include "pruner_optimize_tc.cpp"
+#include "pruner_optimize_tp.cpp"
+#include "pruner_prob.cpp"
+#include "pruner_util.cpp"
+
+FPLLL_BEGIN_NAMESPACE
+
+// call pruner (note the float type is determined now)
+template <class FT>
+int run_pruner_f(ZZ_mat<mpz_t> &b, int sel_ft, int prune_start, int prune_end,
+                 double prune_pre_nodes, double prune_min_prob, double gh_factor)
+{
+  int gso_flags = 0;
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+  if (sel_ft == FT_DOUBLE || sel_ft == FT_LONG_DOUBLE)
+    gso_flags |= GSO_ROW_EXPO;
+
+  // some checks
+  int start = prune_start;
+  int end   = prune_end;
+  if (start < 0 || start >= b.get_rows() - 1)
+    start = 0;
+  if (end <= start || end >= b.get_rows())
+    end = b.get_rows();
+  if (prune_pre_nodes <= 1)
+    prune_pre_nodes = 1;
+  int block_size = end - start;
+
+  PruningParams pruning;
+  vector<double> r;
+  FT root_det, max_dist;
+  long max_dist_expo;
+
+  // we check if we can convert the basis to long integers for
+  // performance
+  ZZ_mat<long> bl;
+  if (convert<long, mpz_t>(bl, b, 10))
+  {
+    ZZ_mat<long> empty_mat;
+    MatGSO<Z_NR<long>, FT> m_gso(bl, empty_mat, empty_mat, gso_flags);
+    m_gso.update_gso();
+    max_dist = m_gso.get_r_exp(start, start, max_dist_expo);
+    root_det = m_gso.get_root_det(start, end);
+    for (int i = start; i < end; ++i)
+    {
+      FT x;
+      m_gso.get_r(x, i, i);
+      r.push_back(x.get_d());
+    }
+  }
+  else
+  {
+    ZZ_mat<mpz_t> empty_mat;
+    MatGSO<Z_NR<mpz_t>, FT> m_gso(b, empty_mat, empty_mat, gso_flags);
+    m_gso.update_gso();
+    max_dist = m_gso.get_r_exp(start, start, max_dist_expo);
+    root_det = m_gso.get_root_det(start, end);
+    for (int i = start; i < end; ++i)
+    {
+      FT x;
+      m_gso.get_r(x, i, i);
+      r.push_back(x.get_d());
+    }
+  }
+
+  adjust_radius_to_gh_bound(max_dist, max_dist_expo, block_size, root_det, gh_factor);
+  double radius_d = max_dist.get_d() * pow(2, max_dist_expo);
+
+  cerr << "# Start Pruning" << endl;
+  cerr << "# enumeration Radius: " << radius_d << endl;
+  cerr << "# preprocessing (num. nodes): " << prune_pre_nodes << endl;
+  cerr << "# targeted min. prob: " << prune_min_prob << endl;
+  cerr << "# input GSO: " << r << endl;
+  // example: use flags PRUNER_ZEALOUS  and PRUNER_SINGLE
+  prune<FT>(pruning, radius_d, prune_pre_nodes, r, prune_min_prob, PRUNER_METRIC_EXPECTED_SOLUTIONS,
+            PRUNER_ZEALOUS | PRUNER_SINGLE);
+  cerr << "# optimized pruning coeff: " << endl << pruning.coefficients << endl;
+  double cost = 0.;
+  //  cerr << "# cost per level" << endl;
+  for (int i = 0; i < block_size; ++i)
+  {
+    // cerr << pruning.detailed_cost[i] << " ";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << "# single_enum_cost   = " << cost << endl;
+  cerr << "#       succ. prob   = " << pruning.expectation << endl;
+  cerr << "# repeated_enum_cost = " << cost / pruning.expectation << endl;
+  return 0;
+}
+
+// interface function called from main.cpp
+int run_pruner(ZZ_mat<mpz_t> &B, FloatType float_type, int precision, int prune_start,
+               int prune_end, double prune_pre_nodes, double prune_min_prob, double gh_factor)
+{
+  // FPLLL_CHECK(B, "B == NULL in run_pruner()");
+  FloatType sel_ft = (float_type != FT_DEFAULT) ? float_type : FT_DOUBLE;
+  FPLLL_CHECK(!(sel_ft == FT_MPFR && precision == 0),
+              "Missing precision for run_pruner() with floating point type mpfr");
+
+  /* run pruner with float_type */
+  int status;
+  if (sel_ft == FT_DOUBLE)
+  {
+    status = run_pruner_f<FP_NR<double>>(B, sel_ft, prune_start, prune_end, prune_pre_nodes,
+                                         prune_min_prob, gh_factor);
+  }
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  else if (sel_ft == FT_LONG_DOUBLE)
+  {
+    status = run_pruner_f<FP_NR<long double>>(B, sel_ft, prune_start, prune_end, prune_pre_nodes,
+                                              prune_min_prob, gh_factor);
+  }
+#endif
+#ifdef FPLLL_WITH_DPE
+  else if (sel_ft == FT_DPE)
+  {
+    status = run_pruner_f<FP_NR<dpe_t>>(B, sel_ft, prune_start, prune_end, prune_pre_nodes,
+                                        prune_min_prob, gh_factor);
+  }
+#endif
+#ifdef FPLLL_WITH_QD
+  else if (sel_ft == FT_DD)
+  {
+    status = run_pruner_f<FP_NR<dd_real>>(B, sel_ft, prune_start, prune_end, prune_pre_nodes,
+                                          prune_min_prob, gh_factor);
+  }
+  else if (sel_ft == FT_QD)
+  {
+    status = run_pruner_f<FP_NR<qd_real>>(B, sel_ft, prune_start, prune_end, prune_pre_nodes,
+                                          prune_min_prob, gh_factor);
+  }
+#endif
+  else if (sel_ft == FT_MPFR)
+  {
+    int old_prec = FP_NR<mpfr_t>::set_prec(precision);
+    status       = run_pruner_f<FP_NR<mpfr_t>>(B, sel_ft, prune_start, prune_end, prune_pre_nodes,
+                                         prune_min_prob, gh_factor);
+    FP_NR<mpfr_t>::set_prec(old_prec);
+  }
+  else
+  {
+    if (0 <= sel_ft && sel_ft <= FT_MPFR)
+    {
+      FPLLL_ABORT("Compiled without support for run_pruner() with " << FLOAT_TYPE_STR[sel_ft]);
+    }
+    else
+    {
+      FPLLL_ABORT("Floating point type " << sel_ft << "not supported in run_pruner()");
+    }
+  }
+  return status;
+}
+
+template <class FT> FT svp_probability(const PruningParams &pruning)
+{
+  Pruner<FT> pru(pruning.coefficients.size());
+  return pru.measure_metric(pruning.coefficients);
+}
+
+template <class FT> FT svp_probability(const vector<double> &pr)
+{
+  Pruner<FT> pru(pr.size());
+  return pru.measure_metric(pr);
+}
+
+template <class FT> void Pruner<FT>::set_tabulated_consts()
+{
+  if (tabulated_values_imported)
+    return;
+  for (int i = 0; i < PRUNER_MAX_N; ++i)
+  {
+    tabulated_factorial[i] = pre_factorial[i];
+    tabulated_ball_vol[i]  = pre_ball_vol[i];
+  }
+  tabulated_values_imported = 1;
+  return;
+}
+
+template <class FT>
+void prune(/*output*/ PruningParams &pruning,
+           /*inputs*/ const double enumeration_radius, const double preproc_cost,
+           const vector<double> &gso_r, const double target, const PrunerMetric metric,
+           const int flags)
+{
+  Pruner<FT> pruner(enumeration_radius, preproc_cost, gso_r, target, metric, flags);
+  pruner.optimize_coefficients(pruning.coefficients);
+  pruner.single_enum_cost(pruning.coefficients, &(pruning.detailed_cost));
+  pruning.gh_factor   = enumeration_radius / pruner.gaussian_heuristic().get_d();
+  pruning.metric      = metric;
+  pruning.expectation = pruner.measure_metric(pruning.coefficients);
+}
+
+template <class FT>
+void prune(/*output*/ PruningParams &pruning,
+           /*inputs*/ double enumeration_radius, const double preproc_cost,
+           const vector<vector<double>> &gso_rs, const double target, const PrunerMetric metric,
+           const int flags)
+{
+  Pruner<FT> pruner(enumeration_radius, preproc_cost, gso_rs, target, metric, flags);
+  pruner.optimize_coefficients(pruning.coefficients);
+  pruner.single_enum_cost(pruning.coefficients, &(pruning.detailed_cost));
+  pruning.gh_factor   = enumeration_radius / pruner.gaussian_heuristic().get_d();
+  pruning.metric      = metric;
+  pruning.expectation = pruner.measure_metric(pruning.coefficients);
+}
+
+/** instantiate functions **/
+/* clang-format off */
+
+
+// DOUBLE
+template class Pruner<FP_NR<double>>;
+template void prune<FP_NR<double>>(PruningParams &,const double, const double, const vector<double> &, const double, const PrunerMetric, const int);
+template void prune<FP_NR<double>>(PruningParams &,const double, const double, const vector<vector<double>> &, const double, const PrunerMetric, const int);
+template FP_NR<double> svp_probability<FP_NR<double>>(const PruningParams &pruning);
+template FP_NR<double> svp_probability<FP_NR<double>>(const vector<double> &pr);
+template int run_pruner_f<FP_NR<double>> (ZZ_mat<mpz_t> &b, int sel_ft,  int prune_start, int prune_end, double prune_pre_nodes, double prune_min_prob, double gh_factor);
+
+
+// MPFR
+template class Pruner<FP_NR<mpfr_t>>;
+template void prune<FP_NR<mpfr_t>>(PruningParams &,const double, const double, const vector<double> &, const double, const PrunerMetric, const int);
+template void prune<FP_NR<mpfr_t>>(PruningParams &,const double, const double, const vector<vector<double>> &, const double, const PrunerMetric, const int);
+template FP_NR<mpfr_t> svp_probability<FP_NR<mpfr_t>>(const PruningParams &pruning);
+template FP_NR<mpfr_t> svp_probability<FP_NR<mpfr_t>>(const vector<double> &pr);
+template int run_pruner_f<FP_NR<mpfr_t>> (ZZ_mat<mpz_t> &b, int sel_ft, int prune_start, int prune_end, double prune_pre_nodes, double prune_min_prob, double gh_factor);
+
+
+// LD
+#ifdef FPLLL_WITH_LONG_DOUBLE
+
+template class Pruner<FP_NR<long double>>;
+template void prune<FP_NR<long double>>(PruningParams &,const double, const double, const vector<double> &, const double, const PrunerMetric, const int);
+template void prune<FP_NR<long double>>(PruningParams &,const double, const double, const vector<vector<double>> &, const double, const PrunerMetric, const int);
+template FP_NR<long double> svp_probability<FP_NR<long double>>(const PruningParams &pruning);
+template FP_NR<long double> svp_probability<FP_NR<long double>>(const vector<double> &pr);
+template int run_pruner_f<FP_NR<long double>> (ZZ_mat<mpz_t> &b, int sel_ft, int prune_start, int prune_end, double prune_pre_nodes, double prune_min_prob, double gh_factor);
+
+#endif
+
+
+#ifdef FPLLL_WITH_QD
+
+// DD
+template class Pruner<FP_NR<dd_real>>;
+template void prune<FP_NR<dd_real>>(PruningParams &,const double, const double, const vector<double> &, const double, const PrunerMetric, const int);
+template void prune<FP_NR<dd_real>>(PruningParams &,const double, const double, const vector<vector<double>> &, const double, const PrunerMetric, const int);
+template FP_NR<dd_real> svp_probability<FP_NR<dd_real>>(const PruningParams &pruning);
+template FP_NR<dd_real> svp_probability<FP_NR<dd_real>>(const vector<double> &pr);
+template int run_pruner_f<FP_NR<dd_real>> (ZZ_mat<mpz_t> &b, int sel_ft, int prune_start, int prune_end, double prune_pre_nodes, double prune_min_prob, double gh_factor);
+
+
+// QD
+template class Pruner<FP_NR<qd_real>>;
+template void prune<FP_NR<qd_real>>(PruningParams &,const double, const double, const vector<double> &, const double, const PrunerMetric, const int);
+template void prune<FP_NR<qd_real>>(PruningParams &,const double, const double, const vector<vector<double>> &, const double, const PrunerMetric, const int);
+template FP_NR<qd_real> svp_probability<FP_NR<qd_real>>(const PruningParams &pruning);
+template FP_NR<qd_real> svp_probability<FP_NR<qd_real>>(const vector<double> &pr);
+template int run_pruner_f<FP_NR<qd_real>> (ZZ_mat<mpz_t> &b, int sel_ft, int prune_start, int prune_end, double prune_pre_nodes, double prune_min_prob, double gh_factor);
+
+#endif
+
+
+#ifdef FPLLL_WITH_DPE
+// DPE
+template class Pruner<FP_NR<dpe_t>>;
+template void prune<FP_NR<dpe_t>>(PruningParams &,const double, const double, const vector<double> &, const double, const PrunerMetric, const int);
+template void prune<FP_NR<dpe_t>>(PruningParams &,const double, const double, const vector<vector<double>> &, const double, const PrunerMetric, const int);
+template FP_NR<dpe_t> svp_probability<FP_NR<dpe_t>>(const PruningParams &pruning);
+template FP_NR<dpe_t> svp_probability<FP_NR<dpe_t>>(const vector<double> &pr);
+template int run_pruner_f<FP_NR<dpe_t>> (ZZ_mat<mpz_t> &b, int sel_ft, int prune_start, int prune_end, double prune_pre_nodes, double prune_min_prob, double gh_factor);
+
+#endif
+/* clang-format on */
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/pruner/pruner.h b/fplll/pruner/pruner.h
new file mode 100644 (file)
index 0000000..ff02a17
--- /dev/null
@@ -0,0 +1,1060 @@
+/* Copyright (C) 2015-2017 Martin Albrecht, Leo Ducas.
+   Copyright (C) 2018 Shi Bai
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTAbILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_PRUNER_H
+#define FPLLL_PRUNER_H
+
+#include "fplll/defs.h"
+#include "fplll/lll.h"
+#include <vector>
+
+FPLLL_BEGIN_NAMESPACE
+
+#define PRUNER_MAX_N 2047
+
+/**
+   Pruning parameters for one radius (expressed as a ratio to the Gaussian heuristic)
+ */
+class PruningParams
+{
+
+public:
+  double gh_factor;                  //< radius^2/Gaussian heuristic^2
+  std::vector<double> coefficients;  //< pruning coefficients
+  double expectation;                //< either expected success probability or number of solutions
+                                     /**
+                                         metric used for optimisation (success probability or number of solutions)
+                                      */
+  PrunerMetric metric;
+  std::vector<double> detailed_cost;  //< Expected nodes per level
+
+  /**
+     The default constructor means no pruning.
+  */
+  PruningParams() : gh_factor(1.), expectation(1.), metric(PRUNER_METRIC_PROBABILITY_OF_SHORTEST){};
+
+  /** Set all pruning coefficients to 1, except the last <level>
+      coefficients, these will be linearly with slope `-1 /
+      block_size`.
+
+      @param level number of levels in linear descent
+  */
+  static PruningParams LinearPruningParams(int block_size, int level);
+};
+
+/**
+ * @brief Run pruner on B.
+ *
+ * @param B
+ *    basis of the lattice to be reduced
+ * @param sel_ft
+ *    specifies the float type used for GSO computations
+ * @param precision
+ *    specifies the precision if sel_ft=FT_MPFR (and needs to be > 0 in that case)
+ * @param prune_start
+ *    start index of pruning (first index being 0)
+ * @param prune_end
+ *    (prune_end-1) is end index of pruning
+ * @param prune_pre_nodes
+ *     preprocessing cost in the number of nodes
+ * @param prune_min_prob
+ *     target probability. If it is -1, it will optimize
+ *       single_enum_cost/succ. prob while not fixing the succ. prob.
+ *       If it is > 0, it will fix the succ. prob and optimize the
+ *       single_enum_cost.
+ * @param gh_factor
+ *      input GH factor to compute the enumeration radius. The computed
+ *        enumeration radius will be min(GH*gh_factor, |b_i*|).
+ * @return
+ *    the status of the pruning
+ */
+template <class FT>
+int run_pruner_f(ZZ_mat<mpz_t> &B, int sel_ft, int precision = 0, int prune_start = 0,
+                 int prune_end = 1, double prune_pre_nodes = 1e6, double prune_min_prob = -1,
+                 double gh_factor = 1.0);
+
+/**
+ * @brief Run pruner on B.
+ *
+ * @param B
+ *    basis of the lattice to be reduced
+ * @param float_type
+ *    specifies the data type used for GSO computations (see defs.h for options)
+ * @param precision
+ *    specifies the precision if float_type=FT_MPFR (and needs to be > 0 in that case)
+ *    ignored otherwise
+ * @param prune_start
+ *    start index of pruning (first index being 0)
+ * @param prune_end
+ *    (prune_end-1) is end index of pruning
+ * @param prune_pre_nodes
+ *     preprocessing cost in the number of nodes
+ * @param prune_min_prob
+ *     target probability or expected number of solutions (depending on the metric
+ *     which could be either PRUNER_METRIC_PROBABILITY_OF_SHORTEST or
+ *     PRUNER_METRIC_EXPECTED_SOLUTIONS.
+ *     If PRUNER_SINGLE is enabled, the optimization will try to minimize the
+ *     single_enum_cost() while achieving the prune_min_prob;
+ *     If PRUNER_SINGLE is disabled (default), the optimization will try to minimize
+ *     single_enum_cost() * trials + preproc_cost * (trials - 1.0).
+ * @param gh_factor
+ *      input GH factor to compute the enumeration radius. The computed
+ *        enumeration radius will be min(GH*gh_factor, |b_i*|).
+ * @return
+ *    the status of the pruning
+ */
+int run_pruner(ZZ_mat<mpz_t> &B, FloatType float_type = FT_DEFAULT, int precision = 0,
+               int prune_start = 0, int prune_end = 1, double prune_pre_nodes = 1e6,
+               double prune_min_prob = -1, double gh_factor = 1.0);
+
+/**
+   @brief Search for optimal pruning parameters.
+
+   Wrapping function for the Pruner class. The function is templated by a Floating Point Type, which
+   are used for internal computations.
+
+   Calling M the metric function (Success proba or expectation of number of results), C the cost
+   function of enumeration, P the preproc_cost, this function tries to provide a pruning vector p
+   essentially minimizing (C(p) + P) / M(p). The pruning vector is expressed as relative (squared)
+   length with respect to the enumeration radius, i.e. the entries of p are in the interval (0,1),
+   and are always decreasing.
+
+   Small amendents are made to also take account for the desired target value of the metric after
+   repeating several enumeration. In particular the chosen pruning value should not excess the
+   target, and a bit more enumeration may be chosen if it get is to the the desired result without
+   any retrial.
+
+   The cost C of enumeration under the gaussian heuristic, and depends on gso_r. The function S is
+   define by the metric parameter (and depend on gso_r for EXPECTED_SOLUTIONS)
+
+   This function provides access to three algorithm to optimize those parameter
+
+   - greedy                (deactivated by setting flag PRUNER_START_FROM_INPUT)
+   - gradient decent       (activated by setting flag PRUNER_GRADIENT)
+   - Nelder-Mead Algorithm (activated by setting flag PRUNER_NELDER_MEAD)
+
+   If several algortihm are activated, they will all be ran, using the output of the previous as
+   there starting point.
+
+   Greedy shoud be very fast, and essentially tries to produce pruning parameters generating a flat
+   enumeration tree. It is meant to quickly provide pruning parameters, say up to block 40. It is
+   also used as a decent starting point for the gradient descent to be quicker. It can be argued
+   that this strategy is a factor O(n) away from optimal, probably less in practice.
+
+   The gradient descent is rather standard. The gradient is computed numerically, and then several
+   steps are made keeping the same direction until a local minima in this direction is found (the
+   rational is that computing the gradient is 2n times more expensive than test a point). It is to
+   be expected that this method suffers from convergence and numerical instability especially due
+   to numerical differentiation. It remains rather fast and seems to properly handle basis up to
+   dimension LLL reduced-basis up to dim ~70, and more if the basis is strongly reduced.
+
+   The Nelder-Mead algorithm is a descent algorithm praised for its robustness. It's pretty cool,
+   you should really read about it: https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method . In
+   brief, it maintains a simplex of points and each step consist in improving the worst of them by
+   reflexion expansion or contraction, or shrinking the all simplex if the above failed. This
+   method is somehow aware not only of the gradient, but also the curvature of the optimized
+   function. Thanks to contraction and expansion, it can slowly "pass through the eye of a needle,"
+   and re-accelerate the descent after that.
+
+   Maybe you don't care so much of all this... I'm just procratinating low-level documentation.
+
+   @param pruning Output of the function. Also used as an input if PRUNER_START_FROM_INPUT is on.
+   @param enumeration_radius radius of the desired enumeration
+   @param preproc_cost cost of preprocessing (i.e. additive cost for a retrying an enumeration)
+   @param gso_r vector of Gram-Schmidt length (squared) of the enumerated block
+   @param target desired target success probability/expected solutions after all retrial.
+   @param metric metric is to be optimized : PRUNER_METRIC_PROBABILITY_OF_SHORTEST or
+   PRUNER_METRIC_EXPECTED_SOLUTIONS
+   @param flags complementary parameters : PRUNER_CVP  PRUNER_START_FROM_INPUT  PRUNER_GRADIENT
+   PRUNER_NELDER_MEAD  PRUNER_VERBOSE
+
+   @return Return value is done by reference on parameter pruning.
+*/
+
+template <class FT>
+void prune(/*(input)output*/ PruningParams &pruning,
+           /*inputs*/
+           const double enumeration_radius, const double preproc_cost, const vector<double> &gso_r,
+           const double target       = .9,
+           const PrunerMetric metric = PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+           const int flags           = PRUNER_GRADIENT);
+
+/**
+   @brief Search for optimal Pruning parameters, averaging over several basis
+
+   Wrapping function for the Pruner class.
+
+   Same as prune(), but averaging cost over several bases (without slowing down the search)
+
+   @param pruning Output of the function. Also used as an input if PRUNER_START_FROM_INPUT is on.
+   @param enumeration_radius radius of the desired enumeration
+   @param preproc_cost cost of preprocessing (i.e. additive cost for a retrying an enumeration)
+   @param gso_rs vector of vector Gram-Schmidt length (squared) of the enumerated block over
+   several bases
+   @param target desired target success probability/expected solutions after all retrial.
+   @param metric metric is to be optimized : PRUNER_METRIC_PROBABILITY_OF_SHORTEST or
+   PRUNER_METRIC_EXPECTED_SOLUTIONS
+   @param flags complementary parameters : PRUNER_CVP  PRUNER_START_FROM_INPUT  PRUNER_GRADIENT
+   PRUNER_NELDER_MEAD  PRUNER_VERBOSE
+
+*/
+template <class FT>
+void prune(/*output*/ PruningParams &pruning,
+           /*inputs*/
+           double enumeration_radius, const double preproc_cost,
+           const vector<vector<double>> &gso_rs, const double target = .9,
+           const PrunerMetric metric = PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+           const int flags           = PRUNER_GRADIENT);
+
+/**
+   @brief Probability that a pruned enumeration indeed returns the shortest vector.
+
+   Probability that a pruned enumeration indeed returns the shortest vector. Wrapping function for
+   the Pruner class.
+
+   @param pruning A pruning object. Only uses the coefficient field. (coefficients must start with
+   two 1s, be decreasing and in the interval (0,1))
+
+   @return probability
+*/
+template <class FT> FT svp_probability(const PruningParams &pruning);
+
+/**
+   @brief Probability that a pruned enumeration indeed returns the shortest vector.
+
+   @param pr A vector of pruning bounds (coefficients must start with two 1s, be decreasing and in
+   the interval (0,1))
+
+   @return probability
+*/
+template <class FT> FT svp_probability(const vector<double> &pr);
+
+/**
+   @brief Pruner class, to compute and optimize cost and success probability of pruned enumeration.
+
+   The class is templated by a Floating Point Type, which are used for internal computations.
+
+   This class provides an implementation of the numerically optimized pruning strategy of [Gama
+   Nguyen Regev 2010].
+
+   Many details for implementation follows from the thesis [Chen 2013] Some simplifications have
+   been made, for example we restrict ourselves to ``even vector bounds'' i.e., the bound at indices
+   2i and 2i+1 are kept equal, as to allow volume estimation by symbolic integration (see
+   [GNR10,Chen13])
+
+   naming conventions:
+   - b is for bound (squared)
+   - ipv is for inverse partial volumes (NOT squared)
+   - r is for gram schmidt length (squared). Automatically renormalized to avoid
+   overflowing partial volumes
+   - p is for polynomial
+
+   inside this code, b,pv,and r are in reversed order as to conform with the algorithm description
+   of [Chen13] reversing the order is handled by the load and save methods.
+
+   - n is for the dimension of the basis to prune
+   - d is for degrees of polynomials. md is for max_degree
+   - d is floor(n/2 at most). Odd n are dealt with by ignoring the first component
+*/
+template <class FT> class Pruner
+{
+public:
+  class TestPruner;
+  friend class TestPruner;
+
+  /**
+   @brief (limited) Constructor for Pruner. Only for svp_probability.
+   @param n dimension of the pruned block
+  */
+  explicit Pruner(const int n) : metric(PRUNER_METRIC_PROBABILITY_OF_SHORTEST), flags(0), n(n)
+  {
+    verbosity = flags & PRUNER_VERBOSE;
+    set_tabulated_consts();
+    d = n / 2;
+    min_pruning_coefficients.resize(d);
+    btmp.resize(d);
+    bftmp.resize(n);
+    fill(min_pruning_coefficients.begin(), min_pruning_coefficients.end(), 0.);
+  }
+
+  /**
+    @brief Constructor for Pruner.
+
+    Algorithmic details are given for the wrapping function prune().
+
+    @param enumeration_radius radius of the desired enumeration
+    @param preproc_cost cost of preprocessing (i.e. additive cost for a retrying an enumeration)
+    @param gso_r  vector Gram-Schmidt length (squared) of the enumerated block over several bases
+    @param target desired target success probability/expected solutions after all retrial.
+    @param metric metric is to be optimized : PRUNER_METRIC_PROBABILITY_OF_SHORTEST or
+    PRUNER_METRIC_EXPECTED_SOLUTIONS
+    @param flags complementary parameters : PRUNER_CVP  PRUNER_START_FROM_INPUT  PRUNER_GRADIENT
+    PRUNER_NELDER_MEAD  PRUNER_VERBOSE
+  */
+  Pruner(const FT enumeration_radius, const FT preproc_cost, const vector<double> &gso_r,
+         const FT target = 0.9, const PrunerMetric metric = PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+         int flags = PRUNER_GRADIENT)
+      : enumeration_radius(enumeration_radius), preproc_cost(preproc_cost), target(target),
+        metric(metric), flags(flags)
+  {
+    verbosity = flags & PRUNER_VERBOSE;
+
+    n = gso_r.size();
+    d = n / 2;
+    if (flags & PRUNER_CVP)
+    {
+      symmetry_factor = 1;
+    }
+    min_pruning_coefficients.resize(d);
+    btmp.resize(d);
+    bftmp.resize(n);
+    fill(min_pruning_coefficients.begin(), min_pruning_coefficients.end(), 0.);
+    set_tabulated_consts();
+
+    // optimize overall cost, use
+    if (flags & PRUNER_SINGLE)
+    {
+      opt_single = true;
+      if (flags & PRUNER_HALF)
+      {
+        throw std::invalid_argument(
+            "Error: flags PRUNER_HALF and PRUNER_SINGLE are mutually exclusive.");
+      }
+    }
+
+    // need to fix target if possible
+    if (metric == PRUNER_METRIC_PROBABILITY_OF_SHORTEST)
+    {
+      // check if the target is reasonable; otherwise set it to 0.99.
+      // note the target may affect the cost in target_function().
+      if (this->target >= 1.0 || this->target <= 0.0)
+      {
+        throw std::invalid_argument("Invalid value for target with metric "
+                                    "PRUNER_METRIC_PROBABILITY_OF_SHORTEST (need 0 < target < 1).");
+      }
+    }
+    else if (metric == PRUNER_METRIC_EXPECTED_SOLUTIONS)
+    {
+      // check if the target is reasonable; otherwise set it to 0.99.
+      // note the target is allowed to be larger than 1 in this case.
+      // Also the target may affect the cost in target_function().
+      if (this->target <= 0.0)
+      {
+        throw std::invalid_argument("Invalid value for target with metric "
+                                    "PRUNER_METRIC_EXPECTED_SOLUTIONS (need 0 < target).");
+      }
+    }
+    else
+    {
+      throw std::invalid_argument("Pruner was set to an unknown metric");
+    }
+    // normalization on |b_i^*|
+    load_basis_shape(gso_r);
+  }
+
+  /**
+     @brief Constructor for Pruner with multiple basis (averaging the cost function over all of
+     them)
+
+     Algorithmic details are given for the wrapping function prune().
+
+     @param enumeration_radius radius of the desired enumeration
+     @param preproc_cost cost of preprocessing (i.e. additive cost for a retrying an enumeration)
+     @param gso_rs vector of vector Gram-Schmidt length (squared) of the enumerated block over
+     several bases
+     @param target desired target success probability/expected solutions after all retrial.
+     @param metric metric is to be optimized : PRUNER_METRIC_PROBABILITY_OF_SHORTEST or
+     PRUNER_METRIC_EXPECTED_SOLUTIONS
+     @param flags complementary parameters : PRUNER_CVP  PRUNER_START_FROM_INPUT  PRUNER_GRADIENT
+     PRUNER_NELDER_MEAD  PRUNER_VERBOSE
+  */
+
+  Pruner(const FT enumeration_radius, const FT preproc_cost, const vector<vector<double>> &gso_rs,
+         const FT target = 0.9, const PrunerMetric metric = PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+         int flags = PRUNER_GRADIENT)
+      : enumeration_radius(enumeration_radius), preproc_cost(preproc_cost), target(target),
+        metric(metric), flags(flags)
+  {
+    verbosity = flags & PRUNER_VERBOSE;
+    n         = gso_rs[0].size();
+    d         = n / 2;
+    if (flags & PRUNER_CVP)
+    {
+      symmetry_factor = 1;
+    }
+    min_pruning_coefficients.resize(d);
+    btmp.resize(d);
+    bftmp.resize(n);
+    fill(min_pruning_coefficients.begin(), min_pruning_coefficients.end(), 0.);
+    set_tabulated_consts();
+
+    // optimize overall cost, use
+    if (flags & PRUNER_SINGLE)
+    {
+      opt_single = true;
+      if (flags & PRUNER_HALF)
+      {
+        throw std::invalid_argument(
+            "Error: flags PRUNER_HALF and PRUNER_SINGLE are mutually exclusive.");
+      }
+    }
+
+    // need to fix target if possible
+    if (metric == PRUNER_METRIC_PROBABILITY_OF_SHORTEST)
+    {
+      // check if the target is reasonable; otherwise set it to 0.99.
+      // note the target may affect the cost in target_function().
+      if (this->target >= 1.0 || this->target <= 0.0)
+      {
+        throw std::invalid_argument("Invalid value for target with metric "
+                                    "PRUNER_METRIC_PROBABILITY_OF_SHORTEST (0 < target < 1).");
+      }
+    }
+    else if (metric == PRUNER_METRIC_EXPECTED_SOLUTIONS)
+    {
+      // check if the target is reasonable; otherwise set it to 0.99.
+      // note the target is allowed to be larger than 1 in this case.
+      // Also the target may affect the cost in target_function().
+      if (this->target <= 0.0)
+      {
+        throw std::invalid_argument(
+            "Invalid value for target with metric PRUNER_METRIC_EXPECTED_SOLUTIONS (0 < target).");
+      }
+    }
+    else
+    {
+      throw std::invalid_argument("Pruner was set to an unknown metric");
+    }
+    load_basis_shapes(gso_rs);
+  }
+
+  /**
+     @brief Main interface for optimizing pruning coefficients.
+
+     It will invoke either of the two functions:
+
+     1. `optimize_coefficients_cost_vary_prob()` or
+     2. `optimize_coefficients_cost_fixed_prob()`
+
+     depending on the input flags.
+
+     If the flag PRUNER_SINGLE is disabled (default), it calls function (1) so that goal is to
+     optimize the cost computed as`single_enum_cost(pr) * trials + preproc_cost * (trials - 1.0)`
+
+     If the flag PRUNER_SINGLE is enabled in `flags`, it calls function (2) such that the goal is to
+     optimize the single_enum_cost(pr) while fixing the metric (number of solutions or success
+     probability) to the target.
+  */
+  void optimize_coefficients(/*io*/ vector<double> &pr);
+
+  /**
+     @brief Main interface for optimizing the pruning coefficients with respect to the overall
+     enumeration time.
+
+     Main interface to optimize the overall enumeration time where the target function is:
+     single_enum_cost(pr) * trials + preproc_cost * (trials - 1.0);
+
+     Hierarchy of calls if PRUNER_HALF is not set (default):
+
+     - This function first invokes optimize_coefficients_evec_core() which optimizes using only
+     even-position vectors for speed.
+
+     - Then it calls several local tuning functions optimize_coefficients_local_adjust_*() to adjust
+     the parameters in small scales.
+
+     - Finally it does an optimization using full vectors using optimize_coefficients_full_core().
+     This
+     procedure is repeated for several rounds until no further improvements can be achieved.
+
+
+     If PRUNER_HALF is set, this function simply calls optimize_coefficients_evec.
+     Note that if PRUNER_HALF is set, one can not use PRUNER_SINGLE.
+  */
+  void optimize_coefficients_cost_vary_prob(/*io*/ vector<double> &pr);
+
+  /**
+     @brief Main interface to optimize the pruning coefficients with respect to the single
+     enumeration.
+
+     Main interface to optimize the single enumeration time with the constraint such that the succ.
+     prob (or expected solutions) is fixed (and given) from input to the Pruner constructor.
+
+     Hierarchy of calls if PRUNER_HALF is not set (default):
+
+     - This function first invokes optimize_coefficients_evec_core() and then
+     optimize_coefficients_full_core() to optimize the overall enumeration cost.
+
+     - Then it tries to adjust the pruning parameters to achieve the target succ. probability (or
+     expected number of solutions) by calling either optimize_coefficients_incr_prob() or
+     optimize_coefficients_decr_prob().
+
+     - Finally, it does some local optimization by calling
+     optimize_coefficients_local_adjust_smooth() which aims to smooth the discountinuities in the
+     curve and then optimize_coefficients_local_adjust_prob() which aims to fine-adjust the succ.
+     probability to be close enough to the target.
+
+  */
+  void optimize_coefficients_cost_fixed_prob(/*io*/ vector<double> &pr);
+
+  /**
+     @brief Run the optimization process using 'even' coefficients.
+
+     Run the optimization process, successively using the algorithm activated using using half
+     coefficients: the input pr has length n; but only the even indices in the vector will be
+     used in the optimization. In the end, we have pr_i = pr_{i+1}.
+
+     Note that this function calls `optimize_coefficients_evec_core()`. The difference is that
+     this function `optimize_coefficients_evec()` do not assume pr contains some valid
+     coefficient in prior. If the input pr is empty, it starts with the `greedy()` method and
+     does some preparation work before it invokes `optimize_coefficients_evec_core()`.
+
+     Note that this function (and `optimize_coefficients_evec_core()`) only optimizes the
+     overall enumeration time where the target function is:
+
+               `single_enum_cost(pr) * trials + preproc_cost * (trials - 1.0)`
+  */
+  void optimize_coefficients_evec(/*io*/ vector<double> &pr);
+
+  /**
+     @brief Run the optimization process using all the coefficients.
+
+     Run the optimization process, successively using the algorithm activated using using full
+     coefficients. That is, we do not have the constraint pr_i = pr_{i+1} in this function.
+
+     Note that this function calls `optimize_coefficients_full_core()`. The difference is that
+     this function `optimize_coefficients_full()` do not assume pr contains some valid
+     coefficient in prior. If the input pr is empty, it starts with the `greedy()` method and
+     does some preparation work before it invokes `optimize_coefficients_full_core()`.
+
+     Note that this function (and `optimize_coefficients_full_core()`) only optimizes
+     the overall enumeration time where the target function is:
+
+                `single_enum_cost(pr) * trials + preproc_cost * (trials - 1.0)`
+  */
+  void optimize_coefficients_full(/*io*/ vector<double> &pr);
+
+  /**
+      @brief Compute the cost of a single enumeration
+  */
+  double single_enum_cost(/*i*/ const vector<double> &pr, vector<double> *detailed_cost = nullptr)
+  {
+    // cout << "# pr is --> " << pr[0] << endl;
+    evec b(d);
+    load_coefficients(b, pr);
+
+    return single_enum_cost(b, detailed_cost).get_d();
+  }
+
+  /**
+     Compute the cost of r enumeration and (r-1) preprocessing,
+     where r is the required number of retrials to reach target/target_solution
+     @brief cost of repeating enumeration and preprocessing
+     @param b pruning bounds
+     @return cost
+  */
+  double repeated_enum_cost(/*i*/ const vector<double> &pr)
+  {
+    vec b(n);
+    load_coefficients(b, pr);
+    return repeated_enum_cost(b).get_d();
+  }
+
+  /**
+     @brief Return either SVP probability or expected number of solution depending on metric
+  */
+  double measure_metric(/*i*/ const vector<double> &pr)
+  {
+    vec b(n);
+    load_coefficients(b, pr);
+    return measure_metric(b).get_d();
+  }
+
+  /**
+     @brief gaussian heuristic for the shortest vector length of the loaded basis.
+
+     @note If multiple loaded then it is the gaussian heuristic of the first one.
+  */
+  FT gaussian_heuristic();
+
+private:
+  FT enumeration_radius;
+  FT preproc_cost;
+  FT target;
+  PrunerMetric metric;
+  bool shape_loaded = false;  ///< Keep track of whether a basis was loaded. Only allows
+                              /// single_enum_cost() with metric PROBABILITY_OF_SHORTEST if not
+  int flags;
+  int n;  ///< Dimension of the block to be enumerated
+  int d;  ///< Half dimension: most function only use half dimension, as our Pruner implcitly
+          /// enforce parity
+  vector<FT> min_pruning_coefficients;
+  bool opt_single = false;
+
+  double descent_starting_clock;
+  static bool tabulated_values_imported;  ///< (static) has tabulated constant been imported
+  static FT tabulated_factorial[PRUNER_MAX_N];
+  static FT tabulated_ball_vol[PRUNER_MAX_N];
+
+  FT epsilon  = std::pow(2., -7);  ///< Epsilon to use for numerical differentiation
+  FT min_step = std::pow(2., -6);  ///< Minimal step in a given direction
+  FT min_cf_decrease =
+      .995;  //< Maximal ratio of two consectuive cost_factor in the descent before stopping
+  FT step_factor     = std::pow(2, .5);  ///< Increment factor for steps in a given direction
+  FT shell_ratio     = .995;             ///< Shell thickness Ratio when evaluating svp proba
+  FT symmetry_factor = .5;               ///< Account for symmetry in costs: 0.5 for SVP, 1 for CVP.
+
+  // Following typedefs are given for readability
+  using vec  = vector<FT>;  ///< Vectors of dimension n
+  using evec = vector<FT>;  ///< Vectors of dimension d=n/2
+  using poly = vector<FT>;  ///< Polynomials of degree at most d, as vectors of dimension d+1
+
+  /* normalised by 1/det^(1/n) */
+  vec r;                    ///< Gram-Schmidt length (squared, and reversed ordered)
+  vec ipv;                  ///< Inverse Partial Volumes of projected sublattices (not squared !)
+  FT normalization_factor;  ///< internal renormalization factor to avoid over/underflows
+  FT normalized_radius;     ///< renormalized enumeration radius
+  int verbosity = 0;
+  vec r_old;  ///< a copy of gso_r)
+  FT logvol;
+
+  /* temp. variables used internally */
+  vector<FT> btmp;
+  vector<FT> bftmp;
+
+  /** @brief Static of load tabulated constants (done once over all instances). */
+  void set_tabulated_consts();
+
+  /** @brief load the shape of a basis from vector<double>.
+      @param gso_r vector of gso coefficients
+      @param reset_normalization boolean triggering computation of the renormalization factor
+    */
+  void load_basis_shape(const vector<double> &gso_r, bool reset_normalization = true);
+
+  /**
+      @brief Load the shapes of many bases from vector<vector<double>>.
+
+      Costs will be averaged over all bases. Normalization is done according to the first basis.
+
+      @param gso_r vector of vector of gso coefficients
+    */
+  void load_basis_shapes(const vector<vector<double>> &gso_rs);
+
+  /**
+     @brief convert pruning coefficients from external to internal format.
+
+     Convert type, reverse the ordering, and only select coefficent at even position
+
+     @param b Output in internal format
+     @param pr Input in external format
+  */
+  void load_coefficients(/*o*/ evec &b, /*i*/ const vector<double> &pr);
+
+  /**
+     @brief auxiliary function to print the coefficients.
+  */
+  void print_coefficients(/*i*/ const vector<double> &pr);
+
+  /**
+     @brief auxiliary function to print the coefficients.
+  */
+  void print_coefficients(/*i*/ const evec &pr);
+
+  /**
+     @brief Convert pruning coefficients from internal to external.
+
+     Convert type, reverse the ordering, and repeat each coefficent twice
+
+     @param pr Output in external format
+     @param b Input in internal format
+  */
+  void save_coefficients(/*o*/ vector<double> &pr, /*i*/ const evec &b);
+
+  /**
+     @brief Enforce contraints on pruning coefficients
+
+     Enforce that pruning coeffient terminate with a 1, are decreasing, and
+     are not too close to 0 (for numerical stability).
+
+     @param b input/output
+     @param j Keeps index j unchanged when possible
+     @return was a constraint violated ?
+  */
+  inline bool enforce(/*io*/ vec &b, /*opt i*/ const int j = 0);
+
+  /**
+     @brief Evaluate a polynomial
+     @param ld degree of the polynomial p
+     @param p the polynomial
+     @param x value at which to evaluate
+     @return p evaluated at x
+  */
+  inline FT eval_poly(const int ld, /*i*/ const poly &p, const FT x);
+
+  /**
+     @brief Integrate a polynomial (in place)
+     @param ld degree of the polynomial p
+     @param p the polynomial
+     @return p evaluated at x
+  */
+  inline void integrate_poly(const int ld, /*io*/ poly &p);
+
+  /**
+     @brief Compute the relative volume of a cylinder intersection to the unit sphere (of a given
+     subdimension)
+     @param rd sub-dimension
+     @param b bounds of the cylinder intersection
+     @return relative volume
+     @note Implicitly renormalized as if b[rd-1] = 1
+  */
+  inline FT relative_volume(/*i*/ const int rd, const evec &b);
+
+  /**
+     @brief Compute the cost of a pruned enumeration
+     @param b pruning bounds
+     @param detailed_cost (optional) store the details of node per level of the enum tree there
+     @return cost, in enumeration node
+
+     Function single_enum_cost() is the main interface to compute single enumeration cost.
+     Function single_enum_cost_lower() is an auxiliary function to compute the
+               lower bound of single enumation cost.
+     Function single_enum_cost_upper() is an auxiliary function to compute the
+               upper bound of single enumation cost.
+     Function single_enum_cost_evec() is the underlying backend for the above two.
+  */
+  FT single_enum_cost(/*i*/ const vec &b, vector<double> *detailed_cost = nullptr);
+  FT single_enum_cost_evec(/*i*/ const evec &b, vector<double> *detailed_cost = nullptr);
+  FT single_enum_cost_lower(/*i*/ const vec &b, vector<double> *detailed_cost = nullptr);
+  FT single_enum_cost_upper(/*i*/ const vec &b, vector<double> *detailed_cost = nullptr);
+
+  /**
+     @brief Compute the success probability for SVP/CVP of a single enumeration
+     @param b pruning bounds
+     @return success probability
+
+     Function svp_probability() is the main interface.
+     Function svp_probability_lower() is an auxiliary function to compute the
+                                      approx. lower bound of succ. probability
+     Function svp_probability_upper() is an auxiliary function to compute the
+                                      upper bound of succ. probability
+     The svp_probability_evec() is the underlying backend for above.
+  */
+  FT svp_probability(/*i*/ const vec &b);
+  FT svp_probability_evec(/*i*/ const evec &b);
+  FT svp_probability_lower(/*i*/ const vec &b);
+  FT svp_probability_upper(/*i*/ const vec &b);
+
+  /**
+     @brief Compute the expected number of solution of a single of a single enumeration
+     @param b pruning bounds
+     @return expected number of solutions
+
+     The naming conventions is the same as those in svp_probability_*()
+  */
+  FT expected_solutions(/*i*/ const vec &b);
+  FT expected_solutions_evec(/*i*/ const evec &b);
+  FT expected_solutions_lower(/*i*/ const vec &b);
+  FT expected_solutions_upper(/*i*/ const vec &b);
+
+  /**
+     @brief links to either svp_probability() or expected_solution() depending on metric
+     @param b pruning bounds
+     @return expected number of solutions or success probability
+  */
+  FT measure_metric(/*i*/ const vec &b);
+
+  /**
+     @brief Compute the target function to be optimized. This could be the
+     cost of repeating enumeration and preprocessing until reaching target
+     or the cost of a single enumeration.
+
+     Note this function does not do optimization. Depending on the
+     optimization goal, it will return the cost based on different
+     models/modes. There are two modes depending on the target.
+
+     (1) if the flag PRUNER_SINGLE is disabled in `flags` (default),
+         this function will compute the cost of r * single_enum_cost()
+         plus (r-1) * preprocessing where r is the expected number of
+         trials.
+
+     (2) if the flag PRUNER_SINGLE is enabled, this function computes
+         the cost of a single_enum_cost(). Note in such case the input
+         target prob is fixed. Whether we could achieve this input
+         target prob will be determined in the optimization procedure.
+         See also below.
+
+     Note one should set the radius with care, since if the radius is too
+     small, perhaps with all 1's the pruning coefficients are not able
+     to support a target expectation/probability. Consider an example
+     if using PRUNER_METRIC_EXPECTED_SOLUTIONS:
+
+     (a) If the radius is large enough to support target many solutions,
+     the optimizer will optimize the single_enum_cost while fixing
+     the target.
+
+     (b) if the radius is too small to support target many solutions,
+     it will likely return all 1's in the coefficients (attempt
+     to achieve the target but which is not possible)
+
+     Note the radius is either from the first b_i^* of the block lattice;
+     or set as min(GH * gh_ratio, |b_i^*|). Hence it will not be arbitrarily
+     large.
+  */
+  FT target_function(/*i*/ const evec &b);
+
+  /**
+     @brief Compute the gradient cost of the target function to be optimized
+     @param b pruning bounds
+     @param res reference for output
+     @return cost
+  */
+  void target_function_gradient(/*i*/ const vec &b, /*o*/ vec &res);
+
+  /**
+     Compute the cost of r enumeration and (r-1) preprocessing,
+     where r is the required number of retrials to reach target/target_solution
+     @brief cost of repeating enumeration and preprocessing
+     @param b pruning bounds
+     @return cost
+  */
+  FT repeated_enum_cost(/*i*/ const evec &b);
+
+  /**
+     @brief Do some preparation work for the optimization process.
+
+     If the flag PRUNER_START_FROM_INPUT is not enabled, this function
+     tries to find some raw pruning coefficients using the `greedy()`
+     method (as the input pr may be empty).
+
+     If the flag PRUNER_START_FROM_INPUT is enabled, this function will
+     start with the input pruning parameter without using the `greedy()`.
+
+     This function is used in the beginning stage for both
+     `optimize_coefficients_evec()` and `optimize_coefficients_full()`.
+  */
+  void optimize_coefficients_preparation(/*io*/ vector<double> &pr);
+
+  /**
+     @brief Run the optimization process using 'even' coefficients.
+
+     Run the optimization process, successively using the algorithm activated
+     using using half coefficients: the input pr has length n; but only the even
+     indices in the vector will be used in the optimization. In the end, we
+     have pr_i = pr_{i+1}.
+
+     Note that this function only optimizes the overall enumeration time where
+     the target function is:
+
+     `single_enum_cost(pr) * trials + preproc_cost * (trials - 1.0)`
+
+     This may be used in both `optimize_coefficients_cost_fixed_prob()` and
+     `optimize_coefficients_cost_vary_prob()`.
+
+     Note that to use this function, the input pr must be non-empty.
+     It should already contain valid pruning coefficients. E.g. they
+     could be derived from `optimize_coefficients_preparation()`.
+  */
+  void optimize_coefficients_evec_core(/*io*/ vector<double> &pr);
+
+  /**
+     @brief Run the optimization process using all the coefficients.
+
+     Run the optimization process, successively using the algorithm activated
+     using using full coefficients. That is, we do not have the constraint
+     pr_i = pr_{i+1} in this function.
+
+     Note that this function only optimizes the overall enumeration time
+     where the target function is:
+
+     `single_enum_cost(pr) * trials + preproc_cost * (trials - 1.0)`
+
+     This is used in both `optimize_coefficients_cost_fixed_prob()` and
+     `optimize_coefficients_cost_vary_prob()`.
+
+     Note that to use this function, the input pr must be non-empty.
+     It should already contain valid pruning coefficients. E.g. they
+     could be derived from `optimize_coefficients_preparation()`.
+  */
+  void optimize_coefficients_full_core(/*io*/ vector<double> &pr);
+
+  /**
+     @brief gradient of the cost of repeating enumeration and preprocessing
+     @param b reference for output
+     @note Greedy (with less cost) is also used as a heuristic to lower bound
+     pruning coeffients during the descent and avoid numerical stability issues.
+  */
+  void greedy(evec &b);
+
+  /**
+     @brief Perform one step of the gradient descent, in place
+     @param b input/output
+  */
+  int gradient_descent_step(/*io*/ vec &b);
+
+  /**
+     @brief Perform several steps of the gradient descent, in place
+            It calls the gradient_descent_step() for several times.
+     @param b input/output
+  */
+  int gradient_descent(/*io*/ vec &b);
+
+  /**
+     @brief Runs nelder-mead algorithm
+     @param b input/output
+     @note As recommended on Wikipedia, the algorithm is re-ran several time
+  */
+  int nelder_mead_step(/*io*/ evec &b);
+
+  /**
+     @brief adjust the pruning parameter to reduce single enumeration time.
+     The purpose is to reduce the single enumeration time while not
+     decreasing the succ. probability too much.
+
+     Optimization process to the pruning parameters to reduce single enumeration
+     time with the hope that it also reduces the overall enumeration time. Local
+     implies the code will hopefully only do small changes to the pruning
+     coefficients.
+  */
+  void optimize_coefficients_local_adjust_decr_single(/*io*/ vector<double> &pr);
+
+  /**
+     @brief adjust the pruning parameter to increase succ. probability.
+     The purpose is to increase the succ. probability while not incresing
+     the single enumeration time too much.
+
+     Optimization process to the pruning parameters to increase succ.
+     probability with the restriction that the single enumeration time does
+     not increase significantly.
+  */
+  void optimize_coefficients_local_adjust_incr_prob(/*io*/ vector<double> &pr);
+
+  /**
+     @brief adjust the pruning parameter to make the curve of the pruning
+     parameter more smooth.
+
+     Optimization process to the pruning parameters to make the curve
+     more smooth if the input has obvious discountinuties on consecutive
+     pruning parameters.
+  */
+  void optimize_coefficients_local_adjust_smooth(/*io*/ vector<double> &pr);
+
+  /**
+     @brief auxiliary function in optimizing the single enumeraiton time
+     fixing the succ. prob. The purpose is to increase the probability
+     to be close to the target (as much as it can). This is used
+     to make sure the probability is ''somewhat'' close to the target.
+
+     Auxiliary function to optimize the single enumeration time with the
+     constraint that the succ. prob (or expected solutions) is fixed. It
+     is used if the given targeted probaility is larger than the one
+     computed using pruning parameters. Then one increases the succ.
+     probability by increasing the pruning parameters. Note since the
+     radius is fixed as input, it may not be possible to achieve the
+     given targeted probability even if all coefficients are (1, ..., 1).
+     In such case, it will try to increase the succ. prob as much as
+     it can and possibly return (1, ..., 1).
+  */
+  void optimize_coefficients_incr_prob(/*io*/ vector<double> &pr);
+
+  /**
+     @brief auxiliary function in optimizing the single enumeraiton time
+     fixing the succ. prob. The purpose is to decrease the probability
+     to be close to the target. This is used to make sure the
+     probability is ''somewhat'' close to the target.
+
+     Auxiliary function to optimize the single enumeration time with the
+     constraint that the succ. prob (or expected solutions) is fixed. It
+     is used if the given targeted probaility is smaller than the one
+     computed using pruning parameters. Then one decreases the succ.
+     probability by descreasing the pruning parameters.
+  */
+  void optimize_coefficients_decr_prob(/*io*/ vector<double> &pr);
+
+  /**
+     @brief auxiliary function in optimizing the single enumeraiton
+     time fixing succ. prob. This is used to make sure the probability
+     is ''sufficiently'' close to the target (if possible).
+
+     Heuristic adjust procedure which seems to be useful to achieve the
+     target succ. probability (or expected number of solutions).
+     This function is used in the end to make sure the ratio between
+     the succ. prob form current pruning coefficients and the target
+     succ. prob are sufficiently close. Depending on whether the
+     succ. prob is larger (or smaller), it will try to reduce the
+     pruning coefficients (or increase) in small scale to make succ. prob
+     \approx the target succ. prob. Sometimes the succ. prob can not be
+     modified closer to target succ. prob due to the contraints (in such
+     case it just returns).
+  */
+  void optimize_coefficients_local_adjust_prob(/*io*/ vector<double> &pr);
+};
+
+template <class FT>
+bool Pruner<FT>::tabulated_values_imported = false;  ///< (static) tabulated value not loaded yet
+template <class FT> FT Pruner<FT>::tabulated_factorial[PRUNER_MAX_N];
+template <class FT> FT Pruner<FT>::tabulated_ball_vol[PRUNER_MAX_N];
+
+/**
+    enforce (and possible fix) for half/full coefficients
+ */
+template <class FT> inline bool Pruner<FT>::enforce(/*io*/ vec &b, /*opt i*/ const int j)
+{
+  int dn      = b.size();
+  int c       = (dn == d) ? 1 : 2;
+  bool status = false;
+
+  // the last coefficient being 1
+  if ((b[dn - 1] < .999) & (j != dn - 1))
+  {
+    status    = 1;
+    b[dn - 1] = 1.;
+  }
+
+  for (int i = 0; i < dn; ++i)
+  {
+    status |= (b[i] > 1.0001);
+    b[i] = b[i] > 1 ? 1. : b[i];
+
+    // note min_pruning_coefficients always has length d
+    if (i / c < d && b[i] <= min_pruning_coefficients[i / c])
+      b[i] = min_pruning_coefficients[i / c];
+  }
+
+  for (int i = j; i < dn - 1; ++i)
+  {
+    if (b[i + 1] < b[i])
+    {
+      status |= (b[i + 1] + .000001 < b[i]);
+      b[i + 1] = b[i];
+    }
+  }
+
+  for (int i = std::min(j - 1, dn - 2); i >= 0; --i)
+  {
+    if (b[i + 1] < b[i])
+    {
+      status |= (b[i + 1] + .000001 < b[i]);
+      b[i] = b[i + 1];
+    }
+  }
+  return status;
+}
+
+// put here to avoid warnings on inlines function should be in the header.
+#include "pruner_simplex.h"
+
+FPLLL_END_NAMESPACE
+
+#endif /* FPLLL_PRUNER_H */
diff --git a/fplll/pruner/pruner_cost.cpp b/fplll/pruner/pruner_cost.cpp
new file mode 100644 (file)
index 0000000..def6502
--- /dev/null
@@ -0,0 +1,202 @@
+#include "fplll.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+ * single enumation cost using half-vector coefficients b
+ */
+template <class FT>
+inline FT Pruner<FT>::single_enum_cost_evec(/*i*/ const evec &b,
+                                            /*o*/ vector<double> *detailed_cost)
+{
+  if (!shape_loaded)
+  {
+    throw std::invalid_argument("Error: No basis shape was loaded");
+  }
+
+  if (detailed_cost)
+  {
+    detailed_cost->resize(n);
+  }
+  vec rv(n);  // Relative volumes at each level
+
+  /* even dimension of 2*i, e.g. 2, 4, */
+  for (int i = 0; i < d; ++i)
+  {
+    rv[2 * i + 1] = relative_volume(i + 1, b);
+  }
+
+  /* old dimension, e.g. get dim 3 by project (dim 2 and 4) */
+  rv[0] = 1;
+  for (int i = 1; i < d; ++i)
+  {
+    rv[2 * i] = sqrt(rv[2 * i - 1] * rv[2 * i + 1]);  // Interpolate
+                                                      // even values
+    // another way
+    // rv[2 * i] = (rv[2 * i - 1] + rv[2 * i + 1]) / 2.0;
+  }
+
+  FT total;
+  total                    = 0.0;
+  FT normalized_radius_pow = normalized_radius;
+
+  for (int i = 0; i < 2 * d; ++i)
+  {
+    FT tmp;
+
+    // ipv is normalized and larger
+    // normalized_radius_pow = (R/det^1/n)^i and normalized to be
+    // smaller, where R is the actual searching radius in SVP..
+    tmp = normalized_radius_pow * rv[i] * tabulated_ball_vol[i + 1] *
+          sqrt(pow_si(b[i / 2], 1 + i)) * ipv[i];
+
+    tmp *= symmetry_factor;
+    if (detailed_cost)
+    {
+      (*detailed_cost)[2 * d - (i + 1)] = tmp.get_d();
+    }
+
+    total += tmp;
+    normalized_radius_pow *= normalized_radius;
+  }
+  if (!total.is_finite())
+  {
+    throw std::range_error("NaN or inf in single_enum_cost");
+  }
+  return total;
+}
+
+/**
+ * lower bound of single enumation cost
+ */
+template <class FT>
+inline FT Pruner<FT>::single_enum_cost_lower(/*i*/ const vec &b, vector<double> *detailed_cost)
+{
+  evec b_lower(d);
+  for (int i = 0; i < d; ++i)
+  {
+    b_lower[i] = b[2 * i];
+  }
+  return single_enum_cost_evec(b_lower, detailed_cost);
+}
+
+/**
+ * upper bound of single enumation cost
+ */
+template <class FT>
+inline FT Pruner<FT>::single_enum_cost_upper(/*i*/ const vec &b, vector<double> *detailed_cost)
+{
+  evec b_upper(d);
+  for (int i = 0; i < d; ++i)
+  {
+    b_upper[i] = b[2 * i + 1];
+  }
+  return single_enum_cost_evec(b_upper, detailed_cost);
+}
+
+/**
+ * single enumation cost
+ */
+template <class FT>
+inline FT Pruner<FT>::single_enum_cost(/*i*/ const vec &b, vector<double> *detailed_cost)
+{
+  if (b.size() == (unsigned int)d)
+  {
+    return single_enum_cost_evec(b, detailed_cost);
+  }
+  else
+  {
+    FT cl = single_enum_cost_lower(b, detailed_cost);
+    FT cu = single_enum_cost_upper(b, detailed_cost);
+    return (cl + cu) / 2.0;
+  }
+}
+
+template <class FT> void Pruner<FT>::target_function_gradient(/*i*/ const vec &b, /*o*/ vec &res)
+{
+
+  int dn = b.size();
+  vec b_plus_db(dn);
+  res[dn - 1] = 0.0;  // Force null gradient on the last coordinate : don't touch this coeff
+  for (int i = 0; i < dn - 1; ++i)
+  {
+    b_plus_db = b;
+    b_plus_db[i] *= (1.0 - epsilon);
+    enforce(b_plus_db, i);
+    FT X = target_function(b_plus_db);
+
+    b_plus_db = b;
+    b_plus_db[i] *= (1.0 + epsilon);
+    enforce(b_plus_db, i);
+    FT Y   = target_function(b_plus_db);
+    res[i] = (log(X) - log(Y)) / epsilon;
+  }
+}
+
+template <class FT> inline FT Pruner<FT>::target_function(/*i*/ const vec &b)
+{
+  if (metric == PRUNER_METRIC_PROBABILITY_OF_SHORTEST)
+  {
+    FT probability = svp_probability(b);
+    FT trials      = log(1.0 - target) / log(1.0 - probability);
+    if (!trials.is_finite())
+    {
+      throw std::range_error("NaN or inf in target_function (METRIC_PROBABILITY_OF_SHORTEST). "
+                             "Hint: using a higher precision sometimes helps.");
+    }
+    trials = trials < 1.0 ? 1.0 : trials;
+    return single_enum_cost(b) * trials + preproc_cost * (trials - 1.0);
+  }
+  else if (metric == PRUNER_METRIC_EXPECTED_SOLUTIONS)
+  {
+    FT expected = expected_solutions(b);
+    FT trials   = target / expected;
+    if (!trials.is_finite())
+    {
+      throw std::range_error("NaN or inf in target_function (METRIC_EXPECTED_SOLUTION). Hint: "
+                             "using a higher precision sometimes helps.");
+    }
+    // if expected solutions > 1, set trial = 1
+    trials = trials < 1.0 ? 1.0 : trials;
+    return single_enum_cost(b) * trials + preproc_cost * (trials - 1.0);
+  }
+  else
+  {
+    throw std::invalid_argument("Pruner was set to an unknown metric");
+  }
+}
+
+template <class FT> inline FT Pruner<FT>::repeated_enum_cost(/*i*/ const vec &b)
+{
+  if (metric == PRUNER_METRIC_PROBABILITY_OF_SHORTEST)
+  {
+    FT probability = svp_probability(b);
+    FT trials      = log(1.0 - target) / log(1.0 - probability);
+    if (!trials.is_finite())
+    {
+      throw std::range_error("NaN or inf in repeated_enum_cost (METRIC_PROBABILITY_OF_SHORTEST). "
+                             "Hint: using a higher precision sometimes helps.");
+    }
+    trials = trials < 1.0 ? 1.0 : trials;
+    return single_enum_cost(b) * trials + preproc_cost * (trials - 1.0);
+  }
+  else if (metric == PRUNER_METRIC_EXPECTED_SOLUTIONS)
+  {
+    FT expected = expected_solutions(b);
+    FT trials   = 1.0 / expected;
+    if (!trials.is_finite())
+    {
+      throw std::range_error("NaN or inf in repeated_enum_cost (METRIC_EXPECTED_SOLUTION).  Hint: "
+                             "using a higher precision sometimes helps.");
+    }
+    // if expected solutions > 1, set trial = 1
+    trials = trials < 1.0 ? 1.0 : trials;
+    return single_enum_cost(b) * trials + preproc_cost * (trials - 1.0);
+  }
+  else
+  {
+    throw std::invalid_argument("Pruner was set to an unknown metric");
+  }
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/pruner/pruner_optimize.cpp b/fplll/pruner/pruner_optimize.cpp
new file mode 100644 (file)
index 0000000..aa3c833
--- /dev/null
@@ -0,0 +1,162 @@
+#include "fplll.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+//#define DEBUG_PRUNER_OPTIMIZE
+#define NUM_OPTIMIZATION_TOURS 3
+
+template <class FT> void Pruner<FT>::optimize_coefficients_cost_vary_prob(/*io*/ vector<double> &pr)
+{
+
+  FT old_c0, old_c1, new_c, min_c;
+  vec b(n), best_b(n);
+
+  // step 1 preparation
+  optimize_coefficients_preparation(pr);
+
+  // step 2 optimization use half coefficients only
+  optimize_coefficients_evec_core(pr);
+
+  load_coefficients(b, pr);
+  best_b = b;
+  old_c0 = target_function(b);
+  min_c  = old_c0;
+
+#ifdef DEBUG_PRUNER_OPTIMIZE
+  FT old_sc   = single_enum_cost(b);
+  FT old_prob = measure_metric(b);
+  cerr << "# [Stage ho] half-optimization done." << endl;
+  cerr << "# [Stage ho]    all_enum_cost = " << old_c0 << endl;
+  cerr << "# [Stage ho] single_enum_cost = " << old_sc << endl;
+  cerr << "# [Stage ho] succ_probability = " << old_prob << endl;
+#endif
+
+  // step 2 use full coefficients if enabled
+  if (!(flags & PRUNER_HALF))
+  {
+    int tours = 0;
+    while (1)
+    {
+      tours++;
+
+      // initial cost
+      load_coefficients(b, pr);
+      old_c0 = target_function(b);
+
+      // step 2.1 full tuning
+      optimize_coefficients_local_adjust_decr_single(pr);
+      optimize_coefficients_local_adjust_incr_prob(pr);
+      optimize_coefficients_local_adjust_smooth(pr);
+
+      // update best after tuning
+      load_coefficients(b, pr);
+      old_c1 = target_function(b);
+      if (old_c1 < min_c)
+      {
+        min_c  = old_c1;
+        best_b = b;
+      }
+
+#ifdef DEBUG_PRUNER_OPTIMIZE
+      old_sc   = single_enum_cost(b);
+      old_prob = measure_metric(b);
+      cerr << "# [Stage ft] full-tuning done." << endl;
+      cerr << "# [Stage ft]    all_enum_cost = " << old_c1 << endl;
+      cerr << "# [Stage ft] single_enum_cost = " << old_sc << endl;
+      cerr << "# [Stage ft] succ_probability = " << old_prob << endl;
+#endif
+
+      // step 2.2 full optimization
+      optimize_coefficients_full_core(pr);
+
+      load_coefficients(b, pr);
+      new_c = target_function(b);
+      if (new_c < min_c)
+      {
+        min_c  = new_c;
+        best_b = b;
+      }
+
+#ifdef DEBUG_PRUNER_OPTIMIZE
+      old_sc   = single_enum_cost(b);
+      old_prob = measure_metric(b);
+      cerr << "# [Stage fo] full-optimization done." << endl;
+      cerr << "# [Stage fo]    all_enum_cost = " << new_c << endl;
+      cerr << "# [Stage fo] single_enum_cost = " << old_sc << endl;
+      cerr << "# [Stage fo] succ_probability = " << old_prob << endl;
+#endif
+
+      // break if not improving
+      if (new_c / old_c0 > 0.995 and tours > NUM_OPTIMIZATION_TOURS)
+        break;
+    }
+    save_coefficients(pr, best_b);
+  }
+  else
+  {
+    save_coefficients(pr, b);
+  }
+}
+
+template <class FT>
+void Pruner<FT>::optimize_coefficients_cost_fixed_prob(/*io*/ vector<double> &pr)
+{
+  vec b(n);
+  FT prob;
+
+  // step 1 call global optimization (without fixing succ. prob)
+  optimize_coefficients_preparation(pr);
+  optimize_coefficients_evec_core(pr);
+  optimize_coefficients_local_adjust_smooth(pr);
+  optimize_coefficients_full_core(pr);
+
+#ifdef DEBUG_PRUNER_OPTIMIZE
+  load_coefficients(b, pr);
+  cerr << "# [Stage ho] half-optimization done." << endl;
+  cerr << "# [Stage ho]    all_enum_cost = " << repeated_enum_cost(b) << endl;
+  cerr << "# [Stage fo] single_enum_cost = " << single_enum_cost(b) << endl;
+  cerr << "# [Stage ho] succ_probability = " << measure_metric(b) << endl;
+  cerr << b << endl;
+#endif
+
+  // step 2 achieve target succ. prob
+  optimize_coefficients_local_adjust_smooth(pr);
+  load_coefficients(b, pr);
+  prob = measure_metric(b);
+  if (prob <= target)
+    optimize_coefficients_incr_prob(pr);
+  else
+  {
+    optimize_coefficients_decr_prob(pr);
+  }
+
+  // step 3: some local tweaking
+  optimize_coefficients_local_adjust_smooth(pr);
+  optimize_coefficients_local_adjust_prob(pr);
+
+#ifdef DEBUG_PRUNER_OPTIMIZE
+  load_coefficients(b, pr);
+  cerr << "# [Stage fo] full-optimization done." << endl;
+  cerr << "# [Stage fo]    all_enum_cost = " << repeated_enum_cost(b) << endl;
+  cerr << "# [Stage fo] single_enum_cost = " << single_enum_cost(b) << endl;
+  cerr << "# [Stage fo] succ_probability = " << measure_metric(b) << endl;
+  cerr << b << endl;
+#endif
+}
+
+/**
+ *  optimize either overall cost or cost by fixing probability
+ */
+template <class FT> void Pruner<FT>::optimize_coefficients(/*io*/ vector<double> &pr)
+{
+  if (opt_single)
+  {
+    optimize_coefficients_cost_fixed_prob(pr);
+  }
+  else
+  {
+    optimize_coefficients_cost_vary_prob(pr);
+  }
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/pruner/pruner_optimize_tc.cpp b/fplll/pruner/pruner_optimize_tc.cpp
new file mode 100644 (file)
index 0000000..d554d85
--- /dev/null
@@ -0,0 +1,827 @@
+#include "fplll.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+#define BALANCE_HEURISTIC_PRUNER_OPTIMIZE
+//#define DEBUG_PRUNER_OPTIMIZE_TC
+
+/**
+ *  preparation work to have some raw pruning coefficients
+ */
+template <class FT> void Pruner<FT>::optimize_coefficients_preparation(/*io*/ vector<double> &pr)
+{
+  evec b(d);
+
+  // load coefficients
+  if (flags & PRUNER_START_FROM_INPUT)
+  {
+    load_coefficients(b, pr);
+  }
+
+  // greedy method
+  if (!(flags & PRUNER_START_FROM_INPUT))
+  {
+    greedy(b);
+#ifdef DEBUG_PRUNER_OPTIMIZE_TC
+    cerr << "# [Greedy]" << endl;
+    cerr << b << endl;
+    cerr << "# [Greedy] single_enum_cost  = " << single_enum_cost(b) << endl;
+    cerr << "# [Greedy] succ_probability  = " << measure_metric(b) << endl;
+    cerr << "# [Greedy]    all_enum_cost  = " << repeated_enum_cost(b) << endl;
+#endif
+  }
+
+  // greedy method for min pruning coefficients.
+  if (flags & (PRUNER_GRADIENT | PRUNER_NELDER_MEAD))
+  {
+    preproc_cost *= .1;
+    greedy(min_pruning_coefficients);
+
+    // The aim is to get a lower bound for the pruning parameter
+    // note this lower bound will be used in the enforce()
+    // In the case of fixed input probability, check whether this
+    // min_pruning_coefficiens is small enough. Otherwise, reduce
+    // it further. This is important since otherwise one may never
+    // achieve the target probability.
+    if (!opt_single)
+    {
+      vector<double> pr_min(n);
+      save_coefficients(pr_min, min_pruning_coefficients);
+      if (measure_metric(min_pruning_coefficients) > target)
+      {
+        fill(min_pruning_coefficients.begin(), min_pruning_coefficients.end(), 0.);
+        optimize_coefficients_decr_prob(pr_min);
+      }
+      load_coefficients(min_pruning_coefficients, pr_min);
+    }
+    preproc_cost *= 10;
+  }
+  save_coefficients(pr, b);
+}
+
+/**
+ *  preparation and call optimization with constrains that b_i = b_{i+1} for even i.
+ */
+template <class FT> void Pruner<FT>::optimize_coefficients_evec(/*io*/ vector<double> &pr)
+{
+  optimize_coefficients_preparation(pr);
+  optimize_coefficients_evec_core(pr);
+}
+
+/**
+ *  optimize with constrains that b_i = b_{i+1} for even i.
+ */
+template <class FT> void Pruner<FT>::optimize_coefficients_evec_core(/*io*/ vector<double> &pr)
+{
+  evec b(d);
+  load_coefficients(b, pr);
+
+  // gradient method (default flag enables PRUNER_GRADIENT)
+  if (flags & PRUNER_GRADIENT)
+  {
+    if (verbosity)
+    {
+      cerr << "\nGradient descent start (dim=" << n << ")" << endl;
+    }
+    gradient_descent(b);
+#ifdef DEBUG_PRUNER_OPTIMIZE_TC
+    cerr << "# [Descent]" << endl;
+    cerr << b << endl;
+    cerr << "# [Descent] single_enum_cost  = " << single_enum_cost(b) << endl;
+    cerr << "# [Descent] succ_probability  = " << measure_metric(b) << endl;
+    cerr << "# [Descent]    all_enum_cost  = " << repeated_enum_cost(b) << endl;
+#endif
+  };
+
+  // gradient method
+  if (flags & PRUNER_NELDER_MEAD)
+  {
+    if (verbosity)
+    {
+      cerr << "\nNelder-Mead start (dim=" << n << ")" << endl;
+    }
+    while (nelder_mead_step(b))
+    {
+    };
+#ifdef DEBUG_PRUNER_OPTIMIZE_TC
+    cerr << "# [Nelder-Mead]" << endl;
+    cerr << b << endl;
+    cerr << "# [Nelder-Mead] single_enum_cost  = " << single_enum_cost(b) << endl;
+    cerr << "# [Nelder-Mead] succ_probability  = " << measure_metric(b) << endl;
+    cerr << "# [Nelder-Mead]    all_enum_cost  = " << repeated_enum_cost(b) << endl;
+#endif
+  };
+  save_coefficients(pr, b);
+}
+
+/**
+ *  Optimize without constrains b_i = b_{i+1} for even i.
+ *  Note that this function assumes the pr already contains some valid
+ *  pruning coefficients.
+ */
+template <class FT> void Pruner<FT>::optimize_coefficients_full(/*io*/ vector<double> &pr)
+{
+  optimize_coefficients_preparation(pr);
+  optimize_coefficients_full_core(pr);
+}
+
+/**
+ *  optimize without constrains b_i = b_{i+1} for even i.
+ */
+template <class FT> void Pruner<FT>::optimize_coefficients_full_core(/*io*/ vector<double> &pr)
+{
+  vec b(n);
+
+  // always load coefficients since this is used after optimize_coefficients_evec
+  load_coefficients(b, pr);
+
+  // gradient method
+  if (flags & PRUNER_GRADIENT)
+  {
+    if (verbosity)
+    {
+      cerr << "\nGradient descent start (dim=" << n << ")" << endl;
+    }
+
+    gradient_descent(b);
+#ifdef DEBUG_PRUNER_OPTIMIZE_TC
+    cerr << "# [Descent]" << endl;
+    cerr << b << endl;
+    cerr << "# [Descent] single_enum_cost  = " << single_enum_cost(b) << endl;
+    cerr << "# [Descent] succ_probability  = " << measure_metric(b) << endl;
+    cerr << "# [Descent]    all_enum_cost  = " << repeated_enum_cost(b) << endl;
+#endif
+  };
+
+  // Nelder-Mead method
+  if (flags & PRUNER_NELDER_MEAD)
+  {
+    if (verbosity)
+    {
+      cerr << "\nNelder-Mead start (dim=" << n << ")" << endl;
+    }
+    while (nelder_mead_step(b))
+    {
+    };
+
+#ifdef DEBUG_PRUNER_OPTIMIZE_TC
+    cerr << "# [Nelder-Mead]" << endl;
+    cerr << b << endl;
+    cerr << "# [Nelder-Mead] single_enum_cost  = " << single_enum_cost(b) << endl;
+    cerr << "# [Nelder-Mead] succ_probability  = " << measure_metric(b) << endl;
+    cerr << "# [Nelder-Mead]    all_enum_cost  = " << repeated_enum_cost(b) << endl;
+#endif
+  };
+
+  save_coefficients(pr, b);
+}
+
+/**
+ * Tweaking of pruning coefficients in neighborhood: try to reduce
+ * single enum cost (hopefull reduce the overall running time)
+ */
+template <class FT>
+void Pruner<FT>::optimize_coefficients_local_adjust_decr_single(/*io*/ vector<double> &pr)
+{
+  int maxi, lasti, consecutive_fails;
+  double improved_ratio, current_max = 0.0;
+  FT old_cf, old_cfs, new_cf, old_b;
+  vector<double> detailed_cost(n);
+  vector<double> slices(n, 10.0);  // (b[i+1] - b[i])/slice will be used as step
+  vector<int> thresholds(n, 3);
+  vec b(n);
+
+  load_coefficients(b, pr);
+
+  lasti = -1;             // last failed index, make sure we do not try it again in
+                          // the next time
+  consecutive_fails = 0;  // number of consecutive failes; break if
+                          // reaches it
+
+  improved_ratio = 0.995;  // if reduced by 0.995, descent
+
+  while (1)
+  {
+
+    // old cost
+    old_cf = target_function(b);
+
+    // find bottleneck index
+    old_cfs = single_enum_cost(b, &(detailed_cost));
+
+// heuristic
+#ifdef BALANCE_HEURISTIC_PRUNER_OPTIMIZE
+    if (old_cfs < sqrt(old_cf) / 10.0)
+      break;
+#endif
+
+    current_max = 0.0;
+    maxi        = 0;
+    for (int i = 0; i < n; i++)
+    {
+      if ((i != (n - lasti - 1)) && (thresholds[n - i - 1] > 0))
+      {
+        if (detailed_cost[i] > current_max)
+        {
+          current_max = detailed_cost[i];
+          maxi        = i;
+        }
+      }
+    }
+
+    // b[ind] is the one to be reduced
+    int ind = n - maxi - 1;
+    old_b   = b[ind];
+    if (ind != 0)
+    {
+      b[ind] = b[ind] - (b[ind] - b[ind - 1]) / slices[ind];
+    }
+    else
+    {
+      break;
+    }
+
+    // new cost
+    new_cf = target_function(b);
+
+    // if not improved -- recover
+    if (new_cf >= (old_cf * improved_ratio))
+    {
+      b[ind] = old_b;
+      lasti  = ind;
+      thresholds[lasti]--;
+      consecutive_fails++;
+    }
+    else
+    {
+      // cerr << " improved from " << old_cf << " to  " << new_cf << endl;
+      if (slices[ind] < 1024)
+        slices[ind] = slices[ind] * 1.05;
+      consecutive_fails = 0;
+    }
+
+    // quit after 10 consecutive failes
+    if (consecutive_fails > 10)
+    {
+      break;
+    }
+  }
+
+#ifdef DEBUG_PRUNER_OPTIMIZE_TC
+  cerr << "# [TuningCost]" << endl;
+  cerr << b << endl;
+  cerr << "# [TuningCost] all_enum_cost    = " << repeated_enum_cost(b) << endl;
+  cerr << "# [TuningCost] succ_probability = " << measure_metric(b) << endl;
+#endif
+
+  save_coefficients(pr, b);
+}
+
+/**
+ * Tuning of pruning coefficients: try to increase prob by increasing
+ * those coefficients b[i] inversely-weighted by their level cost.
+ */
+template <class FT>
+void Pruner<FT>::optimize_coefficients_local_adjust_incr_prob(/*io*/ vector<double> &pr)
+{
+  int trials, tours, maxi, ind;
+  FT old_cf, old_cf0, old_cfs, new_cf, old_b;
+  double current_max;
+  vector<double> detailed_cost(n);
+  vector<double> slices(n, 10.0);  // (b[i+1] - b[i])/slice will be used as step
+  vec b(n);
+  load_coefficients(b, pr);
+
+  // initial cost
+  old_cf0 = target_function(b);
+
+  tours = 0;
+  while (1)
+  {
+
+    tours++;
+
+    // old cost
+    old_cf = target_function(b);
+    // find bottleneck index
+    old_cfs     = single_enum_cost(b, &(detailed_cost));
+    current_max = 0.0;
+    maxi        = 0;
+    for (int i = 0; i < n; i++)
+    {
+      if (detailed_cost[i] > current_max)
+      {
+        current_max = detailed_cost[i];
+        maxi        = i;
+      }
+    }
+    ind = n - maxi - 1;
+    if (ind <= 1)
+      break;
+
+#ifdef BALANCE_HEURISTIC_PRUNER_OPTIMIZE
+    if (old_cfs > sqrt(old_cf) / 10.0)
+      break;
+#endif
+
+    for (int i = ind; i >= 1; --i)
+    {
+
+      if (b[i] <= b[i - 1])
+        continue;
+
+      trials = 0;
+
+      // fixed i-1, trying to increase b[i-1]
+      while (1)
+      {
+        // old cost
+        old_cf = target_function(b);
+
+        // try increase
+        old_b    = b[i - 1];
+        b[i - 1] = b[i - 1] + (b[i] - b[i - 1]) / slices[i - 1];
+
+        // new cost
+        new_cf = target_function(b);
+
+        // cerr << " i = " << i << " old_cf = " << old_cf << " new_cf = " <<
+        // new_cf << endl;
+
+        // if not improved -- recover
+        if (new_cf >= (old_cf * 1.2))
+        {
+          b[i - 1] = old_b;
+          break;
+        }
+        else
+        {
+          if (slices[i - 1] < 1024)
+            slices[i - 1] = slices[i - 1] * 1.2;
+        }
+        trials++;
+        if (trials >= 10)
+          break;
+      }
+    }
+
+    new_cf = target_function(b);
+    if (new_cf > (old_cf0 * 1.1) || tours > 4)
+      break;
+  }
+
+#ifdef DEBUG_PRUNER_OPTIMIZE_TC
+  cerr << "# [TuningProb]" << endl;
+  cerr << b << endl;
+  cerr << "# [TuningProb] all_enum_cost    = " << repeated_enum_cost(b) << endl;
+  cerr << "# [TuningProb] succ_probability = " << measure_metric(b) << endl;
+#endif
+
+  save_coefficients(pr, b);
+}
+
+/**
+ * try to smooth the curve if there are obvious discountinuties between
+ * consecutive indices
+ */
+template <class FT>
+void Pruner<FT>::optimize_coefficients_local_adjust_smooth(/*io*/ vector<double> &pr)
+{
+  vec b(n);
+  FT lr, rr;
+  FT th = 1.0 / n;
+  load_coefficients(b, pr);
+
+  for (int i = 1; i < n - 1; ++i)
+  {
+
+    lr = b[i] / b[i - 1];
+    rr = b[i + 1] / b[i];
+
+    if ((rr / lr > 1.25) || (rr / lr < 0.8))
+    {
+      b[i] = sqrt(b[i - 1] * b[i + 1]);
+    }
+
+    if ((b[i + 1] - b[i]) > th || (b[i] - b[i - 1]) > th)
+    {
+      b[i] = (b[i - 1] + b[i + 1]) / 2.0;
+    }
+  }
+
+  save_coefficients(pr, b);
+}
+
+/**
+ * Optimize b with the greedy method
+ */
+template <class FT> void Pruner<FT>::greedy(evec &b)
+{
+  // Do not call enforce in this function, as min_pruning_bounds may not have been set
+  // Indeed, the min_pruning_bound should now based on greedy.
+  if (!shape_loaded)
+  {
+    throw std::invalid_argument("Error: No basis shape was loaded");
+  }
+
+  fill(min_pruning_coefficients.begin(), min_pruning_coefficients.end(), 0.);
+
+  b.resize(d);
+  fill(b.begin(), b.end(), 1.);
+  evec new_b(d);
+  FT nodes;
+
+  for (int j = 1; j < 2 * d - 1; j += 2)
+  {
+    int i = j / 2;
+    if (i > 1)
+    {
+      b[i] = b[i - 1] > .9 ? 1 : 1.1 * b[i - 1];
+    }
+    double goal_factor =
+        1. / (3. * n) +
+        4 * j * (n - j) / (n * n * n);  // Make the tree width as a parabola, with maximum at n/2
+    nodes = 1. + 1e10 * preproc_cost;
+
+    while ((nodes > goal_factor * preproc_cost) & (b[i] > .001))
+    {
+      b[i] *= .98;
+      for (int k = 0; k < i; ++k)
+      {
+        b[k] = b[k] < b[i] ? b[k] : b[i];  // Enforcing decreasing by hand
+      }
+      nodes = relative_volume((j + 1) / 2, b);
+      nodes *= tabulated_ball_vol[j + 1];
+      nodes *= pow_si(normalized_radius * sqrt(b[i]), j + 1);
+      nodes *= ipv[j];
+      nodes *= symmetry_factor;
+    }
+  }
+}
+
+/**
+ * Optimize b with the gradient descent
+ */
+template <class FT> int Pruner<FT>::gradient_descent(/*io*/ vec &b)
+{
+
+  FT old_epsilon  = epsilon;
+  FT old_min_step = min_step;
+  int trials      = 0;
+
+  while (1)
+  {
+    int ret = gradient_descent_step(b);
+    if (ret == 0)
+      break;
+    else if (ret < 0)
+    {
+      epsilon  = epsilon * 0.9;
+      min_step = min_step * 0.9;
+      trials++;
+      if (trials >= 5)
+        break;
+    }
+    else
+    {
+      trials--;
+      continue;
+    }
+  }
+
+  epsilon  = old_epsilon;
+  min_step = old_min_step;
+  return 0;
+}
+
+/**
+ * One gradient descent step
+ */
+template <class FT> int Pruner<FT>::gradient_descent_step(/*io*/ vec &b)
+{
+  int dn    = b.size();
+  FT cf     = target_function(b);
+  FT old_cf = cf;
+  vec new_b(dn);
+  vector<double> pr(dn);
+  vec gradient(dn);
+  target_function_gradient(b, gradient);
+  FT norm = 0.0;
+
+  // normalize the gradient
+  for (int i = 0; i < dn; ++i)
+  {
+    norm += gradient[i] * gradient[i];
+    new_b[i] = b[i];
+  }
+
+  if (verbosity)
+  {
+    cerr << "  Gradient descent step starts at cf=" << cf << endl;
+  }
+
+  norm /= (double)dn;
+  norm = sqrt(norm);
+
+  if (verbosity)
+  {
+    cerr << "  Gradient norm " << norm << endl;
+  }
+
+  if (norm <= 0.)
+    return 0;
+
+  for (int i = 0; i < dn; ++i)
+  {
+    gradient[i] /= norm;
+  }
+  FT new_cf;
+
+  FT step = min_step;
+  int j;
+
+  for (j = 0;; ++j)
+  {
+    if (step > dn)
+    {
+      return -1;
+      // throw std::runtime_error("Infinite loop in pruner gradient_descent_step");
+    }
+
+    for (int i = 0; i < dn; ++i)
+    {
+      new_b[i] = new_b[i] + step * gradient[i];
+    }
+
+    enforce(new_b);
+
+    new_cf = target_function(new_b);
+
+    if (new_cf >= cf)
+    {
+      break;
+    }
+    b  = new_b;
+    cf = new_cf;
+    step *= step_factor;
+  }
+
+  if (verbosity)
+  {
+    cerr << "  Gradient descent step ends after " << j << " mini-steps at cf=" << cf << endl;
+  }
+
+  if (cf > old_cf * min_cf_decrease)
+  {
+    return 0;
+  }
+  return j;
+}
+
+/**
+ * Optimize b with Nelder-Mead method. Following the notation of
+ *    https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method
+ */
+#define ND_ALPHA 1
+#define ND_GAMMA 2
+#define ND_RHO 0.5
+#define ND_SIGMA 0.5
+#define ND_INIT_WIDTH 0.01
+
+template <class FT> int Pruner<FT>::nelder_mead_step(/*io*/ vec &b)
+{
+  int dn = b.size();
+  int l  = dn + 1;
+  evec tmp_constructor(dn);
+  vector<evec> bs(l);  // The simplexe (d+1) vector of dim d
+  FT *fs = new FT[l];  // Values of f at the simplex vertices
+
+  for (int i = 0; i < l; ++i)  // Intialize the simplex
+  {
+    bs[i] = b;  // Start from b
+    if (i < dn)
+    {
+      bs[i][i] += (bs[i][i] < .5) ? ND_INIT_WIDTH : -ND_INIT_WIDTH;
+    }
+    enforce(bs[i]);
+    fs[i] = target_function(bs[i]);  // initialize the value
+  }
+
+  FT init_cf = fs[l - 1];
+
+  vec bo(dn);  // centeroid
+  FT fo;       // value at the centroid
+
+  FT fs_maxi_last = fs[0];  // value of the last centroid
+
+  if (verbosity)
+  {
+    cerr << "  Starting nelder_mead cf = " << init_cf << " proba = " << measure_metric(b) << endl;
+  }
+  unsigned int counter = 0;
+  int mini = 0, maxi = 0, maxi2 = 0;
+  while (1)  // Main loop
+  {
+    mini = maxi = maxi2 = 0;
+    for (int i = 0; i < dn; ++i)
+      bo[i] = bs[0][i];
+    ////////////////
+    // step 1. and 2. : Order and centroid
+    ////////////////
+    for (int i = 1; i < l; ++i)  // determine min and max, and centroid
+    {
+      mini = (fs[i] < fs[mini]) ? i : mini;
+      maxi = (fs[i] > fs[mini]) ? i : maxi;
+      for (int j = 0; j < dn; ++j)
+      {
+        bo[j] += bs[i][j];
+      }
+    }
+    FT tmp;
+    tmp = l;
+    for (int i = 0; i < dn; ++i)
+      bo[i] /= tmp;  // Centroid calculated
+
+    fs_maxi_last = (!counter) ? fs[maxi] : fs_maxi_last;
+
+    // determine min and max, and centroid
+    maxi2 += (!maxi);
+    for (int i = 1; i < l; ++i)
+    {
+      maxi2 = ((fs[i] > fs[maxi2]) && (i != maxi)) ? i : maxi2;
+    }
+
+    if (enforce(bo))  // Maybe want to skip this test, that may be kinda costly.
+    {
+      throw std::runtime_error("Concavity says that should not happen.");
+    }
+
+    if (verbosity)  // Not sure such verbosity is now of any use
+    {
+      cerr << "  melder_mead step " << counter << "cf = " << fs[mini]
+           << " proba = " << measure_metric(bs[mini]) << " cost = " << single_enum_cost(bs[mini])
+           << endl;
+      for (int i = 0; i < dn; ++i)
+      {
+        cerr << ceil(bs[mini][i].get_d() * 1000) << " ";
+      }
+      cerr << endl;
+    }
+
+    ////////////////
+    // Stopping condition (Not documented on wikipedia, improvising)
+    // I'm not satistifed by it anymore. Exploration needed.
+    ////////////////
+
+    counter++;
+    if (!(counter % l))  // Every l steps, we check progress and stop if none is done
+    {
+      if (fs[maxi] > fs_maxi_last * min_cf_decrease)
+      {
+        break;
+      }
+      fs_maxi_last = fs[maxi];
+    }
+
+    for (int i = 0; i < l; ++i)  // determine second best
+    {
+      if ((fs[i] > fs[maxi2]) && (i != maxi))
+        maxi2 = i;
+    }
+
+    if (verbosity)
+    {
+      cerr << mini << " " << maxi2 << " " << maxi << endl;
+      cerr << fs[mini] << " < " << fs[maxi2] << " < " << fs[maxi] << " | " << endl;
+    }
+
+    ////////////////
+    // step 3. Reflection
+    ////////////////
+
+    vec br(dn);  // reflected point
+    FT fr;       // Value at the reflexion point
+    for (int i = 0; i < dn; ++i)
+      br[i] = bo[i] + ND_ALPHA * (bo[i] - bs[maxi][i]);
+    enforce(br);
+    fr = target_function(br);
+    if (verbosity)
+    {
+      cerr << "fr " << fr << endl;
+    }
+
+    if ((fs[mini] <= fr) && (fr < fs[maxi2]))
+    {
+      bs[maxi] = br;
+      fs[maxi] = fr;
+      if (verbosity)
+      {
+        cerr << "    Reflection " << endl;
+      }
+      continue;  // Go to step 1.
+    }
+
+    ////////////////
+    // step 4. Expansion
+    ////////////////
+
+    if (fr < fs[mini])
+    {
+      vec be(dn);
+      FT fe;
+      for (int i = 0; i < dn; ++i)
+        be[i] = bo[i] + ND_GAMMA * (br[i] - bo[i]);
+      enforce(be);
+      fe = target_function(be);
+      if (verbosity)
+      {
+        cerr << "fe " << fe << endl;
+      }
+      if (fe < fr)
+      {
+        bs[maxi] = be;
+        fs[maxi] = fe;
+        if (verbosity)
+        {
+          cerr << "    Expansion A " << endl;
+        }
+        continue;  // Go to step 1.
+      }
+      else
+      {
+        bs[maxi] = br;
+        fs[maxi] = fr;
+        if (verbosity)
+        {
+          cerr << "    Expansion B " << endl;
+        }
+        continue;  // Go to step 1.
+      }
+    }
+
+    ////////////////
+    // step 5. Contraction
+    ////////////////
+
+    if (!(fr >= fs[maxi2]))  // Here, it is certain that fr >= fs[maxi2]
+    {
+      throw std::runtime_error("Something certain is false in Nelder-Mead.");
+    }
+
+    vec bc(dn);
+    FT fc;
+    for (int i = 0; i < dn; ++i)
+      bc[i] = bo[i] + ND_RHO * (bs[maxi][i] - bo[i]);
+    enforce(bc);
+    fc = target_function(bc);
+    if (verbosity)
+    {
+      cerr << "fc " << fc << endl;
+    }
+    if (fc < fs[maxi])
+    {
+      bs[maxi] = bc;
+      fs[maxi] = fc;
+      if (verbosity)
+      {
+        cerr << "    Contraction " << endl;
+      }
+      continue;  // Go to step 1.
+    }
+
+    ////////////////
+    // step 6. Shrink
+    ////////////////
+    if (verbosity)
+    {
+      cerr << "    Shrink " << endl;
+    }
+    for (int j = 0; j < l; ++j)
+    {
+      for (int i = 0; i < dn; ++i)
+      {
+        bs[j][i] = bs[mini][i] + ND_SIGMA * (bs[j][i] - bs[mini][i]);
+      }
+      enforce(bs[j]);
+      fs[j] = target_function(bs[j]);  // initialize the value
+    }
+  }
+
+  b            = bs[mini];
+  int improved = (init_cf * min_cf_decrease) > fs[mini];
+
+  if (verbosity)
+  {
+    cerr << "Done nelder_mead, after " << counter << " steps" << endl;
+    cerr << "Final cf = " << fs[mini] << " proba = " << measure_metric(b) << endl;
+    if (improved)
+    {
+      cerr << "Progress has been made: init cf = " << init_cf << endl;
+    }
+    cerr << endl;
+  }
+
+  return improved;  // Has MN made any progress
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/pruner/pruner_optimize_tp.cpp b/fplll/pruner/pruner_optimize_tp.cpp
new file mode 100644 (file)
index 0000000..e5262f7
--- /dev/null
@@ -0,0 +1,205 @@
+#include "fplll.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+#define OPTIMIZE_PROB_MINSTEP 1e-4
+#define OPTIMIZE_PROB_MAXSTEP 1e4
+
+template <class FT> void Pruner<FT>::optimize_coefficients_incr_prob(/*io*/ vector<double> &pr)
+{
+  int dn = pr.size();
+  int tours;
+  double normalized;
+  FT old_c0, old_c1, old_prob, old_cfs;
+  vec b(dn), old_b(dn), old_b2(dn);
+  vector<double> detailed_cost(dn);
+  vector<double> weight(dn);
+  bool not_changed;
+
+  load_coefficients(b, pr);
+
+  // incr b until achieve target or quit if too much or quite if impossible
+  tours = 0;
+  while (1)
+  {
+    if (tours > OPTIMIZE_PROB_MAXSTEP)
+      break;
+    tours++;
+
+    old_prob = measure_metric(b);
+    if (old_prob >= target)
+      break;
+
+    old_cfs    = single_enum_cost(b, &(detailed_cost));
+    normalized = 0.0;
+    for (int i = 0; i < dn; i++)
+    {
+      weight[i] = 0.0;
+      for (int j = i; j < dn; j++)
+      {
+        weight[i] = weight[i] + detailed_cost[j];
+      }
+      weight[i] = 1.0 / weight[i];
+      if (weight[i] < OPTIMIZE_PROB_MINSTEP)
+        weight[i] = OPTIMIZE_PROB_MINSTEP;
+      normalized += weight[i];
+    }
+    for (int i = 0; i < dn; i++)
+    {
+      weight[i] = weight[i] / normalized;
+    }
+    for (int i = dn - 1; i >= 0; --i)
+    {
+      old_b[i] = b[i];
+      b[i]     = b[i] + weight[i];
+      if (b[i] >= 1.0)
+        b[i] = 1.0;
+    }
+
+    enforce(b);
+
+    not_changed = true;
+    for (int i = dn - 1; i >= 0; --i)
+    {
+      if (b[i] != old_b[i])
+        not_changed = false;
+    }
+    if (not_changed)
+      break;
+  }
+
+  save_coefficients(pr, b);
+}
+
+template <class FT> void Pruner<FT>::optimize_coefficients_decr_prob(/*io*/ vector<double> &pr)
+{
+  int dn = pr.size();
+  int tours;
+  double normalized;
+  FT old_c0, old_c1, old_prob, old_cfs;
+  vec b(dn), old_b(dn), old_b2(dn);
+  vector<double> detailed_cost(dn);
+  vector<double> weight(dn);
+  bool not_changed;
+
+  load_coefficients(b, pr);
+  // decr b until achieve target
+  tours = 0;
+  while (1)
+  {
+    if (tours > OPTIMIZE_PROB_MAXSTEP)
+      break;
+    tours++;
+
+    old_prob = measure_metric(b);
+    if (old_prob <= target)
+      break;
+
+    old_cfs    = single_enum_cost(b, &(detailed_cost));
+    normalized = 0.0;
+    for (int i = 0; i < dn; i++)
+    {
+      weight[i] = 0.0;
+      for (int j = i; j < dn; j++)
+      {
+        weight[i] = weight[i] + detailed_cost[j];
+      }
+      weight[i] = 1.0 / weight[i];
+      if (weight[i] < OPTIMIZE_PROB_MINSTEP)
+        weight[i] = OPTIMIZE_PROB_MINSTEP;
+      normalized += weight[i];
+    }
+    for (int i = 0; i < dn; i++)
+    {
+      weight[i] = weight[i] / normalized;
+      // cout << weight[i] << " ";
+    }
+
+    for (int i = dn - 1; i >= 0; --i)
+    {
+      old_b[i] = b[i];
+      b[i]     = b[i] - weight[i];
+      if (b[i] < OPTIMIZE_PROB_MINSTEP)
+        b[i] = OPTIMIZE_PROB_MINSTEP;
+    }
+
+    enforce(b);
+
+    not_changed = true;
+    for (int i = dn - 1; i >= 0; --i)
+    {
+      if (b[i] != old_b[i])
+        not_changed = false;
+    }
+    if (not_changed)
+    {
+      break;
+    }
+  }
+  save_coefficients(pr, b);
+}
+
+template <class FT>
+void Pruner<FT>::optimize_coefficients_local_adjust_prob(/*io*/ vector<double> &pr)
+{
+  int dn = pr.size();
+  int tours;
+  FT prob, ratio;
+  vec b(dn), old_b(dn), old_b2(dn);
+  vector<double> detailed_cost(dn);
+  vector<double> weight(dn);
+  bool not_changed;
+
+  load_coefficients(b, pr);
+
+  // incr b until achieve target
+  tours = 0;
+  while (1)
+  {
+    tours++;
+
+    prob  = measure_metric(b);
+    ratio = prob / target;
+
+    // good enough
+    if (ratio < 1.05 && ratio > 0.95)
+      break;
+
+    // tune
+    if (ratio < 1)
+    {
+      for (int i = dn - 1; i >= 0; --i)
+      {
+        old_b[i] = b[i];
+        b[i]     = b[i] + OPTIMIZE_PROB_MINSTEP;
+        if (b[i] >= 1.0)
+          b[i] = 1.0;
+      }
+    }
+    else
+    {
+      for (int i = dn - 1; i >= 0; --i)
+      {
+        old_b[i] = b[i];
+        b[i]     = b[i] - OPTIMIZE_PROB_MINSTEP;
+        if (b[i] < OPTIMIZE_PROB_MINSTEP)
+          b[i] = OPTIMIZE_PROB_MINSTEP;
+      }
+    }
+
+    enforce(b);
+
+    not_changed = true;
+    for (int i = dn - 1; i >= 0; --i)
+    {
+      if (b[i] != old_b[i])
+        not_changed = false;
+    }
+    if (not_changed)
+      break;
+  }
+
+  save_coefficients(pr, b);
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/pruner/pruner_prob.cpp b/fplll/pruner/pruner_prob.cpp
new file mode 100644 (file)
index 0000000..0addb30
--- /dev/null
@@ -0,0 +1,148 @@
+#include "fplll.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class FT> inline FT Pruner<FT>::svp_probability_evec(/*i*/ const evec &b)
+{
+  evec b_minus_db(d);
+  FT dx = shell_ratio;
+  for (int i = 0; i < d; ++i)
+  {
+    b_minus_db[i] = b[i] / (dx * dx);
+    if (b_minus_db[i] > 1)
+      b_minus_db[i] = 1;
+  }
+
+  FT vol  = relative_volume(d, b);
+  FT dxn  = pow_si(dx, 2 * d);
+  FT dvol = dxn * relative_volume(d, b_minus_db) - vol;
+  FT res  = dvol / (dxn - 1.);
+
+  if (!res.is_finite())
+  {
+    throw std::range_error("NaN or inf in svp_probability");
+  }
+  return res;
+}
+
+/**
+ * hopefully lower bound for bounding b
+ */
+template <class FT> FT Pruner<FT>::svp_probability_lower(/*i*/ const vec &b)
+{
+  evec b_lower(d);
+  for (int i = 0; i < d; ++i)
+  {
+    b_lower[i] = b[2 * i];
+  }
+  return svp_probability_evec(b_lower);
+}
+
+/**
+ * upper bound for bounding b
+ */
+template <class FT> FT Pruner<FT>::svp_probability_upper(/*i*/ const vec &b)
+{
+  evec b_upper(d);
+  for (int i = 0; i < d; ++i)
+  {
+    b_upper[i] = b[2 * i + 1];
+  }
+  return svp_probability_evec(b_upper);
+}
+
+/**
+ * upper estimate for bounding b
+ */
+template <class FT> inline FT Pruner<FT>::svp_probability(/*i*/ const vec &b)
+{
+  /*
+  if (!shape_loaded)
+  {
+    throw std::invalid_argument("No basis shape was loaded");
+  }
+  */
+  if (b.size() == (unsigned int)d)
+  {
+    return svp_probability_evec(b);
+  }
+  else
+  {
+    FT pl = svp_probability_lower(b);
+    FT pu = svp_probability_upper(b);
+    return (pl + pu) / 2.0;
+  }
+}
+
+template <class FT> inline FT Pruner<FT>::expected_solutions_evec(/*i*/ const evec &b)
+{
+  int j  = d * 2 - 1;
+  FT tmp = log(relative_volume(d, b));
+  tmp += log(tabulated_ball_vol[j + 1]);
+  tmp += (log(normalized_radius) + log(b[j / 2]) / 2.0) * (j + 1);
+  tmp += log(ipv[j]);
+  tmp += log(symmetry_factor);
+  tmp = exp(tmp);
+
+  if (!tmp.is_finite())
+  {
+    throw std::range_error("Error: NaN or inf in expected_solutions");
+  }
+  return tmp;
+}
+
+template <class FT> FT Pruner<FT>::expected_solutions_lower(/*i*/ const vec &b)
+{
+  evec b_lower(d);
+  for (int i = 0; i < d; ++i)
+  {
+    b_lower[i] = b[2 * i];
+  }
+  return expected_solutions_evec(b_lower);
+}
+
+template <class FT> FT Pruner<FT>::expected_solutions_upper(/*i*/ const vec &b)
+{
+  evec b_upper(d);
+  for (int i = 0; i < d; ++i)
+  {
+    b_upper[i] = b[2 * i + 1];
+  }
+  return expected_solutions_evec(b_upper);
+}
+
+template <class FT> inline FT Pruner<FT>::expected_solutions(/*i*/ const vec &b)
+{
+  if (!shape_loaded)
+  {
+    throw std::invalid_argument("No basis shape was loaded");
+  }
+  if (b.size() == (unsigned int)d)
+  {
+    return expected_solutions_evec(b);
+  }
+  else
+  {
+    FT pl = expected_solutions_lower(b);
+    FT pu = expected_solutions_upper(b);
+    return (pl + pu) / 2.0;
+  }
+}
+
+template <class FT> inline FT Pruner<FT>::measure_metric(/*i*/ const vec &b)
+{
+  if (metric == PRUNER_METRIC_PROBABILITY_OF_SHORTEST)
+  {
+    return svp_probability(b);
+  }
+  else if (metric == PRUNER_METRIC_EXPECTED_SOLUTIONS)
+  {
+    return expected_solutions(b);
+  }
+  else
+  {
+    throw std::invalid_argument("Pruner was set to an unknown metric");
+  }
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/pruner/pruner_simplex.h b/fplll/pruner/pruner_simplex.h
new file mode 100644 (file)
index 0000000..e1f57c3
--- /dev/null
@@ -0,0 +1,46 @@
+/**
+ *  Inline functions for computing the volume of even simplex (used in
+ *  pruner_prob.cpp and pruner_cost.cpp.
+ */
+template <class FT> inline FT Pruner<FT>::eval_poly(const int ld, /*i*/ const poly &p, const FT x)
+{
+  FT acc;
+  acc = 0.0;
+  for (int i = ld; i >= 0; --i)
+  {
+    acc = acc * x;
+    acc = acc + p[i];
+  }
+  return acc;
+}
+
+template <class FT> inline void Pruner<FT>::integrate_poly(const int ld, /*io*/ poly &p)
+{
+  for (int i = ld; i >= 0; --i)
+  {
+    FT tmp;
+    tmp      = i + 1.;
+    p[i + 1] = p[i] / tmp;
+  }
+  p[0] = 0.0;
+}
+
+/**
+ * volume of even simplex
+ */
+template <class FT>
+inline FT Pruner<FT>::relative_volume(const int rd,
+                                      /*i*/ const evec &b)
+{
+  poly P(rd + 1);
+  P[0]   = 1;
+  int ld = 0;
+  for (int i = rd - 1; i >= 0; --i)
+  {
+    integrate_poly(ld, P);
+    ld++;
+    P[0] = -1.0 * eval_poly(ld, P, b[i] / b[rd - 1]);
+  }
+  FT res = P[0] * tabulated_factorial[rd];
+  return (rd % 2) ? -res : res;
+}
diff --git a/fplll/pruner/pruner_util.cpp b/fplll/pruner/pruner_util.cpp
new file mode 100644 (file)
index 0000000..1a4d9d9
--- /dev/null
@@ -0,0 +1,141 @@
+#include "fplll.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+template <class FT> void Pruner<FT>::print_coefficients(const vector<double> &b)
+{
+  cout << "# b = ";
+  for (auto i = b.begin(); i != b.end(); ++i)
+    std::cout << *i << ' ';
+  cout << endl;
+}
+
+template <class FT> void Pruner<FT>::print_coefficients(const vec &b)
+{
+  cout << "# b = ";
+  for (auto i = b.begin(); i != b.end(); ++i)
+    std::cout << *i << ' ';
+  cout << endl;
+}
+
+/**
+    load gso
+ */
+template <class FT>
+void Pruner<FT>::load_basis_shape(const vector<double> &gso_r, bool reset_normalization)
+{
+  shape_loaded = true;
+  FT tmp;
+  logvol = 0.0;
+  r.resize(n);
+  ipv.resize(n);
+  r_old.resize(n);
+  for (int i = 0; i < n; ++i)
+  {
+    r[i]     = gso_r[n - 1 - i];
+    r_old[i] = gso_r[i];
+    logvol += log(r[i]);
+  }
+
+  // by default reset
+  if (reset_normalization)
+  {
+    /* just (1 / det^n)^2, the squared normalization factor */
+    normalization_factor = exp(logvol / ((float)(-n)));
+
+    /* re-normalise R = radius_d * (1 / sqr_det^n) */
+    normalized_radius = sqrt(enumeration_radius * normalization_factor);
+  }
+
+  // r[i] is normalized by (1 / det^n)^2
+  for (int i = 0; i < n; ++i)
+  {
+    r[i] *= normalization_factor;
+  }
+
+  tmp = 1.;
+  // hence ipv is also normalized where ipv[n-1] = 1
+  for (int i = 0; i < 2 * d; ++i)
+  {
+    tmp *= sqrt(r[i]);
+    ipv[i] = 1.0 / tmp;
+  }
+}
+
+template <class FT> void Pruner<FT>::load_basis_shapes(const vector<vector<double>> &gso_rs)
+{
+  n = gso_rs[0].size();
+  vec sum_ipv(n);
+
+  for (int i = 0; i < n; ++i)
+  {
+    sum_ipv[i] = 0.;
+  }
+  int count = gso_rs.size();
+  for (int k = 0; k < count; ++k)
+  {
+    if (gso_rs[k].size() != static_cast<size_t>(n))
+    {
+      throw std::runtime_error("loading several bases with different dimensions");
+    }
+    load_basis_shape(gso_rs[k], (k == 0));
+    for (int i = 0; i < n; ++i)
+    {
+      sum_ipv[i] += ipv[i];
+    }
+  }
+  for (int i = 0; i < n; ++i)
+  {
+    ipv[i] = sum_ipv[i] / (1.0 * count);
+  }
+}
+
+template <class FT> FT Pruner<FT>::gaussian_heuristic()
+{
+  return exp(2. * log(tabulated_ball_vol[n]) / ((float)-n)) / normalization_factor;
+}
+
+template <class FT>
+void Pruner<FT>::save_coefficients(/*o*/ vector<double> &pr, /*i*/ const evec &b)
+{
+  pr.resize(n);
+  int dn = b.size();
+  if (dn == d)
+  {
+    for (int i = 0; i < d; ++i)
+    {
+      pr[n - 1 - 2 * i] = b[i].get_d();
+      pr[n - 2 - 2 * i] = b[i].get_d();
+    }
+  }
+  else
+  {
+    for (int i = 0; i < n; ++i)
+    {
+      pr[n - 1 - i] = b[i].get_d();
+    }
+  }
+  pr[0] = 1.;
+}
+
+/**
+ *   load pruning coefficients
+ */
+template <class FT> void Pruner<FT>::load_coefficients(/*o*/ vec &b, /*i*/ const vector<double> &pr)
+{
+  int dn = b.size();
+  int c  = (dn == d) ? 2 : 1;
+  for (int i = 0; i < dn; ++i)
+  {
+    b[i] = pr[n - c * i - 1];
+  }
+  /*
+  if (enforce(b))
+  {
+    throw std::runtime_error(
+        "Ill formed pruning coefficients (must be decreasing, starting with two 1.0)");
+  }
+  */
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/sieve/sampler_basic.cpp b/fplll/sieve/sampler_basic.cpp
new file mode 100644 (file)
index 0000000..81c9270
--- /dev/null
@@ -0,0 +1,163 @@
+#include "sampler_basic.h"
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+/**************************
+ *  class KleinSampler
+ **************************/
+
+template <class ZT, class F> KleinSampler<ZT, F>::KleinSampler(ZZ_mat<ZT> &B, bool ver, int seed)
+{
+  /* set dimensions */
+  b  = B;
+  nr = b.get_rows();
+  nc = b.get_cols();
+  // t = log(nr);
+  t     = 2;
+  logn2 = log(nr) * log(nr);
+
+  /* gso, flag 1 to have g matrix valid */
+  pGSO = new MatGSO<Z_NR<ZT>, F>(b, u, u_inv, 1);
+
+  pGSO->update_gso();
+  mu = pGSO->get_mu_matrix();
+  r  = pGSO->get_r_matrix();
+  g  = pGSO->get_g_matrix();
+
+  /* compute variances for sampling */
+  maxbistar2 = pGSO->get_max_bstar();
+
+  s2.mul_d(maxbistar2, logn2, GMP_RNDN);
+  s_prime = new NumVect<F>(nr);
+
+  F tmp;
+  for (int i = 0; i < nr; i++)
+  {
+    tmp.set_z(g(i, i));
+    ((*s_prime)[i]).div(maxbistar2, tmp);
+    ((*s_prime)[i]).sqrt((*s_prime)[i], GMP_RNDN);
+  }
+
+  /* verbose */
+  srand(seed);
+  set_verbose(ver);
+  print_param();
+}
+
+template <class ZT, class F> KleinSampler<ZT, F>::~KleinSampler()
+{
+  delete pGSO;
+  delete s_prime;
+}
+
+/**
+ * set verbose
+ */
+template <class ZT, class F> void KleinSampler<ZT, F>::set_verbose(bool ver) { verbose = ver; }
+
+template <class ZT, class F> void KleinSampler<ZT, F>::print_param()
+{
+  if (verbose)
+  {
+    cout << "# [info] nc = " << nc << endl;
+    cout << "# [info] nr = " << nr << endl;
+    cout << "# [info] t = log(nr) = " << t << endl;
+    cout << "# [info] maxbistar2 = " << maxbistar2 << endl;
+  }
+}
+
+/**
+ * sampling Z by rejection sampling
+ */
+template <class ZT, class F> Z_NR<ZT> KleinSampler<ZT, F>::sample_z_basic(F c, F s)
+{
+  F min, max, st, range, tmp, tmp1;
+  double r, e;
+
+  /* (c \pm s*t) for t \approx logn */
+  st = s;
+  st.mul(st, t, GMP_RNDN);
+  min.sub(c, st, GMP_RNDN);
+  max.add(c, st, GMP_RNDN);
+  min.rnd(min);
+  max.rnd(max);
+  range.sub(max, min, GMP_RNDN);
+
+  Z_NR<ZT> x;
+  while (1)
+  {
+    r = double(rand()) / RAND_MAX;
+    tmp.mul_d(range, r, GMP_RNDN);
+    tmp.rnd(tmp);
+    tmp.add(tmp, min, GMP_RNDN);
+    x.set_f(tmp);
+    tmp1.sub(tmp, c, GMP_RNDN);
+    tmp1.mul(tmp1, tmp1, GMP_RNDN);
+    tmp1.mul_d(tmp1, -M_PI, GMP_RNDN);
+    tmp.mul(s, s, GMP_RNDN);
+    tmp1.div(tmp1, tmp, GMP_RNDN);
+    e = tmp1.get_d(GMP_RNDN);
+    r = exp(e);
+    if ((double(rand()) / RAND_MAX) <= r)
+      return x;
+  }
+}
+
+/**
+ * support three modes:
+ *   long, double
+ *   mpz_t, double
+ *   mpz_t, mpfr_t
+ */
+template <class ZT, class F> Z_NR<ZT> KleinSampler<ZT, F>::sample_z(F c, F s)
+{
+  return sample_z_basic(c, s);
+}
+
+template <class ZT, class F> NumVect<Z_NR<ZT>> KleinSampler<ZT, F>::sample()
+{
+  NumVect<Z_NR<ZT>> vec(nc);
+  NumVect<F> ci(nc);
+  F tmp;
+  Z_NR<ZT> tmpz;
+
+  for (int i = 0; i < nc; i++)
+    vec[i] = 0.0;
+  for (int i = 0; i < nr; i++)
+    ci[i] = 0.0;
+
+  for (int i = nr - 1; i >= 0; i--)
+  {
+    tmpz = sample_z(ci[i], (*s_prime)[i]);
+    (ci[i]).set_z(tmpz);
+    for (int j = 0; j < i; j++)
+    {
+      tmp.mul(ci[i], mu(i, j), GMP_RNDN);
+      (ci[j]).sub(ci[j], tmp, GMP_RNDN);
+    }
+  }
+
+  // lp->norm = 0;
+  for (int i = 0; i < nc; i++)
+  {
+    for (int j = 0; j < nr; j++)
+    {
+      tmpz.set_f(ci[j]);
+      tmpz.mul(tmpz, b(j, i));
+      (vec[i]).add(vec[i], tmpz);
+    }
+    // lp->norm += lp->v[i] * lp->v[i];
+  }
+  return vec;
+}
+
+template class KleinSampler<long, FP_NR<double>>;
+template class KleinSampler<mpz_t, FP_NR<double>>;
+#ifdef FPLLL_WITH_QD
+template class KleinSampler<long, FP_NR<dd_real>>;
+template class KleinSampler<mpz_t, FP_NR<dd_real>>;
+#endif
+template class KleinSampler<long, FP_NR<mpfr_t>>;
+template class KleinSampler<mpz_t, FP_NR<mpfr_t>>;
diff --git a/fplll/sieve/sampler_basic.h b/fplll/sieve/sampler_basic.h
new file mode 100644 (file)
index 0000000..c803494
--- /dev/null
@@ -0,0 +1,95 @@
+/* "Trapdoors for Hard Lattices and New Cryptographic Constructions"
+   Craig Gentry, Chris Peikert, Vinod Vaikuntanathan */
+
+#ifndef FPLLL_SIEVE_SAMPLER_BASIC_H
+#define FPLLL_SIEVE_SAMPLER_BASIC_H
+
+#include "fplll/defs.h"
+#include "fplll/gso.h"
+#include "fplll/nr/matrix.h"
+#include "fplll/nr/nr_Z.inl"
+
+using namespace std;
+using namespace fplll;
+
+template <class ZT, class F> class KleinSampler
+{
+
+public:
+  bool verbose;
+
+  KleinSampler(ZZ_mat<ZT> &B, bool verbose, int seed);
+  ~KleinSampler();
+  void print_param();
+  Z_NR<ZT> sample_z(F c, F s);
+  Z_NR<ZT> sample_z_basic(F c, F s);
+  void set_verbose(bool verbose);
+
+  NumVect<Z_NR<ZT>> sample();
+
+private:
+  /**
+   * GSO object of B
+   */
+  int nr, nc;
+  double logn2;
+  ZZ_mat<ZT> b, u, u_inv;
+  MatGSO<Z_NR<ZT>, F> *pGSO;
+  Matrix<Z_NR<ZT>> g;
+  Matrix<F> mu, r;
+
+  /* input parameter s */
+  F maxbistar2;
+
+  /* input parameter s */
+  F s2;
+
+  /* input parameter s */
+  F c;
+
+  /* ratio t = logn */
+  F t;
+
+  /* variances */
+  NumVect<F> *s_prime;
+};
+
+/**
+ * sampling Z by rejection sampling (not a class member)
+ */
+template <class ZT, class F> Z_NR<ZT> sample_z_basic_alt(F c, F s)
+{
+  F min, max, st, range, tmp, tmp1;
+  double r, e;
+
+  /* (c \pm s*t) for t \approx logn */
+  st = s;
+  F t;
+  t = 2.0;
+  st.mul(st, t, GMP_RNDN);
+  min.sub(c, st, GMP_RNDN);
+  max.add(c, st, GMP_RNDN);
+  min.rnd(min);
+  max.rnd(max);
+  range.sub(max, min, GMP_RNDN);
+  Z_NR<ZT> x;
+  while (1)
+  {
+    r = double(rand()) / RAND_MAX;
+    tmp.mul_d(range, r, GMP_RNDN);
+    tmp.rnd(tmp);
+    tmp.add(tmp, min, GMP_RNDN);
+    x.set_f(tmp);
+    tmp1.sub(tmp, c, GMP_RNDN);
+    tmp1.mul(tmp1, tmp1, GMP_RNDN);
+    tmp1.mul_d(tmp1, -M_PI, GMP_RNDN);
+    tmp.mul(s, s, GMP_RNDN);
+    tmp1.div(tmp1, tmp, GMP_RNDN);
+    e = tmp1.get_d(GMP_RNDN);
+    r = exp(e);
+    if ((double(rand()) / RAND_MAX) <= r)
+      return x;
+  }
+}
+
+#endif
diff --git a/fplll/sieve/sampler_main.cpp b/fplll/sieve/sampler_main.cpp
new file mode 100644 (file)
index 0000000..be9bbc8
--- /dev/null
@@ -0,0 +1,108 @@
+#include "sampler_basic.h"
+
+int main()
+{
+  srand(time(NULL));
+  int dim = 40;
+
+#if 1
+  /* long matrix, double */
+  ZZ_mat<mpz_t> M1_Z(dim, dim);
+  M1_Z.gen_GM(20 * dim);
+  lllReduction(M1_Z, 0.99, 0.51, LM_WRAPPER);
+  ZZ_mat<long> M1(dim, dim);
+  for (int i = 0; i < dim; i++)
+    for (int j = 0; j < dim; j++)
+      M1(i, j) = M1_Z(i, j).get_si();
+  FP_NR<double> c, t;
+  Z_NR<long> x1;
+  long flag = 0;
+  c         = 0.0;
+  t         = 1000.0;
+  KleinSampler<long, FP_NR<double>> S1(M1);
+
+  /* sample Z */
+  for (int i = 0; i < 1000; i++)
+  {
+    x1 = S1.sample_z_dgs(c, t, flag);
+    // cout << x1 << endl;
+  }
+  cout << "# [done] (long, double) sample_z_dgs()" << endl;
+
+  /* sample vec */
+  NumVect<Z_NR<long>> vec;
+  clock_t stime = clock();
+  for (int i = 0; i < 10000; i++)
+  {
+    vec = S1.sample();
+    // cout << (vec) << endl;
+  }
+  cout << "# [done] (long, double) sample()" << endl;
+  clock_t etime = clock();
+  double secs   = (etime - stime) / (double)CLOCKS_PER_SEC;
+  cout << "# [info] (long double) took time " << secs << " s" << endl;
+#endif
+
+#if 1
+  /* mpz_t matrix, double */
+  ZZ_mat<mpz_t> M2(dim, dim);
+  M2.gen_GM(20 * dim);
+  lllReduction(M2, 0.99, 0.51, LM_WRAPPER);
+  Z_NR<mpz_t> x2;
+  KleinSampler<mpz_t, FP_NR<double>> S2(M2);
+
+  /* sample Z */
+  for (int i = 0; i < 1000; i++)
+  {
+    x2 = S2.sample_z(c, t);
+    // cout << x2 << endl;
+  }
+  cout << "# [done] (mpz_t, double) sample_z_basic()" << endl;
+
+  /* sample vec */
+  NumVect<Z_NR<mpz_t>> vec2;
+  stime = clock();
+  for (int i = 0; i < 10000; i++)
+  {
+    vec2 = S2.sample();
+    // cout << (vec2) << endl;
+  }
+  cout << "# [done] (mpz_t, double) sample()" << endl;
+  etime = clock();
+  secs  = (etime - stime) / (double)CLOCKS_PER_SEC;
+  cout << "# [info] (mpz_t, double) took time " << secs << " s" << endl;
+#endif
+
+#if 1
+  /* mpz_t matrix, mpfr */
+  ZZ_mat<mpz_t> M3(dim, dim);
+  M3.gen_GM(20 * dim);
+  lllReduction(M3, 0.99, 0.51, LM_WRAPPER);
+  Z_NR<mpz_t> x3;
+  KleinSampler<mpz_t, FP_NR<mpfr_t>> S3(M3);
+  FP_NR<mpfr_t> c2, t2;
+  c2 = 0.0;
+  t2 = 1000.0;
+
+  /* sample Z */
+  for (int i = 0; i < 1000; i++)
+  {
+    x3 = S3.sample_z(c2, t2);
+  }
+  cout << "# [done] (mpz_t, mpfr_t) sample_z_dgs()" << endl;
+
+  /* sample vec */
+  NumVect<Z_NR<mpz_t>> vec3;
+  stime = clock();
+  for (int i = 0; i < 10000; i++)
+  {
+    vec3 = S3.sample();
+  }
+  cout << "# [done] (mpz_t, mpfr_t) sample()" << endl;
+  etime = clock();
+  secs  = (etime - stime) / (double)CLOCKS_PER_SEC;
+  cout << "# [info] (mpz_t, mpfr_t) took time " << secs << " s" << endl;
+#endif
+
+  return 0;
+}
diff --git a/fplll/sieve/sieve_common.h b/fplll/sieve/sieve_common.h
new file mode 100644 (file)
index 0000000..e23cf93
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef FPLLL_SIEVE_COMMON_H
+#define FPLLL_SIEVE_COMMON_H
+
+#include <iostream>
+#include <list>
+#include <math.h>
+#include <queue>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "../defs.h"
+#include "sampler_basic.h"
+#include "sieve_gauss_str.h"
+
+using namespace std;
+using namespace fplll;
+
+#endif
diff --git a/fplll/sieve/sieve_gauss.cpp b/fplll/sieve/sieve_gauss.cpp
new file mode 100644 (file)
index 0000000..7dccf23
--- /dev/null
@@ -0,0 +1,328 @@
+
+/*
+  test small svp challenges
+  --------------------------------------
+  dim  seed  norm current_status  time
+  --------------------------------------
+  40    0    1702.46439022965    ok
+  50    0    1893.16982862077    ok
+  60    0    1943.40088504662    ok
+ */
+
+#include "sieve_gauss.h"
+#include "sieve_gauss_2sieve.cpp"
+#include "sieve_gauss_3sieve.cpp"
+#include "sieve_gauss_4sieve.cpp"
+#include "wrapper.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+#define REDUCE_TIMING
+
+/**
+ * constructor
+ */
+template <class ZT, class F>
+GaussSieve<ZT, F>::GaussSieve(ZZ_mat<ZT> &B, int alg_arg, bool ver, int seed)
+{
+
+  /* stats */
+  b               = B;
+  nr              = b.get_rows();
+  nc              = b.get_cols();
+  max_list_size   = 0;
+  iterations      = 0;
+  collisions      = 0;
+  reductions      = 0;
+  samples         = 0;
+  target_sqr_norm = 0;
+  mem_lower       = pow(2.0, 0.18 * nc);
+  alg             = alg_arg;
+  set_verbose(ver);
+
+  /* sanity check */
+  if (alg == 2)
+  {
+    if (verbose)
+      cout << "# [info] running 2-sieve" << endl;
+    mult            = 0.1;
+    add             = 200.0;
+    iterations_step = 200;
+  }
+  else if (alg == 3)
+  {
+    if (verbose)
+      cout << "# [info] running 3-sieve" << endl;
+    mult            = 0.1;
+    add             = 100.0;
+    iterations_step = 50;
+  }
+  else if (alg == 4)
+  {
+    if (verbose)
+      cout << "# [info] running 4-sieve" << endl;
+    mult            = 0.1;
+    add             = 50.0;
+    iterations_step = 5;
+  }
+  else
+    throw std::invalid_argument("only support 2-, 3- and 4-sieve");
+
+  /* clean up list */
+  free_list_queue();
+
+  /* initialize sampler */
+  Sampler = new KleinSampler<ZT, F>(b, verbose, seed);
+
+  /* initialize list */
+  init_list();
+
+  /* further initialization by randomization */
+  // init_list_rand();
+
+  /* done initialization */
+  max_list_size = List.size();
+
+  /* output stats */
+  if (verbose)
+  {
+    cout << "# [info] done initialization, size(List)=" << List.size() << endl;
+    cout << "# [info] done initialization, size(Queue)=" << Queue.size() << endl;
+    cout << "# [info] done initialization, mem_est=" << mem_lower << endl;
+  }
+}
+
+/**
+ * deconstructor
+ */
+template <class ZT, class F> GaussSieve<ZT, F>::~GaussSieve()
+{
+  free_list_queue();
+  free_sampler();
+}
+
+/**
+ * put matrix vectors to list
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::add_mat_list(ZZ_mat<ZT> &B)
+{
+  Z_NR<ZT> t, current_norm;
+  B[0].dot_product(best_sqr_norm, B[0]);
+  ListPoint<ZT> *p;
+
+  for (int i = 0; i < nr; ++i)
+  {
+    p = new_listpoint<ZT>(nc);
+    matrix_row_to_list_point(B[i], p);
+
+    // cout << "# [info] init: additing point ";
+    // cout << p->v << endl;
+
+    if (alg == 3)
+      current_norm = update_p_3reduce(p);
+    else if (alg == 2)
+      current_norm = update_p_2reduce(p);
+    else if (alg == 4)
+      current_norm = update_p_4reduce(p);
+    else
+      throw std::invalid_argument("only support 2-, 3- and 4-sieve");
+
+    if ((current_norm < best_sqr_norm) && (current_norm > 0))
+      // if ((current_norm < best_sqr_norm) )
+      best_sqr_norm = current_norm;
+  }
+}
+
+/**
+ * init function (used in constructor)
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::init_list() { add_mat_list(b); }
+
+/**
+ * init pool of samples (used later)
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::init_list_rand()
+{
+  /* after transformation, the size could be large */
+  ZZ_mat<mpz_t> NewZ(nr, nc);
+  ZZ_mat<ZT> New(nr, nc);
+  mpz_t tmp;
+  Z_NR<mpz_t> tmpZ;
+  mpz_init(tmp);
+  FP_NR<double> c, t;
+  Z_NR<ZT> x;
+  c = 0.0;
+  t = 32.0;
+
+  /* init */
+  for (int i = 0; i < nr; i++)
+  {
+    for (int j = 0; j < nc; j++)
+    {
+      (b[i][j]).get_mpz(tmp);
+      NewZ[i][j] = tmp;
+    }
+  }
+
+  /* randomization */
+  for (int i = 0; i < nr; i++)
+  {
+    for (int k = 0; k < nr; k++)
+    {
+      if (i != k)
+      {
+        x = sample_z_basic_alt<ZT, FP_NR<double>>(c, t);
+        x.get_mpz(tmp);
+        tmpZ = tmp;
+        (NewZ[i]).addmul(NewZ[k], tmpZ, (NewZ[k]).size());
+      }
+    }
+  }
+
+  /* reduce */
+  lll_reduction(NewZ, LLL_DEF_DELTA, LLL_DEF_ETA, LM_FAST);
+
+  /* set */
+  for (int i = 0; i < nr; i++)
+  {
+    for (int j = 0; j < nc; j++)
+    {
+      tmpZ = (NewZ[i][j]).get_data();
+      tmpZ.get_mpz(tmp);
+      New[i][j] = tmp;
+    }
+  }
+
+  /* add to list */
+  add_mat_list(New);
+  mpz_clear(tmp);
+}
+
+/**
+ * free list and queue
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::free_list_queue()
+{
+  /* clean list */
+  typename list<ListPoint<ZT> *>::iterator lp_it;
+  for (lp_it = List.begin(); lp_it != List.end(); ++lp_it)
+    del_listpoint<ZT>(*lp_it);
+  List.clear();
+
+  /* clean queue */
+  while (!Queue.empty())
+  {
+    del_listpoint<ZT>(Queue.front());
+    Queue.pop();
+  }
+
+  /* clean priority queue */
+  while (!Queue_Samples.empty())
+  {
+    del_listpoint<ZT>(Queue_Samples.top());
+    Queue_Samples.pop();
+  }
+}
+
+/**
+ * free sampler
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::free_sampler() { delete Sampler; }
+
+/**
+ * set targeted norm^2
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::set_target_norm2(Z_NR<ZT> norm)
+{
+  target_sqr_norm = norm;
+}
+
+/**
+ * set verbose
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::set_verbose(bool ver) { verbose = ver; }
+
+/**
+ * print current info
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::print_curr_info()
+{
+  if (verbose)
+  {
+    if (iterations % iterations_step == 0)
+    {
+      cout << "# [info] [" << iterations << "] cols=" << collisions;
+      cout << " (" << mult * max_list_size + add << ")";
+      cout << " reds=" << reductions;
+      cout << " |L|=" << List.size();
+      cout << " |Q|=" << Queue.size();
+      cout << " |samples|=" << samples;
+      cout << " |sv|^2=" << List.front()->norm;
+      cout << endl;
+      cout << std::flush;
+    }
+  }
+}
+
+/**
+ * print final info
+ */
+template <class ZT, class F> void GaussSieve<ZT, F>::print_final_info()
+{
+  long first_size            = 0;
+  vector<long>::iterator it2 = iters_ls.begin();
+  for (typename vector<Z_NR<ZT>>::iterator it1 = iters_norm.begin(); it1 != iters_norm.end();
+       ++it1, ++it2)
+  {
+    if ((*it1) == best_sqr_norm)
+    {
+      first_size = (*it2);
+      break;
+    }
+  }
+  if (verbose)
+  {
+    cout << "# [****] done!" << endl;
+    cout << "# [info] [" << iterations << "] cols=" << collisions;
+    cout << " (" << mult * max_list_size + add << ")";
+    cout << " reds=" << reductions;
+    cout << " |L|=" << List.size();
+    cout << " |Q|=" << Queue.size();
+    cout << " |samples|=" << samples << endl;
+    cout << "# [info] max(|L|)=" << max_list_size;
+    cout << " log2(max|L|)/n=" << log2(max_list_size) / nc << endl;
+    cout << "# [info] true max|L| = " << first_size << endl;
+    cout << "# [info] true log2(max|L|)/n = " << log2(first_size) / nc << endl;
+    final_norm.set_z(best_sqr_norm);
+    final_norm.sqrt(final_norm, GMP_RNDN);
+    cout << "# [info] |sv| = " << final_norm << " (" << best_sqr_norm << ")" << endl;
+    cout << "# [info] shortest vector is " << endl << return_first() << endl;
+  }
+}
+
+template <class ZT, class F> NumVect<Z_NR<ZT>> GaussSieve<ZT, F>::return_first()
+{
+  return List.front()->v;
+}
+
+template <class ZT, class F> bool GaussSieve<ZT, F>::sieve(Z_NR<ZT> target_norm)
+{
+  set_target_norm2(target_norm);
+  if (alg == 3)
+    return run_3sieve();
+  else if (alg == 4)
+    return run_4sieve();
+  else
+    return run_2sieve();
+}
+
+template class GaussSieve<long, FP_NR<double>>;
+template class GaussSieve<mpz_t, FP_NR<double>>;
+#ifdef FPLLL_WITH_QD
+template class GaussSieve<long, FP_NR<dd_real>>;
+template class GaussSieve<mpz_t, FP_NR<dd_real>>;
+#endif
+template class GaussSieve<long, FP_NR<mpfr_t>>;
+template class GaussSieve<mpz_t, FP_NR<mpfr_t>>;
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/sieve/sieve_gauss.h b/fplll/sieve/sieve_gauss.h
new file mode 100644 (file)
index 0000000..ec6bcca
--- /dev/null
@@ -0,0 +1,101 @@
+#ifndef FPLLL_SIEVE_GAUSS_H
+#define FPLLL_SIEVE_GAUSS_H
+
+#include "sieve_common.h"
+#include "sieve_gauss_str.h"
+
+using namespace std;
+using namespace fplll;
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+ * Gauss sieve
+ */
+template <class ZT, class F> class GaussSieve
+{
+
+public:
+  GaussSieve(ZZ_mat<ZT> &B, int alg, bool ver, int seed);
+  ~GaussSieve();
+
+  void set_verbose(bool verbose);
+  void set_target_norm2(Z_NR<ZT> norm);
+  bool verbose;
+  bool sieve(Z_NR<ZT> target_norm);
+
+  /*
+    void Init(const mat_ZZ& B, KleinSampler* sampler);
+    bool Start();
+  */
+  int alg;
+
+  /* norms/listsize for all iterations */
+  vector<Z_NR<ZT>> iters_norm;
+  vector<long> iters_ls;
+
+  NumVect<Z_NR<ZT>> return_first();
+
+private:
+  int nr, nc;
+
+  /* estimated list size */
+  double mem_lower;
+  ZZ_mat<ZT> b;
+
+  Z_NR<ZT> best_sqr_norm;
+  Z_NR<ZT> target_sqr_norm;
+
+  /* statistics */
+  long max_list_size;
+  long samples;
+  long iterations;
+  long iterations_step;
+  long collisions;
+  long reductions;
+
+  /* statistics for 2-, 3- and 4-red, set manually in init() */
+  double mult;
+  double add;
+  F final_norm;
+
+  /* List */
+  list<ListPoint<ZT> *> List;
+
+  /* Queue (recording vectors to be reduced) */
+  queue<ListPoint<ZT> *> Queue;
+
+  /* Queue (recording samples) */
+  priority_queue<ListPoint<ZT> *> Queue_Samples;
+
+  /* sampler */
+  KleinSampler<ZT, F> *Sampler;
+
+  /* list functions */
+  void add_mat_list(ZZ_mat<ZT> &B);
+  void init_list();
+  void init_list_rand();
+  void free_list_queue();
+  void free_sampler();
+
+  /* reduction functions */
+  Z_NR<ZT> update_p_2reduce(ListPoint<ZT> *p);
+  Z_NR<ZT> update_p_3reduce_2reduce(ListPoint<ZT> *p,
+                                    typename list<ListPoint<ZT> *>::iterator &lp_it);
+  Z_NR<ZT> update_p_3reduce(ListPoint<ZT> *p);
+  Z_NR<ZT> update_p_4reduce_3reduce(ListPoint<ZT> *p);
+  void update_p_4reduce_aux(ListPoint<ZT> *p, typename list<ListPoint<ZT> *>::iterator &lp_it);
+  Z_NR<ZT> update_p_4reduce(ListPoint<ZT> *p);
+
+  /* info functions */
+  void print_curr_info();
+  void print_final_info();
+
+  bool run_2sieve();
+  bool run_3sieve();
+  bool run_4sieve();
+};
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/sieve/sieve_gauss_2sieve.cpp b/fplll/sieve/sieve_gauss_2sieve.cpp
new file mode 100644 (file)
index 0000000..569cf33
--- /dev/null
@@ -0,0 +1,190 @@
+#include "sieve_gauss.h"
+
+//#define DEBUG_CHECK_2RED
+
+/**
+ * reduction function: reduces recuirsively the point with all the
+ * points with smaller norm. Adds the point to the list if we
+ * don't have colission and puts to the queue all the points
+ * with bigger norm that can be reduced with it.
+ */
+template <class ZT, class F> Z_NR<ZT> GaussSieve<ZT, F>::update_p_2reduce(ListPoint<ZT> *p)
+{
+
+#if 0
+  struct timeval time;
+  gettimeofday(&time, 0);
+  long startt = 1000000 * time.tv_sec + time.tv_usec;
+#endif
+
+  typename list<ListPoint<ZT> *>::iterator lp_it, tmp_lp_it;
+  ListPoint<ZT> *v;
+  bool loop = true;
+
+  /* 1. this loop should be stopping eventually hopefully */
+  int count = 0;
+  while (loop)
+  {
+
+    count++;
+    loop = false;
+
+    /* if |p| >= |v_i| for any v_i in L, reduce p */
+    for (lp_it = List.begin(); lp_it != List.end(); ++lp_it)
+    {
+      v = *lp_it;
+      if ((p->norm) < v->norm)
+        break;
+
+      /* if there is one reduction the vector should re-pass the list */
+      if (half_2reduce(p, v))
+      {
+        reductions++;
+        loop = true;
+      }
+    }
+  }
+
+#if 0
+  gettimeofday(&time, 0);
+  long endt = 1000000 * time.tv_sec + time.tv_usec;
+  cout << "[info] loop times " << count << endl;
+  cout << "[info] updatelist1 time " << endt-startt << endl;
+#endif
+
+  /* 2. if collision, remove point */
+  if (p->norm == 0)
+  {
+    del_listpoint(p);
+    Z_NR<ZT> t;
+    t = 0;
+    return t;
+  }
+
+  /* 3. lp_it shows to the first point with bigger norm
+     this is where we will insert the new point */
+  List.insert(lp_it, p);
+
+  /* 4. reduce List by p */
+  while (lp_it != List.end())
+  {
+    tmp_lp_it = lp_it;
+    v         = *lp_it;
+    ++lp_it;
+    if (half_2reduce(v, p))
+    {
+      reductions++;
+      List.erase(tmp_lp_it);
+      Queue.push(v);
+    }
+  }
+
+#if 0
+  gettimeofday(&time, 0);
+  long endt2 = 1000000 * time.tv_sec + time.tv_usec;
+  cout << "[info] updatelist2 time " << endt2-endt << endl;
+#endif
+
+  return p->norm;
+}
+
+/**
+ * 2-sieve
+ */
+template <class ZT, class F> bool GaussSieve<ZT, F>::run_2sieve()
+{
+
+  ListPoint<ZT> *current_point;
+  NumVect<Z_NR<ZT>> vec(nc);
+  Z_NR<ZT> current_norm;
+
+#ifdef REDUCE_TIMING
+  struct timeval time, time2;
+  gettimeofday(&time, 0);
+  long startt = 1000000 * time.tv_sec + time.tv_usec;
+  double sec, sec2 = 0.0;
+  long nred = 0;
+#endif
+
+  /*
+    Loop till you find a short enough vector,
+    or enough collisions. */
+  while ((best_sqr_norm > target_sqr_norm) && (collisions < mult * max_list_size + add))
+  {
+    /* update stats */
+    iterations++;
+    max_list_size = max(max_list_size, long(List.size()));
+
+    /* sample new or fetch from queue */
+    if (Queue.empty())
+    {
+      vec           = Sampler->sample();
+      current_point = num_vec_to_list_point(vec, nc);
+      samples++;
+    }
+    else
+    {
+      current_point = Queue.front();
+      Queue.pop();
+    }
+
+#ifdef REDUCE_TIMING
+    gettimeofday(&time2, 0);
+    long startt2 = 1000000 * time2.tv_sec + time2.tv_usec;
+    nred++;
+#endif
+
+    /* sieve current_point */
+    current_norm = update_p_2reduce(current_point);
+
+    // print_list(List);
+
+#ifdef REDUCE_TIMING
+    gettimeofday(&time2, 0);
+    long endt2 = 1000000 * time2.tv_sec + time2.tv_usec;
+    sec2 += (endt2 - startt2) / 1000000.0;
+#endif
+
+    /* record collisions */
+    if (current_norm == 0)
+      collisions++;
+    if (current_norm > 0 && current_norm < best_sqr_norm)
+    {
+      best_sqr_norm = current_norm;
+    }
+
+#if 1
+    print_curr_info();
+/*if (samples+nr-List.size()-Queue.size() != collisions)
+  exit(1);
+*/
+#endif
+
+    /* tuples of (iters, max_list_size) */
+    iters_norm.push_back(best_sqr_norm);
+    iters_ls.push_back(max_list_size);
+  }
+
+#ifdef REDUCE_TIMING
+  gettimeofday(&time, 0);
+  long endt = 1000000 * time.tv_sec + time.tv_usec;
+  sec       = (endt - startt) / 1000000.0;
+  cout << "# [info] total-reducuction time " << sec2;
+  cout << ", average-reducuction time " << sec2 / nred << " (" << nred << ")" << endl;
+  cout << "# [info] total time " << sec << endl;
+#endif
+
+  /* finished main procedure, output some information */
+  print_final_info();
+
+#ifdef DEBUG_CHECK_2RED
+  if (check_2reduce_order_list<ZT>(List))
+    cout << "# [info] check 2-reduced OK" << endl;
+  else
+    cout << "# Error: check 2-reduced not OK" << endl;
+#endif
+
+  if (best_sqr_norm > target_sqr_norm)
+    return false;
+  return true;
+}
diff --git a/fplll/sieve/sieve_gauss_3sieve.cpp b/fplll/sieve/sieve_gauss_3sieve.cpp
new file mode 100644 (file)
index 0000000..3fdbca6
--- /dev/null
@@ -0,0 +1,275 @@
+#include "sieve_gauss.h"
+#include <iterator>
+
+//#define DEBUG_CHECK_3RED
+#define EXTENSION_FILTERING
+
+/**
+ * auxiliary functionused in 3-reduction, make sure p and L is
+ * pairwisely 2-reduced and return lp_it_k as indicator of larger norms
+ */
+template <class ZT, class F>
+Z_NR<ZT>
+GaussSieve<ZT, F>::update_p_3reduce_2reduce(ListPoint<ZT> *p,
+                                            typename list<ListPoint<ZT> *>::iterator &lp_it_k)
+{
+  typename list<ListPoint<ZT> *>::iterator lp_it, tmp_lp_it;
+  ListPoint<ZT> *v;
+  bool loop = true;
+  int count = 0;
+
+  /* iteratively reduce p w.r.t to v \in L for every
+   * v such that v.norm() < p.norm() */
+  while (loop)
+  {
+    count++;
+    loop = false;
+    for (lp_it = List.begin(); lp_it != List.end(); ++lp_it)
+    {
+      v = *lp_it;
+      if ((p->norm) < v->norm)
+        break;
+      if (half_2reduce(p, v))
+      {
+        loop = true;
+      }
+    }
+  }
+
+  if (p->norm == 0)
+  {
+    del_listpoint(p);
+    Z_NR<ZT> t;
+    t = 0;
+    return t;
+  }
+
+  /* record position after which the v would be larger than p */
+  lp_it_k = lp_it;
+
+  /* now every v after lp_it is larger than p, we should try to reduce
+   * v instead */
+  while (lp_it != List.end())
+  {
+    tmp_lp_it = lp_it;
+    v         = *tmp_lp_it;
+    ++lp_it;
+
+    /* corner case, do not remove lp_it_k as it is needed to be passed
+     * back to the other function */
+    if (half_2reduce(v, p))
+    {
+      if (tmp_lp_it == lp_it_k)
+      {
+        lp_it_k++;
+      }
+      List.erase(tmp_lp_it);
+      Queue.push(v);
+    }
+  }
+
+  return p->norm;
+}
+
+/**
+ * 3-reduce the point p w.r.t to the list
+ */
+template <class ZT, class F> Z_NR<ZT> GaussSieve<ZT, F>::update_p_3reduce(ListPoint<ZT> *p)
+{
+  typename list<ListPoint<ZT> *>::iterator lp_it1, lp_it2, lp_it_k, tmp_lp_it;
+  ListPoint<ZT> *v1, *v2;
+  ListPoint<ZT> *vnew = new_listpoint<ZT>(nc);
+  ListPoint<ZT> *vnew2;
+  int count = 0;
+  Z_NR<ZT> current_norm;
+  bool loop = true;
+
+  while (loop)
+  {
+    count++;
+    loop    = false;
+    lp_it_k = List.begin();
+
+    /* now p and L are 2-reduced and lp_it_k is the larger-norm-borderline */
+    current_norm = update_p_3reduce_2reduce(p, lp_it_k);
+
+    /* p has been deleted in another function, need only to delete vnew */
+    if (current_norm == 0)
+    {
+      del_listpoint(vnew);
+      return current_norm;
+    }
+
+    /* ordered (v1, v2, p), 3-reduce p */
+    for (lp_it1 = List.begin(); lp_it1 != lp_it_k && lp_it1 != List.end(); ++lp_it1)
+    {
+      if (loop)
+        break;
+      v1     = *lp_it1;
+      lp_it2 = lp_it1;
+
+#ifdef EXTENSION_FILTERING
+      if (apply_filtering(p, v1))
+        continue;
+#endif
+
+      for (; lp_it2 != lp_it_k && lp_it2 != List.end(); ++lp_it2)
+      {
+        v2 = *lp_it2;
+        if (v1->norm >= v2->norm || v2->norm >= p->norm || v1->norm >= p->norm)
+          continue;
+        if (check_3reduce(v1, v2, p, vnew) != 1)
+        {
+          clone_listpoint(vnew, p);
+          loop = true;
+          break;
+        }
+      }
+    }
+  }
+  del_listpoint(vnew);
+  List.insert(lp_it_k, p);
+  /* this is important to prevent from it to be deleted in
+     the later operation List.erase(tmp_lp_it) */
+  lp_it_k--;
+
+  /* 3-reduce (v1, p, v2) or (p, v1, v2) */
+  lp_it1 = List.begin();
+
+  while (lp_it1 != List.end())
+  {
+    v1 = *lp_it1;
+    if (v1->norm == p->norm)
+    {
+      ++lp_it1;
+      continue;
+    }
+
+#ifdef EXTENSION_FILTERING
+    if (apply_filtering(p, v1))
+    {
+      ++lp_it1;
+      continue;
+    }
+#endif
+
+    lp_it2 = lp_it_k;
+    while (lp_it2 != List.end())
+    {
+      tmp_lp_it = lp_it2;
+      v2        = *lp_it2;
+      if (v2->norm <= v1->norm || v2->norm <= p->norm)
+      {
+        ++lp_it2;
+        if (lp_it2 == List.end())
+          break;
+        continue;
+      }
+      ++lp_it2;
+      if ((v1->norm) < p->norm)
+      {
+        vnew2 = new_listpoint<ZT>(nc);
+        if (check_3reduce(v1, p, v2, vnew2) != 1)
+        {
+          List.erase(tmp_lp_it);
+          Queue.push(vnew2);
+          del_listpoint(v2);
+        }
+        else
+        {
+          del_listpoint(vnew2);
+        }
+      }
+      else
+      {
+        vnew2 = new_listpoint<ZT>(nc);
+        if (check_3reduce(p, v1, v2, vnew2) != 1)
+        {
+          List.erase(tmp_lp_it);
+          del_listpoint(v2);
+          Queue.push(vnew2);
+        }
+        else
+          del_listpoint(vnew2);
+      }
+    }
+    ++lp_it1;
+  }
+  return p->norm;
+}
+
+/**
+ * 3-sieve
+ */
+template <class ZT, class F> bool GaussSieve<ZT, F>::run_3sieve()
+{
+
+  ListPoint<ZT> *current_point;
+  NumVect<Z_NR<ZT>> vec(nc);
+  Z_NR<ZT> current_norm;
+
+  /* main iteration */
+  while ((best_sqr_norm > target_sqr_norm) && (collisions < mult * max_list_size + add))
+  {
+    iterations++;
+    max_list_size = max(max_list_size, long(List.size()));
+
+    if (Queue.empty())
+    {
+      vec           = Sampler->sample();
+      current_point = num_vec_to_list_point(vec, nc);
+      samples++;
+    }
+    else
+    {
+      current_point = Queue.front();
+      Queue.pop();
+    }
+
+    current_norm = update_p_3reduce(current_point);
+
+#if 0
+    if (!check_3reduce_order_list<ZT>(List)) {
+      cout << "!!! Failed " << endl;
+      print_list(List);
+      exit(1);
+    }
+    else {
+      cout << "[check] OK " << endl;
+      cout << endl;
+      print_list(List);
+      
+    }
+#endif
+
+    if (current_norm == 0)
+      collisions++;
+    if (current_norm > 0 && current_norm < best_sqr_norm)
+    {
+      best_sqr_norm = current_norm;
+    }
+
+#if 1
+    print_curr_info();
+#endif
+
+    /* tuples of (iters, max_list_size) */
+    iters_norm.push_back(best_sqr_norm);
+    iters_ls.push_back(max_list_size);
+  }
+
+  /* finished main procedure, output some information */
+  print_final_info();
+
+#ifdef DEBUG_CHECK_3RED
+  if (check_3reduce_order_list<ZT>(List))
+    cout << "# [info] check 3-reduced OK" << endl;
+  else
+    cout << "# Error: check 3-reduced not OK" << endl;
+#endif
+  // print_list(List);
+
+  if (best_sqr_norm > target_sqr_norm)
+    return false;
+  return true;
+}
diff --git a/fplll/sieve/sieve_gauss_4sieve.cpp b/fplll/sieve/sieve_gauss_4sieve.cpp
new file mode 100644 (file)
index 0000000..f2758a4
--- /dev/null
@@ -0,0 +1,406 @@
+#include "sieve_gauss.h"
+#include <iterator>
+
+//#define DEBUG_CHECK_4RED
+
+/**
+ * auxiliary function, return the indicator of larger norms
+ */
+template <class ZT, class F>
+void GaussSieve<ZT, F>::update_p_4reduce_aux(ListPoint<ZT> *p,
+                                             typename list<ListPoint<ZT> *>::iterator &lp_it_k)
+{
+  typename list<ListPoint<ZT> *>::iterator lp_it;
+  ListPoint<ZT> *v;
+  for (lp_it = List.begin(); lp_it != List.end(); ++lp_it)
+  {
+    v = *lp_it;
+    if ((p->norm) < v->norm)
+      break;
+  }
+  lp_it_k = lp_it;
+}
+
+/**
+ * 3-reduce the point p w.r.t to the list
+ * Note p could be deleted !
+ */
+template <class ZT, class F> Z_NR<ZT> GaussSieve<ZT, F>::update_p_4reduce_3reduce(ListPoint<ZT> *p)
+{
+  typename list<ListPoint<ZT> *>::iterator lp_it1, lp_it2, lp_it_k, tmp_lp_it;
+  ListPoint<ZT> *v1, *v2;
+  ListPoint<ZT> *vnew = new_listpoint<ZT>(nc);
+  ListPoint<ZT> *vnew2;
+  int count = 0;
+  Z_NR<ZT> current_norm;
+  bool loop = true;
+
+  /*
+    check_0_list(List);
+    cout << "#  -- before inserting s1 " << p->v << endl;
+    cout << "#  -- before inserting s1 " << p->norm << endl;
+    print_list(List);
+  */
+
+  while (loop)
+  {
+    count++;
+    loop    = false;
+    lp_it_k = List.begin();
+
+    /* now p and L are 2-reduced and lp_it_k is the larger-norm-borderline */
+    current_norm = update_p_3reduce_2reduce(p, lp_it_k);
+
+    /* p has been deleted in another function, need only to delete vnew */
+    if (current_norm == 0)
+    {
+      del_listpoint(vnew);
+      return current_norm;
+    }
+
+    /* ordered (v1, v2, p), 3-reduce p */
+    for (lp_it1 = List.begin(); lp_it1 != lp_it_k && lp_it1 != List.end(); ++lp_it1)
+    {
+      if (loop)
+        break;
+      v1     = *lp_it1;
+      lp_it2 = lp_it1;
+      for (; lp_it2 != lp_it_k && lp_it2 != List.end(); ++lp_it2)
+      {
+        v2 = *lp_it2;
+        if (v1->norm >= v2->norm || v2->norm >= p->norm || v1->norm >= p->norm)
+          continue;
+        if (check_3reduce(v1, v2, p, vnew) != 1)
+        {
+          clone_listpoint(vnew, p);
+          loop = true;
+          break;
+        }
+      }
+    }
+  }
+
+  /*
+  cout << "#  -- before inserting s2 " << p->v << endl;
+  cout << "#  -- before inserting s2 " << p->norm << endl;
+  check_0_list(List);
+  print_list(List);
+  */
+
+  del_listpoint(vnew);
+  if (p->norm == 0)
+  {
+    del_listpoint(p);
+    Z_NR<ZT> t;
+    t = 0;
+    return t;
+  }
+
+  /* 3-reduce (v1, p, v2) or (p, v1, v2) */
+  lp_it1 = List.begin();
+  while (lp_it1 != List.end())
+  {
+    v1 = *lp_it1;
+    if (v1->norm == p->norm)
+    {
+      ++lp_it1;
+      continue;
+    }
+    lp_it2 = lp_it_k;
+    while (lp_it2 != List.end())
+    {
+      tmp_lp_it = lp_it2;
+      v2        = *lp_it2;
+      if (v2->norm <= v1->norm || v2->norm <= p->norm)
+      {
+        ++lp_it2;
+        if (lp_it2 == List.end())
+          break;
+        continue;
+      }
+      ++lp_it2;
+      if ((v1->norm) < p->norm)
+      {
+        /*cout << "#   --- here 1 " << endl;
+        cout << v1->norm << endl;
+        cout << p->norm << endl;
+        cout << v2->norm << endl;
+        check_0_list(List);
+        */
+        vnew2 = new_listpoint<ZT>(nc);
+        if (check_3reduce(v1, p, v2, vnew2) != 1)
+        {
+          if (tmp_lp_it == lp_it_k)
+            lp_it_k++;
+          List.erase(tmp_lp_it);
+          Queue.push(vnew2);
+          del_listpoint(v2);
+        }
+        else
+        {
+          del_listpoint(vnew2);
+        }
+      }
+      else
+      {
+        vnew2 = new_listpoint<ZT>(nc);
+        if (check_3reduce(p, v1, v2, vnew2) != 1)
+        {
+          if (tmp_lp_it == lp_it_k)
+            lp_it_k++;
+          List.erase(tmp_lp_it);
+          del_listpoint(v2);
+          Queue.push(vnew2);
+        }
+        else
+          del_listpoint(vnew2);
+      }
+    }
+    ++lp_it1;
+  }
+
+  return p->norm;
+}
+
+/**
+ * 4-reduce the point p w.r.t to the list
+ * after this, the list should be 4-reduced tuple-wisely.
+ * note p could be deleted
+ */
+template <class ZT, class F> Z_NR<ZT> GaussSieve<ZT, F>::update_p_4reduce(ListPoint<ZT> *p)
+{
+  typename list<ListPoint<ZT> *>::iterator lp_it1, lp_it2, lp_it3, lp_it_k, tmp_lp_it;
+  ListPoint<ZT> *v1, *v2, *v3;
+  ListPoint<ZT> *vnew = new_listpoint<ZT>(nc);
+  ListPoint<ZT> *vnew2;
+  int count = 0;
+  Z_NR<ZT> current_norm;
+  bool loop = true;
+
+  while (loop)
+  {
+    count++;
+    loop = false;
+
+    /* 3-reduce p w.r.t list */
+    current_norm = update_p_4reduce_3reduce(p);
+
+    /* Here p has been deleted in another function, need only to
+       delete vnew */
+    if (current_norm == 0)
+    {
+      del_listpoint(vnew);
+      return current_norm;
+    }
+
+    /* find indicator for larger norms */
+    update_p_4reduce_aux(p, lp_it_k);
+
+#if 0
+    if (!check_3reduce_order_list<ZT>(List)) {
+      cout << "!!! Failed [check 3-red]" << endl;
+      exit(1);
+    }
+    else {
+      cout << "[check 3-red] OK " << endl;
+    }
+#endif
+
+    /* case (v1, v2, v3, p) when p has largest norm  */
+    for (lp_it1 = List.begin(); lp_it1 != lp_it_k && lp_it1 != List.end(); ++lp_it1)
+    {
+      if (loop)
+        break;
+      v1     = *lp_it1;
+      lp_it2 = lp_it1;
+      for (; lp_it2 != lp_it_k && lp_it2 != List.end(); ++lp_it2)
+      {
+        if (loop)
+          break;
+        v2     = *lp_it2;
+        lp_it3 = lp_it2;
+        if (v1->norm >= v2->norm || v2->norm >= p->norm || v1->norm >= p->norm)
+          continue;
+        for (; lp_it3 != lp_it_k && lp_it3 != List.end(); ++lp_it3)
+        {
+          v3 = *lp_it3;
+          if (v1->norm >= v3->norm || v2->norm >= v3->norm || v3->norm >= p->norm)
+            continue;
+          if (check_4reduce(v1, v2, v3, p, vnew) != 1)
+          {
+            clone_listpoint(vnew, p);
+            loop = true;
+            break;
+          }
+        }
+      }
+    }
+  }
+
+  del_listpoint(vnew);
+  List.insert(lp_it_k, p);
+  lp_it_k--;
+
+  /* 4-reduce (p, v1, v2, v3) or (v1, p, v2, v3) or (v1, v2, p, v3) */
+  lp_it1 = List.begin();
+  while (lp_it1 != List.end())
+  {
+    v1 = *lp_it1;
+    if (v1->norm == p->norm)
+    {
+      ++lp_it1;
+      continue;
+    }
+    lp_it2 = List.begin();
+    while (lp_it2 != List.end())
+    {
+      v2 = *lp_it2;
+      if ((v2->norm == p->norm) || (v2->norm == v1->norm))
+      {
+        ++lp_it2;
+        continue;
+      }
+      lp_it3 = lp_it_k;
+      while (lp_it3 != List.end())
+      {
+        tmp_lp_it = lp_it3;
+        v3        = *lp_it3;
+        if (v3->norm <= v1->norm || v3->norm <= v2->norm || v3->norm <= p->norm)
+        {
+          ++lp_it3;
+          if (lp_it3 == List.end())
+            break;
+          continue;
+        }
+        ++lp_it3;
+        /* (v1, p, v2, v3) or (v1, v2, p, v3) */
+        if ((v1->norm) < p->norm)
+        {
+          /* (v1, p, v2, v3) */
+          if (v2->norm > p->norm)
+          {
+            vnew2 = new_listpoint<ZT>(nc);
+            if (check_4reduce(v1, p, v2, v3, vnew2) != 1)
+            {
+              List.erase(tmp_lp_it);
+              Queue.push(vnew2);
+              del_listpoint(v3);
+            }
+            else
+            {
+              del_listpoint(vnew2);
+            }
+          }
+          /* (v1, v2, p, v3) */
+          else
+          {
+            vnew2 = new_listpoint<ZT>(nc);
+            if (check_4reduce(v1, v2, p, v3, vnew2) != 1)
+            {
+              List.erase(tmp_lp_it);
+              Queue.push(vnew2);
+              del_listpoint(v3);
+            }
+            else
+            {
+              del_listpoint(vnew2);
+            }
+          }
+        }
+        /* (p, v1, v2, v3) */
+        else
+        {
+          vnew2 = new_listpoint<ZT>(nc);
+          if (check_4reduce(p, v1, v2, v3, vnew2) != 1)
+          {
+            List.erase(tmp_lp_it);
+            Queue.push(vnew2);
+            del_listpoint(v3);
+          }
+          else
+          {
+            del_listpoint(vnew2);
+          }
+        }
+      }
+      ++lp_it2;
+    }
+    ++lp_it1;
+  }
+
+  return p->norm;
+}
+
+/**
+ * 4-sieve
+ */
+template <class ZT, class F> bool GaussSieve<ZT, F>::run_4sieve()
+{
+
+  ListPoint<ZT> *current_point;
+  NumVect<Z_NR<ZT>> vec(nc);
+  Z_NR<ZT> current_norm;
+
+  /* main iteration */
+  while ((best_sqr_norm > target_sqr_norm) && (collisions < mult * max_list_size + 200))
+  {
+    iterations++;
+    max_list_size = max(max_list_size, long(List.size()));
+
+    if (Queue.empty())
+    {
+      vec           = Sampler->sample();
+      current_point = num_vec_to_list_point(vec, nc);
+      samples++;
+    }
+    else
+    {
+      current_point = Queue.front();
+      Queue.pop();
+    }
+
+    current_norm = update_p_4reduce(current_point);
+
+#if 0
+    if (!check_4reduce_order_list<ZT>(List)) {
+      cout << "!!! Failed " << endl;
+      //print_list(List);
+      exit(1);
+    }
+    else {
+      cout << "[check 4-red] OK " << endl;
+      //print_list(List);
+    }
+#endif
+
+    if (current_norm == 0)
+      collisions++;
+    if (current_norm > 0 && current_norm < best_sqr_norm)
+    {
+      best_sqr_norm = current_norm;
+    }
+
+#if 1
+    print_curr_info();
+#endif
+
+    /* tuples of (iters, max_list_size) */
+    iters_norm.push_back(best_sqr_norm);
+    iters_ls.push_back(max_list_size);
+  }
+
+  /* finished main procedure, output some information */
+  print_final_info();
+
+#ifdef DEBUG_CHECK_4RED
+  if (check_4reduce_order_list<ZT>(List))
+    cout << "# [info] check 4-reduced OK" << endl;
+  else
+    cout << "# Error: check 4-reduced not OK" << endl;
+#endif
+  // print_list(List);
+
+  if (best_sqr_norm > target_sqr_norm)
+    return false;
+  return true;
+}
diff --git a/fplll/sieve/sieve_gauss_str.h b/fplll/sieve/sieve_gauss_str.h
new file mode 100644 (file)
index 0000000..95d371f
--- /dev/null
@@ -0,0 +1,654 @@
+#ifndef FPLLL_SIEVE_GAUSS_STR_H
+#define FPLLL_SIEVE_GAUSS_STR_H
+
+#include "sieve_common.h"
+
+#if 0
+extern long dot_time;
+extern long dot_num;
+extern long count_bad;
+#endif
+
+/**
+ * list point struct
+ */
+template <class ZT> class ListPoint
+{
+
+public:
+  /* vector */
+  NumVect<Z_NR<ZT>> v;
+
+  /* square L2 norm of the vector */
+  Z_NR<ZT> norm;
+};
+
+template <class ZT> inline ListPoint<ZT> *new_listpoint(int n)
+{
+  ListPoint<ZT> *p = new ListPoint<ZT>;
+  p->norm          = 0;
+  p->v.resize(n);
+  for (int i = 0; i < n; ++i)
+  {
+    p->v[i] = 0;
+  }
+  return p;
+}
+
+/**
+ * copy p1 to p2
+ */
+template <class ZT> void clone_listpoint(ListPoint<ZT> *p1, ListPoint<ZT> *p2)
+{
+  int n = p1->v.size();
+  if (p2->v.size() != n)
+    p2->v.resize(n);
+  p2->norm = p1->norm;
+  p2->v    = p1->v;
+}
+
+/**
+ * set a of norm2 to p
+ */
+template <class ZT>
+void set_listpoint_numvect(NumVect<Z_NR<ZT>> a, Z_NR<ZT> norm2, ListPoint<ZT> *p)
+{
+  int n = a.size();
+  if (p->v.size() != n)
+    p->v.resize(n);
+  p->v    = a;
+  p->norm = norm2;
+}
+
+template <class ZT> inline void del_listpoint(ListPoint<ZT> *p) { delete p; }
+
+/**
+ * reduce p1 w.r.t to p2
+ * (TBA: optimize this function)
+ */
+template <class ZT> inline bool half_2reduce(ListPoint<ZT> *p1, const ListPoint<ZT> *p2)
+{
+
+#if 0
+  struct timeval time;
+  gettimeofday(&time, 0);
+  long startt = 1000000 * time.tv_sec + time.tv_usec;
+#endif
+  /* debug info
+  int debug = 0;
+  if (debug) {
+    cout << "[debug] start reduction " << endl;
+    cout << "[debug]  p1.norm() = " << p1->norm << endl;
+    cout << "[debug]  p2.norm() = " << p2->norm << endl;
+    cout << "[debug]  p1 = " << p1->v << endl;
+    cout << "[debug]  p2 = " << p2->v << endl;
+  }
+  */
+  /* if 2*<p1,p2> <= |p2|^2, do nothing */
+  Z_NR<ZT> dot, t, s;
+
+#if 0
+  struct timeval time;
+  gettimeofday(&time, 0);
+  long startt = 1000000 * time.tv_sec + time.tv_usec;
+#endif
+
+  dot_product(dot, p1->v, p2->v);
+
+#if 0
+  gettimeofday(&time, 0);
+  long endt = 1000000 * time.tv_sec + time.tv_usec;
+  dot_time += endt-startt;
+  dot_num ++;
+#endif
+
+  t.mul_ui(dot, 2);
+  t.abs(t);
+  if (t <= p2->norm)
+    return false;
+
+  /* reduce p1 w.r.t to p2 (use dpe_t for now) */
+  // FP_NR<dpe_t> t1, t2;
+  FP_NR<double> t1, t2;
+  t1.set_z(dot);
+  t2.set_z(p2->norm);
+  t1.div(t1, t2, GMP_RNDN);
+  t1.rnd(t1);
+  t.set_f(t1);
+  NumVect<Z_NR<ZT>> vt((p1->v).size());
+  vt.mul(p2->v, t);
+  (p1->v).sub(vt);
+
+  /* update new norm of |p1| */
+  /* p1->norm = p1->norm + t * t * p2->norm - 2 * t * dot */
+  s.mul(t, t);
+  s.mul(s, p2->norm);
+  s.add(s, p1->norm);
+  t.mul_ui(t, 2);
+  t.mul(t, dot);
+  (p1->norm).sub(s, t);
+  /*
+  if (debug) {
+    cout << "[debug]  p1new = " << p1->v << endl;
+    cout << "[debug]  |p1new| = " << p1->norm << endl;
+    cout << "[debug]  |v| = " << p2->norm << endl;
+       if (p1->norm <= p2->norm && p1->norm != 0)
+       exit(1);
+  }*/
+
+#if 0
+  gettimeofday(&time, 0);
+  long endt = 1000000 * time.tv_sec + time.tv_usec;
+  cout << "[info] red time " << endt-startt << endl;
+#endif
+
+  return true;
+}
+
+/***************************************************************/
+/***************************************************************/
+
+/**
+ * check if p1 and p2 are 2-reduced for ordered p1 and p2
+ */
+template <class ZT>
+inline bool check_2reduce_order(const ListPoint<ZT> *p1, const ListPoint<ZT> *p2)
+{
+  Z_NR<ZT> dot, t;
+  dot_product(dot, p1->v, p2->v);
+  t.mul_ui(dot, 2);
+  t.abs(t);
+  if (t > p2->norm)
+    return 0;
+  return 1;
+}
+
+/**
+ * check if p1 and p2 are 2-reduced
+ */
+template <class ZT> inline bool check_2reduce(const ListPoint<ZT> *p1, const ListPoint<ZT> *p2)
+{
+  if (p1->norm <= p2->norm)
+    return check_2reduce_order(p1, p2);
+  else
+    return check_2reduce_order(p2, p1);
+}
+
+/**
+ * check if the list is pairwisely 2-reduced
+ * the list needs to be ordered by norm which is ok in our context
+ */
+template <class ZT> inline bool check_2reduce_order_list(const list<ListPoint<ZT> *> List)
+{
+  typename list<ListPoint<ZT> *>::const_iterator i, j;
+  ListPoint<ZT> *v1, *v2;
+  for (i = List.begin(); i != List.end(); ++i)
+  {
+    v1 = *i;
+    j  = i;
+    advance(j, 1);
+    for (; j != List.end(); ++j)
+    {
+      v2 = *j;
+      if (!check_2reduce(v1, v2))
+      {
+        cout << v1->v << endl;
+        cout << v2->v << endl;
+        return 0;
+      }
+    }
+  }
+  return 1;
+}
+
+/***************************************************************/
+/***************************************************************/
+
+/**
+ * check if p1, p2 and p3 are 3-reduced for ordered p1, p2, p3
+ */
+template <class ZT>
+inline int check_3reduce_order(const ListPoint<ZT> *p1, const ListPoint<ZT> *p2,
+                               const ListPoint<ZT> *p3, ListPoint<ZT> *pnew)
+{
+  /* check 2-reduced condition */
+  if (!check_2reduce(p1, p2))
+    return 0;
+  if (!check_2reduce(p2, p3))
+    return 0;
+  if (!check_2reduce(p1, p3))
+    return 0;
+
+  /*
+  cout << " checking p1->v " << p1->v << endl;
+  cout << " checking p2->v " << p2->v << endl;
+  cout << " checking p3->v " << p3->v << endl;
+  cout << endl;
+  */
+
+  /* check 3-reduced condition */
+  Z_NR<ZT> dot12, dot13, dot23;
+  dot_product(dot12, p1->v, p2->v);
+  dot_product(dot13, p1->v, p3->v);
+  dot_product(dot23, p2->v, p3->v);
+
+  if (dot12.sgn() * dot13.sgn() * dot23.sgn() != -1)
+    return 1;
+  else
+  {
+    NumVect<Z_NR<ZT>> a, b, c;
+    Z_NR<ZT> t;
+    a = p1->v;
+    b = p2->v;
+    c = p3->v;
+    a.addmul_si(b, -dot12.sgn());
+    a.addmul_si(c, -dot13.sgn());
+    dot_product(t, a, a);
+    if (t < p3->norm)
+    {
+      set_listpoint_numvect(a, t, pnew);
+
+      /*
+      cout << p3->v << endl;
+      cout << p3->norm << endl;
+      cout << " new is " << endl;
+      cout << a << endl;
+      cout << t << endl;
+      */
+      return -1;
+    }
+  }
+  return 1;
+}
+
+/**
+ * check if v1, v2 and v3 are 3-reduced
+ */
+template <class ZT>
+inline int check_3reduce(const ListPoint<ZT> *p1, const ListPoint<ZT> *p2, const ListPoint<ZT> *p3,
+                         ListPoint<ZT> *pnew)
+{
+  if (p1->norm <= p2->norm)
+  {
+    if (p2->norm <= p3->norm)
+      return check_3reduce_order(p1, p2, p3, pnew);
+    else if (p1->norm <= p3->norm)
+      return check_3reduce_order(p1, p3, p2, pnew);
+    else
+      return check_3reduce_order(p3, p1, p2, pnew);
+  }
+  else
+  {
+    if (p1->norm <= p3->norm)
+      return check_3reduce_order(p2, p1, p3, pnew);
+    else if (p2->norm <= p3->norm)
+      return check_3reduce_order(p2, p3, p1, pnew);
+    else
+      return check_3reduce_order(p3, p2, p1, pnew);
+  }
+}
+
+/**
+ * check if the list is 3-reduced
+ * the list needs to be ordered by norm which is ok in our context
+ */
+template <class ZT> inline bool check_3reduce_order_list(const list<ListPoint<ZT> *> List)
+{
+  if (List.size() < 3)
+    return 1;
+  typename list<ListPoint<ZT> *>::const_iterator i, j, k;
+  ListPoint<ZT> *v1, *v2, *v3;
+  i                   = List.begin();
+  v1                  = *i;
+  ListPoint<ZT> *vnew = new_listpoint<ZT>(v1->v.size());
+  for (i = List.begin(); i != List.end(); ++i)
+  {
+    v1 = *i;
+    j  = i;
+    for (; j != List.end(); ++j)
+    {
+      v2 = *j;
+      k  = j;
+      if (v1->norm >= v2->norm)
+        continue;
+      for (; k != List.end(); ++k)
+      {
+        v3 = *k;
+        if (v2->norm >= v3->norm || v1->norm >= v3->norm)
+          continue;
+        if (check_3reduce(v1, v2, v3, vnew) != 1)
+        {
+          cout << " Error on vector: " << endl;
+          cout << v1->v << endl;
+          cout << v2->v << endl;
+          cout << v3->v << endl;
+#if 0
+          count_bad ++;
+          cout << " # bad pairs " << count_bad << endl;
+#endif
+          // del_listpoint(vnew);
+          // return 0;
+        }
+      }
+    }
+  }
+  del_listpoint(vnew);
+  return 1;
+}
+
+/***************************************************************/
+/***************************************************************/
+
+/**
+ * check if p1, p2, p3 and p4 are 4-reduced for ordered p1, p2, p3, p4
+ */
+template <class ZT>
+inline int check_4reduce_order(const ListPoint<ZT> *p1, const ListPoint<ZT> *p2,
+                               const ListPoint<ZT> *p3, const ListPoint<ZT> *p4,
+                               ListPoint<ZT> *p4new)
+{
+
+  if ((p1->norm >= p2->norm) || (p2->norm >= p3->norm) || (p3->norm >= p4->norm))
+  {
+    throw std::runtime_error("Error, please debug, this function can only used in order");
+  }
+
+  /* check 2-reduced condition */
+  if (!check_2reduce(p1, p2))
+    return 0;
+  if (!check_2reduce(p1, p3))
+    return 0;
+  if (!check_2reduce(p1, p4))
+    return 0;
+  if (!check_2reduce(p2, p3))
+    return 0;
+  if (!check_2reduce(p2, p4))
+    return 0;
+  if (!check_2reduce(p3, p4))
+    return 0;
+
+  /* check 3-reduced condition */
+  ListPoint<ZT> *pnew = new_listpoint<ZT>(p1->v.size());
+  if (!check_3reduce(p1, p2, p3, pnew))
+  {
+    del_listpoint(pnew);
+    return 0;
+  }
+  if (!check_3reduce(p1, p2, p4, pnew))
+  {
+    del_listpoint(pnew);
+    return 0;
+  }
+  if (!check_3reduce(p1, p3, p4, pnew))
+  {
+    del_listpoint(pnew);
+    return 0;
+  }
+  if (!check_3reduce(p2, p3, p4, pnew))
+  {
+    del_listpoint(pnew);
+    return 0;
+  }
+  del_listpoint(pnew);
+
+  /*
+  cout << " checking p1->v " << p1->v << endl;
+  cout << " checking p2->v " << p2->v << endl;
+  cout << " checking p3->v " << p3->v << endl;
+  cout << " checking p4->v " << p4->v << endl;
+  cout << endl;
+  */
+
+  /* check 4-reduced condition */
+  ListPoint<ZT> *p4_update = new_listpoint<ZT>(p4->v.size());
+  set_listpoint_numvect(p4->v, p4->norm, p4_update);
+  int flag = 1;
+  for (int i = -1; i <= 1; i += 2)
+  {
+    for (int j = -1; j <= 1; j += 2)
+    {
+      for (int k = -1; k <= 1; k += 2)
+      {
+        NumVect<Z_NR<ZT>> a, b, c, sum;
+        Z_NR<ZT> t;
+        a   = p1->v;
+        b   = p2->v;
+        c   = p3->v;
+        sum = p4_update->v;
+        sum.addmul_si(a, i);
+        sum.addmul_si(b, j);
+        sum.addmul_si(c, k);
+        dot_product(t, sum, sum);
+        if (t < p4_update->norm)
+        {
+          flag = 0;
+          /*
+            cout << "t:" << t << endl;
+            cout << "sum:" << sum << endl;
+            cout << "p4->norm:" << p4_update->norm << endl;
+            cout << "p4->v:" << p4_update->v << endl;
+          */
+          set_listpoint_numvect(sum, t, p4_update);
+          /*
+            cout << "ne p4->v:" << p4_update->v << endl;
+            cout << p4_update->v << endl;
+            cout << p4_update->norm << endl;
+            cout << " new is " << endl;
+            cout << endl;
+          */
+        }
+      }
+    }
+  }
+
+  if (flag == 0)
+  {
+    set_listpoint_numvect(p4_update->v, p4_update->norm, p4new);
+    del_listpoint(p4_update);
+    return -1;
+  }
+  else
+  {
+    del_listpoint(p4_update);
+    return 1;
+  }
+}
+
+/**
+ * check if v1, v2, v3 and v4 are 4-reduced
+ */
+template <class ZT>
+inline int check_4reduce(ListPoint<ZT> *p1, ListPoint<ZT> *p2, ListPoint<ZT> *p3, ListPoint<ZT> *p4,
+                         ListPoint<ZT> *p4new)
+{
+  NumVect<Z_NR<ZT>> index;
+  index.push_back(p1->norm);
+  index.push_back(p2->norm);
+  index.push_back(p3->norm);
+  index.push_back(p4->norm);
+  std::sort(index.begin(), index.end());
+  ListPoint<ZT> *s1 = NULL;
+  ListPoint<ZT> *s2 = NULL;
+  ListPoint<ZT> *s3 = NULL;
+  ListPoint<ZT> *s4 = NULL;
+
+  if (p1->norm == index[0])
+    s1 = p1;
+  else if (p2->norm == index[0])
+    s1 = p2;
+  else if (p3->norm == index[0])
+    s1 = p3;
+  else if (p4->norm == index[0])
+    s1 = p4;
+
+  if (p1->norm == index[1])
+    s2 = p1;
+  else if (p2->norm == index[1])
+    s2 = p2;
+  else if (p3->norm == index[1])
+    s2 = p3;
+  else if (p4->norm == index[1])
+    s2 = p4;
+
+  if (p1->norm == index[2])
+    s3 = p1;
+  else if (p2->norm == index[2])
+    s3 = p2;
+  else if (p3->norm == index[2])
+    s3 = p3;
+  else if (p4->norm == index[2])
+    s3 = p4;
+
+  if (p1->norm == index[3])
+    s4 = p1;
+  else if (p2->norm == index[3])
+    s4 = p2;
+  else if (p3->norm == index[3])
+    s4 = p3;
+  else if (p4->norm == index[3])
+    s4 = p4;
+
+  return check_4reduce_order(s1, s2, s3, s4, p4new);
+}
+
+/**
+ * check if the list is 4-reduced
+ * the list needs to be ordered by norm which is ok in our context
+ */
+template <class ZT> inline bool check_4reduce_order_list(const list<ListPoint<ZT> *> List)
+{
+  typename list<ListPoint<ZT> *>::const_iterator i, j, k, l;
+  ListPoint<ZT> *v1, *v2, *v3, *v4;
+  i                    = List.begin();
+  v1                   = *i;
+  ListPoint<ZT> *p4new = new_listpoint<ZT>(v1->v.size());
+  for (i = List.begin(); i != List.end(); ++i)
+  {
+    v1 = *i;
+    j  = i;
+    for (; j != List.end(); ++j)
+    {
+      v2 = *j;
+      k  = j;
+      if (v1->norm >= v2->norm)
+        continue;
+      for (; k != List.end(); ++k)
+      {
+        v3 = *k;
+        l  = k;
+        if (v2->norm >= v3->norm || v1->norm >= v3->norm)
+          continue;
+        for (; l != List.end(); ++l)
+        {
+          v4 = *l;
+          if (v3->norm >= v4->norm || v2->norm >= v4->norm || v1->norm >= v4->norm)
+            continue;
+          if (check_4reduce(v1, v2, v3, v4, p4new) != 1)
+          {
+            cout << " Error on vector: " << endl;
+            cout << v1->v << endl;
+            cout << v2->v << endl;
+            cout << v3->v << endl;
+            cout << v4->v << endl;
+            del_listpoint(p4new);
+            return 0;
+          }
+        }
+      }
+    }
+  }
+  del_listpoint(p4new);
+  return 1;
+}
+
+/**
+ * print current list
+ */
+template <class ZT> inline void print_list(const list<ListPoint<ZT> *> List)
+
+{
+  typename list<ListPoint<ZT> *>::const_iterator lp_it;
+  for (lp_it = List.begin(); lp_it != List.end(); ++lp_it)
+  {
+    ///*
+    cout << (*lp_it)->v << ", ";
+    cout << (*lp_it)->norm << endl;
+    //*/
+    // cout << (*lp_it)->v << endl;
+  }
+}
+
+/**
+ * print current list
+ */
+template <class ZT> inline void check_0_list(const list<ListPoint<ZT> *> List)
+
+{
+  typename list<ListPoint<ZT> *>::const_iterator lp_it;
+  for (lp_it = List.begin(); lp_it != List.end(); ++lp_it)
+  {
+    if ((*lp_it)->norm == 0)
+    {
+      throw std::runtime_error("Error, list containing zero vector");
+    }
+  }
+}
+
+/**
+ * Use to convert MatrixRow to ListPoint
+ */
+template <class ZT>
+inline void matrix_row_to_list_point(const MatrixRow<Z_NR<ZT>> &row, ListPoint<ZT> *p)
+{
+  int dims = row.size();
+  //(p->v) (dims);
+  p->v.resize(dims);
+  p->norm = 0;
+  Z_NR<ZT> t;
+  for (int i = 0; i < dims; i++)
+  {
+    p->v[i] = row[i];
+    t.mul(p->v[i], p->v[i]);
+    p->norm.add(p->norm, t);
+  }
+}
+
+/**
+ * Use to convert sample() results NumVect to ListPoint
+ */
+template <class ZT> inline ListPoint<ZT> *num_vec_to_list_point(const NumVect<Z_NR<ZT>> &vec, int n)
+{
+  ListPoint<ZT> *p = new_listpoint<ZT>(n);
+  int dims         = vec.size();
+  p->v.resize(dims);
+  p->norm = 0;
+  Z_NR<ZT> t;
+  for (int i = 0; i < dims; i++)
+  {
+    p->v[i] = vec[i];
+    t.mul(p->v[i], p->v[i]);
+    p->norm.add(p->norm, t);
+  }
+  return p;
+}
+
+template <class ZT> bool apply_filtering(const ListPoint<ZT> *p1, const ListPoint<ZT> *p2)
+{
+  Z_NR<ZT> dot;
+  dot_product(dot, p1->v, p2->v);
+  // cout << " dot is " << dot << endl;
+  double t, t1, t2;
+  t  = dot.get_d();
+  t  = t * t;
+  t1 = (p1->norm).get_d();
+  t2 = (p2->norm).get_d();
+  t  = t / t1;
+  t  = t / t2;
+  t  = abs(sqrt(t));
+  if (t >= 1 / 3.0)
+    return false;
+  else
+    return true;
+}
+
+#endif
diff --git a/fplll/sieve/sieve_main.cpp b/fplll/sieve/sieve_main.cpp
new file mode 100644 (file)
index 0000000..2825dbd
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+  This provides an implementation of Gauss sieving, including using
+  tuples of vectors in fplll framework. The Gauss Sieve code is
+  based on Panagiotis Voulgaris's implementation of the Gauss sieve.
+*/
+#include "sieve_main.h"
+#include "fplll.h"
+
+/**
+ * help function
+ */
+static void main_usage(char *myself)
+{
+  cout << "Usage: " << myself << " [options]\n"
+       << "List of options:\n"
+       << "  -a [2|3|4]\n"
+       << "     2- or 3- or 4-sieve;\n"
+       << "  -f filename\n"
+       << "     Input filename\n"
+       << "  -r nnn\n"
+       << "     Generate a random instance of dimension nnn\n"
+       << "  -t nnn\n"
+       << "     Targeted norm^2=nnn\n"
+       << "  -s nnn\n"
+       << "     Using seed=nnn\n"
+       << "  -b nnn\n"
+       << "     BKZ preprocessing of blocksize=nnn\n"
+       << "  -v\n"
+       << "     Verbose mode\n";
+}
+
+/**
+ * run sieve
+ */
+template <class ZT>
+int main_run_sieve(ZZ_mat<ZT> B, Z_NR<ZT> target_norm, int alg, int ver, int seed)
+{
+  GaussSieve<ZT, FP_NR<double>> gsieve(B, alg, ver, seed);
+  gsieve.sieve(target_norm);
+  return 0;
+}
+
+/**
+ * main function
+ */
+int main(int argc, char **argv)
+{
+  char *input_file_name = NULL;
+  char *target_norm_s   = NULL;
+  bool flag_verbose = true, flag_file = false;
+  int option, alg, dim = 10, seed = 0, bs = 0;
+
+#if 0
+  dot_time = 0;
+  dot_num = 0;
+  count_bad = 0;
+#endif
+
+  alg = 2;
+
+  /* parse */
+  if (argc == 1)
+  {
+    main_usage(argv[0]);
+    return -1;
+  }
+  while ((option = getopt(argc, argv, "a:f:r:t:s:b:v")) != -1)
+  {
+    switch (option)
+    {
+    case 'a':
+      alg = atoi(optarg);
+      if (alg != 2 && alg != 3 && alg != 4)
+        throw std::invalid_argument("only support 2-, 3- and 4-sieve");
+      break;
+    case 'f':
+      input_file_name = optarg;
+      flag_file       = true;
+      break;
+    case 'r':
+      dim       = atoi(optarg);
+      flag_file = false;
+      break;
+    case 's':
+      seed = atoi(optarg);
+      break;
+    case 'b':
+      bs = atoi(optarg);
+      break;
+    case 'v':
+      flag_verbose = true;
+      break;
+    case 't':
+      // ntarget_norm = atol(optarg);
+      cout << optarg << endl;
+      target_norm_s = optarg;
+      break;
+    case 'h':
+      main_usage(argv[0]);
+      return -1;
+    case '?':
+      main_usage(argv[0]);
+      return -1;
+    case ':':
+      main_usage(argv[0]);
+      return -1;
+    }
+  }
+
+  /* set lattice */
+  ZZ_mat<mpz_t> B;
+  if (flag_file)
+  {
+    ifstream input_file(input_file_name);
+    if (input_file.is_open())
+    {
+      input_file >> B;
+      input_file.close();
+    }
+    else
+    {
+      cin >> B;
+    }
+    if (flag_verbose)
+    {
+      cout << "# [info] reading lattice of dimension " << B.get_rows() << "x" << B.get_cols()
+           << endl;
+    }
+  }
+  else
+  {
+    if (flag_verbose)
+    {
+      cout << "# [info] generating random lattice of dimension " << dim << endl;
+    }
+    srand(time(NULL));
+    B.resize(dim, dim);
+    B.gen_trg(1.1);
+  }
+
+  /* set targeted norm */
+  Z_NR<mpz_t> target_norm, max;
+  if (target_norm_s != NULL)
+  {
+    target_norm.set_str(target_norm_s);
+  }
+  if (target_norm < 0)
+    target_norm = 0;
+  if (flag_verbose)
+    cout << "# [info] target norm^2 is " << target_norm << endl;
+
+  /* preprocessing of basis */
+  clock_t stime = clock();
+  if (bs > 0)
+    bkz_reduction(B, bs, BKZ_DEFAULT, FT_DEFAULT, 0);
+  else
+    lll_reduction(B, LLL_DEF_DELTA, LLL_DEF_ETA, LM_WRAPPER);
+
+  clock_t etime = clock();
+  double secs   = (etime - stime) / (double)CLOCKS_PER_SEC;
+  if (flag_verbose)
+  {
+    if (bs > 0)
+      cout << "# [info] BKZ took time " << secs << " s" << endl;
+    else
+      cout << "# [info] LLL took time " << secs << " s" << endl;
+  }
+  // cout << B << endl;
+
+  /* decide integer type */
+  stime = clock();
+  max   = B.get_max();
+
+#if 1
+  if (max < std::numeric_limits<int>::max())
+  {
+    long target_norm_l = abs(target_norm.get_si());
+    Z_NR<long> target_norm_lt;
+    target_norm_lt = target_norm_l;
+    ZZ_mat<long> B2(B.get_rows(), B.get_cols());
+    for (int i = 0; i < B.get_rows(); i++)
+      for (int j = 0; j < B.get_cols(); j++)
+        B2(i, j) = B(i, j).get_si();
+    main_run_sieve<long>(B2, target_norm_lt, alg, flag_verbose, seed);
+  }
+  else
+#endif
+    main_run_sieve<mpz_t>(B, target_norm, alg, flag_verbose, seed);
+
+  etime = clock();
+  secs  = (etime - stime) / (double)CLOCKS_PER_SEC;
+  if (flag_verbose)
+  {
+    cout << "# [info] sieve took time " << secs << " s" << endl;
+/* dot product time */
+#if 0
+    cout << "# [info] dot_time " << dot_time << endl;
+    cout << "# [info] dot_num " << dot_num << endl;
+    cout << "# [info] dot_time/dot_number " << (double) dot_time/dot_num << endl;
+#endif
+  }
+  return 1;
+}
diff --git a/fplll/sieve/sieve_main.h b/fplll/sieve/sieve_main.h
new file mode 100644 (file)
index 0000000..cd2e227
--- /dev/null
@@ -0,0 +1,12 @@
+#include "sieve_gauss.h"
+#include <fstream>
+#include <getopt.h>
+#include <iostream>
+#include <stdio.h>
+#include <unistd.h>
+
+#if 0
+long dot_time;
+long dot_num;
+long count_bad;
+#endif
diff --git a/fplll/svpcvp.cpp b/fplll/svpcvp.cpp
new file mode 100644 (file)
index 0000000..fc806ad
--- /dev/null
@@ -0,0 +1,661 @@
+/* Copyright (C) 2008-2011 Xavier Pujol.
+    (C) 2015 Michael Walter.
+    Copyright (C) 2019 Koen de Boer & Wessel van Woerden
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "svpcvp.h"
+#include "enum/enumerate.h"
+#include "enum/topenum.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/* Shortest vector problem
+   ======================= */
+
+/* Returns i such that the shortest vector of L(b) belongs to
+   L(b_0,...,b_(i-1)), assuming that the error on rdiag's is less than 100%.
+   If b is LLL-reduced, then for any reasonnable dimension,
+   max(rdiag[0],...,rdiag[i-1]) / min(rdiag[0],...,rdiag[i-1])
+   is much smaller than numeric_limits<double>::max */
+static int last_useful_index(const Matrix<FP_NR<mpfr_t>> &r)
+{
+  int i;
+  FP_NR<mpfr_t> rdiag_min_value;
+  rdiag_min_value.mul_2si(r(0, 0), 1);
+  for (i = r.get_rows() - 1; i > 0; i--)
+  {
+    if (r(i, i) <= rdiag_min_value)
+      break;
+  }
+  return i + 1;
+}
+
+/* Finds the shortest vector of the basis b and returns its squared norm in
+   basisMin */
+static void get_basis_min(Z_NR<mpz_t> &basis_min, const ZZ_mat<mpz_t> &b, int first, int last)
+{
+  Z_NR<mpz_t> sq_norm;
+  int n = b.get_cols();
+  b[first].dot_product(basis_min, b[first], n);
+
+  for (int i = first + 1; i < last; i++)
+  {
+    b[i].dot_product(sq_norm, b[i], n);
+    if (sq_norm < basis_min)
+      basis_min = sq_norm;
+  }
+}
+
+static void get_basis_min(Z_NR<mpz_t> &basis_min, MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                          int first, int last)
+{
+  Z_NR<mpz_t> sq_norm;
+  gso.get_int_gram(basis_min, first, first);
+  for (int i = first + 1; i < last; i++)
+  {
+    gso.get_int_gram(sq_norm, i, i);
+    if (sq_norm < basis_min)
+      basis_min = sq_norm;
+  }
+}
+
+static bool enumerate_svp(int d, MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                          FP_NR<mpfr_t> &max_dist, ErrorBoundedEvaluator &evaluator,
+                          const vector<enumf> &pruning, int flags)
+{
+  Enumeration<Z_NR<mpz_t>, FP_NR<mpfr_t>> enumobj(gso, evaluator);
+  bool dual = (flags & SVP_DUAL);
+  enumobj.enumerate(0, d, max_dist, 0, vector<FP_NR<mpfr_t>>(), vector<enumxt>(), pruning, dual);
+  return !evaluator.empty();
+}
+
+static int shortest_vector_ex(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord, SVPMethod method,
+                              const vector<double> &pruning, int flags, EvaluatorMode eval_mode,
+                              long long &sol_count,
+                              vector<vector<Z_NR<mpz_t>>> *subsol_coord = nullptr,
+                              vector<enumf> *subsol_dist                = nullptr,
+                              vector<vector<Z_NR<mpz_t>>> *auxsol_coord = nullptr,
+                              vector<enumf> *auxsol_dist = nullptr, int max_aux_sols = 0)
+{
+  bool findsubsols = (subsol_coord != nullptr) && (subsol_dist != nullptr);
+  bool findauxsols = (auxsol_coord != nullptr) && (auxsol_dist != nullptr) && (max_aux_sols != 0);
+
+  // d = lattice dimension (note that it might decrease during preprocessing)
+  int d = b.get_rows();
+  // n = dimension of the space
+  int n = b.get_cols();
+
+  FPLLL_CHECK(d > 0 && n > 0, "shortestVector: empty matrix");
+  FPLLL_CHECK(d <= n, "shortestVector: number of vectors > size of the vectors");
+
+  // Sets the floating-point precision
+  // Error bounds on GSO are valid if prec >= minprec
+  double rho;
+  int min_prec = gso_min_prec(rho, d, LLL_DEF_DELTA, LLL_DEF_ETA);
+  int prec     = max(53, min_prec + 10);
+  int old_prec = FP_NR<mpfr_t>::set_prec(prec);
+
+  // Allocates space for vectors and matrices in constructors
+  ZZ_mat<mpz_t> empty_mat;
+  MatGSO<Z_NR<mpz_t>, FP_NR<mpfr_t>> gso(b, empty_mat, empty_mat, GSO_INT_GRAM);
+  FP_NR<mpfr_t> max_dist;
+  Z_NR<mpz_t> int_max_dist;
+  Z_NR<mpz_t> itmp1;
+
+  // Computes the Gram-Schmidt orthogonalization in floating-point
+  gso.update_gso();
+  gen_zero_vect(sol_coord, d);
+
+  // If the last b_i* are too large, removes them to avoid an underflow
+  int new_d = last_useful_index(gso.get_r_matrix());
+  if (new_d < d)
+  {
+    // FPLLL_TRACE("Ignoring the last " << d - new_d << " vector(s)");
+    d = new_d;
+  }
+
+  if (flags & SVP_DUAL)
+  {
+    max_dist = 1.0 / gso.get_r_exp(d - 1, d - 1);
+    if (flags & SVP_VERBOSE)
+    {
+      cout << "max_dist = " << max_dist << endl;
+    }
+  }
+  else
+  {
+    /* Computes a bound for the enumeration. This bound would work for an
+       exact algorithm, but we will increase it later to ensure that the fp
+       algorithm finds a solution */
+    get_basis_min(int_max_dist, b, 0, d);
+    max_dist.set_z(int_max_dist, GMP_RNDU);
+  }
+
+  // Initializes the evaluator of solutions
+  ErrorBoundedEvaluator *evaluator;
+  if (method == SVPM_FAST)
+  {
+    evaluator =
+        new FastErrorBoundedEvaluator(d, gso.get_mu_matrix(), gso.get_r_matrix(), eval_mode,
+                                      max_aux_sols + 1, EVALSTRATEGY_BEST_N_SOLUTIONS, findsubsols);
+  }
+  else if (method == SVPM_PROVED)
+  {
+    ExactErrorBoundedEvaluator *p = new ExactErrorBoundedEvaluator(
+        // d, b, gso.get_mu_matrix(), gso.get_r_matrix()
+        d, gso, eval_mode, max_aux_sols + 1, EVALSTRATEGY_BEST_N_SOLUTIONS, findsubsols);
+    p->int_max_dist = int_max_dist;
+    evaluator       = p;
+  }
+  else
+  {
+    FPLLL_ABORT("shortestVector: invalid evaluator type");
+  }
+  evaluator->init_delta_def(prec, rho, true);
+
+  if (!(flags & SVP_OVERRIDE_BND) && (eval_mode == EVALMODE_SV || method == SVPM_PROVED))
+  {
+    FP_NR<mpfr_t> ftmp1;
+    bool result = evaluator->get_max_error_aux(max_dist, true, ftmp1);
+    FPLLL_CHECK(result, "shortestVector: cannot compute an initial bound");
+    max_dist.add(max_dist, ftmp1, GMP_RNDU);
+  }
+
+  // Main loop of the enumeration
+  enumerate_svp(d, gso, max_dist, *evaluator, pruning, flags);
+
+  int result = RED_ENUM_FAILURE;
+  if (eval_mode != EVALMODE_SV)
+  {
+    result    = RED_SUCCESS;
+    sol_count = evaluator->sol_count * 2;
+  }
+  else if (!evaluator->empty())
+  {
+    /*FP_NR<mpfr_t> fMaxError;
+    validMaxError = evaluator->get_max_error(fMaxError);
+    max_error = fMaxError.get_d(GMP_RNDU);*/
+    for (int i = 0; i < d; i++)
+    {
+      itmp1.set_f(evaluator->begin()->second[i]);
+      sol_coord[i].add(sol_coord[i], itmp1);
+    }
+    result = RED_SUCCESS;
+  }
+
+  if (findsubsols)
+  {
+    subsol_coord->clear();
+    subsol_dist->clear();
+    subsol_dist->resize(evaluator->sub_solutions.size());
+    for (size_t i = 0; i < evaluator->sub_solutions.size(); ++i)
+    {
+      (*subsol_dist)[i] = evaluator->sub_solutions[i].first.get_d();
+
+      vector<Z_NR<mpz_t>> ss_c;
+      for (size_t j = 0; j < evaluator->sub_solutions[i].second.size(); ++j)
+      {
+        itmp1.set_f(evaluator->sub_solutions[i].second[j]);
+        ss_c.emplace_back(itmp1);
+      }
+      subsol_coord->emplace_back(std::move(ss_c));
+    }
+  }
+  if (findauxsols)
+  {
+    auxsol_coord->clear();
+    auxsol_dist->clear();
+    // iterators over all solutions
+    auto it = evaluator->begin(), itend = evaluator->end();
+    // skip shortest solution
+    ++it;
+    for (; it != itend; ++it)
+    {
+      auxsol_dist->push_back(it->first.get_d());
+
+      vector<Z_NR<mpz_t>> as_c;
+      for (size_t j = 0; j < it->second.size(); ++j)
+      {
+        itmp1.set_f(it->second[j]);
+        as_c.emplace_back(itmp1);
+      }
+      auxsol_coord->emplace_back(std::move(as_c));
+    }
+  }
+
+  delete evaluator;
+  FP_NR<mpfr_t>::set_prec(old_prec);
+  return result;
+}
+
+int shortest_vector(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord, SVPMethod method, int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(b, sol_coord, method, vector<double>(), flags, EVALMODE_SV, tmp);
+}
+
+int shortest_vector_pruning(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord,
+                            const vector<double> &pruning, int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(b, sol_coord, SVPM_FAST, pruning, flags, EVALMODE_SV, tmp);
+}
+
+int shortest_vector_pruning(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &subsol_coord, vector<enumf> &subsol_dist,
+                            const vector<double> &pruning, int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(b, sol_coord, SVPM_FAST, pruning, flags, EVALMODE_SV, tmp,
+                            &subsol_coord, &subsol_dist);
+}
+
+int shortest_vector_pruning(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &auxsol_coord, vector<enumf> &auxsol_dist,
+                            const int max_aux_sols, const vector<double> &pruning, int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(b, sol_coord, SVPM_FAST, pruning, flags, EVALMODE_SV, tmp, nullptr,
+                            nullptr, &auxsol_coord, &auxsol_dist, max_aux_sols);
+}
+
+//////////////////////////////////////////
+////// SVP FOR GSO OBJECT  ///////////////
+//////////////////////////////////////////
+
+static int shortest_vector_ex(
+    MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso, vector<Z_NR<mpz_t>> &sol_coord,
+    SVPMethod method, const vector<double> &pruning, int flags, EvaluatorMode eval_mode,
+    long long &sol_count, vector<vector<Z_NR<mpz_t>>> *subsol_coord = nullptr,
+    vector<enumf> *subsol_dist = nullptr, vector<vector<Z_NR<mpz_t>>> *auxsol_coord = nullptr,
+    vector<enumf> *auxsol_dist = nullptr, int max_aux_sols = 0, bool merge_sol_in_aux = false)
+{
+  bool findsubsols = (subsol_coord != nullptr) && (subsol_dist != nullptr);
+  bool findauxsols = (auxsol_coord != nullptr) && (auxsol_dist != nullptr) && (max_aux_sols != 0);
+
+  // d = lattice dimension (note that it might decrease during preprocessing)
+  // int d = b.get_rows();
+  int d = gso.d;  // Number of rows of b in the GSO
+
+  // n = dimension of the space
+  // int n = b.get_cols();
+  int n = gso.get_cols_of_b();  // number of columns of b in the GSO
+
+  FPLLL_CHECK(d > 0 && n > 0, "shortestVector: empty matrix");
+  FPLLL_CHECK(d <= n, "shortestVector: number of vectors > size of the vectors");
+
+  // Sets the floating-point precision
+  // Error bounds on GSO are valid if prec >= minprec
+  double rho;
+  int min_prec = gso_min_prec(rho, d, LLL_DEF_DELTA, LLL_DEF_ETA);
+  int prec     = max(53, min_prec + 10);
+  int old_prec = FP_NR<mpfr_t>::set_prec(prec);
+
+  // Allocates space for vectors and matrices in constructors
+  FP_NR<mpfr_t> max_dist;
+  Z_NR<mpz_t> int_max_dist;
+  Z_NR<mpz_t> itmp1;
+
+  // Computes the Gram-Schmidt orthogonalization in floating-point
+  gso.update_gso();
+  gen_zero_vect(sol_coord, d);
+
+  // If the last b_i* are too large, removes them to avoid an underflow
+  int new_d = last_useful_index(gso.get_r_matrix());
+  if (new_d < d)
+  {
+    // FPLLL_TRACE("Ignoring the last " << d - new_d << " vector(s)");
+    d = new_d;
+  }
+
+  if (flags & SVP_DUAL)
+  {
+    max_dist = 1.0 / gso.get_r_exp(d - 1, d - 1);
+    if (flags & SVP_VERBOSE)
+    {
+      cout << "max_dist = " << max_dist << endl;
+    }
+  }
+  else
+  {
+    // Computes a bound for the enumeration. This bound would work for an
+    //   exact algorithm, but we will increase it later to ensure that the fp
+    //   algorithm finds a solution
+
+    // Use the GSO version of get_basis_min
+    get_basis_min(int_max_dist, gso, 0, d);
+    max_dist.set_z(int_max_dist, GMP_RNDU);
+  }
+
+  // Initializes the evaluator of solutions
+  ErrorBoundedEvaluator *evaluator;
+  if (method == SVPM_FAST)
+  {
+    evaluator =
+        new FastErrorBoundedEvaluator(d, gso.get_mu_matrix(), gso.get_r_matrix(), eval_mode,
+                                      max_aux_sols + 1, EVALSTRATEGY_BEST_N_SOLUTIONS, findsubsols);
+  }
+  else if (method == SVPM_PROVED)
+  {
+    ExactErrorBoundedEvaluator *p = new ExactErrorBoundedEvaluator(
+        d, gso, eval_mode, max_aux_sols + 1, EVALSTRATEGY_BEST_N_SOLUTIONS, findsubsols);
+    p->int_max_dist = int_max_dist;
+    evaluator       = p;
+  }
+  else
+  {
+    FPLLL_ABORT("shortestVector: invalid evaluator type");
+  }
+  evaluator->init_delta_def(prec, rho, true);
+
+  if (!(flags & SVP_OVERRIDE_BND) && (eval_mode == EVALMODE_SV || method == SVPM_PROVED))
+  {
+    FP_NR<mpfr_t> ftmp1;
+    bool result = evaluator->get_max_error_aux(max_dist, true, ftmp1);
+    FPLLL_CHECK(result, "shortestVector: cannot compute an initial bound");
+    max_dist.add(max_dist, ftmp1, GMP_RNDU);
+  }
+
+  // Main loop of the enumeration
+  enumerate_svp(d, gso, max_dist, *evaluator, pruning, flags);  // Only uses r and mu
+
+  int result = RED_ENUM_FAILURE;
+  if (eval_mode != EVALMODE_SV)
+  {
+    result    = RED_SUCCESS;
+    sol_count = evaluator->sol_count * 2;
+  }
+  else if (!evaluator->empty())
+  {
+    // FP_NR<mpfr_t> fMaxError;
+    // validMaxError = evaluator->get_max_error(fMaxError);
+    // max_error = fMaxError.get_d(GMP_RNDU);
+    for (int i = 0; i < d; i++)
+    {
+      itmp1.set_f(evaluator->begin()->second[i]);
+      sol_coord[i].add(sol_coord[i], itmp1);
+    }
+    result = RED_SUCCESS;
+  }
+
+  if (findsubsols)
+  {
+    subsol_coord->clear();
+    subsol_dist->clear();
+    subsol_dist->resize(evaluator->sub_solutions.size());
+    for (size_t i = 0; i < evaluator->sub_solutions.size(); ++i)
+    {
+      (*subsol_dist)[i] = evaluator->sub_solutions[i].first.get_d();
+
+      vector<Z_NR<mpz_t>> ss_c;
+      for (size_t j = 0; j < evaluator->sub_solutions[i].second.size(); ++j)
+      {
+        itmp1.set_f(evaluator->sub_solutions[i].second[j]);
+        ss_c.emplace_back(itmp1);
+      }
+      subsol_coord->emplace_back(std::move(ss_c));
+    }
+  }
+  if (findauxsols)
+  {
+    auxsol_coord->clear();
+    auxsol_dist->clear();
+    // iterators over all solutions
+    auto it = evaluator->begin(), itend = evaluator->end();
+    // skip shortest solution
+    if (!merge_sol_in_aux)
+      ++it;
+    for (; it != itend; ++it)
+    {
+      auxsol_dist->push_back(it->first.get_d());
+
+      vector<Z_NR<mpz_t>> as_c;
+      for (size_t j = 0; j < it->second.size(); ++j)
+      {
+        itmp1.set_f(it->second[j]);
+        as_c.emplace_back(itmp1);
+      }
+      auxsol_coord->emplace_back(std::move(as_c));
+    }
+  }
+
+  delete evaluator;
+  FP_NR<mpfr_t>::set_prec(old_prec);
+  return result;
+}
+
+int shortest_vector(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                    vector<Z_NR<mpz_t>> &sol_coord, SVPMethod method, int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(gso, sol_coord, method, vector<double>(), flags, EVALMODE_SV, tmp);
+}
+
+int shortest_vectors(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                     vector<vector<Z_NR<mpz_t>>> &sol_coord, vector<enumf> &sol_dist,
+                     const int max_sols, SVPMethod method, int flags)
+{
+  long long tmp;
+  vector<Z_NR<mpz_t>> sol_coord_tmp;
+  return shortest_vector_ex(gso, sol_coord_tmp, method, vector<double>(), flags, EVALMODE_SV, tmp,
+                            nullptr, nullptr, &sol_coord, &sol_dist, max_sols - 1, true);
+}
+
+int shortest_vector_pruning(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                            vector<Z_NR<mpz_t>> &sol_coord, const vector<double> &pruning,
+                            int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(gso, sol_coord, SVPM_FAST, pruning, flags, EVALMODE_SV, tmp);
+}
+
+int shortest_vector_pruning(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                            vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &subsol_coord, vector<enumf> &subsol_dist,
+                            const vector<double> &pruning, int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(gso, sol_coord, SVPM_FAST, pruning, flags, EVALMODE_SV, tmp,
+                            &subsol_coord, &subsol_dist);
+}
+
+int shortest_vector_pruning(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                            vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &auxsol_coord, vector<enumf> &auxsol_dist,
+                            const int max_aux_sols, const vector<double> &pruning, int flags)
+{
+  long long tmp;
+  return shortest_vector_ex(gso, sol_coord, SVPM_FAST, pruning, flags, EVALMODE_SV, tmp, nullptr,
+                            nullptr, &auxsol_coord, &auxsol_dist, max_aux_sols);
+}
+
+///////////////////////////////////
+//////END SVP FOR GSO OBJECT //////
+///////////////////////////////////
+
+/* Closest vector problem
+   ====================== */
+
+static void get_gscoords(const Matrix<FP_NR<mpfr_t>> &matrix, const Matrix<FP_NR<mpfr_t>> &mu,
+                         const Matrix<FP_NR<mpfr_t>> &r, const vector<FP_NR<mpfr_t>> &v,
+                         vector<FP_NR<mpfr_t>> &vcoord)
+{
+
+  int n = matrix.get_rows(), m = matrix.get_cols();
+
+  if (static_cast<int>(vcoord.size()) != n)
+    vcoord.resize(n);
+  FPLLL_DEBUG_CHECK(mu.get_rows() == n && mu.get_cols() == n && r.get_rows() == n &&
+                    r.get_cols() == n && static_cast<int>(v.size()) == m);
+
+  for (int i = 0; i < n; i++)
+  {
+    vcoord[i] = 0.0;
+    for (int j = 0; j < m; j++)
+      vcoord[i].addmul(v[j], matrix(i, j));
+    for (int j = 0; j < i; j++)
+      vcoord[i].submul(mu(i, j), vcoord[j]);
+  }
+  for (int i = 0; i < n; i++)
+  {
+    vcoord[i].div(vcoord[i], r(i, i));
+  }
+}
+
+static void babai(const FP_mat<mpfr_t> &matrix, const Matrix<FP_NR<mpfr_t>> &mu,
+                  const Matrix<FP_NR<mpfr_t>> &r, const vector<FP_NR<mpfr_t>> &target,
+                  vector<FP_NR<mpfr_t>> &target_coord)
+{
+
+  int d = matrix.get_rows();
+  get_gscoords(matrix, mu, r, target, target_coord);
+  for (int i = d - 1; i >= 0; i--)
+  {
+    target_coord[i].rnd(target_coord[i]);
+    for (int j = 0; j < i; j++)
+      target_coord[j].submul(mu(i, j), target_coord[i]);
+  }
+}
+
+int closest_vector(ZZ_mat<mpz_t> &b, const vector<Z_NR<mpz_t>> &int_target,
+                   vector<Z_NR<mpz_t>> &sol_coord, int method, int flags)
+{
+  // d = lattice dimension (note that it might decrease during preprocessing)
+  int d = b.get_rows();
+  // n = dimension of the space
+  int n = b.get_cols();
+
+  FPLLL_CHECK(d > 0 && n > 0, "closestVector: empty matrix");
+  FPLLL_CHECK(d <= n, "closestVector: number of vectors > size of the vectors");
+
+  // Sets the floating-point precision
+  // Error bounds on GSO are valid if prec >= minprec
+  double rho;
+  int min_prec = gso_min_prec(rho, d, LLL_DEF_DELTA, LLL_DEF_ETA);
+  int prec     = max(53, min_prec + 10);
+  int old_prec = FP_NR<mpfr_t>::set_prec(prec);
+
+  // Allocates space for vectors and matrices in constructors
+  ZZ_mat<mpz_t> empty_mat;
+  MatGSO<Z_NR<mpz_t>, FP_NR<mpfr_t>> gso(b, empty_mat, empty_mat, GSO_INT_GRAM);
+  vector<FP_NR<mpfr_t>> target_coord;
+  FP_NR<mpfr_t> max_dist;
+  Z_NR<mpz_t> itmp1;
+
+  // Computes the Gram-Schmidt orthogonalization in floating-point
+  gso.update_gso();
+  gen_zero_vect(sol_coord, d);
+
+  /* Applies Babai's algorithm. Because we use fp, it might be necessary to
+      do it several times (if ||target|| >> ||b_i||) */
+  FP_mat<mpfr_t> float_matrix(d, n);
+  vector<FP_NR<mpfr_t>> target(n), babai_sol;
+  vector<Z_NR<mpz_t>> int_new_target = int_target;
+
+  for (int i = 0; i < d; i++)
+    for (int j = 0; j < n; j++)
+      float_matrix(i, j).set_z(b(i, j));
+
+  for (int loop_idx = 0;; loop_idx++)
+  {
+    if (loop_idx >= 0x100 && ((loop_idx & (loop_idx - 1)) == 0))
+      FPLLL_INFO("warning: possible infinite loop in Babai's algorithm");
+
+    for (int i = 0; i < n; i++)
+    {
+      target[i].set_z(int_new_target[i]);
+    }
+    babai(float_matrix, gso.get_mu_matrix(), gso.get_r_matrix(), target, babai_sol);
+    int idx;
+    for (idx = 0; idx < d && babai_sol[idx] >= -1 && babai_sol[idx] <= 1; idx++)
+    {
+    }
+    if (idx == d)
+      break;
+
+    for (int i = 0; i < d; i++)
+    {
+      itmp1.set_f(babai_sol[i]);
+      sol_coord[i].add(sol_coord[i], itmp1);
+      for (int j = 0; j < n; j++)
+        int_new_target[j].submul(itmp1, b(i, j));
+    }
+  }
+  // FPLLL_TRACE("BabaiSol=" << sol_coord);
+  get_gscoords(float_matrix, gso.get_mu_matrix(), gso.get_r_matrix(), target, target_coord);
+
+  /* Computes a very large bound to make the algorithm work
+      until the first solution is found */
+  max_dist = 0.0;
+  for (int i = 1; i < d; i++)
+  {
+    // get_r_exp(i, i) = r(i, i) because gso is initialized without GSO_ROW_EXPO
+    max_dist.add(max_dist, gso.get_r_exp(i, i));
+  }
+
+  vector<int> max_indices;
+  if (method & CVPM_PROVED)
+  {
+    // For Exact CVP, we need to reset enum below depth with maximal r_i
+    max_indices = vector<int>(d);
+    int cur, max_index, previous_max_index;
+    previous_max_index = max_index = d - 1;
+    FP_NR<mpfr_t> max_val;
+
+    while (max_index > 0)
+    {
+      max_val = gso.get_r_exp(max_index, max_index);
+      for (cur = previous_max_index - 1; cur >= 0; --cur)
+      {
+        if (max_val <= gso.get_r_exp(cur, cur))
+        {
+          max_val   = gso.get_r_exp(cur, cur);
+          max_index = cur;
+        }
+      }
+      for (cur = max_index; cur < previous_max_index; ++cur)
+        max_indices[cur] = max_index;
+      max_indices[previous_max_index] = previous_max_index;
+      previous_max_index              = max_index;
+      --max_index;
+    }
+  }
+  FPLLL_TRACE("max_indices " << max_indices);
+
+  FastErrorBoundedEvaluator evaluator(n, gso.get_mu_matrix(), gso.get_r_matrix(), EVALMODE_CV);
+
+  // Main loop of the enumeration
+  Enumeration<Z_NR<mpz_t>, FP_NR<mpfr_t>> enumobj(gso, evaluator, max_indices);
+  enumobj.enumerate(0, d, max_dist, 0, target_coord);
+
+  int result = RED_ENUM_FAILURE;
+  if (!evaluator.empty())
+  {
+    FPLLL_TRACE("evaluator.bestsol_coord=" << evaluator.begin()->second);
+    if (flags & CVP_VERBOSE)
+      FPLLL_INFO("max_dist=" << max_dist);
+    for (int i = 0; i < d; i++)
+    {
+      itmp1.set_f(evaluator.begin()->second[i]);
+      sol_coord[i].add(sol_coord[i], itmp1);
+    }
+    result = RED_SUCCESS;
+  }
+
+  FP_NR<mpfr_t>::set_prec(old_prec);
+  return result;
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/svpcvp.h b/fplll/svpcvp.h
new file mode 100644 (file)
index 0000000..f140d53
--- /dev/null
@@ -0,0 +1,80 @@
+/* Copyright (C) 2008-2011 Xavier Pujol.
+   Copyright (C) 2019 Koen de Boer & Wessel van Woerden
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+/** \file svpcvp.h
+    Shortest vector problem. */
+
+#ifndef FPLLL_SVPCVP_H
+#define FPLLL_SVPCVP_H
+
+#include "util.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/**
+ * Computes a shortest vector of a lattice.
+ * The vectors must be linearly independant and the basis must be LLL-reduced
+ * with delta=LLL_DEF_DELTA and eta=LLL_DEF_ETA.
+ * The result is guaranteed if method = SVPM_PROVED.
+ */
+int shortest_vector(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord,
+                    SVPMethod method = SVPM_PROVED, int flags = SVP_DEFAULT);
+
+int shortest_vector_pruning(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord,
+                            const vector<double> &pruning, int flags = SVP_DEFAULT);
+
+int shortest_vector_pruning(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &subsol_coord, vector<double> &subsol_dist,
+                            const vector<double> &pruning, int flags = SVP_DEFAULT);
+
+int shortest_vector_pruning(ZZ_mat<mpz_t> &b, vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &auxsol_coord, vector<double> &auxsol_dist,
+                            const int max_aux_sols, const vector<double> &pruning,
+                            int flags = SVP_DEFAULT);
+
+int shortest_vector(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                    vector<Z_NR<mpz_t>> &sol_coord, SVPMethod method = SVPM_PROVED,
+                    int flags = SVP_DEFAULT);
+
+int shortest_vectors(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                     vector<vector<Z_NR<mpz_t>>> &sol_coord, vector<enumf> &sol_dist,
+                     const int max_sols, SVPMethod method, int flags);
+
+int shortest_vector_pruning(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                            vector<Z_NR<mpz_t>> &sol_coord, const vector<double> &pruning,
+                            int flags = SVP_DEFAULT);
+
+int shortest_vector_pruning(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                            vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &subsol_coord, vector<double> &subsol_dist,
+                            const vector<double> &pruning, int flags = SVP_DEFAULT);
+
+int shortest_vector_pruning(MatGSOInterface<Z_NR<mpz_t>, FP_NR<mpfr_t>> &gso,
+                            vector<Z_NR<mpz_t>> &sol_coord,
+                            vector<vector<Z_NR<mpz_t>>> &auxsol_coord, vector<double> &auxsol_dist,
+                            const int max_aux_sols, const vector<double> &pruning,
+                            int flags = SVP_DEFAULT);
+/**
+ * Computes a closest vector of a lattice to a target.
+ * The vectors must be linearly independant and the basis must be LLL-reduced
+ * with delta=LLL_DEF_DELTA and eta=LLL_DEF_ETA.
+ * The result is guaranteed if method = CVPM_PROVED.
+ */
+int closest_vector(ZZ_mat<mpz_t> &b, const vector<Z_NR<mpz_t>> &int_target,
+                   vector<Z_NR<mpz_t>> &sol_coord, int method = CVPM_FAST, int flags = CVP_DEFAULT);
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/threadpool.cpp b/fplll/threadpool.cpp
new file mode 100644 (file)
index 0000000..a386150
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 2019 Marc Stevens.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <fplll/threadpool.h>
+
+FPLLL_BEGIN_NAMESPACE
+
+thread_pool::thread_pool threadpool(std::thread::hardware_concurrency() - 1);
+
+/* get and set number of threads in threadpool, both return the (new) number of threads */
+int get_threads() { return threadpool.size() + 1; }
+
+int set_threads(int th)
+{
+  if (th > int(std::thread::hardware_concurrency()) || th == -1)
+    th = std::thread::hardware_concurrency();
+  if (th < 1)
+    th = 1;
+  threadpool.resize(th - 1);
+  return get_threads();
+}
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/threadpool.h b/fplll/threadpool.h
new file mode 100644 (file)
index 0000000..9930534
--- /dev/null
@@ -0,0 +1,71 @@
+/* Copyright (C) 2019 Marc Stevens.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_THREADPOOL_H
+#define FPLLL_THREADPOOL_H
+
+#include <fplll/defs.h>
+#include <fplll/io/thread_pool.hpp>
+
+FPLLL_BEGIN_NAMESPACE
+
+/* import C++11 standard mutex, lock_guard<mutex>, unique_lock<mutex> for convenience */
+typedef std::mutex mutex;
+typedef std::lock_guard<std::mutex> lock_guard;
+typedef std::unique_lock<std::mutex> unique_lock;
+
+/* import thread_pool::barrier
+        class barrier {
+        public:
+                barrier(size_t N);
+                void wait(); // wait until N threads have called wait()
+        }
+*/
+typedef thread_pool::barrier barrier;
+
+/* fplll's threadpool
+
+        Note that for N threads, the total threadpool consists of the main thread and N-1 pooled
+   threads. Default use is to submit N jobs and call wait_work in the main thread, which will cause
+   the main thread to also start processing jobs.
+
+        class threadpool {
+        public:
+
+                // simple way to add a job
+                void push(const std::function<void()>& f);
+                void push(std::function<void()>&& f);
+
+                // advanced way to add job
+                template<typename F, typename... Args>
+                auto enqueue(F&& f, Args&&... args) -> std::future<typename
+   std::result_of<F(Args...)>::type>;
+
+                // process tasks with main thread & then wait until all threads are idle
+                // DO NOT CALL FROM A JOB FUNCTION: WILL CAUSE DEADLOCK
+                void wait_work();
+
+        }
+*/
+
+extern thread_pool::thread_pool threadpool;
+
+/* get and set number of threads in threadpool, both return the (new) number of threads */
+int get_threads();
+int set_threads(int th = -1);  // -1 defaults number of threads to machine's number of cores
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/util.cpp b/fplll/util.cpp
new file mode 100644 (file)
index 0000000..d602021
--- /dev/null
@@ -0,0 +1,300 @@
+/* Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "util.h"
+
+#ifdef DEBUG
+int debug_depth = 0;
+#endif
+
+FPLLL_BEGIN_NAMESPACE
+
+enum MinPrecAlgo
+{
+  MINPREC_GSO,
+  MINPREC_L2
+};
+
+/* State of LDConvHelper (declared in nr.h, must be defined in exactly one
+   source file) */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+mpfr_t LDConvHelper::temp;
+bool LDConvHelper::temp_initialized = false;
+#endif
+
+/* State of the random generator (declared in nr.h, must be defined in exactly
+   one source file) */
+bool RandGen::initialized = false;
+gmp_randstate_t RandGen::gmp_state;
+
+static int compute_min_prec(double &rho, int d, double delta, double eta, double epsilon,
+                            MinPrecAlgo algo)
+{
+  int old_prec = FP_NR<mpfr_t>::set_prec(53);
+  FP_NR<mpfr_t> f_minprec, f_rho, f_d, f_eta, f_delta, f_epsilon, tmp1, tmp2;
+
+  // These four conversions are exact
+  f_d       = static_cast<double>(d);
+  f_eta     = eta;
+  f_delta   = delta;
+  f_epsilon = epsilon;
+  if (algo == MINPREC_L2)
+  {
+    // eta - 0.5 is an exact fp operation
+    if (f_epsilon > eta - 0.5)
+      f_epsilon = eta - 0.5;
+    tmp1 = 1.0;
+    tmp1.sub(tmp1, f_delta, GMP_RNDD);
+    if (f_epsilon > tmp1)
+      f_epsilon = tmp1;
+    // now fEpsilon <= min(epsilon, eta - 0.5, 1 - delta);
+  }
+  // Computes tmp1 >= (1 + eta) ^ 2 + epsilon
+  tmp1 = 1.0;                       // exact
+  tmp1.add(f_eta, tmp1, GMP_RNDU);  // >= 1 + eta
+  tmp1.mul(tmp1, tmp1, GMP_RNDU);   // >= (1 + eta) ^ 2
+  tmp1.add(tmp1, f_epsilon, GMP_RNDU);
+  // Computes tmp2 <= delta - eta ^ 2
+  tmp2.mul(f_eta, f_eta, GMP_RNDU);
+  tmp2.sub(f_delta, tmp2, GMP_RNDD);
+  FPLLL_CHECK(tmp2 > 0, "invalid LLL parameters, eta must be < sqrt(delta)");
+  // Computes rho >= ((1 + eta) ^ 2 + epsilon) / (delta - eta ^ 2)
+  f_rho.div(tmp1, tmp2, GMP_RNDU);
+  rho = f_rho.get_d(GMP_RNDU);
+
+  /* Computes minprec >= constant + 2 * log2(d) - log2(epsilon) + d * log2(rho)
+     (constant = 5 for GSO, 10 for LLL) */
+  tmp1.log(f_d, GMP_RNDU);         // >= log(d)
+  tmp1.mul_2si(tmp1, 1);           // >= 2 * log(d)
+  tmp2.log(f_epsilon, GMP_RNDD);   // <= log(epsilon) (<= 0)
+  tmp1.sub(tmp1, tmp2, GMP_RNDU);  // >= 2 * log(d) - log(epsilon)
+  tmp2.log(f_rho, GMP_RNDU);       // >= log(rho)
+  tmp2.mul(f_d, tmp2, GMP_RNDU);   // >= d * log(rho)
+  tmp1.add(tmp1, tmp2, GMP_RNDU);  // >= 2*log(d)-log(epsilon)+d*log(rho)
+  tmp2 = 2.0;                      // exact
+  tmp2.log(tmp2, GMP_RNDD);        // <= log(2)
+  tmp1.div(tmp1, tmp2, GMP_RNDU);  // >= 2*log2(d)-log2(epsilon)+d*log2(rho)
+  tmp2 = (algo == MINPREC_L2) ? 10.0 : 5.0;
+  f_minprec.add(tmp1, tmp2, GMP_RNDU);
+  int minprec = static_cast<int>(ceil(f_minprec.get_d(GMP_RNDU)));
+  mpfr_free_cache();
+  FP_NR<mpfr_t>::set_prec(old_prec);
+  return minprec;
+}
+
+int gso_min_prec(double &rho, int d, double delta, double eta, double epsilon)
+{
+  return compute_min_prec(rho, d, delta, eta, epsilon, MINPREC_GSO);
+}
+
+int l2_min_prec(int d, double delta, double eta, double epsilon)
+{
+  double rho;
+  return compute_min_prec(rho, d, delta, eta, epsilon, MINPREC_L2);
+}
+
+int hlll_min_prec(int d_i, int n_i, double delta_d, double eta_d, double theta_d, double c_d)
+{
+  FPLLL_CHECK(delta_d < 1.0 && delta_d >= 0.25, "delta must be in [1/4, 1).");
+  FPLLL_CHECK(theta_d >= 0.0, "theta must be positive.");
+  FPLLL_CHECK(eta_d >= 0.5, "theta must be larger than or equal to 0.5.");
+  FPLLL_CHECK(eta_d - theta_d > 0.5, "eta - theta must be larger than 0.5.");
+
+  int old_prec = FP_NR<mpfr_t>::set_prec(53);
+  FP_NR<mpfr_t> d, n, delta, eta, theta, c, alpha, c0, c1, rho, phi, p0, p;
+  FP_NR<mpfr_t> ftmp0, ftmp1, ftmp2, ftmp3, ftmp4;
+
+  d     = d_i;
+  n     = n_i;
+  delta = delta_d;
+  eta   = eta_d;
+  theta = theta_d;
+  c     = c_d;
+
+  // ftmp0 = (1 + theta^2) * delta - eta^2
+  ftmp0 = (1.0 + theta * theta) * delta - eta * eta;
+  // ftmp0 = sqrt((1 + theta^2) * delta - eta^2)
+  ftmp0.sqrt(ftmp0);
+
+  // alpha = theta * eta + sqrt((1 + theta^2) * delta - eta^2) / (delta - eta^2)
+  alpha = (theta * eta + ftmp0) / (delta - eta * eta);
+
+  // ftmp0 = 3 / 2
+  ftmp0 = 3.0 / 2.0;
+  // ftmp0 = sqrt(3 / 2)
+  ftmp0.sqrt(ftmp0);
+  // ftmp1 = 1 - eta - theta
+  ftmp1 = 1.0 - eta - theta;
+  // ftmp1 = |1 - eta - theta|
+  ftmp1.abs(ftmp1);
+  ftmp2 = 6.0;
+  // ftmp2 = sqrt(6)
+  ftmp2.sqrt(ftmp2);
+  // ftmp3 = 1 + d * eta^2
+  ftmp3 = 1.0 + d * eta * eta;
+  // ftmp3 = sqrt(1 + d * eta^2)
+  ftmp3.sqrt(ftmp3);
+  // ftmp4 = sqrt(d)
+  ftmp4.sqrt(d);
+  // ftmp0 = 1 + |1 - eta - theta| * alpha / ((eta + theta) * (-1 + sqrt(3/2)))
+  ftmp0 = (1.0 + ftmp1 * alpha) / ((eta + theta) * (-1.0 + ftmp0));
+  // ftmp1 = 4 * sqrt(6) / (1 + eta) * sqrt(1 + d * eta^2)
+  ftmp1 = 4.0 * ftmp2 / (1.0 + eta) * ftmp3;
+  // ftmp0 = max(1 + |1 - eta - theta| * alpha / ((eta + theta) * (-1 + sqrt(3/2))),
+  //             4 * sqrt(6) / (1 + eta) * sqrt(1 + d * eta^2))
+  ftmp0.max_f(ftmp1);
+  // c0 = max(...) * n * sqrt(d)
+  c0 = ftmp0 * n * ftmp4;
+
+  // c1 = 8 * d * (n + 9) * c0
+  c1 = 8.0 * d * (n + 9.0) * c0;
+
+  // rho = (1 + eta + theta) * alpha
+  rho = (1.0 + eta + theta) * alpha;
+
+  // ftmp0 = rho^(d + 1) (since we want to compute phi(d))
+  ftmp0.pow_si(rho, d_i + 1);
+  // phi(d) = c1 * (1 + 1 / theta) * ftmp0
+  phi = c1 * (1.0 + 1.0 / theta) * ftmp0;
+
+  // ftmp0 = alpha^d
+  ftmp0.pow_si(alpha, d_i);
+  // ftmp0 = log(d^3 * phi(d) * alpha^d / theta)
+  ftmp0.log(d * d * d * phi * ftmp0 / theta);
+  // ftmp1 = log(2)
+  ftmp1.log(2);
+  // ftmp0 = log(d^3 * phi(d) * alpha^d / theta) / log(2)
+  ftmp0 = ftmp0 / ftmp1;
+  // p0 = log2(d^3 * phi(d) * alpha^d / theta) + 16 + c * d / 2
+  p0 = ftmp0 + 16.0 + c * d / 2.0;
+
+  // ftmp0 = log(1 - delta)
+  ftmp0.log(1.0 - delta);
+  // ftmp0 = log(1 - delta) / log(2)
+  ftmp0 = ftmp0 / ftmp1;
+  // ftmp2 = log(eta - theta - 1/2)
+  ftmp2.log(eta - theta - 0.5);
+  // ftmp2 = log(eta - theta - 1/2) / log(2)
+  ftmp2 = ftmp2 / ftmp1;
+  // p = p0 + 1 - log2(1 - delta) - log2(eta - theta - 1 / 2)
+  p = p0 + 1.0 - ftmp0 - ftmp2;
+
+  // Convert p in int
+  int p_i = static_cast<int>(ceil(p.get_d(GMP_RNDU)));
+
+  FP_NR<mpfr_t>::set_prec(old_prec);
+
+  return p_i;
+}
+
+/**
+ * Computes the volume of a d-dimensional hypersphere of radius 1.
+ */
+void sphere_volume(FP_NR<mpfr_t> &volume, int d)
+{
+  FP_NR<mpfr_t> rtmp1;
+  volume = pow(M_PI, (double)(d / 2));
+
+  if (d % 2 == 0)
+    for (int i = 1; i <= d / 2; i++)
+    {
+      rtmp1 = (double)i;
+      volume.div(volume, rtmp1);
+    }
+  else
+    for (int i = 0; i <= d / 2; i++)
+    {
+      rtmp1 = 2.0 / (double)(2 * i + 1);
+      volume.mul(volume, rtmp1);
+    }
+}
+
+/**
+ * Estimates the cost of the enumeration for SVP.
+ */
+void cost_estimate(FP_NR<mpfr_t> &cost, const FP_NR<mpfr_t> &bound, const Matrix<FP_NR<mpfr_t>> &r,
+                   int dimMax)
+{
+  FP_NR<mpfr_t> det, level_cost, tmp1;
+  det  = 1.0;
+  cost = 0.0;
+
+  for (int i = dimMax - 1; i >= 0; i--)
+  {
+    tmp1.div(bound, r(i, i));
+    det.mul(det, tmp1);
+
+    level_cost.sqrt(det);
+    sphere_volume(tmp1, dimMax - i);
+    level_cost.mul(level_cost, tmp1);
+
+    cost.add(cost, level_cost);
+  }
+}
+
+const char *get_red_status_str(int status)
+{
+  if (status >= 0 && status < RED_STATUS_MAX)
+    return RED_STATUS_STR[status];
+  else
+    return "unknown error";
+}
+
+template <class ZT> void zeros_first(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv_t)
+{
+  int i, d = b.get_rows();
+  for (i = d; i > 0 && b[i - 1].is_zero(); i--)
+  {
+  }
+  if (i > 0 && i < d)
+  {
+    b.rotate(0, i, d - 1);
+    if (!u.empty())
+      u.rotate(0, i, d - 1);
+    if (!u_inv_t.empty())
+      u_inv_t.rotate(0, i, d - 1);
+  }
+}
+
+template <class ZT> void zeros_last(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv_t)
+{
+  int i, d = b.get_rows();
+  for (i = 0; i < d && b[i].is_zero(); i++)
+  {
+  }
+  if (i > 0 && i < d)
+  {
+    b.rotate(0, i, d - 1);
+    if (!u.empty())
+      u.rotate(0, i, d - 1);
+    if (!u_inv_t.empty())
+      u_inv_t.rotate(0, i, d - 1);
+  }
+}
+
+template void zeros_first<mpz_t>(ZZ_mat<mpz_t> &, ZZ_mat<mpz_t> &, ZZ_mat<mpz_t> &);
+template void zeros_last<mpz_t>(ZZ_mat<mpz_t> &, ZZ_mat<mpz_t> &, ZZ_mat<mpz_t> &);
+
+#ifdef FPLLL_WITH_ZLONG
+template void zeros_first<long>(ZZ_mat<long> &, ZZ_mat<long> &, ZZ_mat<long> &);
+template void zeros_last<long>(ZZ_mat<long> &, ZZ_mat<long> &, ZZ_mat<long> &);
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+template void zeros_first<double>(ZZ_mat<double> &, ZZ_mat<double> &, ZZ_mat<double> &);
+template void zeros_last<double>(ZZ_mat<double> &, ZZ_mat<double> &, ZZ_mat<double> &);
+#endif
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/util.h b/fplll/util.h
new file mode 100644 (file)
index 0000000..5ae6936
--- /dev/null
@@ -0,0 +1,107 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+/** \file util.h
+    Miscellaneous. */
+
+#ifndef FPLLL_UTIL_H
+#define FPLLL_UTIL_H
+
+#include "nr/matrix.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+static inline int cputime()
+{
+#ifdef FPLLL_WITH_GETRUSAGE
+  struct rusage rus;
+  getrusage(RUSAGE_SELF, &rus);
+  return rus.ru_utime.tv_sec * 1000 + rus.ru_utime.tv_usec / 1000;
+#else
+  return time(NULL) * 1000;
+#endif
+}
+
+/* Computes result = x * m (it is not required that result is initialized,
+   x.size() must be equal to m.GetNumRows()) */
+template <class ZT>
+void vector_matrix_product(vector<ZT> &result, const vector<ZT> &x, const Matrix<ZT> &m)
+{
+  int nrows = m.get_rows(), ncols = m.get_cols();
+  gen_zero_vect(result, ncols);
+  for (int i = 0; i < nrows; i++)
+    for (int j = 0; j < ncols; j++)
+      result[j].addmul(x[i], m(i, j));
+}
+
+/* Computes result = x * m (it is not required that result is initialized,
+   x.size() must be equal to m.GetNumRows()) */
+template <class ZT>
+void vector_matrix_product(NumVect<ZT> &result, const NumVect<ZT> &x, const Matrix<ZT> &m)
+{
+  int nrows = m.get_rows(), ncols = m.get_cols();
+  result.gen_zero(ncols);
+  for (int i = 0; i < nrows; i++)
+    for (int j = 0; j < ncols; j++)
+      result[j].addmul(x[i], m(i, j));
+}
+
+const double DEF_GSO_PREC_EPSILON = 0.03;
+
+/**
+ * Returns the minimum precision required to ensure that error bounds on the
+ * GSO are valid. Computes rho such that for all 0 &lt;= i &lt; d and 0 &lt;= j &lt;= i:
+ *
+ *   |r~_i - r_i| / r_i     <= d * rho ^ (i + 1) * 2 ^ (2 - prec)
+ *
+ *   |mu~_(i,j) - mu_(i,j)| <= d * rho ^ (i + 1) * 2 ^ (4 - prec)
+ */
+int gso_min_prec(double &rho, int d, double delta, double eta,
+                 double epsilon = DEF_GSO_PREC_EPSILON);
+
+/**
+ * Returns the minimum precision for the proved version of LLL.
+ */
+int l2_min_prec(int d, double delta, double eta, double epsilon);
+
+/**
+ * Returns the minimum precision for the proved version of HLLL.
+ */
+int hlll_min_prec(int d_i, int n_i, double delta, double eta, double theta, double c);
+
+/**
+ * Computes the volume of a d-dimensional hypersphere of radius 1.
+ */
+void sphere_volume(FP_NR<mpfr_t> &volume, int d);
+
+/**
+ * Estimates the cost of the enumeration for SVP.
+ */
+void cost_estimate(FP_NR<mpfr_t> &cost, const FP_NR<mpfr_t> &bound, const Matrix<FP_NR<mpfr_t>> &r,
+                   int dimMax);
+
+template <class ZT> void zeros_first(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv_t);
+
+template <class ZT> void zeros_last(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv_t);
+
+/**
+ * Returns the string corresponding to an error code of LLL/BKZ.
+ */
+const char *get_red_status_str(int status);
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/fplll/wrapper.cpp b/fplll/wrapper.cpp
new file mode 100644 (file)
index 0000000..1fd7daf
--- /dev/null
@@ -0,0 +1,1099 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "wrapper.h"
+#include "hlll.h"
+#include "lll.h"
+#include "util.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/* prec=53, eta=0.501, dim < dim_double_max [ (delta / 100.0) + 25 ] */
+const double dim_double_max[75] = {
+    0,     26,    29.6,  28.1,  31.1,  32.6,  34.6,  34,    37.7,  38.8,  39.6,  41.8,  40.9,
+    43.6,  44.2,  47,    46.8,  50.6,  49.1,  51.5,  52.5,  54.8,  54.6,  57.4,  57.6,  59.9,
+    61.8,  62.3,  64.5,  67.1,  68.8,  68.3,  69.9,  73.1,  74,    76.1,  76.8,  80.9,  81.8,
+    83,    85.3,  87.9,  89,    90.1,  89,    94.6,  94.8,  98.7,  99,    101.6, 104.9, 106.8,
+    108.2, 107.4, 110,   112.7, 114.6, 118.1, 119.7, 121.8, 122.9, 126.6, 128.6, 129,   133.6,
+    126.9, 135.9, 139.5, 135.2, 137.2, 139.3, 142.8, 142.4, 142.5, 145.4};
+
+const double eta_dep[10] = {1.,       // 0.5
+                            1.,       // 0.55
+                            1.0521,   // 0.6
+                            1.1254,   // 0.65
+                            1.2535,   // 0.7
+                            1.3957,   // 0.75
+                            1.6231,   // 0.8
+                            1.8189,   // 0.85
+                            2.1025,   // 0.9
+                            2.5117};  // 0.95
+
+Wrapper::Wrapper(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, ZZ_mat<mpz_t> &u_inv, double delta, double eta,
+                 int flags)
+    : status(RED_SUCCESS), b(b), u(u), u_inv(u_inv), delta(delta), eta(eta), use_long(false),
+      last_early_red(0)
+{
+  n            = b.get_cols();
+  d            = b.get_rows();
+  this->flags  = flags;
+  max_exponent = b.get_max_exp() + (int)ceil(0.5 * log2((double)d * n));
+
+  // Computes the parameters required for the proved version
+  good_prec = l2_min_prec(d, delta, eta, LLL_DEF_EPSILON);
+}
+
+// Constructor for HLLL
+Wrapper::Wrapper(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, ZZ_mat<mpz_t> &u_inv, double delta, double eta,
+                 double theta, double c, int flags)
+    : status(RED_SUCCESS), b(b), u(u), u_inv(u_inv), delta(delta), eta(eta), use_long(false),
+      last_early_red(-1), theta(theta), c(c)
+{
+  n           = b.get_cols();
+  d           = b.get_rows();
+  this->flags = flags;
+
+  // Computes the parameters required for the proved version
+  good_prec = hlll_min_prec(d, n, delta, eta, theta, c);
+}
+
+bool Wrapper::little(int kappa, int precision)
+{
+  /*one may add here dimension arguments with respect to eta and delta */
+  int dm = (int)(delta * 100. - 25.);
+  if (dm < 0)
+    dm = 0;
+  if (dm > 74)
+    dm = 74;
+
+  int em = (int)((eta - 0.5) * 20);
+  if (em < 0)
+    em = 0;
+  if (em > 9)
+    em = 9;
+
+  double p = max(1.0, precision / 53.0);
+
+  p *= eta_dep[em]; /* eta dependance */
+  p *= dim_double_max[dm];
+  // cerr << kappa << " compared to " << p << endl;
+  return kappa < p;
+}
+
+/**
+ * main function. Method determines whether heuristic, fast or proved
+ */
+template <class Z, class F>
+int Wrapper::call_lll(ZZ_mat<Z> &bz, ZZ_mat<Z> &uz, ZZ_mat<Z> &u_invZ, LLLMethod method,
+                      int precision, double delta, double eta)
+{
+  typedef Z_NR<Z> ZT;
+  typedef FP_NR<F> FT;
+
+  if (flags & LLL_VERBOSE)
+  {
+    cerr << "====== Wrapper: calling " << LLL_METHOD_STR[method] << "<" << num_type_str<Z>() << ","
+         << num_type_str<F>() << "> method";
+    if (precision > 0)
+    {
+      cerr << " (precision=" << precision << ")";
+    }
+    cerr << " ======" << endl;
+  }
+
+  int gso_flags = 0;
+  if (method == LM_PROVED)
+    gso_flags |= GSO_INT_GRAM;
+  if (method == LM_FAST)
+    gso_flags |= GSO_ROW_EXPO;
+  if (method != LM_PROVED && precision == 0)
+    gso_flags |= GSO_OP_FORCE_LONG;
+
+  int old_prec = FP_NR<mpfr_t>::get_prec();
+  if (precision > 0)
+  {
+    FP_NR<mpfr_t>::set_prec(precision);
+  }
+  MatGSO<ZT, FT> m_gso(bz, uz, u_invZ, gso_flags);
+  LLLReduction<ZT, FT> lll_obj(m_gso, delta, eta, flags);
+  lll_obj.last_early_red = last_early_red;
+  lll_obj.lll();
+  status         = lll_obj.status;
+  last_early_red = max(last_early_red, lll_obj.last_early_red);
+  if (precision > 0)
+  {
+    FP_NR<mpfr_t>::set_prec(old_prec);
+  }
+
+  if (flags & LLL_VERBOSE)
+  {
+    cerr << "====== Wrapper: end of " << LLL_METHOD_STR[method] << " method ======\n" << endl;
+  }
+
+  if (lll_obj.status == RED_SUCCESS)
+    return 0;
+  else if (lll_obj.status == RED_GSO_FAILURE || lll_obj.status == RED_BABAI_FAILURE)
+    return lll_obj.final_kappa;
+  else
+    return -1;
+}
+
+/**
+ * pass the method to call_lll()
+ */
+template <class F> int Wrapper::fast_lll(double delta, double eta)
+{
+  return call_lll<mpz_t, F>(b, u, u_inv, LM_FAST, 0, delta, eta);
+}
+
+template <class Z, class F>
+int Wrapper::heuristic_lll(ZZ_mat<Z> &bz, ZZ_mat<Z> &uz, ZZ_mat<Z> &u_invZ, int precision,
+                           double delta, double eta)
+{
+  return call_lll<Z, F>(bz, uz, u_invZ, LM_HEURISTIC, precision, delta, eta);
+}
+
+template <class Z, class F>
+int Wrapper::proved_lll(ZZ_mat<Z> &bz, ZZ_mat<Z> &uz, ZZ_mat<Z> &u_invZ, int precision,
+                        double delta, double eta)
+{
+  return call_lll<Z, F>(bz, uz, u_invZ, LM_PROVED, precision, delta, eta);
+}
+
+/**
+ * In heuristic_loop(), we only use double or dpe_t or mpfr_t.
+ */
+int Wrapper::heuristic_loop(int precision)
+{
+  int kappa;
+
+  if (precision > numeric_limits<double>::digits)
+    kappa = heuristic_lll<mpz_t, mpfr_t>(b, u, u_inv, precision, delta, eta);
+  else
+  {
+#ifdef FPLLL_WITH_DPE
+    kappa = heuristic_lll<mpz_t, dpe_t>(b, u, u_inv, 0, delta, eta);
+#else
+    kappa = heuristic_lll<mpz_t, mpfr_t>(b, u, u_inv, precision, delta, eta);
+#endif
+  }
+
+  if (kappa == 0)
+    return 0;  // Success
+  else if (precision < good_prec && !little(kappa, precision))
+    return heuristic_loop(increase_prec(precision));
+  else
+    return proved_loop(precision);
+}
+
+int Wrapper::proved_loop(int precision)
+{
+  int kappa;
+#ifdef FPLLL_WITH_QD
+  if (precision > PREC_DD)
+#else
+  if (precision > numeric_limits<double>::digits)
+#endif
+    kappa = proved_lll<mpz_t, mpfr_t>(b, u, u_inv, precision, delta, eta);
+  else if (max_exponent * 2 > MAX_EXP_DOUBLE)
+  {
+#ifdef FPLLL_WITH_DPE
+    kappa = proved_lll<mpz_t, dpe_t>(b, u, u_inv, 0, delta, eta);
+#else
+    kappa = proved_lll<mpz_t, mpfr_t>(b, u, u_inv, precision, delta, eta);
+#endif
+  }
+#ifdef FPLLL_WITH_QD
+  else if (precision > numeric_limits<double>::digits)
+    kappa = proved_lll<mpz_t, dd_real>(b, u, u_inv, precision, delta, eta);
+#endif
+  else
+    kappa = proved_lll<mpz_t, double>(b, u, u_inv, 0, delta, eta);
+
+  if (kappa == 0)
+    return 0;  // Success
+  else if (precision < good_prec)
+    return proved_loop(increase_prec(precision));
+  else
+    return -1;  // This point should never be reached
+}
+
+/**
+ * last call to LLL. Need to be proved_lll.
+ */
+int Wrapper::last_lll()
+{
+
+/* <long, FT> */
+#ifdef FPLLL_WITH_ZLONG
+  if (use_long)
+  {
+    int kappa;
+    if (good_prec <= numeric_limits<double>::digits)
+      kappa = proved_lll<long, double>(b_long, u_long, u_inv_long, good_prec, delta, eta);
+#ifdef FPLLL_WITH_QD
+    else if (good_prec <= PREC_DD)
+      kappa = proved_lll<long, dd_real>(b_long, u_long, u_inv_long, good_prec, delta, eta);
+#endif
+    else
+      kappa = proved_lll<long, mpfr_t>(b_long, u_long, u_inv_long, good_prec, delta, eta);
+    return kappa;
+  }
+#endif
+
+  /* <mpfr, FT> */
+#ifdef FPLLL_WITH_DPE
+  if (good_prec <= numeric_limits<double>::digits)
+    return proved_lll<mpz_t, dpe_t>(b, u, u_inv, good_prec, delta, eta);
+#ifdef FPLLL_WITH_QD
+  else if (good_prec <= PREC_DD)
+  {
+    max_exponent = b.get_max_exp() + (int)ceil(0.5 * log2((double)d * n));
+    if (max_exponent * 2 < MAX_EXP_DOUBLE)
+    {
+      return proved_lll<mpz_t, dd_real>(b, u, u_inv, good_prec, delta, eta);
+    }
+  }
+#endif
+#endif
+  return proved_lll<mpz_t, mpfr_t>(b, u, u_inv, good_prec, delta, eta);
+}
+
+/**
+ * Wrapper.lll() calls
+ *  - heuristic_lll()
+ *  - fast_lll()
+ *  - proved_lll()
+ */
+bool Wrapper::lll()
+{
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+
+#ifdef FPLLL_WITH_ZLONG
+  bool heuristic_with_long =
+      max_exponent < numeric_limits<long>::digits - 2 && u.empty() && u_inv.empty();
+  bool proved_with_long =
+      2 * max_exponent < numeric_limits<long>::digits - 2 && u.empty() && u_inv.empty();
+#else
+  bool heuristic_with_long = false, proved_with_long = false;
+#endif
+
+  int kappa;
+
+  /* small matrix */
+  if (heuristic_with_long)
+  {
+#ifdef FPLLL_WITH_ZLONG
+    set_use_long(true);
+    /* try heuristic_lll <long, double> */
+    heuristic_lll<long, double>(b_long, u_long, u_inv_long, 0, delta, eta);
+#endif
+  }
+  /* large matrix */
+  else
+  {
+
+    /* try fast_lll<mpz_t, double> */
+    kappa            = fast_lll<double>(delta, eta);
+    bool lll_failure = (kappa != 0);
+    int last_prec;
+
+    /* try fast_lll<mpz_t, long double> */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+    if (lll_failure)
+    {
+      kappa       = fast_lll<long double>(delta, eta);
+      lll_failure = kappa != 0;
+    }
+    last_prec = numeric_limits<long double>::digits;
+#else
+    last_prec = numeric_limits<double>::digits;
+#endif
+
+    /* try fast_lll<mpz_t, dd_real> */
+#ifdef FPLLL_WITH_QD
+    if (lll_failure)
+    {
+      kappa       = fast_lll<dd_real>(delta, eta);
+      lll_failure = kappa != 0;
+    }
+    last_prec = PREC_DD;
+#else
+#ifdef FPLLL_WITH_LONG_DOUBLE
+    last_prec = numeric_limits<long double>::digits;
+#else
+    last_prec = numeric_limits<double>::digits;
+#endif
+#endif
+
+    /* loop */
+    if (lll_failure)
+    {
+      int prec_d = numeric_limits<double>::digits;
+      if (little(kappa, last_prec))
+        kappa = proved_loop(prec_d);
+      else
+        kappa = heuristic_loop(increase_prec(prec_d));
+    }
+  }
+
+  set_use_long(proved_with_long);
+  /* final LLL */
+  kappa = last_lll();
+  set_use_long(false);
+  return kappa == 0;
+}
+
+/**
+ * set blong <-- b
+ */
+void Wrapper::set_use_long(bool value)
+{
+#ifdef FPLLL_WITH_ZLONG
+  if (!use_long && value)
+  {
+    if (b_long.empty())
+    {
+      b_long.resize(d, n);
+    }
+    for (int i = 0; i < d; i++)
+      for (int j = 0; j < n; j++)
+        b_long(i, j) = b(i, j).get_si();
+  }
+  else if (use_long && !value)
+  {
+    for (int i = 0; i < d; i++)
+      for (int j = 0; j < n; j++)
+        b(i, j) = b_long(i, j).get_si();
+  }
+  use_long = value;
+#endif
+}
+
+int Wrapper::increase_prec(int precision) { return min(precision * 2, good_prec); }
+
+/* Set of methods for the HLLL wrapper. */
+
+/**
+ * main function to call hlll
+ * Return true if success, false otherwise
+ */
+template <class F> bool Wrapper::call_hlll(LLLMethod method, int precision)
+{
+  typedef FP_NR<F> FT;
+
+  if (flags & LLL_VERBOSE)
+  {
+    cerr << "====== Wrapper: calling " << HLLL_METHOD_STR[method] << "<mpz_t," << num_type_str<F>()
+         << "> method";
+    if (precision > 0)
+    {
+      cerr << " (precision=" << precision << ")";
+    }
+    cerr << " ======" << endl;
+  }
+
+  int householder_flags = 0;
+  if (method == LM_PROVED)
+    householder_flags |= HOUSEHOLDER_DEFAULT;
+  if (method == LM_FAST)
+    householder_flags |= HOUSEHOLDER_ROW_EXPO | HOUSEHOLDER_OP_FORCE_LONG;
+
+  int old_prec = FP_NR<mpfr_t>::get_prec();
+
+  if (precision > 0)
+    FP_NR<mpfr_t>::set_prec(precision);
+
+  MatHouseholder<Z_NR<mpz_t>, FT> m(b, u, u_inv, householder_flags);
+  HLLLReduction<Z_NR<mpz_t>, FT> hlll_obj(m, delta, eta, theta, c, flags);
+  hlll_obj.hlll();
+  int status = hlll_obj.get_status();
+
+  if (precision > 0)
+    FP_NR<mpfr_t>::set_prec(old_prec);
+
+  if (flags & LLL_VERBOSE)
+  {
+    cerr << "====== Wrapper: end of " << HLLL_METHOD_STR[method] << " method ======\n" << endl;
+  }
+
+  if (status == RED_SUCCESS)
+    return true;
+  else
+    return false;
+}
+
+/**
+ * last call to LLL. Need to be proved_lll.
+ */
+bool Wrapper::last_hlll()
+{
+/* <mpfr, FT> */
+#ifdef FPLLL_WITH_DPE
+  if (good_prec <= numeric_limits<double>::digits)
+    return proved_hlll<dpe_t>(good_prec);
+#ifdef FPLLL_WITH_QD
+  else if (good_prec <= PREC_DD)
+    return proved_hlll<dd_real>(good_prec);
+#endif  // FPLLL_WITH_QD
+#endif  // FPLLL_WITH_DPE
+  return proved_hlll<mpfr_t>(good_prec);
+}
+int Wrapper::hlll_proved_loop(int precision)
+{
+  bool status = proved_hlll<mpfr_t>(precision);
+
+  if (status)
+    return 0;  // Success
+  else if (precision < good_prec)
+    return hlll_proved_loop(increase_prec(precision));
+  else
+    return -1;  // This point should never be reached
+}
+
+/**
+ * pass the method to call_hlll()
+ */
+template <class F> bool Wrapper::fast_hlll() { return call_hlll<F>(LM_FAST, 0); }
+
+template <class F> bool Wrapper::proved_hlll(int precision)
+{
+  return call_hlll<F>(LM_PROVED, precision);
+}
+
+bool Wrapper::hlll()
+{
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+
+  int last_prec      = numeric_limits<double>::digits;
+  bool hlll_complete = false;
+
+// TODO: since classical lll is faster than hlll for dim <~ 160, maybe we can
+// use fast_lll<double>() at the beginning of hlll, before calling
+// fast_hlll<double>()
+// Something like the one used in #if 0 should work
+#if 0
+  /* try fast_lll<mpz_t, double> */
+  int kappa        = fast_lll<double>(delta, eta);
+  bool lll_failure = (kappa != 0);
+
+  /* try fast_lll<mpz_t, double> */
+  if (lll_failure)
+    hlll_complete = fast_hlll<double>();
+  else
+    hlll_complete = true;
+#else   // 0
+  hlll_complete = fast_hlll<double>();
+#endif  // 0
+
+  /* try fast_hlll<mpz_t, long double> */
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  if (!hlll_complete)
+  {
+    hlll_complete = fast_hlll<long double>();
+    last_prec     = numeric_limits<long double>::digits;
+  }
+#endif  // FPLLL_WITH_LONG_DOUBLE
+
+  /* try fast_hlll<mpz_t, dd_real> */
+#ifdef FPLLL_WITH_QD
+  if (!hlll_complete)
+  {
+    hlll_complete = fast_hlll<dd_real>();
+    last_prec     = PREC_DD;
+  }
+#endif  // FPLLL_WITH_QD
+
+  /* loop */
+  if (!hlll_complete)
+    hlll_complete = hlll_proved_loop(last_prec);
+
+  hlll_complete = last_hlll();
+
+  return hlll_complete == RED_SUCCESS;
+}
+
+/**
+ * LLL with a typical method "proved or heuristic or fast".
+ * @proved:     exact gram +   exact rowexp +   exact rowaddmul
+ * @heuristic:  approx. gram +   exact rowexp +   exact rowaddmul
+ * @fast:       approx. gram + approx. rowexp + approx. rowaddmul
+ *    (double, long double, dd_real, qd_real)
+ */
+template <class ZT, class FT>
+int lll_reduction_zf(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv, double delta, double eta,
+                     LLLMethod method, int flags)
+{
+  int gso_flags = 0;
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+  if (method == LM_PROVED)
+    gso_flags |= GSO_INT_GRAM;
+  if (method == LM_FAST)
+    gso_flags |= GSO_ROW_EXPO | GSO_OP_FORCE_LONG;
+  MatGSO<Z_NR<ZT>, FP_NR<FT>> m_gso(b, u, u_inv, gso_flags);
+  LLLReduction<Z_NR<ZT>, FP_NR<FT>> lll_obj(m_gso, delta, eta, flags);
+  lll_obj.lll();
+  return lll_obj.status;
+}
+
+template <class ZT>
+int lll_reduction_wrapper(ZZ_mat<ZT> &, ZZ_mat<ZT> &, ZZ_mat<ZT> &, double, double, FloatType, int,
+                          int)
+{
+  FPLLL_ABORT("The wrapper method works only with integer type mpz");
+  return RED_LLL_FAILURE;
+}
+
+template <>
+int lll_reduction_wrapper(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, ZZ_mat<mpz_t> &u_inv, double delta,
+                          double eta, FloatType float_type, int precision, int flags)
+{
+  FPLLL_CHECK(float_type == FT_DEFAULT,
+              "The floating point type cannot be specified with the wrapper method");
+  FPLLL_CHECK(precision == 0, "The precision cannot be specified with the wrapper method");
+  Wrapper wrapper(b, u, u_inv, delta, eta, flags);
+  wrapper.lll();
+  zeros_first(b, u, u_inv);
+  return wrapper.status;
+}
+
+/**
+ * Main function called from call_lll().
+ */
+template <class ZT>
+int lll_reduction_z(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv, double delta, double eta,
+                    LLLMethod method, IntType int_type, FloatType float_type, int precision,
+                    int flags)
+{
+
+  /* switch to wrapper */
+  if (method == LM_WRAPPER)
+    return lll_reduction_wrapper(b, u, u_inv, delta, eta, float_type, precision, flags);
+
+  FPLLL_CHECK(!(method == LM_PROVED && (flags & LLL_EARLY_RED)),
+              "LLL method 'proved' with early reduction is not implemented");
+
+  /* computes the parameters required for the proved version */
+  int good_prec = l2_min_prec(b.get_rows(), delta, eta, LLL_DEF_EPSILON);
+
+  /* sets the parameters and checks the consistency */
+  int sel_prec = 0;
+  if (method == LM_PROVED)
+  {
+    sel_prec = (precision != 0) ? precision : good_prec;
+  }
+  else
+  {
+    sel_prec = (precision != 0) ? precision : PREC_DOUBLE;
+  }
+
+  FloatType sel_ft = float_type;
+
+  /* if manually input precision */
+  if (precision != 0)
+  {
+    if (sel_ft == FT_DEFAULT)
+    {
+      sel_ft = FT_MPFR;
+    }
+    FPLLL_CHECK(sel_ft == FT_MPFR,
+                "The floating type must be mpfr when the precision is specified");
+  }
+
+  if (sel_ft == FT_DEFAULT)
+  {
+    if (method == LM_FAST)
+      sel_ft = FT_DOUBLE;
+#ifdef FPLLL_WITH_DPE
+    else if (sel_prec <= static_cast<int>(FP_NR<dpe_t>::get_prec()))
+      sel_ft = FT_DPE;
+#endif
+#ifdef FPLLL_WITH_QD
+    else if (sel_prec <= static_cast<int>(FP_NR<dd_real>::get_prec()))
+      sel_ft = FT_DD;
+    else if (sel_prec <= static_cast<int>(FP_NR<qd_real>::get_prec()))
+      sel_ft = FT_QD;
+#endif
+    else
+      sel_ft = FT_MPFR;
+  }
+  else if (method == LM_FAST &&
+           (sel_ft != FT_DOUBLE && sel_ft != FT_LONG_DOUBLE && sel_ft != FT_DD && sel_ft != FT_QD))
+  {
+    FPLLL_ABORT("'double' or 'long double' or 'dd' or 'qd' required for "
+                << LLL_METHOD_STR[method]);
+  }
+
+  if (sel_ft == FT_DOUBLE)
+    sel_prec = FP_NR<double>::get_prec();
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  else if (sel_ft == FT_LONG_DOUBLE)
+    sel_prec = FP_NR<long double>::get_prec();
+#endif
+#ifdef FPLLL_WITH_DPE
+  else if (sel_ft == FT_DPE)
+    sel_prec = FP_NR<dpe_t>::get_prec();
+#endif
+#ifdef FPLLL_WITH_QD
+  else if (sel_ft == FT_DD)
+    sel_prec = FP_NR<dd_real>::get_prec();
+  else if (sel_ft == FT_QD)
+    sel_prec = FP_NR<qd_real>::get_prec();
+#endif
+
+  if (flags & LLL_VERBOSE)
+  {
+    cerr << "Starting LLL method '" << LLL_METHOD_STR[method] << "'" << endl
+         << "  integer type '" << INT_TYPE_STR[int_type] << "'" << endl
+         << "  floating point type '" << FLOAT_TYPE_STR[sel_ft] << "'" << endl;
+    if (method != LM_PROVED || int_type != ZT_MPZ || sel_ft == FT_DOUBLE)
+    {
+      cerr << "  The reduction is not guaranteed";
+    }
+    else if (sel_prec < good_prec)
+    {
+      cerr << "  prec < " << good_prec << ", the reduction is not guaranteed";
+    }
+    else
+    {
+      cerr << "  prec >= " << good_prec << ", the reduction is guaranteed";
+    }
+    cerr << endl;
+  }
+
+  // Applies the selected method
+  int status;
+  if (sel_ft == FT_DOUBLE)
+  {
+    status = lll_reduction_zf<ZT, double>(b, u, u_inv, delta, eta, method, flags);
+  }
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  else if (sel_ft == FT_LONG_DOUBLE)
+  {
+    status = lll_reduction_zf<ZT, long double>(b, u, u_inv, delta, eta, method, flags);
+  }
+#endif
+#ifdef FPLLL_WITH_DPE
+  else if (sel_ft == FT_DPE)
+  {
+    status = lll_reduction_zf<ZT, dpe_t>(b, u, u_inv, delta, eta, method, flags);
+  }
+#endif
+#ifdef FPLLL_WITH_QD
+  else if (sel_ft == FT_DD)
+  {
+    unsigned int old_cw;
+    fpu_fix_start(&old_cw);
+    status = lll_reduction_zf<ZT, dd_real>(b, u, u_inv, delta, eta, method, flags);
+    fpu_fix_end(&old_cw);
+  }
+  else if (sel_ft == FT_QD)
+  {
+    unsigned int old_cw;
+    fpu_fix_start(&old_cw);
+    status = lll_reduction_zf<ZT, qd_real>(b, u, u_inv, delta, eta, method, flags);
+    fpu_fix_end(&old_cw);
+  }
+#endif
+  else if (sel_ft == FT_MPFR)
+  {
+    int old_prec = FP_NR<mpfr_t>::set_prec(sel_prec);
+    status       = lll_reduction_zf<ZT, mpfr_t>(b, u, u_inv, delta, eta, method, flags);
+    FP_NR<mpfr_t>::set_prec(old_prec);
+  }
+  else
+  {
+    if (0 <= sel_ft && sel_ft <= FT_MPFR)
+    {
+      // it's a valid choice but we don't have support for it
+      FPLLL_ABORT("Compiled without support for LLL reduction with " << FLOAT_TYPE_STR[sel_ft]);
+    }
+    else
+    {
+      FPLLL_ABORT("Floating point type " << sel_ft << "not supported in LLL");
+    }
+  }
+  zeros_first(b, u, u_inv);
+  return status;
+}
+
+// Verify if b is hlll reduced according to delta and eta
+// For FT != dpe and FT != mpfr
+// This function is not used, but can be used during a testing step.
+template <class ZT, class FT>
+int is_hlll_reduced_zf(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv, double delta, double eta,
+                       double theta)
+{
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+
+  int householder_flags = HOUSEHOLDER_DEFAULT | HOUSEHOLDER_ROW_EXPO;
+  MatHouseholder<Z_NR<ZT>, FP_NR<FT>> m(b, u, u_inv, householder_flags);
+
+  return is_hlll_reduced<Z_NR<ZT>, FP_NR<FT>>(m, delta, eta, theta);
+}
+
+// Verify if b is hlll reduced according to delta and eta
+// For FT == dpe or FT == mpfr
+template <class ZT, class FT>
+int is_hlll_reduced_pr(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv, double delta, double eta,
+                       double theta)
+{
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+
+  int householder_flags = HOUSEHOLDER_DEFAULT;
+  MatHouseholder<Z_NR<ZT>, FP_NR<FT>> m(b, u, u_inv, householder_flags);
+
+  return is_hlll_reduced<Z_NR<ZT>, FP_NR<FT>>(m, delta, eta, theta);
+}
+
+template <class ZT>
+int hlll_reduction_wrapper(ZZ_mat<ZT> &, ZZ_mat<ZT> &, ZZ_mat<ZT> &, double, double, double, double,
+                           FloatType, int, int)
+{
+  FPLLL_ABORT("The wrapper method works only with integer type mpz");
+  return RED_LLL_FAILURE;
+}
+
+template <>
+int hlll_reduction_wrapper(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, ZZ_mat<mpz_t> &u_inv, double delta,
+                           double eta, double theta, double c, FloatType float_type, int precision,
+                           int flags)
+{
+  FPLLL_CHECK(float_type == FT_DEFAULT,
+              "The floating point type cannot be specified with the wrapper method");
+  FPLLL_CHECK(precision == 0, "The precision cannot be specified with the wrapper method");
+  Wrapper wrapper(b, u, u_inv, delta, eta, theta, c, flags);
+  wrapper.hlll();
+  zeros_first(b, u, u_inv);
+  return wrapper.status;
+}
+
+template <class ZT, class FT>
+int hlll_reduction_zf(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv, double delta, double eta,
+                      double theta, double c, LLLMethod method, int flags)
+{
+  if (b.get_rows() == 0 || b.get_cols() == 0)
+    return RED_SUCCESS;
+  int householder_flags = HOUSEHOLDER_DEFAULT;
+  if (method == LM_FAST)
+  {
+    householder_flags |= HOUSEHOLDER_ROW_EXPO | HOUSEHOLDER_OP_FORCE_LONG;
+    // householder_flags |= HOUSEHOLDER_ROW_EXPO;
+  }
+  MatHouseholder<Z_NR<ZT>, FP_NR<FT>> m(b, u, u_inv, householder_flags);
+  HLLLReduction<Z_NR<ZT>, FP_NR<FT>> hlll_obj(m, delta, eta, theta, c, flags);
+  hlll_obj.hlll();
+
+  return hlll_obj.get_status();
+}
+
+template <class ZT>
+int hlll_reduction_z(ZZ_mat<ZT> &b, ZZ_mat<ZT> &u, ZZ_mat<ZT> &u_inv, double delta, double eta,
+                     double theta, double c, LLLMethod method, IntType int_type,
+                     FloatType float_type, int precision, int flags, bool nolll)
+{
+  FPLLL_CHECK(method != LM_HEURISTIC, "HLLL heuristic is not implementated.");
+
+  int sel_prec = 0;
+  int status   = -1;
+  /* computes the parameters required for the proved version */
+  int good_prec = hlll_min_prec(b.get_rows(), b.get_cols(), delta, eta, theta, c);
+
+  // If nolll, just verify if the basis is reduced or not
+  /*
+   * FIXME: for an unknow reason, this test can use a lot of RAM. Example:
+   *   latticegen n 613 2048 q | fplll -a hlll | fplll -a hlll -nolll
+   * uses more than 16 GB of RAM. It is advised to use for now the binary
+   * isreduced provided inside hplll
+   *   latticegen n 613 2048 q | fplll -a hlll | isreduced
+   */
+  if (nolll)
+  {
+    sel_prec = (precision != 0) ? precision : good_prec;
+
+    if (flags & LLL_VERBOSE)
+    {
+      cerr << "Starting HLLL method 'verification'" << endl
+           << "  integer type '" << INT_TYPE_STR[int_type] << "'" << endl
+           << "  floating point type 'mpfr_t'" << endl;
+
+      if (sel_prec < good_prec)
+        cerr << "  prec < " << good_prec << ", the verification is not guaranteed";
+      else
+        cerr << "  prec >= " << good_prec << ", the verification is guaranteed";
+
+      cerr << endl;
+    }
+
+    int old_prec = FP_NR<mpfr_t>::set_prec(sel_prec);
+
+    status = is_hlll_reduced_pr<ZT, mpfr_t>(b, u, u_inv, delta, eta, theta);
+
+    if (flags & LLL_VERBOSE)
+    {
+      if (status == RED_SUCCESS)
+        cerr << "Basis is reduced";
+      else
+        cerr << "Basis is not reduced";
+      cerr << endl;
+    }
+
+    FP_NR<mpfr_t>::set_prec(old_prec);
+
+    return status;
+  }
+
+  /* switch to wrapper */
+  if (method == LM_WRAPPER)
+    return hlll_reduction_wrapper(b, u, u_inv, delta, eta, theta, c, float_type, precision, flags);
+
+  /* sets the parameters and checks the consistency */
+  if (method == LM_PROVED)
+  {
+    sel_prec = (precision != 0) ? precision : good_prec;
+  }
+  else
+  {
+    sel_prec = (precision != 0) ? precision : PREC_DOUBLE;
+  }
+
+  FloatType sel_ft = float_type;
+
+  /* if manually input precision */
+  if (precision != 0)
+  {
+    if (sel_ft == FT_DEFAULT)
+    {
+      sel_ft = FT_MPFR;
+    }
+    FPLLL_CHECK(sel_ft == FT_MPFR,
+                "The floating type must be mpfr when the precision is specified");
+  }
+
+  if (sel_ft == FT_DEFAULT)
+  {
+    if (method == LM_FAST)
+      sel_ft = FT_DOUBLE;
+#ifdef FPLLL_WITH_DPE
+    else if (sel_prec <= static_cast<int>(FP_NR<dpe_t>::get_prec()))
+      sel_ft = FT_DPE;
+#endif
+#ifdef FPLLL_WITH_QD
+    else if (sel_prec <= static_cast<int>(FP_NR<dd_real>::get_prec()))
+      sel_ft = FT_DD;
+    else if (sel_prec <= static_cast<int>(FP_NR<qd_real>::get_prec()))
+      sel_ft = FT_QD;
+#endif
+    else
+      sel_ft = FT_MPFR;
+  }
+  else if (method == LM_FAST &&
+           (sel_ft != FT_DOUBLE && sel_ft != FT_LONG_DOUBLE && sel_ft != FT_DD && sel_ft != FT_QD))
+  {
+    FPLLL_ABORT("'double' or 'long double' or 'dd' or 'qd' required for "
+                << LLL_METHOD_STR[method]);
+  }
+
+  if (sel_ft == FT_DOUBLE)
+    sel_prec = FP_NR<double>::get_prec();
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  else if (sel_ft == FT_LONG_DOUBLE)
+    sel_prec = FP_NR<long double>::get_prec();
+#endif
+#ifdef FPLLL_WITH_DPE
+  else if (sel_ft == FT_DPE)
+    sel_prec = FP_NR<dpe_t>::get_prec();
+#endif
+#ifdef FPLLL_WITH_QD
+  else if (sel_ft == FT_DD)
+    sel_prec = FP_NR<dd_real>::get_prec();
+  else if (sel_ft == FT_QD)
+    sel_prec = FP_NR<qd_real>::get_prec();
+#endif
+
+  if (flags & LLL_VERBOSE)
+  {
+    cerr << "Starting HLLL method '" << LLL_METHOD_STR[method] << "'" << endl
+         << "  integer type '" << INT_TYPE_STR[int_type] << "'" << endl
+         << "  floating point type '" << FLOAT_TYPE_STR[sel_ft] << "'" << endl;
+    if (method != LM_PROVED || int_type != ZT_MPZ || sel_ft == FT_DOUBLE)
+    {
+      cerr << "  The reduction is not guaranteed";
+    }
+    else if (sel_prec < good_prec)
+    {
+      cerr << "  prec < " << good_prec << ", the reduction is not guaranteed";
+    }
+    else
+    {
+      cerr << "  prec >= " << good_prec << ", the reduction is guaranteed";
+    }
+    cerr << endl;
+  }
+
+  // Applies the selected method
+  if (sel_ft == FT_DOUBLE)
+    status = hlll_reduction_zf<ZT, double>(b, u, u_inv, delta, eta, theta, c, method, flags);
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  else if (sel_ft == FT_LONG_DOUBLE)
+    status = hlll_reduction_zf<ZT, long double>(b, u, u_inv, delta, eta, theta, c, method, flags);
+#endif
+#ifdef FPLLL_WITH_DPE
+  else if (sel_ft == FT_DPE)
+    status = hlll_reduction_zf<ZT, dpe_t>(b, u, u_inv, delta, eta, theta, c, method, flags);
+#endif
+#ifdef FPLLL_WITH_QD
+  else if (sel_ft == FT_DD)
+  {
+    unsigned int old_cw;
+    fpu_fix_start(&old_cw);
+    status = hlll_reduction_zf<ZT, dd_real>(b, u, u_inv, delta, eta, theta, c, method, flags);
+    fpu_fix_end(&old_cw);
+  }
+  else if (sel_ft == FT_QD)
+  {
+    unsigned int old_cw;
+    fpu_fix_start(&old_cw);
+    status = hlll_reduction_zf<ZT, qd_real>(b, u, u_inv, delta, eta, theta, c, method, flags);
+    fpu_fix_end(&old_cw);
+  }
+#endif
+  else if (sel_ft == FT_MPFR)
+  {
+    int old_prec = FP_NR<mpfr_t>::set_prec(sel_prec);
+    status       = hlll_reduction_zf<ZT, mpfr_t>(b, u, u_inv, delta, eta, theta, c, method, flags);
+    FP_NR<mpfr_t>::set_prec(old_prec);
+  }
+  else
+  {
+    if (0 <= sel_ft && sel_ft <= FT_MPFR)
+    {
+      // it's a valid choice but we don't have support for it
+      FPLLL_ABORT("Compiled without support for LLL reduction with " << FLOAT_TYPE_STR[sel_ft]);
+    }
+    else
+    {
+      FPLLL_ABORT("Floating point type " << sel_ft << "not supported in LLL");
+    }
+  }
+  zeros_first(b, u, u_inv);
+
+  return status;
+}
+
+/**
+ * We define LLL for each input type instead of using a template,
+ * in order to force the compiler to instantiate the functions.
+ */
+#define FPLLL_DEFINE_LLL(T, id_t)                                                                  \
+  int lll_reduction(ZZ_mat<T> &b, double delta, double eta, LLLMethod method,                      \
+                    FloatType float_type, int precision, int flags)                                \
+  {                                                                                                \
+    ZZ_mat<T> empty_mat; /* Empty u -> transform disabled */                                       \
+    return lll_reduction_z<T>(b, empty_mat, empty_mat, delta, eta, method, id_t, float_type,       \
+                              precision, flags);                                                   \
+  }                                                                                                \
+                                                                                                   \
+  int lll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, double delta, double eta, LLLMethod method,        \
+                    FloatType float_type, int precision, int flags)                                \
+  {                                                                                                \
+    ZZ_mat<T> empty_mat;                                                                           \
+    if (!u.empty())                                                                                \
+      u.gen_identity(b.get_rows());                                                                \
+    return lll_reduction_z<T>(b, u, empty_mat, delta, eta, method, id_t, float_type, precision,    \
+                              flags);                                                              \
+  }                                                                                                \
+                                                                                                   \
+  int lll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, ZZ_mat<T> &u_inv, double delta, double eta,        \
+                    LLLMethod method, FloatType float_type, int precision, int flags)              \
+  {                                                                                                \
+    if (!u.empty())                                                                                \
+      u.gen_identity(b.get_rows());                                                                \
+    if (!u_inv.empty())                                                                            \
+      u_inv.gen_identity(b.get_rows());                                                            \
+    u_inv.transpose();                                                                             \
+    int status =                                                                                   \
+        lll_reduction_z<T>(b, u, u_inv, delta, eta, method, id_t, float_type, precision, flags);   \
+    u_inv.transpose();                                                                             \
+    return status;                                                                                 \
+  }
+
+FPLLL_DEFINE_LLL(mpz_t, ZT_MPZ)
+
+#ifdef FPLLL_WITH_ZLONG
+FPLLL_DEFINE_LLL(long, ZT_LONG)
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+FPLLL_DEFINE_LLL(double, ZT_DOUBLE)
+#endif
+
+// HLLL
+
+/**
+ * We define HLLL for each input type instead of using a template,
+ * in order to force the compiler to instantiate the functions.
+ */
+#define FPLLL_DEFINE_HLLL(T, id_t)                                                                 \
+  int hlll_reduction(ZZ_mat<T> &b, double delta, double eta, double theta, double c,               \
+                     LLLMethod method, FloatType float_type, int precision, int flags, bool nolll) \
+  {                                                                                                \
+    ZZ_mat<T> empty_mat; /* Empty u -> transform disabled */                                       \
+    return hlll_reduction_z<T>(b, empty_mat, empty_mat, delta, eta, theta, c, method, id_t,        \
+                               float_type, precision, flags, nolll);                               \
+  }                                                                                                \
+                                                                                                   \
+  int hlll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, double delta, double eta, double theta, double c, \
+                     LLLMethod method, FloatType float_type, int precision, int flags, bool nolll) \
+  {                                                                                                \
+    ZZ_mat<T> empty_mat;                                                                           \
+    if (!u.empty())                                                                                \
+      u.gen_identity(b.get_rows());                                                                \
+    return hlll_reduction_z<T>(b, u, empty_mat, delta, eta, theta, c, method, id_t, float_type,    \
+                               precision, flags, nolll);                                           \
+  }                                                                                                \
+                                                                                                   \
+  int hlll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, ZZ_mat<T> &u_inv, double delta, double eta,       \
+                     double theta, double c, LLLMethod method, FloatType float_type,               \
+                     int precision, int flags, bool nolll)                                         \
+  {                                                                                                \
+    if (!u.empty())                                                                                \
+      u.gen_identity(b.get_rows());                                                                \
+    if (!u_inv.empty())                                                                            \
+      u_inv.gen_identity(b.get_rows());                                                            \
+    u_inv.transpose();                                                                             \
+    int status = hlll_reduction_z<T>(b, u, u_inv, delta, eta, theta, c, method, id_t, float_type,  \
+                                     precision, flags, nolll);                                     \
+    u_inv.transpose();                                                                             \
+    return status;                                                                                 \
+  }
+
+FPLLL_DEFINE_HLLL(mpz_t, ZT_MPZ)
+
+#ifdef FPLLL_WITH_ZLONG
+FPLLL_DEFINE_HLLL(long, ZT_LONG)
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+FPLLL_DEFINE_HLLL(double, ZT_DOUBLE)
+#endif
+
+FPLLL_END_NAMESPACE
diff --git a/fplll/wrapper.h b/fplll/wrapper.h
new file mode 100644 (file)
index 0000000..e17fc38
--- /dev/null
@@ -0,0 +1,171 @@
+/* Copyright (C) 2005-2008 Damien Stehle.
+   Copyright (C) 2007 David Cade.
+   Copyright (C) 2011 Xavier Pujol.
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef FPLLL_WRAPPER_H
+#define FPLLL_WRAPPER_H
+
+#include "nr/matrix.h"
+
+FPLLL_BEGIN_NAMESPACE
+
+/* The matrix b must not be modified before calling lll().
+   lll() must be called only once. */
+
+class Wrapper
+{
+public:
+  /* u must be either empty or the identity matrix */
+  Wrapper(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, ZZ_mat<mpz_t> &u_inv, double delta, double eta,
+          int flags);
+
+  // Used for HLLL
+  Wrapper(ZZ_mat<mpz_t> &b, ZZ_mat<mpz_t> &u, ZZ_mat<mpz_t> &u_inv, double delta, double eta,
+          double theta, double c, int flags);
+
+  bool lll();
+
+  // Call HLLL on the wrapper object
+  // TODO: this wrapper does not offers as many options as the one of LLL (for example, use long
+  // instead of mpz_t, modify delta, ...)
+  bool hlll();
+
+  int status;
+
+private:
+  ZZ_mat<mpz_t> &b;
+  ZZ_mat<mpz_t> &u;
+  ZZ_mat<mpz_t> &u_inv;
+
+#ifdef FPLLL_WITH_ZLONG
+  ZZ_mat<long> b_long;
+  ZZ_mat<long> u_long;      // Always empty
+  ZZ_mat<long> u_inv_long;  // Always empty
+#endif
+
+  double delta;
+  double eta;
+  int good_prec;
+  bool use_long;
+  int flags;
+
+  bool little(int kappa, int precision);
+
+  template <class Z, class F>
+  int call_lll(ZZ_mat<Z> &bz, ZZ_mat<Z> &uz, ZZ_mat<Z> &u_inv_z, LLLMethod method, int precision,
+               double delta, double eta);
+
+  template <class F> int fast_lll(double delta, double eta);
+
+  template <class Z, class F>
+  int heuristic_lll(ZZ_mat<Z> &bz, ZZ_mat<Z> &uz, ZZ_mat<Z> &u_inv_z, int precision, double delta,
+                    double eta);
+
+  template <class Z, class F>
+  int proved_lll(ZZ_mat<Z> &bz, ZZ_mat<Z> &uz, ZZ_mat<Z> &u_inv_z, int precision, double delta,
+                 double eta);
+
+  int heuristic_loop(int precision);
+  int proved_loop(int precision);
+  int last_lll();
+
+  void set_use_long(bool value);
+  int increase_prec(int precision);
+
+  int max_exponent;
+  int n;
+  int d;
+  int last_early_red;
+
+  // For HLLL
+  double theta;
+  double c;
+
+  // High level function, select depending on method and precision the best way to call
+  // HLLL (types, flags enabled, ...)
+  template <class F> bool call_hlll(LLLMethod method, int precision);
+
+  // = call_hlll(LM_FAST, 0);
+  template <class F> bool fast_hlll();
+
+  // = call_hlll(LM_PROVED, precision);
+  template <class F> bool proved_hlll(int precision);
+
+  // Perform proved_hlll until grood_prec is reached or the lattice is reduced
+  int hlll_proved_loop(int precision);
+
+  // Perform proved version of HLLL with good_prec
+  bool last_hlll();
+};
+
+#define FPLLL_DECLARE_LLL(T)                                                                       \
+  int lll_reduction(ZZ_mat<T> &b, double delta = LLL_DEF_DELTA, double eta = LLL_DEF_ETA,          \
+                    LLLMethod method = LM_WRAPPER, FloatType floatType = FT_DEFAULT,               \
+                    int precision = 0, int flags = LLL_DEFAULT);                                   \
+                                                                                                   \
+  int lll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, double delta = LLL_DEF_DELTA,                      \
+                    double eta = LLL_DEF_ETA, LLLMethod method = LM_WRAPPER,                       \
+                    FloatType floatType = FT_DEFAULT, int precision = 0, int flags = LLL_DEFAULT); \
+                                                                                                   \
+  int lll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, ZZ_mat<T> &u_inv, double delta = LLL_DEF_DELTA,    \
+                    double eta = LLL_DEF_ETA, LLLMethod method = LM_WRAPPER,                       \
+                    FloatType floatType = FT_DEFAULT, int precision = 0, int flags = LLL_DEFAULT);
+
+FPLLL_DECLARE_LLL(mpz_t)
+
+#ifdef FPLLL_WITH_ZLONG
+FPLLL_DECLARE_LLL(long)
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+FPLLL_DECLARE_LLL(double)
+#endif
+
+// HLLL
+
+/**
+ * We define HLLL for each input type instead of using a template,
+ * in order to force the compiler to instantiate the functions.
+ */
+#define FPLLL_DECLARE_HLLL(T)                                                                      \
+  int hlll_reduction(ZZ_mat<T> &b, double delta = LLL_DEF_DELTA, double eta = LLL_DEF_ETA,         \
+                     double theta = HLLL_DEF_THETA, double c = HLLL_DEF_C,                         \
+                     LLLMethod method = LM_WRAPPER, FloatType float_type = FT_DEFAULT,             \
+                     int precision = 0, int flags = LLL_DEFAULT, bool nolll = false);              \
+  int hlll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, double delta = LLL_DEF_DELTA,                     \
+                     double eta = LLL_DEF_ETA, double theta = HLLL_DEF_THETA,                      \
+                     double c = HLLL_DEF_C, LLLMethod method = LM_WRAPPER,                         \
+                     FloatType float_type = FT_DEFAULT, int precision = 0,                         \
+                     int flags = LLL_DEFAULT, bool nolll = false);                                 \
+  int hlll_reduction(ZZ_mat<T> &b, ZZ_mat<T> &u, ZZ_mat<T> &u_inv, double delta = LLL_DEF_DELTA,   \
+                     double eta = LLL_DEF_ETA, double theta = HLLL_DEF_THETA,                      \
+                     double c = HLLL_DEF_C, LLLMethod method = LM_WRAPPER,                         \
+                     FloatType float_type = FT_DEFAULT, int precision = 0,                         \
+                     int flags = LLL_DEFAULT, bool nolll = false);
+
+FPLLL_DECLARE_HLLL(mpz_t)
+
+#ifdef FPLLL_WITH_ZLONG
+FPLLL_DECLARE_HLLL(long)
+#endif
+
+#ifdef FPLLL_WITH_ZDOUBLE
+FPLLL_DECLARE_HLLL(double)
+#endif
+
+FPLLL_END_NAMESPACE
+
+#endif
diff --git a/m4/ax_cxx_compile_stdcxx.m4 b/m4/ax_cxx_compile_stdcxx.m4
new file mode 100644 (file)
index 0000000..43087b2
--- /dev/null
@@ -0,0 +1,951 @@
+# ===========================================================================
+#  https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
+#
+# DESCRIPTION
+#
+#   Check for baseline language coverage in the compiler for the specified
+#   version of the C++ standard.  If necessary, add switches to CXX and
+#   CXXCPP to enable support.  VERSION may be '11' (for the C++11 standard)
+#   or '14' (for the C++14 standard).
+#
+#   The second argument, if specified, indicates whether you insist on an
+#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
+#   -std=c++11).  If neither is specified, you get whatever works, with
+#   preference for an extended mode.
+#
+#   The third argument, if specified 'mandatory' or if left unspecified,
+#   indicates that baseline support for the specified C++ standard is
+#   required and that the macro should error out if no mode with that
+#   support is found.  If specified 'optional', then configuration proceeds
+#   regardless, after defining HAVE_CXX${VERSION} if and only if a
+#   supporting mode is found.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
+#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
+#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
+#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
+#   Copyright (c) 2015 Paul Norman <penorman@mac.com>
+#   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
+#   Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
+#   Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+#serial 11
+
+dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
+dnl  (serial version number 13).
+
+AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
+  m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
+        [$1], [14], [ax_cxx_compile_alternatives="14 1y"],
+        [$1], [17], [ax_cxx_compile_alternatives="17 1z"],
+        [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
+  m4_if([$2], [], [],
+        [$2], [ext], [],
+        [$2], [noext], [],
+        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
+  m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
+        [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
+        [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
+        [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
+  AC_LANG_PUSH([C++])dnl
+  ac_success=no
+
+  m4_if([$2], [noext], [], [dnl
+  if test x$ac_success = xno; then
+    for alternative in ${ax_cxx_compile_alternatives}; do
+      switch="-std=gnu++${alternative}"
+      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+      AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+                     $cachevar,
+        [ac_save_CXX="$CXX"
+         CXX="$CXX $switch"
+         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+          [eval $cachevar=yes],
+          [eval $cachevar=no])
+         CXX="$ac_save_CXX"])
+      if eval test x\$$cachevar = xyes; then
+        CXX="$CXX $switch"
+        if test -n "$CXXCPP" ; then
+          CXXCPP="$CXXCPP $switch"
+        fi
+        ac_success=yes
+        break
+      fi
+    done
+  fi])
+
+  m4_if([$2], [ext], [], [dnl
+  if test x$ac_success = xno; then
+    dnl HP's aCC needs +std=c++11 according to:
+    dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
+    dnl Cray's crayCC needs "-h std=c++11"
+    for alternative in ${ax_cxx_compile_alternatives}; do
+      for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
+        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+        AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+                       $cachevar,
+          [ac_save_CXX="$CXX"
+           CXX="$CXX $switch"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+            [eval $cachevar=yes],
+            [eval $cachevar=no])
+           CXX="$ac_save_CXX"])
+        if eval test x\$$cachevar = xyes; then
+          CXX="$CXX $switch"
+          if test -n "$CXXCPP" ; then
+            CXXCPP="$CXXCPP $switch"
+          fi
+          ac_success=yes
+          break
+        fi
+      done
+      if test x$ac_success = xyes; then
+        break
+      fi
+    done
+  fi])
+  AC_LANG_POP([C++])
+  if test x$ax_cxx_compile_cxx$1_required = xtrue; then
+    if test x$ac_success = xno; then
+      AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
+    fi
+  fi
+  if test x$ac_success = xno; then
+    HAVE_CXX$1=0
+    AC_MSG_NOTICE([No compiler with C++$1 support was found])
+  else
+    HAVE_CXX$1=1
+    AC_DEFINE(HAVE_CXX$1,1,
+              [define if the compiler supports basic C++$1 syntax])
+  fi
+  AC_SUBST(HAVE_CXX$1)
+])
+
+
+dnl  Test body for checking C++11 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+)
+
+
+dnl  Test body for checking C++14 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+)
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+  _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
+)
+
+dnl  Tests for new features in C++11
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+  namespace test_static_assert
+  {
+
+    template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+  }
+
+  namespace test_final_override
+  {
+
+    struct Base
+    {
+      virtual ~Base() {}
+      virtual void f() {}
+    };
+
+    struct Derived : public Base
+    {
+      virtual ~Derived() override {}
+      virtual void f() override {}
+    };
+
+  }
+
+  namespace test_double_right_angle_brackets
+  {
+
+    template < typename T >
+    struct check {};
+
+    typedef check<void> single_type;
+    typedef check<check<void>> double_type;
+    typedef check<check<check<void>>> triple_type;
+    typedef check<check<check<check<void>>>> quadruple_type;
+
+  }
+
+  namespace test_decltype
+  {
+
+    int
+    f()
+    {
+      int a = 1;
+      decltype(a) b = 2;
+      return a + b;
+    }
+
+  }
+
+  namespace test_type_deduction
+  {
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static const bool value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static const bool value = true;
+    };
+
+    template < typename T1, typename T2 >
+    auto
+    add(T1 a1, T2 a2) -> decltype(a1 + a2)
+    {
+      return a1 + a2;
+    }
+
+    int
+    test(const int c, volatile int v)
+    {
+      static_assert(is_same<int, decltype(0)>::value == true, "");
+      static_assert(is_same<int, decltype(c)>::value == false, "");
+      static_assert(is_same<int, decltype(v)>::value == false, "");
+      auto ac = c;
+      auto av = v;
+      auto sumi = ac + av + 'x';
+      auto sumf = ac + av + 1.0;
+      static_assert(is_same<int, decltype(ac)>::value == true, "");
+      static_assert(is_same<int, decltype(av)>::value == true, "");
+      static_assert(is_same<int, decltype(sumi)>::value == true, "");
+      static_assert(is_same<int, decltype(sumf)>::value == false, "");
+      static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+      return (sumf > 0.0) ? sumi : add(c, v);
+    }
+
+  }
+
+  namespace test_noexcept
+  {
+
+    int f() { return 0; }
+    int g() noexcept { return 0; }
+
+    static_assert(noexcept(f()) == false, "");
+    static_assert(noexcept(g()) == true, "");
+
+  }
+
+  namespace test_constexpr
+  {
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+    {
+      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+    }
+
+    template < typename CharT >
+    unsigned long constexpr
+    strlen_c(const CharT *const s) noexcept
+    {
+      return strlen_c_r(s, 0UL);
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("1") == 1UL, "");
+    static_assert(strlen_c("example") == 7UL, "");
+    static_assert(strlen_c("another\0example") == 7UL, "");
+
+  }
+
+  namespace test_rvalue_references
+  {
+
+    template < int N >
+    struct answer
+    {
+      static constexpr int value = N;
+    };
+
+    answer<1> f(int&)       { return answer<1>(); }
+    answer<2> f(const int&) { return answer<2>(); }
+    answer<3> f(int&&)      { return answer<3>(); }
+
+    void
+    test()
+    {
+      int i = 0;
+      const int c = 0;
+      static_assert(decltype(f(i))::value == 1, "");
+      static_assert(decltype(f(c))::value == 2, "");
+      static_assert(decltype(f(0))::value == 3, "");
+    }
+
+  }
+
+  namespace test_uniform_initialization
+  {
+
+    struct test
+    {
+      static const int zero {};
+      static const int one {1};
+    };
+
+    static_assert(test::zero == 0, "");
+    static_assert(test::one == 1, "");
+
+  }
+
+  namespace test_lambdas
+  {
+
+    void
+    test1()
+    {
+      auto lambda1 = [](){};
+      auto lambda2 = lambda1;
+      lambda1();
+      lambda2();
+    }
+
+    int
+    test2()
+    {
+      auto a = [](int i, int j){ return i + j; }(1, 2);
+      auto b = []() -> int { return '0'; }();
+      auto c = [=](){ return a + b; }();
+      auto d = [&](){ return c; }();
+      auto e = [a, &b](int x) mutable {
+        const auto identity = [](int y){ return y; };
+        for (auto i = 0; i < a; ++i)
+          a += b--;
+        return x + identity(a + b);
+      }(0);
+      return a + b + c + d + e;
+    }
+
+    int
+    test3()
+    {
+      const auto nullary = [](){ return 0; };
+      const auto unary = [](int x){ return x; };
+      using nullary_t = decltype(nullary);
+      using unary_t = decltype(unary);
+      const auto higher1st = [](nullary_t f){ return f(); };
+      const auto higher2nd = [unary](nullary_t f1){
+        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+      };
+      return higher1st(nullary) + higher2nd(nullary)(unary);
+    }
+
+  }
+
+  namespace test_variadic_templates
+  {
+
+    template <int...>
+    struct sum;
+
+    template <int N0, int... N1toN>
+    struct sum<N0, N1toN...>
+    {
+      static constexpr auto value = N0 + sum<N1toN...>::value;
+    };
+
+    template <>
+    struct sum<>
+    {
+      static constexpr auto value = 0;
+    };
+
+    static_assert(sum<>::value == 0, "");
+    static_assert(sum<1>::value == 1, "");
+    static_assert(sum<23>::value == 23, "");
+    static_assert(sum<1, 2>::value == 3, "");
+    static_assert(sum<5, 5, 11>::value == 21, "");
+    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+  }
+
+  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+  // because of this.
+  namespace test_template_alias_sfinae
+  {
+
+    struct foo {};
+
+    template<typename T>
+    using member = typename T::member_type;
+
+    template<typename T>
+    void func(...) {}
+
+    template<typename T>
+    void func(member<T>*) {}
+
+    void test();
+
+    void test() { func<foo>(0); }
+
+  }
+
+}  // namespace cxx11
+
+#endif  // __cplusplus >= 201103L
+
+]])
+
+
+dnl  Tests for new features in C++14
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+  namespace test_polymorphic_lambdas
+  {
+
+    int
+    test()
+    {
+      const auto lambda = [](auto&&... args){
+        const auto istiny = [](auto x){
+          return (sizeof(x) == 1UL) ? 1 : 0;
+        };
+        const int aretiny[] = { istiny(args)... };
+        return aretiny[0];
+      };
+      return lambda(1, 1L, 1.0f, '1');
+    }
+
+  }
+
+  namespace test_binary_literals
+  {
+
+    constexpr auto ivii = 0b0000000000101010;
+    static_assert(ivii == 42, "wrong value");
+
+  }
+
+  namespace test_generalized_constexpr
+  {
+
+    template < typename CharT >
+    constexpr unsigned long
+    strlen_c(const CharT *const s) noexcept
+    {
+      auto length = 0UL;
+      for (auto p = s; *p; ++p)
+        ++length;
+      return length;
+    }
+
+    static_assert(strlen_c("") == 0UL, "");
+    static_assert(strlen_c("x") == 1UL, "");
+    static_assert(strlen_c("test") == 4UL, "");
+    static_assert(strlen_c("another\0test") == 7UL, "");
+
+  }
+
+  namespace test_lambda_init_capture
+  {
+
+    int
+    test()
+    {
+      auto x = 0;
+      const auto lambda1 = [a = x](int b){ return a + b; };
+      const auto lambda2 = [a = lambda1(x)](){ return a; };
+      return lambda2();
+    }
+
+  }
+
+  namespace test_digit_separators
+  {
+
+    constexpr auto ten_million = 100'000'000;
+    static_assert(ten_million == 100000000, "");
+
+  }
+
+  namespace test_return_type_deduction
+  {
+
+    auto f(int& x) { return x; }
+    decltype(auto) g(int& x) { return x; }
+
+    template < typename T1, typename T2 >
+    struct is_same
+    {
+      static constexpr auto value = false;
+    };
+
+    template < typename T >
+    struct is_same<T, T>
+    {
+      static constexpr auto value = true;
+    };
+
+    int
+    test()
+    {
+      auto x = 0;
+      static_assert(is_same<int, decltype(f(x))>::value, "");
+      static_assert(is_same<int&, decltype(g(x))>::value, "");
+      return x;
+    }
+
+  }
+
+}  // namespace cxx14
+
+#endif  // __cplusplus >= 201402L
+
+]])
+
+
+dnl  Tests for new features in C++17
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
+
+// If the compiler admits that it is not ready for C++17, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201703L
+
+#error "This is not a C++17 compiler"
+
+#else
+
+#include <initializer_list>
+#include <utility>
+#include <type_traits>
+
+namespace cxx17
+{
+
+  namespace test_constexpr_lambdas
+  {
+
+    constexpr int foo = [](){return 42;}();
+
+  }
+
+  namespace test::nested_namespace::definitions
+  {
+
+  }
+
+  namespace test_fold_expression
+  {
+
+    template<typename... Args>
+    int multiply(Args... args)
+    {
+      return (args * ... * 1);
+    }
+
+    template<typename... Args>
+    bool all(Args... args)
+    {
+      return (args && ...);
+    }
+
+  }
+
+  namespace test_extended_static_assert
+  {
+
+    static_assert (true);
+
+  }
+
+  namespace test_auto_brace_init_list
+  {
+
+    auto foo = {5};
+    auto bar {5};
+
+    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
+    static_assert(std::is_same<int, decltype(bar)>::value);
+  }
+
+  namespace test_typename_in_template_template_parameter
+  {
+
+    template<template<typename> typename X> struct D;
+
+  }
+
+  namespace test_fallthrough_nodiscard_maybe_unused_attributes
+  {
+
+    int f1()
+    {
+      return 42;
+    }
+
+    [[nodiscard]] int f2()
+    {
+      [[maybe_unused]] auto unused = f1();
+
+      switch (f1())
+      {
+      case 17:
+        f1();
+        [[fallthrough]];
+      case 42:
+        f1();
+      }
+      return f1();
+    }
+
+  }
+
+  namespace test_extended_aggregate_initialization
+  {
+
+    struct base1
+    {
+      int b1, b2 = 42;
+    };
+
+    struct base2
+    {
+      base2() {
+        b3 = 42;
+      }
+      int b3;
+    };
+
+    struct derived : base1, base2
+    {
+        int d;
+    };
+
+    derived d1 {{1, 2}, {}, 4};  // full initialization
+    derived d2 {{}, {}, 4};      // value-initialized bases
+
+  }
+
+  namespace test_general_range_based_for_loop
+  {
+
+    struct iter
+    {
+      int i;
+
+      int& operator* ()
+      {
+        return i;
+      }
+
+      const int& operator* () const
+      {
+        return i;
+      }
+
+      iter& operator++()
+      {
+        ++i;
+        return *this;
+      }
+    };
+
+    struct sentinel
+    {
+      int i;
+    };
+
+    bool operator== (const iter& i, const sentinel& s)
+    {
+      return i.i == s.i;
+    }
+
+    bool operator!= (const iter& i, const sentinel& s)
+    {
+      return !(i == s);
+    }
+
+    struct range
+    {
+      iter begin() const
+      {
+        return {0};
+      }
+
+      sentinel end() const
+      {
+        return {5};
+      }
+    };
+
+    void f()
+    {
+      range r {};
+
+      for (auto i : r)
+      {
+        [[maybe_unused]] auto v = i;
+      }
+    }
+
+  }
+
+  namespace test_lambda_capture_asterisk_this_by_value
+  {
+
+    struct t
+    {
+      int i;
+      int foo()
+      {
+        return [*this]()
+        {
+          return i;
+        }();
+      }
+    };
+
+  }
+
+  namespace test_enum_class_construction
+  {
+
+    enum class byte : unsigned char
+    {};
+
+    byte foo {42};
+
+  }
+
+  namespace test_constexpr_if
+  {
+
+    template <bool cond>
+    int f ()
+    {
+      if constexpr(cond)
+      {
+        return 13;
+      }
+      else
+      {
+        return 42;
+      }
+    }
+
+  }
+
+  namespace test_selection_statement_with_initializer
+  {
+
+    int f()
+    {
+      return 13;
+    }
+
+    int f2()
+    {
+      if (auto i = f(); i > 0)
+      {
+        return 3;
+      }
+
+      switch (auto i = f(); i + 4)
+      {
+      case 17:
+        return 2;
+
+      default:
+        return 1;
+      }
+    }
+
+  }
+
+  namespace test_template_argument_deduction_for_class_templates
+  {
+
+    template <typename T1, typename T2>
+    struct pair
+    {
+      pair (T1 p1, T2 p2)
+        : m1 {p1},
+          m2 {p2}
+      {}
+
+      T1 m1;
+      T2 m2;
+    };
+
+    void f()
+    {
+      [[maybe_unused]] auto p = pair{13, 42u};
+    }
+
+  }
+
+  namespace test_non_type_auto_template_parameters
+  {
+
+    template <auto n>
+    struct B
+    {};
+
+    B<5> b1;
+    B<'a'> b2;
+
+  }
+
+  namespace test_structured_bindings
+  {
+
+    int arr[2] = { 1, 2 };
+    std::pair<int, int> pr = { 1, 2 };
+
+    auto f1() -> int(&)[2]
+    {
+      return arr;
+    }
+
+    auto f2() -> std::pair<int, int>&
+    {
+      return pr;
+    }
+
+    struct S
+    {
+      int x1 : 2;
+      volatile double y1;
+    };
+
+    S f3()
+    {
+      return {};
+    }
+
+    auto [ x1, y1 ] = f1();
+    auto& [ xr1, yr1 ] = f1();
+    auto [ x2, y2 ] = f2();
+    auto& [ xr2, yr2 ] = f2();
+    const auto [ x3, y3 ] = f3();
+
+  }
+
+  namespace test_exception_spec_type_system
+  {
+
+    struct Good {};
+    struct Bad {};
+
+    void g1() noexcept;
+    void g2();
+
+    template<typename T>
+    Bad
+    f(T*, T*);
+
+    template<typename T1, typename T2>
+    Good
+    f(T1*, T2*);
+
+    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
+
+  }
+
+  namespace test_inline_variables
+  {
+
+    template<class T> void f(T)
+    {}
+
+    template<class T> inline T g(T)
+    {
+      return T{};
+    }
+
+    template<> inline void f<>(int)
+    {}
+
+    template<> int g<>(int)
+    {
+      return 5;
+    }
+
+  }
+
+}  // namespace cxx17
+
+#endif  // __cplusplus < 201703L
+
+]])
diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
new file mode 100644 (file)
index 0000000..ddc0290
--- /dev/null
@@ -0,0 +1,493 @@
+# ===========================================================================
+#        https://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro figures out how to build C programs using POSIX threads. It
+#   sets the PTHREAD_LIBS output variable to the threads library and linker
+#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+#   flags that are needed. (The user can also force certain compiler
+#   flags/libs to be tested by setting these environment variables.)
+#
+#   Also sets PTHREAD_CC to any special C compiler that is needed for
+#   multi-threaded programs (defaults to the value of CC otherwise). (This
+#   is necessary on AIX to use the special cc_r compiler alias.)
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also to link with them as well. For example, you might link with
+#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+#   If you are only building threaded programs, you may wish to use these
+#   variables in your default LIBS, CFLAGS, and CC:
+#
+#     LIBS="$PTHREAD_LIBS $LIBS"
+#     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+#     CC="$PTHREAD_CC"
+#
+#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+#   has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
+#   that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+#   PTHREAD_CFLAGS.
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if a threads library
+#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+#   is not found. If ACTION-IF-FOUND is not specified, the default action
+#   will define HAVE_PTHREAD.
+#
+#   Please let the authors know if this macro fails on any platform, or if
+#   you have any other suggestions or comments. This macro was based on work
+#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+#   Alejandro Forero Cuervo to the autoconf macro repository. We are also
+#   grateful for the helpful feedback of numerous users.
+#
+#   Updated for Autoconf 2.68 by Daniel Richard G.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+# modified based on version serial 26
+## serial 26
+
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_PROG_SED])
+AC_LANG_PUSH([C])
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on Tru64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+        ax_pthread_save_CC="$CC"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
+        AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
+        AC_MSG_RESULT([$ax_pthread_ok])
+        if test "x$ax_pthread_ok" = "xno"; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        CC="$ax_pthread_save_CC"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+#           (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads and
+#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
+#      is present but should not be used directly; and before -mthreads,
+#      because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case $host_os in
+
+        freebsd*)
+
+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+        ;;
+
+        hpux*)
+
+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+        # multi-threading and also sets -lpthread."
+
+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+        ;;
+
+        openedition*)
+
+        # IBM z/OS requires a feature-test macro to be defined in order to
+        # enable POSIX threads at all, so give the user a hint if this is
+        # not set. (We don't define these ourselves, as they can affect
+        # other portions of the system API in unpredictable ways.)
+
+        AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
+            [
+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+             AX_PTHREAD_ZOS_MISSING
+#            endif
+            ],
+            [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
+        ;;
+
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed. (N.B.: The stubs are missing
+        # pthread_cleanup_push, or rather a function called by this macro,
+        # so we could check for that, but who knows whether they'll stub
+        # that too in a future libc.)  So we'll check first for the
+        # standard Solaris way of linking pthreads (-mt -lpthread).
+
+        ax_pthread_flags=",-mt,-lpthread pthread $ax_pthread_flags"
+        ;;
+esac
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+AS_IF([test "x$GCC" = "xyes"],
+      [ax_pthread_flags=",-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"])
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+        darwin* | hpux* | linux* | osf* | solaris*)
+        ax_pthread_check_macro="_REENTRANT"
+        ;;
+
+        aix*)
+        ax_pthread_check_macro="_THREAD_SAFE"
+        ;;
+
+        *)
+        ax_pthread_check_macro="--"
+        ;;
+esac
+AS_IF([test "x$ax_pthread_check_macro" = "x--"],
+      [ax_pthread_check_cond=0],
+      [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
+
+# Are we compiling with Clang?
+
+AC_CACHE_CHECK([whether $CC is Clang],
+    [ax_cv_PTHREAD_CLANG],
+    [ax_cv_PTHREAD_CLANG=no
+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
+     if test "x$GCC" = "xyes"; then
+        AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
+            [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+#            if defined(__clang__) && defined(__llvm__)
+             AX_PTHREAD_CC_IS_CLANG
+#            endif
+            ],
+            [ax_cv_PTHREAD_CLANG=yes])
+     fi
+    ])
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+        # Clang takes -pthread; it has never supported any other flag
+
+        # (Note 1: This will need to be revisited if a system that Clang
+        # supports has POSIX threads in a separate library.  This tends not
+        # to be the way of modern systems, but it's conceivable.)
+
+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
+        # to get POSIX threads support; the API is always present and
+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
+        # -pthread does define _REENTRANT, and while the Darwin headers
+        # ignore this macro, third-party headers might not.)
+
+        PTHREAD_CFLAGS="-pthread"
+        PTHREAD_LIBS=
+
+        ax_pthread_ok=yes
+
+        # However, older versions of Clang make a point of warning the user
+        # that, in an invocation where only linking and no compilation is
+        # taking place, the -pthread option has no effect ("argument unused
+        # during compilation").  They expect -pthread to be passed in only
+        # when source code is being compiled.
+        #
+        # Problem is, this is at odds with the way Automake and most other
+        # C build frameworks function, which is that the same flags used in
+        # compilation (CFLAGS) are also used in linking.  Many systems
+        # supported by AX_PTHREAD require exactly this for POSIX threads
+        # support, and in fact it is often not straightforward to specify a
+        # flag that is used only in the compilation phase and not in
+        # linking.  Such a scenario is extremely rare in practice.
+        #
+        # Even though use of the -pthread flag in linking would only print
+        # a warning, this can be a nuisance for well-run software projects
+        # that build with -Werror.  So if the active version of Clang has
+        # this misfeature, we search for an option to squash it.
+
+        AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+             # Create an alternate version of $ac_link that compiles and
+             # links in two steps (.c -> .o, .o -> exe) instead of one
+             # (.c -> exe), because the warning occurs only in the second
+             # step
+             ax_pthread_save_ac_link="$ac_link"
+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+             ax_pthread_save_CFLAGS="$CFLAGS"
+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+                AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+                ac_link="$ax_pthread_save_ac_link"
+                AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+                    [ac_link="$ax_pthread_2step_ac_link"
+                     AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+                         [break])
+                    ])
+             done
+             ac_link="$ax_pthread_save_ac_link"
+             CFLAGS="$ax_pthread_save_CFLAGS"
+             AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+            ])
+
+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+                no | unknown) ;;
+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+        esac
+
+fi # $ax_pthread_clang = yes
+
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+        case $ax_pthread_try_flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
+                ;;
+
+                ,*)
+                PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^,\(.*\),\(.*\)$/\1/"`
+                PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^,\(.*\),\(.*\)$/\2/"`
+                AC_MSG_CHECKING([whether pthreads work with CFLAGS="$PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS"])
+                ;;
+
+                pthread-config)
+                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
+                AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
+                ;;
+        esac
+
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+#                       if $ax_pthread_check_cond
+#                        error "$ax_pthread_check_macro must be defined"
+#                       endif
+                        static void *some_global = NULL;
+                        static void routine(void *a)
+                          {
+                             /* To avoid any unused-parameter or
+                                unused-but-set-parameter warning.  */
+                             some_global = a;
+                          }
+                        static void *start_routine(void *a) { return a; }],
+                       [pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */])],
+            [ax_pthread_ok=yes],
+            [])
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        AC_MSG_RESULT([$ax_pthread_ok])
+        AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = "xyes"; then
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        AC_CACHE_CHECK([for joinable pthread attribute],
+            [ax_cv_PTHREAD_JOINABLE_ATTR],
+            [ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+                 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                                                 [int attr = $ax_pthread_attr; return attr /* ; */])],
+                                [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
+                                [])
+             done
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+               test "x$ax_pthread_joinable_attr_defined" != "xyes"],
+              [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
+                                  [$ax_cv_PTHREAD_JOINABLE_ATTR],
+                                  [Define to necessary symbol if this constant
+                                   uses a non-standard name on your system.])
+               ax_pthread_joinable_attr_defined=yes
+              ])
+
+        AC_CACHE_CHECK([whether more special flags are required for pthreads],
+            [ax_cv_PTHREAD_SPECIAL_FLAGS],
+            [ax_cv_PTHREAD_SPECIAL_FLAGS=no
+             case $host_os in
+             solaris*)
+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+             ;;
+             esac
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+               test "x$ax_pthread_special_flags_added" != "xyes"],
+              [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+               ax_pthread_special_flags_added=yes])
+
+        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
+            [ax_cv_PTHREAD_PRIO_INHERIT],
+            [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
+                                             [[int i = PTHREAD_PRIO_INHERIT;
+                                               return i;]])],
+                            [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+                            [ax_cv_PTHREAD_PRIO_INHERIT=no])
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+               test "x$ax_pthread_prio_inherit_defined" != "xyes"],
+              [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
+               ax_pthread_prio_inherit_defined=yes
+              ])
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != "xyes"; then
+            case $host_os in
+                aix*)
+                AS_CASE(["x/$CC"],
+                    [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
+                    [#handle absolute path differently from PATH based program lookup
+                     AS_CASE(["x$CC"],
+                         [x/*],
+                         [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
+                         [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
+                ;;
+            esac
+        fi
+fi
+
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+AC_SUBST([PTHREAD_LIBS])
+AC_SUBST([PTHREAD_CFLAGS])
+AC_SUBST([PTHREAD_CC])
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test "x$ax_pthread_ok" = "xyes"; then
+        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
+        :
+else
+        ax_pthread_ok=no
+        $2
+fi
+AC_LANG_POP
+])dnl AX_PTHREAD
diff --git a/strategies/default.json b/strategies/default.json
new file mode 100644 (file)
index 0000000..1fe36aa
--- /dev/null
@@ -0,0 +1,97680 @@
+[
+    {
+        "block_size": 0, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                1.0, 
+                [], 
+                1.0
+            ]
+        ]
+    }, 
+    {
+        "block_size": 1, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                1.0, 
+                [
+                    1.0
+                ], 
+                1.0
+            ]
+        ]
+    }, 
+    {
+        "block_size": 2, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ]
+        ]
+    }, 
+    {
+        "block_size": 3, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.25, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.2871745824813843, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.32987698912620544, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.37892913818359375, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.43527528643608093, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.5, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.5743491649627686, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.6597539782524109, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.7578582763671875, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                0.8705505728721619, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                1.148698329925537, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                1.3195079565048218, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                1.515716552734375, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                1.7411011457443237, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                2.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                2.297396659851074, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                2.6390159130096436, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                3.03143310546875, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                3.4822022914886475, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ], 
+            [
+                4.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0
+                ], 
+                1.0
+            ]
+        ]
+    }, 
+    {
+        "block_size": 4, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.3265306055545807, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.36520063877105713, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.4084502160549164, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.4568217098712921, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.5109217166900635, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.5714285969734192, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.6391010880470276, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.7147878408432007, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.7994379997253418, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.8941129446029663, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.1184269189834595, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.2508788108825684, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.3990164995193481, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.5646976232528687, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.75, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.9572471380233765, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                2.189037799835205, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                2.4482789039611816, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                2.7382209300994873, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                3.0625, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ]
+        ]
+    }, 
+    {
+        "block_size": 5, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.6211461424827576, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.682366669178009, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.7496210932731628, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.8235041499137878, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.9046691656112671, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                0.9938338398933411, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.0917866230010986, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.1993937492370605, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.3176065683364868, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.4474706649780273, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.5901341438293457, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.7468585968017578, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                1.919029951095581, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                2.108170509338379, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                2.315953016281128, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                2.5442144870758057, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                2.794973850250244, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                3.0704479217529297, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                3.373072862625122, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                3.7055249214172363, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ], 
+            [
+                4.070743560791016, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.4982338026585921, 
+                    0.4982338026585921
+                ], 
+                0.5007311701774597
+            ]
+        ]
+    }, 
+    {
+        "block_size": 6, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.7303870320320129, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9795451473617096, 
+                    0.9795451473617096, 
+                    0.2986940569614467, 
+                    0.2986940569614467
+                ], 
+                0.500930666923523
+            ], 
+            [
+                0.7920841574668884, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9790373734576254, 
+                    0.9790373734576254, 
+                    0.2988571438145186, 
+                    0.2988571438145186
+                ], 
+                0.5008484125137329
+            ], 
+            [
+                0.858992874622345, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9785917673384397, 
+                    0.9785917673384397, 
+                    0.2990036489989373, 
+                    0.2990036489989373
+                ], 
+                0.5007805228233337
+            ], 
+            [
+                0.9315535426139832, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9782155139514858, 
+                    0.9782155139514858, 
+                    0.29912976136214803, 
+                    0.29912976136214803
+                ], 
+                0.5007262825965881
+            ], 
+            [
+                1.010243535041809, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.977915231878194, 
+                    0.977915231878194, 
+                    0.2992318976315336, 
+                    0.2992318976315336
+                ], 
+                0.5006848573684692
+            ], 
+            [
+                1.0955805778503418, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9776967975993577, 
+                    0.9776967975993577, 
+                    0.29930686509691007, 
+                    0.29930686509691007
+                ], 
+                0.5006555318832397
+            ], 
+            [
+                1.1881262063980103, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9775651768271942, 
+                    0.9775651768271942, 
+                    0.29935202141710054, 
+                    0.29935202141710054
+                ], 
+                0.5006378293037415
+            ], 
+            [
+                1.2884893417358398, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9775242681663389, 
+                    0.9775242681663389, 
+                    0.29936542075126443, 
+                    0.29936542075126443
+                ], 
+                0.5006314516067505
+            ], 
+            [
+                1.3973302841186523, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9775767644225924, 
+                    0.9775767644225924, 
+                    0.29934593531444986, 
+                    0.29934593531444986
+                ], 
+                0.5006365180015564
+            ], 
+            [
+                1.5153652429580688, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9777240369642651, 
+                    0.9777240369642651, 
+                    0.2992933422411752, 
+                    0.2992933422411752
+                ], 
+                0.5006535053253174
+            ], 
+            [
+                1.6433708667755127, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9779660486713426, 
+                    0.9779660486713426, 
+                    0.2992083672084178, 
+                    0.2992083672084178
+                ], 
+                0.5006833076477051
+            ], 
+            [
+                1.7821893692016602, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9783013010072736, 
+                    0.9783013010072736, 
+                    0.29909267918820626, 
+                    0.29909267918820626
+                ], 
+                0.5007272362709045
+            ], 
+            [
+                1.9327340126037598, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9787268204748302, 
+                    0.9787268204748302, 
+                    0.29894883410801276, 
+                    0.29894883410801276
+                ], 
+                0.5007868409156799
+            ], 
+            [
+                2.0959954261779785, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9792381889231608, 
+                    0.9792381889231608, 
+                    0.2987801692522926, 
+                    0.2987801692522926
+                ], 
+                0.500863790512085
+            ], 
+            [
+                2.273047924041748, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9798296206918593, 
+                    0.9798296206918593, 
+                    0.29859065443363825, 
+                    0.29859065443363825
+                ], 
+                0.5009599924087524
+            ], 
+            [
+                2.4650564193725586, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9804940873385904, 
+                    0.9804940873385904, 
+                    0.29838470971102377, 
+                    0.29838470971102377
+                ], 
+                0.5010770559310913
+            ], 
+            [
+                2.6732840538024902, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9810337700304681, 
+                    0.9810337700304681, 
+                    0.29778908558982253, 
+                    0.29778908558982253
+                ], 
+                0.5005806684494019
+            ], 
+            [
+                2.8991010189056396, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9818262731586327, 
+                    0.9818262731586327, 
+                    0.29756082392280936, 
+                    0.29756082392280936
+                ], 
+                0.5007418990135193
+            ], 
+            [
+                3.1439931392669678, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9825932250784313, 
+                    0.9825932250784313, 
+                    0.2971705079694565, 
+                    0.2971705079694565
+                ], 
+                0.500662624835968
+            ], 
+            [
+                3.409571886062622, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9834729002999963, 
+                    0.9834729002999963, 
+                    0.2969398431919135, 
+                    0.2969398431919135
+                ], 
+                0.5008708834648132
+            ], 
+            [
+                3.697584390640259, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9843795041339677, 
+                    0.9843795041339677, 
+                    0.2967146467573219, 
+                    0.2967146467573219
+                ], 
+                0.5011019110679626
+            ]
+        ]
+    }, 
+    {
+        "block_size": 7, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.9973703622817993, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9813506337582639, 
+                    0.9813506337582639, 
+                    0.2977113694609035, 
+                    0.2977113694609035
+                ], 
+                0.5006639361381531
+            ], 
+            [
+                1.0711169242858887, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9809485813516844, 
+                    0.9809485813516844, 
+                    0.2978275940122347, 
+                    0.2978275940122347
+                ], 
+                0.5005825161933899
+            ], 
+            [
+                1.1503162384033203, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9805958225895974, 
+                    0.9805958225895974, 
+                    0.2979315985984511, 
+                    0.2979315985984511
+                ], 
+                0.5005137324333191
+            ], 
+            [
+                1.235371708869934, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9804950967592505, 
+                    0.9804950967592505, 
+                    0.2983947971911539, 
+                    0.2983947971911539
+                ], 
+                0.5010915994644165
+            ], 
+            [
+                1.3267161846160889, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9802572270491797, 
+                    0.9802572270491797, 
+                    0.29846650376569567, 
+                    0.29846650376569567
+                ], 
+                0.5010469555854797
+            ], 
+            [
+                1.4248148202896118, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.980081587269149, 
+                    0.980081587269149, 
+                    0.298519825685046, 
+                    0.298519825685046
+                ], 
+                0.5010144710540771
+            ], 
+            [
+                1.5301669836044312, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9799715204917293, 
+                    0.9799715204917293, 
+                    0.2985531910133529, 
+                    0.2985531910133529
+                ], 
+                0.5009940266609192
+            ], 
+            [
+                1.6433088779449463, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9799296460041486, 
+                    0.9799296460041486, 
+                    0.29856543341275954, 
+                    0.29856543341275954
+                ], 
+                0.5009856224060059
+            ], 
+            [
+                1.7648166418075562, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9799577797894293, 
+                    0.9799577797894293, 
+                    0.2985558530899008, 
+                    0.2985558530899008
+                ], 
+                0.5009894371032715
+            ], 
+            [
+                1.8953088521957397, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9800568713047677, 
+                    0.9800568713047677, 
+                    0.298524259910358, 
+                    0.298524259910358
+                ], 
+                0.5010057091712952
+            ], 
+            [
+                2.035449743270874, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9802269593156422, 
+                    0.9802269593156422, 
+                    0.29847099515685394, 
+                    0.29847099515685394
+                ], 
+                0.5010349154472351
+            ], 
+            [
+                2.18595290184021, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9804671491218266, 
+                    0.9804671491218266, 
+                    0.29839692973011034, 
+                    0.29839692973011034
+                ], 
+                0.5010776519775391
+            ], 
+            [
+                2.3475842475891113, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9807756129721411, 
+                    0.9807756129721411, 
+                    0.2983034380375961, 
+                    0.2983034380375961
+                ], 
+                0.5011347532272339
+            ], 
+            [
+                2.5211668014526367, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9809594906532457, 
+                    0.9809594906532457, 
+                    0.29781463611886355, 
+                    0.29781463611886355
+                ], 
+                0.5005712509155273
+            ], 
+            [
+                2.7075841426849365, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9813994678676424, 
+                    0.9813994678676424, 
+                    0.29768615869193166, 
+                    0.29768615869193166
+                ], 
+                0.5006585121154785
+            ], 
+            [
+                2.907785415649414, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9818975521904515, 
+                    0.9818975521904515, 
+                    0.2975445998314281, 
+                    0.2975445998314281
+                ], 
+                0.5007623434066772
+            ], 
+            [
+                3.1227896213531494, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9823755406154429, 
+                    0.9823755406154429, 
+                    0.2972335336944526, 
+                    0.2972335336944526
+                ], 
+                0.5006192326545715
+            ], 
+            [
+                3.353691577911377, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9829762526077145, 
+                    0.9829762526077145, 
+                    0.2970731133164404, 
+                    0.2970731133164404
+                ], 
+                0.50075763463974
+            ], 
+            [
+                3.6016666889190674, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9836183179608209, 
+                    0.9836183179608209, 
+                    0.2969080109538987, 
+                    0.2969080109538987
+                ], 
+                0.5009139776229858
+            ], 
+            [
+                3.8679773807525635, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9842952592243492, 
+                    0.9842952592243492, 
+                    0.2967409836253676, 
+                    0.2967409836253676
+                ], 
+                0.50108802318573
+            ], 
+            [
+                4.153979301452637, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9848486978245988, 
+                    0.9848486978245988, 
+                    0.296179894235638, 
+                    0.296179894235638
+                ], 
+                0.5006394982337952
+            ]
+        ]
+    }, 
+    {
+        "block_size": 8, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.5289255976676941, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9884932452168662, 
+                    0.9884932452168662, 
+                    0.6812851666102208, 
+                    0.6812851666102208, 
+                    0.25108744197495875, 
+                    0.25108744197495875
+                ], 
+                0.5012580752372742
+            ], 
+            [
+                0.5637091994285583, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9878775425652354, 
+                    0.9878775425652354, 
+                    0.6809876769783092, 
+                    0.6809876769783092, 
+                    0.2514793634933329, 
+                    0.2514793634933329
+                ], 
+                0.5011304020881653
+            ], 
+            [
+                0.6007803082466125, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9872711967557587, 
+                    0.9872711967557587, 
+                    0.6807395196843768, 
+                    0.6807395196843768, 
+                    0.2518457766674693, 
+                    0.2518457766674693
+                ], 
+                0.5009972453117371
+            ], 
+            [
+                0.6402892470359802, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9866795036241388, 
+                    0.9866795036241388, 
+                    0.680539671952402, 
+                    0.680539671952402, 
+                    0.25218378352762105, 
+                    0.25218378352762105
+                ], 
+                0.5008589625358582
+            ], 
+            [
+                0.6823964715003967, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.986107889212672, 
+                    0.986107889212672, 
+                    0.6803865033167106, 
+                    0.6803865033167106, 
+                    0.252490774783913, 
+                    0.252490774783913
+                ], 
+                0.5007162690162659
+            ], 
+            [
+                0.7272727489471436, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9855618224742346, 
+                    0.9855618224742346, 
+                    0.6802778111339733, 
+                    0.6802778111339733, 
+                    0.25276447397914087, 
+                    0.25276447397914087
+                ], 
+                0.5005699992179871
+            ], 
+            [
+                0.7751001715660095, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.985272116496127, 
+                    0.985272116496127, 
+                    0.6804708341192927, 
+                    0.6804708341192927, 
+                    0.25334943748988087, 
+                    0.25334943748988087
+                ], 
+                0.5012031197547913
+            ], 
+            [
+                0.8260729312896729, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9847993023802953, 
+                    0.9847993023802953, 
+                    0.6804414589752903, 
+                    0.6804414589752903, 
+                    0.25354799502336367, 
+                    0.25354799502336367
+                ], 
+                0.5010526776313782
+            ], 
+            [
+                0.8803977370262146, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9843671566742032, 
+                    0.9843671566742032, 
+                    0.6804468946542974, 
+                    0.6804468946542974, 
+                    0.2537092162968869, 
+                    0.2537092162968869
+                ], 
+                0.5009025931358337
+            ], 
+            [
+                0.9382951259613037, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9839803469826988, 
+                    0.9839803469826988, 
+                    0.6804833429769603, 
+                    0.6804833429769603, 
+                    0.253832498754887, 
+                    0.253832498754887
+                ], 
+                0.5007543563842773
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9836431301246304, 
+                    0.9836431301246304, 
+                    0.6805468082328968, 
+                    0.6805468082328968, 
+                    0.253917689907865, 
+                    0.253917689907865
+                ], 
+                0.5006098747253418
+            ], 
+            [
+                1.0657627582550049, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9836088382711455, 
+                    0.9836088382711455, 
+                    0.6808869941627457, 
+                    0.6808869941627457, 
+                    0.25429933726378223, 
+                    0.25429933726378223
+                ], 
+                0.5012518167495728
+            ], 
+            [
+                1.1358503103256226, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9833842158951197, 
+                    0.9833842158951197, 
+                    0.6809906897213642, 
+                    0.6809906897213642, 
+                    0.25430883276155036, 
+                    0.25430883276155036
+                ], 
+                0.5011205077171326
+            ], 
+            [
+                1.210546851158142, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9832180216496001, 
+                    0.9832180216496001, 
+                    0.6811092292403501, 
+                    0.6811092292403501, 
+                    0.2542829648296368, 
+                    0.2542829648296368
+                ], 
+                0.5009987354278564
+            ], 
+            [
+                1.2901557683944702, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9831121847923955, 
+                    0.9831121847923955, 
+                    0.6812388078822761, 
+                    0.6812388078822761, 
+                    0.25422331362316813, 
+                    0.25422331362316813
+                ], 
+                0.5008885860443115
+            ], 
+            [
+                1.375, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.983067950505184, 
+                    0.983067950505184, 
+                    0.6813758612350592, 
+                    0.6813758612350592, 
+                    0.2541318306621202, 
+                    0.2541318306621202
+                ], 
+                0.5007920265197754
+            ], 
+            [
+                1.465423822402954, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9830858621846948, 
+                    0.9830858621846948, 
+                    0.6815171251317961, 
+                    0.6815171251317961, 
+                    0.2540107996811821, 
+                    0.2540107996811821
+                ], 
+                0.5007109642028809
+            ], 
+            [
+                1.5617940425872803, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9831657571197442, 
+                    0.9831657571197442, 
+                    0.6816596801229241, 
+                    0.6816596801229241, 
+                    0.2538627896052403, 
+                    0.2538627896052403
+                ], 
+                0.5006473064422607
+            ], 
+            [
+                1.6645020246505737, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996758323332972, 
+                    0.9996758323332972, 
+                    0.6776247833082082, 
+                    0.6776247833082082, 
+                    0.2479053725019306, 
+                    0.2479053725019306
+                ], 
+                0.5006181597709656
+            ], 
+            [
+                1.7739641666412354, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9835073807883926, 
+                    0.9835073807883926, 
+                    0.6819388594384631, 
+                    0.6819388594384631, 
+                    0.2534972015782273, 
+                    0.2534972015782273
+                ], 
+                0.5005788207054138
+            ], 
+            [
+                1.890625, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9837653955299581, 
+                    0.9837653955299581, 
+                    0.6820715342305962, 
+                    0.6820715342305962, 
+                    0.2532856674981489, 
+                    0.2532856674981489
+                ], 
+                0.5005767941474915
+            ]
+        ]
+    }, 
+    {
+        "block_size": 9, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.5625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9867511665498712, 
+                    0.9867511665498712, 
+                    0.6829872214203097, 
+                    0.6829872214203097, 
+                    0.25159941213376924, 
+                    0.25159941213376924
+                ], 
+                0.5012697577476501
+            ], 
+            [
+                0.5958133935928345, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9862267468681232, 
+                    0.9862267468681232, 
+                    0.682770062135412, 
+                    0.682770062135412, 
+                    0.2519207585687204, 
+                    0.2519207585687204
+                ], 
+                0.5011588335037231
+            ], 
+            [
+                0.6310997605323792, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9857257385835473, 
+                    0.9857257385835473, 
+                    0.6825897945889454, 
+                    0.6825897945889454, 
+                    0.2522176218637077, 
+                    0.2522176218637077
+                ], 
+                0.5010504722595215
+            ], 
+            [
+                0.6684759259223938, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.985252445478584, 
+                    0.985252445478584, 
+                    0.6824446664346091, 
+                    0.6824446664346091, 
+                    0.25248788543568595, 
+                    0.25248788543568595
+                ], 
+                0.5009450316429138
+            ], 
+            [
+                0.7080656290054321, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9848110033689266, 
+                    0.9848110033689266, 
+                    0.6823325517082524, 
+                    0.6823325517082524, 
+                    0.25272973367550505, 
+                    0.25272973367550505
+                ], 
+                0.500842809677124
+            ], 
+            [
+                0.75, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9844053155531314, 
+                    0.9844053155531314, 
+                    0.6822510084677492, 
+                    0.6822510084677492, 
+                    0.25294168408019235, 
+                    0.25294168408019235
+                ], 
+                0.5007442235946655
+            ], 
+            [
+                0.7944178581237793, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9840389932026479, 
+                    0.9840389932026479, 
+                    0.6821973434568893, 
+                    0.6821973434568893, 
+                    0.2531226122079681, 
+                    0.2531226122079681
+                ], 
+                0.5006498098373413
+            ], 
+            [
+                0.8414663672447205, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9837153020376644, 
+                    0.9837153020376644, 
+                    0.6821686813740473, 
+                    0.6821686813740473, 
+                    0.25327176899798837, 
+                    0.25327176899798837
+                ], 
+                0.5005603432655334
+            ], 
+            [
+                0.8913012146949768, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9836881011488613, 
+                    0.9836881011488613, 
+                    0.6824043242788872, 
+                    0.6824043242788872, 
+                    0.2537304354942209, 
+                    0.2537304354942209
+                ], 
+                0.5012645125389099
+            ], 
+            [
+                0.9440875053405762, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9834606262475277, 
+                    0.9834606262475277, 
+                    0.6824159284788154, 
+                    0.6824159284788154, 
+                    0.2538138243140644, 
+                    0.2538138243140644
+                ], 
+                0.5011867880821228
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9832824528151022, 
+                    0.9832824528151022, 
+                    0.6824435238922786, 
+                    0.6824435238922786, 
+                    0.2538659481915074, 
+                    0.2538659481915074
+                ], 
+                0.5011167526245117
+            ], 
+            [
+                1.0592238903045654, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9831550784411202, 
+                    0.9831550784411202, 
+                    0.6824842304517681, 
+                    0.6824842304517681, 
+                    0.25388757340568213, 
+                    0.25388757340568213
+                ], 
+                0.5010553002357483
+            ], 
+            [
+                1.121955156326294, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9830795099480814, 
+                    0.9830795099480814, 
+                    0.6825353086557603, 
+                    0.6825353086557603, 
+                    0.25387980505721774, 
+                    0.25387980505721774
+                ], 
+                0.5010036826133728
+            ], 
+            [
+                1.1884015798568726, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9830562577796444, 
+                    0.9830562577796444, 
+                    0.6825942053776098, 
+                    0.6825942053776098, 
+                    0.25384405951622413, 
+                    0.25384405951622413
+                ], 
+                0.500963032245636
+            ], 
+            [
+                1.2587833404541016, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9830853378691533, 
+                    0.9830853378691533, 
+                    0.6826585900096668, 
+                    0.6826585900096668, 
+                    0.2537820310891475, 
+                    0.2537820310891475
+                ], 
+                0.5009345412254333
+            ], 
+            [
+                1.3333333730697632, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9831662805120522, 
+                    0.9831662805120522, 
+                    0.682726380433573, 
+                    0.682726380433573, 
+                    0.25369565379326176, 
+                    0.25369565379326176
+                ], 
+                0.5009193420410156
+            ], 
+            [
+                1.4122984409332275, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9832981457705855, 
+                    0.9832981457705855, 
+                    0.6827957586537798, 
+                    0.6827957586537798, 
+                    0.2535870589975854, 
+                    0.2535870589975854
+                ], 
+                0.5009186267852783
+            ], 
+            [
+                1.4959402084350586, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9834795449471411, 
+                    0.9834795449471411, 
+                    0.6828651762605582, 
+                    0.6828651762605582, 
+                    0.25345852997408863, 
+                    0.25345852997408863
+                ], 
+                0.5009334087371826
+            ], 
+            [
+                1.5845354795455933, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9837086676921714, 
+                    0.9837086676921714, 
+                    0.6829333504112068, 
+                    0.6829333504112068, 
+                    0.25331245424250454, 
+                    0.25331245424250454
+                ], 
+                0.5009647607803345
+            ], 
+            [
+                1.6783777475357056, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9839833143147331, 
+                    0.9839833143147331, 
+                    0.6829992510544312, 
+                    0.6829992510544312, 
+                    0.25315127483886785, 
+                    0.25315127483886785
+                ], 
+                0.501013457775116
+            ], 
+            [
+                1.7777777910232544, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9843009328429704, 
+                    0.9843009328429704, 
+                    0.683062080453952, 
+                    0.683062080453952, 
+                    0.25297744145094064, 
+                    0.25297744145094064
+                ], 
+                0.5010800957679749
+            ]
+        ]
+    }, 
+    {
+        "block_size": 10, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.5917159914970398, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9885686127682225, 
+                    0.9885686127682225, 
+                    0.8378559327355263, 
+                    0.8378559327355263, 
+                    0.5313131700776317, 
+                    0.5313131700776317, 
+                    0.21578726932582312, 
+                    0.21578726932582312
+                ], 
+                0.5008838176727295
+            ], 
+            [
+                0.6235940456390381, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9877606135410782, 
+                    0.9877606135410782, 
+                    0.8372408899594088, 
+                    0.8372408899594088, 
+                    0.5312748051806506, 
+                    0.5312748051806506, 
+                    0.21648244055108493, 
+                    0.21648244055108493
+                ], 
+                0.50068598985672
+            ], 
+            [
+                0.6571895480155945, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9871369223908775, 
+                    0.9871369223908775, 
+                    0.8369185742613363, 
+                    0.8369185742613363, 
+                    0.5315432057182511, 
+                    0.5315432057182511, 
+                    0.21751865054830632, 
+                    0.21751865054830632
+                ], 
+                0.5014206171035767
+            ], 
+            [
+                0.6925949454307556, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9863301779080883, 
+                    0.9863301779080883, 
+                    0.8364305047311222, 
+                    0.8364305047311222, 
+                    0.5315691464495194, 
+                    0.5315691464495194, 
+                    0.21815393259869906, 
+                    0.21815393259869906
+                ], 
+                0.5011996030807495
+            ], 
+            [
+                0.729907751083374, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.985526675868924, 
+                    0.985526675868924, 
+                    0.8360068628453698, 
+                    0.8360068628453698, 
+                    0.5316211316414357, 
+                    0.5316211316414357, 
+                    0.21875657295773382, 
+                    0.21875657295773382
+                ], 
+                0.5009663701057434
+            ], 
+            [
+                0.7692307829856873, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9847320733794515, 
+                    0.9847320733794515, 
+                    0.835648649129811, 
+                    0.835648649129811, 
+                    0.5316945987658024, 
+                    0.5316945987658024, 
+                    0.21932265851462446, 
+                    0.21932265851462446
+                ], 
+                0.5007209181785583
+            ], 
+            [
+                0.8106722831726074, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9841883941013576, 
+                    0.9841883941013576, 
+                    0.8355992336361329, 
+                    0.8355992336361329, 
+                    0.5320502038625782, 
+                    0.5320502038625782, 
+                    0.220184230719529, 
+                    0.220184230719529
+                ], 
+                0.5014110207557678
+            ], 
+            [
+                0.8543463945388794, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.98343858151948, 
+                    0.98343858151948, 
+                    0.8353720560457831, 
+                    0.8353720560457831, 
+                    0.5321504040020707, 
+                    0.5321504040020707, 
+                    0.22066112413475672, 
+                    0.22066112413475672
+                ], 
+                0.5011436343193054
+            ], 
+            [
+                0.9003733992576599, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9827136358729643, 
+                    0.9827136358729643, 
+                    0.8352071324588993, 
+                    0.8352071324588993, 
+                    0.5322581223126015, 
+                    0.5322581223126015, 
+                    0.2210933307869904, 
+                    0.2210933307869904
+                ], 
+                0.5008663535118103
+            ], 
+            [
+                0.9488800764083862, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9820185518808415, 
+                    0.9820185518808415, 
+                    0.8351020331911918, 
+                    0.8351020331911918, 
+                    0.5323690991416306, 
+                    0.5323690991416306, 
+                    0.22147915641627572, 
+                    0.22147915641627572
+                ], 
+                0.5005807280540466
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9815721402830611, 
+                    0.9815721402830611, 
+                    0.8352483247688572, 
+                    0.8352483247688572, 
+                    0.5326809727482062, 
+                    0.5326809727482062, 
+                    0.22203439731706645, 
+                    0.22203439731706645
+                ], 
+                0.5009967088699341
+            ], 
+            [
+                1.053873896598816, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9809557616030966, 
+                    0.9809557616030966, 
+                    0.8352521703081457, 
+                    0.8352521703081457, 
+                    0.5327852154478215, 
+                    0.5327852154478215, 
+                    0.22232167404080255, 
+                    0.22232167404080255
+                ], 
+                0.5006999969482422
+            ], 
+            [
+                1.1106503009796143, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9805023687952288, 
+                    0.9805023687952288, 
+                    0.8354055893451885, 
+                    0.8354055893451885, 
+                    0.5329870710639029, 
+                    0.5329870710639029, 
+                    0.22268530731310673, 
+                    0.22268530731310673
+                ], 
+                0.5007946491241455
+            ], 
+            [
+                1.1704853773117065, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9801001038302146, 
+                    0.9801001038302146, 
+                    0.8356009734799977, 
+                    0.8356009734799977, 
+                    0.5331764839835382, 
+                    0.5331764839835382, 
+                    0.22300032208215825, 
+                    0.22300032208215825
+                ], 
+                0.5008912682533264
+            ], 
+            [
+                1.233544111251831, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9796260811736623, 
+                    0.9796260811736623, 
+                    0.8357361267896074, 
+                    0.8357361267896074, 
+                    0.5332493316762187, 
+                    0.5332493316762187, 
+                    0.22314332168197085, 
+                    0.22314332168197085
+                ], 
+                0.5005956292152405
+            ], 
+            [
+                1.2999999523162842, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9795122145072933, 
+                    0.9795122145072933, 
+                    0.8361400792913602, 
+                    0.8361400792913602, 
+                    0.5335540694036984, 
+                    0.5335540694036984, 
+                    0.22353677489350665, 
+                    0.22353677489350665
+                ], 
+                0.501262903213501
+            ], 
+            [
+                1.3700361251831055, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9791479111792912, 
+                    0.9791479111792912, 
+                    0.8363375782436423, 
+                    0.8363375782436423, 
+                    0.5335957897035469, 
+                    0.5335957897035469, 
+                    0.22358905838647955, 
+                    0.22358905838647955
+                ], 
+                0.5009815692901611
+            ], 
+            [
+                1.4438453912734985, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9788384348532816, 
+                    0.9788384348532816, 
+                    0.8365603982790413, 
+                    0.8365603982790413, 
+                    0.5336211377890229, 
+                    0.5336211377890229, 
+                    0.22359968569472072, 
+                    0.22359968569472072
+                ], 
+                0.5007106065750122
+            ], 
+            [
+                1.5216310024261475, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9789064740757781, 
+                    0.9789064740757781, 
+                    0.8370291035009275, 
+                    0.8370291035009275, 
+                    0.5338720324314143, 
+                    0.5338720324314143, 
+                    0.2238625496693827, 
+                    0.2238625496693827
+                ], 
+                0.5014155507087708
+            ], 
+            [
+                1.6036072969436646, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9787134068830708, 
+                    0.9787134068830708, 
+                    0.8372858272772792, 
+                    0.8372858272772792, 
+                    0.5338623196029352, 
+                    0.5338623196029352, 
+                    0.22379538814720687, 
+                    0.22379538814720687
+                ], 
+                0.5011744499206543
+            ], 
+            [
+                1.690000057220459, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9785777026957404, 
+                    0.9785777026957404, 
+                    0.8375545176943625, 
+                    0.8375545176943625, 
+                    0.5338354334656051, 
+                    0.5338354334656051, 
+                    0.22369299287897415, 
+                    0.22369299287897415
+                ], 
+                0.5009508728981018
+            ]
+        ]
+    }, 
+    {
+        "block_size": 11, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8103343844413757, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9871210026111861, 
+                    0.9871210026111861, 
+                    0.8370232828951552, 
+                    0.8370232828951552, 
+                    0.5307901534405669, 
+                    0.5307901534405669, 
+                    0.2172421422142317, 
+                    0.2172421422142317
+                ], 
+                0.5006821155548096
+            ], 
+            [
+                0.8503766655921936, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9865705508405384, 
+                    0.9865705508405384, 
+                    0.8367934188387313, 
+                    0.8367934188387313, 
+                    0.5311071110065232, 
+                    0.5311071110065232, 
+                    0.21817598665406418, 
+                    0.21817598665406418
+                ], 
+                0.5014073252677917
+            ], 
+            [
+                0.8923976421356201, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9858312863073503, 
+                    0.9858312863073503, 
+                    0.8363863565643568, 
+                    0.8363863565643568, 
+                    0.5311695390651522, 
+                    0.5311695390651522, 
+                    0.21872017600123625, 
+                    0.21872017600123625
+                ], 
+                0.5011804699897766
+            ], 
+            [
+                0.9364950060844421, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9850973071427267, 
+                    0.9850973071427267, 
+                    0.8360329033372318, 
+                    0.8360329033372318, 
+                    0.5312510149308285, 
+                    0.5312510149308285, 
+                    0.21923575493902495, 
+                    0.21923575493902495
+                ], 
+                0.5009437203407288
+            ], 
+            [
+                0.9827714562416077, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9843730046033353, 
+                    0.9843730046033353, 
+                    0.8357335075117198, 
+                    0.8357335075117198, 
+                    0.5313479467393589, 
+                    0.5313479467393589, 
+                    0.21972004878691082, 
+                    0.21972004878691082
+                ], 
+                0.5006976127624512
+            ], 
+            [
+                1.031334638595581, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9839030502042528, 
+                    0.9839030502042528, 
+                    0.835729645609925, 
+                    0.835729645609925, 
+                    0.5317248917135893, 
+                    0.5317248917135893, 
+                    0.2205022828013458, 
+                    0.2205022828013458
+                ], 
+                0.5013891458511353
+            ], 
+            [
+                1.0822975635528564, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9832203267917774, 
+                    0.9832203267917774, 
+                    0.8355378412173264, 
+                    0.8355378412173264, 
+                    0.5318395987945344, 
+                    0.5318395987945344, 
+                    0.220911772221779, 
+                    0.220911772221779
+                ], 
+                0.5011271238327026
+            ], 
+            [
+                1.135778784751892, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9825595681124333, 
+                    0.9825595681124333, 
+                    0.835397148123963, 
+                    0.835397148123963, 
+                    0.5319590186258972, 
+                    0.5319590186258972, 
+                    0.22128442627297992, 
+                    0.22128442627297992
+                ], 
+                0.5008581876754761
+            ], 
+            [
+                1.191902756690979, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9819246389011789, 
+                    0.9819246389011789, 
+                    0.8353056749547642, 
+                    0.8353056749547642, 
+                    0.5320798918613473, 
+                    0.5320798918613473, 
+                    0.22161903986581788, 
+                    0.22161903986581788
+                ], 
+                0.5005835890769958
+            ], 
+            [
+                1.2508000135421753, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9815337203479144, 
+                    0.9815337203479144, 
+                    0.8354542209126016, 
+                    0.8354542209126016, 
+                    0.5324024270442839, 
+                    0.5324024270442839, 
+                    0.22213107417415348, 
+                    0.22213107417415348
+                ], 
+                0.5010128021240234
+            ], 
+            [
+                1.312607765197754, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9809659758481931, 
+                    0.9809659758481931, 
+                    0.835452966393764, 
+                    0.835452966393764, 
+                    0.5325156367609203, 
+                    0.5325156367609203, 
+                    0.22238483820510285, 
+                    0.22238483820510285
+                ], 
+                0.5007315278053284
+            ], 
+            [
+                1.3774696588516235, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9805541479611843, 
+                    0.9805541479611843, 
+                    0.8355926736918196, 
+                    0.8355926736918196, 
+                    0.5327281700580994, 
+                    0.5327281700580994, 
+                    0.22272350459822796, 
+                    0.22272350459822796
+                ], 
+                0.5008428692817688
+            ], 
+            [
+                1.4455366134643555, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9800628863867662, 
+                    0.9800628863867662, 
+                    0.8356692696212155, 
+                    0.8356692696212155, 
+                    0.5328249052492038, 
+                    0.5328249052492038, 
+                    0.22289789306292082, 
+                    0.22289789306292082
+                ], 
+                0.5005618929862976
+            ], 
+            [
+                1.5169671773910522, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9797373842140136, 
+                    0.9797373842140136, 
+                    0.8358775659113215, 
+                    0.8358775659113215, 
+                    0.5330147066571725, 
+                    0.5330147066571725, 
+                    0.22315719040081514, 
+                    0.22315719040081514
+                ], 
+                0.5006791949272156
+            ], 
+            [
+                1.5919272899627686, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.979639086791133, 
+                    0.979639086791133, 
+                    0.8362509513218367, 
+                    0.8362509513218367, 
+                    0.5333363428276944, 
+                    0.5333363428276944, 
+                    0.22355055147153827, 
+                    0.22355055147153827
+                ], 
+                0.5013633370399475
+            ], 
+            [
+                1.6705917119979858, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9792829924564013, 
+                    0.9792829924564013, 
+                    0.8364155910742611, 
+                    0.8364155910742611, 
+                    0.5333944586749435, 
+                    0.5333944586749435, 
+                    0.22360973615152496, 
+                    0.22360973615152496
+                ], 
+                0.501098096370697
+            ], 
+            [
+                1.7531431913375854, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9789725965373138, 
+                    0.9789725965373138, 
+                    0.8366032840657045, 
+                    0.8366032840657045, 
+                    0.5334384453494934, 
+                    0.5334384453494934, 
+                    0.22363389975671666, 
+                    0.22363389975671666
+                ], 
+                0.5008415579795837
+            ], 
+            [
+                1.8397738933563232, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9787092285651008, 
+                    0.9787092285651008, 
+                    0.836810475086427, 
+                    0.836810475086427, 
+                    0.5334676501616016, 
+                    0.5334676501616016, 
+                    0.22362430516660678, 
+                    0.22362430516660678
+                ], 
+                0.5005955696105957
+            ], 
+            [
+                1.9306854009628296, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9788162787430819, 
+                    0.9788162787430819, 
+                    0.837256431928646, 
+                    0.837256431928646, 
+                    0.5337254771700352, 
+                    0.5337254771700352, 
+                    0.223873982772441, 
+                    0.223873982772441
+                ], 
+                0.5013253688812256
+            ], 
+            [
+                2.0260894298553467, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9786520803164638, 
+                    0.9786520803164638, 
+                    0.8374895199654987, 
+                    0.8374895199654987, 
+                    0.5337235274660029, 
+                    0.5337235274660029, 
+                    0.2238012184357448, 
+                    0.2238012184357448
+                ], 
+                0.5011073350906372
+            ], 
+            [
+                2.1262075901031494, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9785365313374055, 
+                    0.9785365313374055, 
+                    0.8377320164420881, 
+                    0.8377320164420881, 
+                    0.5337064956551163, 
+                    0.5337064956551163, 
+                    0.2236996102760683, 
+                    0.2236996102760683
+                ], 
+                0.5009050965309143
+            ]
+        ]
+    }, 
+    {
+        "block_size": 12, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.6399999856948853, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9894811388486291, 
+                    0.9894811388486291, 
+                    0.9573285533250963, 
+                    0.9573285533250963, 
+                    0.6538815647462243, 
+                    0.6538815647462243, 
+                    0.4455232802461428, 
+                    0.4455232802461428, 
+                    0.1914734681864004, 
+                    0.1914734681864004
+                ], 
+                0.5011546611785889
+            ], 
+            [
+                0.6692093014717102, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9885979730527427, 
+                    0.9885979730527427, 
+                    0.9566139334937938, 
+                    0.9566139334937938, 
+                    0.653400947676084, 
+                    0.653400947676084, 
+                    0.44579507723913764, 
+                    0.44579507723913764, 
+                    0.19236476221423468, 
+                    0.19236476221423468
+                ], 
+                0.5008114576339722
+            ], 
+            [
+                0.6997517347335815, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.98788470047092, 
+                    0.98788470047092, 
+                    0.9561865640784128, 
+                    0.9561865640784128, 
+                    0.653235921683392, 
+                    0.653235921683392, 
+                    0.4463750072004788, 
+                    0.4463750072004788, 
+                    0.19357774428341032, 
+                    0.19357774428341032
+                ], 
+                0.5015065670013428
+            ], 
+            [
+                0.7316880822181702, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9869681427047363, 
+                    0.9869681427047363, 
+                    0.9556140503551017, 
+                    0.9556140503551017, 
+                    0.6528610649749197, 
+                    0.6528610649749197, 
+                    0.4466953472541113, 
+                    0.4466953472541113, 
+                    0.19439542144931804, 
+                    0.19439542144931804
+                ], 
+                0.5010613203048706
+            ], 
+            [
+                0.7650820016860962, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9860348162140301, 
+                    0.9860348162140301, 
+                    0.9551167672638172, 
+                    0.9551167672638172, 
+                    0.6525346972663008, 
+                    0.6525346972663008, 
+                    0.44703288348625186, 
+                    0.44703288348625186, 
+                    0.1951741959783984, 
+                    0.1951741959783984
+                ], 
+                0.5005612373352051
+            ], 
+            [
+                0.800000011920929, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9853280111681225, 
+                    0.9853280111681225, 
+                    0.9549313139002442, 
+                    0.9549313139002442, 
+                    0.6525257280181722, 
+                    0.6525257280181722, 
+                    0.4476473537651171, 
+                    0.4476473537651171, 
+                    0.1962298000610625, 
+                    0.1962298000610625
+                ], 
+                0.5011109113693237
+            ], 
+            [
+                0.8365116715431213, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9843893659918551, 
+                    0.9843893659918551, 
+                    0.9545956419416225, 
+                    0.9545956419416225, 
+                    0.6522894658857211, 
+                    0.6522894658857211, 
+                    0.447997285286582, 
+                    0.447997285286582, 
+                    0.19691048716595852, 
+                    0.19691048716595852
+                ], 
+                0.5005069375038147
+            ], 
+            [
+                0.8746896386146545, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9837143301766624, 
+                    0.9837143301766624, 
+                    0.9545770095981779, 
+                    0.9545770095981779, 
+                    0.6523648488188455, 
+                    0.6523648488188455, 
+                    0.44860313530221824, 
+                    0.44860313530221824, 
+                    0.19784598838028403, 
+                    0.19784598838028403
+                ], 
+                0.5009686350822449
+            ], 
+            [
+                0.9146100878715515, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9829047913196405, 
+                    0.9829047913196405, 
+                    0.9545022751219859, 
+                    0.9545022751219859, 
+                    0.6523161160044499, 
+                    0.6523161160044499, 
+                    0.44904839586859135, 
+                    0.44904839586859135, 
+                    0.19854226028488517, 
+                    0.19854226028488517
+                ], 
+                0.5007346272468567
+            ], 
+            [
+                0.9563524723052979, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9822844963763281, 
+                    0.9822844963763281, 
+                    0.9546445138986125, 
+                    0.9546445138986125, 
+                    0.6524576019340554, 
+                    0.6524576019340554, 
+                    0.4496248584417438, 
+                    0.4496248584417438, 
+                    0.19935016667757716, 
+                    0.19935016667757716
+                ], 
+                0.5011237859725952
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9817009611949983, 
+                    0.9817009611949983, 
+                    0.954861814844968, 
+                    0.954861814844968, 
+                    0.6526246668701186, 
+                    0.6526246668701186, 
+                    0.45017975775610963, 
+                    0.45017975775610963, 
+                    0.20009319293842948, 
+                    0.20009319293842948
+                ], 
+                0.5014860033988953
+            ], 
+            [
+                1.0456395149230957, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9808382082587727, 
+                    0.9808382082587727, 
+                    0.9549191356298238, 
+                    0.9549191356298238, 
+                    0.6525418243061436, 
+                    0.6525418243061436, 
+                    0.4504756734445015, 
+                    0.4504756734445015, 
+                    0.2005006314739019, 
+                    0.2005006314739019
+                ], 
+                0.500678539276123
+            ], 
+            [
+                1.0933620929718018, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9804051739846233, 
+                    0.9804051739846233, 
+                    0.9553369857739933, 
+                    0.9553369857739933, 
+                    0.6528167174719481, 
+                    0.6528167174719481, 
+                    0.4510431930961524, 
+                    0.4510431930961524, 
+                    0.2011798193071108, 
+                    0.2011798193071108
+                ], 
+                0.5012645125389099
+            ], 
+            [
+                1.1432626247406006, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9799391303385717, 
+                    0.9799391303385717, 
+                    0.9557546299548418, 
+                    0.9557546299548418, 
+                    0.6530348009648383, 
+                    0.6530348009648383, 
+                    0.45152453627825173, 
+                    0.45152453627825173, 
+                    0.20174527327645073, 
+                    0.20174527327645073
+                ], 
+                0.5015721321105957
+            ], 
+            [
+                1.195440649986267, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9791667976068384, 
+                    0.9791667976068384, 
+                    0.9560086949090165, 
+                    0.9560086949090165, 
+                    0.6529954579989556, 
+                    0.6529954579989556, 
+                    0.45175665434295187, 
+                    0.45175665434295187, 
+                    0.20200092504854886, 
+                    0.20200092504854886
+                ], 
+                0.5007055997848511
+            ], 
+            [
+                1.25, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9787871595163135, 
+                    0.9787871595163135, 
+                    0.9565357810954789, 
+                    0.9565357810954789, 
+                    0.6532297108223805, 
+                    0.6532297108223805, 
+                    0.45218549993365503, 
+                    0.45218549993365503, 
+                    0.20246465356431473, 
+                    0.20246465356431473
+                ], 
+                0.5010061860084534
+            ], 
+            [
+                1.3070493936538696, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9782398521316165, 
+                    0.9782398521316165, 
+                    0.9569858812707297, 
+                    0.9569858812707297, 
+                    0.6533134886667729, 
+                    0.6533134886667729, 
+                    0.452461334629174, 
+                    0.452461334629174, 
+                    0.20273440939848755, 
+                    0.20273440939848755
+                ], 
+                0.5006206631660461
+            ], 
+            [
+                1.3667025566101074, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.977959228560288, 
+                    0.977959228560288, 
+                    0.9575988848785978, 
+                    0.9575988848785978, 
+                    0.6535524371662591, 
+                    0.6535524371662591, 
+                    0.45283586684563387, 
+                    0.45283586684563387, 
+                    0.20310517194427247, 
+                    0.20310517194427247
+                ], 
+                0.5009426474571228
+            ], 
+            [
+                1.4290783405303955, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.977732879764648, 
+                    0.977732879764648, 
+                    0.9582443135070507, 
+                    0.9582443135070507, 
+                    0.6537898643792054, 
+                    0.6537898643792054, 
+                    0.45318296312682227, 
+                    0.45318296312682227, 
+                    0.20343311478990983, 
+                    0.20343311478990983
+                ], 
+                0.5012869834899902
+            ], 
+            [
+                1.4943007230758667, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9773917094650028, 
+                    0.9773917094650028, 
+                    0.9588447432581022, 
+                    0.9588447432581022, 
+                    0.6539209329686699, 
+                    0.6539209329686699, 
+                    0.4534221723134512, 
+                    0.4534221723134512, 
+                    0.20362032717732467, 
+                    0.20362032717732467
+                ], 
+                0.5011493563652039
+            ], 
+            [
+                1.5625, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9772722044449755, 
+                    0.9772722044449755, 
+                    0.9595410189128093, 
+                    0.9595410189128093, 
+                    0.6541514843105501, 
+                    0.6541514843105501, 
+                    0.4537187355605685, 
+                    0.4537187355605685, 
+                    0.20387374547227527, 
+                    0.20387374547227527
+                ], 
+                0.5015513300895691
+            ]
+        ]
+    }, 
+    {
+        "block_size": 13, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.6781083941459656, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9878095595238846, 
+                    0.9878095595238846, 
+                    0.9535470218109254, 
+                    0.9535470218109254, 
+                    0.6520149480040944, 
+                    0.6520149480040944, 
+                    0.44607959528243196, 
+                    0.44607959528243196, 
+                    0.1938217587298553, 
+                    0.1938217587298553
+                ], 
+                0.5007379055023193
+            ], 
+            [
+                0.706861674785614, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9870713260151986, 
+                    0.9870713260151986, 
+                    0.9531002943401038, 
+                    0.9531002943401038, 
+                    0.6518440623751613, 
+                    0.6518440623751613, 
+                    0.4465178184741965, 
+                    0.4465178184741965, 
+                    0.19469765238883815, 
+                    0.19469765238883815
+                ], 
+                0.5008286237716675
+            ], 
+            [
+                0.7368342280387878, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9863282717176437, 
+                    0.9863282717176437, 
+                    0.9527221152494003, 
+                    0.9527221152494003, 
+                    0.6517127149072507, 
+                    0.6517127149072507, 
+                    0.4469611622701359, 
+                    0.4469611622701359, 
+                    0.19553185554962838, 
+                    0.19553185554962838
+                ], 
+                0.5008699893951416
+            ], 
+            [
+                0.7680776119232178, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9857164119486174, 
+                    0.9857164119486174, 
+                    0.9525624911648577, 
+                    0.9525624911648577, 
+                    0.6517797927985436, 
+                    0.6517797927985436, 
+                    0.4475594735190998, 
+                    0.4475594735190998, 
+                    0.19650387794498042, 
+                    0.19650387794498042
+                ], 
+                0.5014925003051758
+            ], 
+            [
+                0.8006457686424255, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9848829141264174, 
+                    0.9848829141264174, 
+                    0.9522220558327679, 
+                    0.9522220558327679, 
+                    0.651606447636988, 
+                    0.651606447636988, 
+                    0.447891441369996, 
+                    0.447891441369996, 
+                    0.19711311156180936, 
+                    0.19711311156180936
+                ], 
+                0.5009878873825073
+            ], 
+            [
+                0.8345949649810791, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9842947423189248, 
+                    0.9842947423189248, 
+                    0.9522072809243614, 
+                    0.9522072809243614, 
+                    0.6517391512935126, 
+                    0.6517391512935126, 
+                    0.44847409158641, 
+                    0.44847409158641, 
+                    0.19797831807971808, 
+                    0.19797831807971808
+                ], 
+                0.5015196204185486
+            ], 
+            [
+                0.8699836134910583, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9834662756659709, 
+                    0.9834662756659709, 
+                    0.9520069053203207, 
+                    0.9520069053203207, 
+                    0.6516228572108202, 
+                    0.6516228572108202, 
+                    0.448792315474586, 
+                    0.448792315474586, 
+                    0.19849529414085004, 
+                    0.19849529414085004
+                ], 
+                0.5009172558784485
+            ], 
+            [
+                0.9068728685379028, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9829134666175106, 
+                    0.9829134666175106, 
+                    0.9521321557611816, 
+                    0.9521321557611816, 
+                    0.6518060030405515, 
+                    0.6518060030405515, 
+                    0.4493462651077931, 
+                    0.4493462651077931, 
+                    0.19925238002168255, 
+                    0.19925238002168255
+                ], 
+                0.5013673901557922
+            ], 
+            [
+                0.9453262686729431, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9821015079457487, 
+                    0.9821015079457487, 
+                    0.952067653355067, 
+                    0.952067653355067, 
+                    0.651732932028046, 
+                    0.651732932028046, 
+                    0.4496395053063659, 
+                    0.4496395053063659, 
+                    0.19967722844948918, 
+                    0.19967722844948918
+                ], 
+                0.5006779432296753
+            ], 
+            [
+                0.985410213470459, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9815939742318321, 
+                    0.9815939742318321, 
+                    0.9523229638230273, 
+                    0.9523229638230273, 
+                    0.6519510276480915, 
+                    0.6519510276480915, 
+                    0.4501551449729508, 
+                    0.4501551449729508, 
+                    0.20033186211623152, 
+                    0.20033186211623152
+                ], 
+                0.5010621547698975
+            ], 
+            [
+                1.0271937847137451, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9809374939471768, 
+                    0.9809374939471768, 
+                    0.9524907975061058, 
+                    0.9524907975061058, 
+                    0.6520214460507091, 
+                    0.6520214460507091, 
+                    0.4505116542052956, 
+                    0.4505116542052956, 
+                    0.2007778282540638, 
+                    0.2007778282540638
+                ], 
+                0.5007654428482056
+            ], 
+            [
+                1.070749044418335, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9804895420962518, 
+                    0.9804895420962518, 
+                    0.9528632077211018, 
+                    0.9528632077211018, 
+                    0.652261203109605, 
+                    0.652261203109605, 
+                    0.4509817791204069, 
+                    0.4509817791204069, 
+                    0.2013329296224943, 
+                    0.2013329296224943
+                ], 
+                0.5011041164398193
+            ], 
+            [
+                1.116151213645935, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9800775190229744, 
+                    0.9800775190229744, 
+                    0.953287496996208, 
+                    0.953287496996208, 
+                    0.6525069914854776, 
+                    0.6525069914854776, 
+                    0.45142695224219503, 
+                    0.45142695224219503, 
+                    0.20184002141338472, 
+                    0.20184002141338472
+                ], 
+                0.5014299750328064
+            ], 
+            [
+                1.1634784936904907, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9793625640353881, 
+                    0.9793625640353881, 
+                    0.9535189696061641, 
+                    0.9535189696061641, 
+                    0.6524879463602232, 
+                    0.6524879463602232, 
+                    0.45162725600283266, 
+                    0.45162725600283266, 
+                    0.20204938653632298, 
+                    0.20204938653632298
+                ], 
+                0.5006018280982971
+            ], 
+            [
+                1.2128125429153442, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9791000983673529, 
+                    0.9791000983673529, 
+                    0.954102681037641, 
+                    0.954102681037641, 
+                    0.6528083625439163, 
+                    0.6528083625439163, 
+                    0.452081203237771, 
+                    0.452081203237771, 
+                    0.20252280505189058, 
+                    0.20252280505189058
+                ], 
+                0.5011770725250244
+            ], 
+            [
+                1.2642384767532349, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9787966341299312, 
+                    0.9787966341299312, 
+                    0.9546617931753416, 
+                    0.9546617931753416, 
+                    0.6530600088355797, 
+                    0.6530600088355797, 
+                    0.4524549599556695, 
+                    0.4524549599556695, 
+                    0.20290367049212438, 
+                    0.20290367049212438
+                ], 
+                0.5014880895614624
+            ], 
+            [
+                1.3178449869155884, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9781669351246328, 
+                    0.9781669351246328, 
+                    0.9550303949314264, 
+                    0.9550303949314264, 
+                    0.6530461187345171, 
+                    0.6530461187345171, 
+                    0.45259475798840726, 
+                    0.45259475798840726, 
+                    0.20300565564693618, 
+                    0.20300565564693618
+                ], 
+                0.500637948513031
+            ], 
+            [
+                1.3737245798110962, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9779399175047563, 
+                    0.9779399175047563, 
+                    0.9556599798268822, 
+                    0.9556599798268822, 
+                    0.6532933833958688, 
+                    0.6532933833958688, 
+                    0.45292384498190336, 
+                    0.45292384498190336, 
+                    0.20331686233632412, 
+                    0.20331686233632412
+                ], 
+                0.5009635090827942
+            ], 
+            [
+                1.4319735765457153, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9775317345241886, 
+                    0.9775317345241886, 
+                    0.9561916184095332, 
+                    0.9561916184095332, 
+                    0.6533840234739442, 
+                    0.6533840234739442, 
+                    0.4531108775857279, 
+                    0.4531108775857279, 
+                    0.20345609225603578, 
+                    0.20345609225603578
+                ], 
+                0.5006123781204224
+            ], 
+            [
+                1.4926923513412476, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9773893620133064, 
+                    0.9773893620133064, 
+                    0.9568728901293102, 
+                    0.9568728901293102, 
+                    0.6536217845589894, 
+                    0.6536217845589894, 
+                    0.45339697040768007, 
+                    0.45339697040768007, 
+                    0.20370463191718113, 
+                    0.20370463191718113
+                ], 
+                0.5009745359420776
+            ], 
+            [
+                1.5559858083724976, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9772926205246328, 
+                    0.9772926205246328, 
+                    0.9575715420129174, 
+                    0.9575715420129174, 
+                    0.6538530182268698, 
+                    0.6538530182268698, 
+                    0.4536620910950393, 
+                    0.4536620910950393, 
+                    0.2039245701765424, 
+                    0.2039245701765424
+                ], 
+                0.5013640522956848
+            ]
+        ]
+    }, 
+    {
+        "block_size": 14, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.7192626595497131, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9904288099726346, 
+                    0.9904288099726346, 
+                    0.9901531755148375, 
+                    0.9901531755148375, 
+                    0.7565063657996092, 
+                    0.7565063657996092, 
+                    0.5512879110757952, 
+                    0.5512879110757952, 
+                    0.39108041870373267, 
+                    0.39108041870373267, 
+                    0.17659075421873718, 
+                    0.17659075421873718
+                ], 
+                0.5005488395690918
+            ], 
+            [
+                0.7477418184280396, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9899126371738547, 
+                    0.9899126371738547, 
+                    0.9896648841587931, 
+                    0.9896648841587931, 
+                    0.7559190052881558, 
+                    0.7559190052881558, 
+                    0.5510715471073231, 
+                    0.5510715471073231, 
+                    0.3916345089799168, 
+                    0.3916345089799168, 
+                    0.1775007763770474, 
+                    0.1775007763770474
+                ], 
+                0.500700831413269
+            ], 
+            [
+                0.7773486971855164, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.989414323758904, 
+                    0.989414323758904, 
+                    0.9892002292635359, 
+                    0.9892002292635359, 
+                    0.7553881757784421, 
+                    0.7553881757784421, 
+                    0.5509130934169372, 
+                    0.5509130934169372, 
+                    0.3922117880780034, 
+                    0.3922117880780034, 
+                    0.17839039766905113, 
+                    0.17839039766905113
+                ], 
+                0.5008873343467712
+            ], 
+            [
+                0.808127760887146, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9889027895317264, 
+                    0.9889027895317264, 
+                    0.9887353938026046, 
+                    0.9887353938026046, 
+                    0.7549262837542356, 
+                    0.7549262837542356, 
+                    0.5508217917030596, 
+                    0.5508217917030596, 
+                    0.39281616966761834, 
+                    0.39281616966761834, 
+                    0.17926698760026374, 
+                    0.17926698760026374
+                ], 
+                0.5010824203491211
+            ], 
+            [
+                0.8401256203651428, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9884103077417465, 
+                    0.9884103077417465, 
+                    0.9882930540964748, 
+                    0.9882930540964748, 
+                    0.754530704794472, 
+                    0.754530704794472, 
+                    0.5507893643860863, 
+                    0.5507893643860863, 
+                    0.3934352154101874, 
+                    0.3934352154101874, 
+                    0.18011874585792015, 
+                    0.18011874585792015
+                ], 
+                0.5013278126716614
+            ], 
+            [
+                0.8733903765678406, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9879491686090256, 
+                    0.9879491686090256, 
+                    0.9878820642001044, 
+                    0.9878820642001044, 
+                    0.7542002804081303, 
+                    0.7542002804081303, 
+                    0.5508100525632527, 
+                    0.5508100525632527, 
+                    0.39406025395694755, 
+                    0.39406025395694755, 
+                    0.18093886624209582, 
+                    0.18093886624209582
+                ], 
+                0.5016345381736755
+            ], 
+            [
+                0.9079722166061401, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9872319349015621, 
+                    0.9872319349015621, 
+                    0.9872109160608147, 
+                    0.9872109160608147, 
+                    0.7536993507403101, 
+                    0.7536993507403101, 
+                    0.5506165151727479, 
+                    0.5506165151727479, 
+                    0.39445877251461814, 
+                    0.39445877251461814, 
+                    0.18145900183046237, 
+                    0.18145900183046237
+                ], 
+                0.5007346868515015
+            ], 
+            [
+                0.9439234137535095, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9868803525456691, 
+                    0.9868803525456691, 
+                    0.9868803525456691, 
+                    0.9868803525456691, 
+                    0.7534847490397794, 
+                    0.7534847490397794, 
+                    0.5507200415733066, 
+                    0.5507200415733066, 
+                    0.39507505783185276, 
+                    0.39507505783185276, 
+                    0.18220346906805202, 
+                    0.18220346906805202
+                ], 
+                0.5012269616127014
+            ], 
+            [
+                0.98129802942276, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9864282485420803, 
+                    0.9864282485420803, 
+                    0.9864282485420803, 
+                    0.9864282485420803, 
+                    0.7531738914955276, 
+                    0.7531738914955276, 
+                    0.5506931040725396, 
+                    0.5506931040725396, 
+                    0.39554221116867033, 
+                    0.39554221116867033, 
+                    0.18275229236200166, 
+                    0.18275229236200166
+                ], 
+                0.5010823607444763
+            ], 
+            [
+                1.0201525688171387, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9862038715590413, 
+                    0.9862038715590413, 
+                    0.9862038715590413, 
+                    0.9862038715590413, 
+                    0.7530489426644564, 
+                    0.7530489426644564, 
+                    0.5508402443804282, 
+                    0.5508402443804282, 
+                    0.3961113683534104, 
+                    0.3961113683534104, 
+                    0.18338981995376755, 
+                    0.18338981995376755
+                ], 
+                0.5017179846763611
+            ], 
+            [
+                1.0605454444885254, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9856941510016475, 
+                    0.9856941510016475, 
+                    0.9856941510016475, 
+                    0.9856941510016475, 
+                    0.7527463592407821, 
+                    0.7527463592407821, 
+                    0.5507682559553088, 
+                    0.5507682559553088, 
+                    0.3964689228919464, 
+                    0.3964689228919464, 
+                    0.18376005943478582, 
+                    0.18376005943478582
+                ], 
+                0.501143217086792
+            ], 
+            [
+                1.102537751197815, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.985219039488077, 
+                    0.985219039488077, 
+                    0.985219039488077, 
+                    0.985219039488077, 
+                    0.7524894380735249, 
+                    0.7524894380735249, 
+                    0.5507199179899188, 
+                    0.5507199179899188, 
+                    0.39681280080871395, 
+                    0.39681280080871395, 
+                    0.1840961825471527, 
+                    0.1840961825471527
+                ], 
+                0.5006158947944641
+            ], 
+            [
+                1.1461926698684692, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9849758472862992, 
+                    0.9849758472862992, 
+                    0.9849758472862992, 
+                    0.9849758472862992, 
+                    0.7524020831064437, 
+                    0.7524020831064437, 
+                    0.5508252985935861, 
+                    0.5508252985935861, 
+                    0.3972400298354994, 
+                    0.3972400298354994, 
+                    0.18451473136120758, 
+                    0.18451473136120758
+                ], 
+                0.5008475184440613
+            ], 
+            [
+                1.1915761232376099, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9849117669839061, 
+                    0.9849117669839061, 
+                    0.9849117669839061, 
+                    0.9849117669839061, 
+                    0.7524383813232643, 
+                    0.7524383813232643, 
+                    0.5510330734244973, 
+                    0.5510330734244973, 
+                    0.3977077980780013, 
+                    0.3977077980780013, 
+                    0.18496853203674038, 
+                    0.18496853203674038
+                ], 
+                0.5016078352928162
+            ], 
+            [
+                1.2387566566467285, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9845483074875709, 
+                    0.9845483074875709, 
+                    0.9845483074875709, 
+                    0.9845483074875709, 
+                    0.7522882265205258, 
+                    0.7522882265205258, 
+                    0.5510188749292028, 
+                    0.5510188749292028, 
+                    0.39798063460894045, 
+                    0.39798063460894045, 
+                    0.18518304875265032, 
+                    0.18518304875265032
+                ], 
+                0.5011748671531677
+            ], 
+            [
+                1.287805199623108, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9842200757595514, 
+                    0.9842200757595514, 
+                    0.9842200757595514, 
+                    0.9842200757595514, 
+                    0.752165446684506, 
+                    0.752165446684506, 
+                    0.5510092160319396, 
+                    0.5510092160319396, 
+                    0.3982285861818882, 
+                    0.3982285861818882, 
+                    0.18536020270712994, 
+                    0.18536020270712994
+                ], 
+                0.5007686018943787
+            ], 
+            [
+                1.338795781135559, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9842681798881839, 
+                    0.9842681798881839, 
+                    0.9842681798881839, 
+                    0.9842681798881839, 
+                    0.7522740460257082, 
+                    0.7522740460257082, 
+                    0.5512150622553731, 
+                    0.5512150622553731, 
+                    0.39860025341378036, 
+                    0.39860025341378036, 
+                    0.1856777810681867, 
+                    0.1856777810681867
+                ], 
+                0.5015690922737122
+            ], 
+            [
+                1.3918054103851318, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.983924589772851, 
+                    0.983924589772851, 
+                    0.983924589772851, 
+                    0.983924589772851, 
+                    0.7521358589071895, 
+                    0.7521358589071895, 
+                    0.551147370414516, 
+                    0.551147370414516, 
+                    0.3987523411277428, 
+                    0.3987523411277428, 
+                    0.1857374339308055, 
+                    0.1857374339308055
+                ], 
+                0.5009052157402039
+            ], 
+            [
+                1.4469139575958252, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9836985264281821, 
+                    0.9836985264281821, 
+                    0.9836985264281821, 
+                    0.9836985264281821, 
+                    0.7520675813371056, 
+                    0.7520675813371056, 
+                    0.551125903481754, 
+                    0.551125903481754, 
+                    0.39891489340598674, 
+                    0.39891489340598674, 
+                    0.1857965982322734, 
+                    0.1857965982322734
+                ], 
+                0.5005394816398621
+            ], 
+            [
+                1.504204511642456, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9838447510888463, 
+                    0.9838447510888463, 
+                    0.9838447510888463, 
+                    0.9838447510888463, 
+                    0.7522093769533068, 
+                    0.7522093769533068, 
+                    0.5513005409770944, 
+                    0.5513005409770944, 
+                    0.39918706087256, 
+                    0.39918706087256, 
+                    0.18598749340205703, 
+                    0.18598749340205703
+                ], 
+                0.5013381838798523
+            ], 
+            [
+                1.5637633800506592, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9836793444206811, 
+                    0.9836793444206811, 
+                    0.9836793444206811, 
+                    0.9836793444206811, 
+                    0.7521556640392199, 
+                    0.7521556640392199, 
+                    0.5512552729843034, 
+                    0.5512552729843034, 
+                    0.3992892315447529, 
+                    0.3992892315447529, 
+                    0.18597084904557912, 
+                    0.18597084904557912
+                ], 
+                0.5009716749191284
+            ]
+        ]
+    }, 
+    {
+        "block_size": 15, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.6944444179534912, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9873903170778818, 
+                    0.9873903170778818, 
+                    0.9872945983146539, 
+                    0.9872945983146539, 
+                    0.7541959179750006, 
+                    0.7541959179750006, 
+                    0.5510064071080657, 
+                    0.5510064071080657, 
+                    0.3949086213707, 
+                    0.3949086213707, 
+                    0.1810332343655794, 
+                    0.1810332343655794
+                ], 
+                0.5010613203048706
+            ], 
+            [
+                0.720234215259552, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9869890833630275, 
+                    0.9869890833630275, 
+                    0.986943149808554, 
+                    0.986943149808554, 
+                    0.7539858152866942, 
+                    0.7539858152866942, 
+                    0.5510895229063059, 
+                    0.5510895229063059, 
+                    0.39545957556052297, 
+                    0.39545957556052297, 
+                    0.18181834233933736, 
+                    0.18181834233933736
+                ], 
+                0.5014705657958984
+            ], 
+            [
+                0.7469817996025085, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9863071094320235, 
+                    0.9863071094320235, 
+                    0.9863071094320235, 
+                    0.9863071094320235, 
+                    0.7536046582619275, 
+                    0.7536046582619275, 
+                    0.5509617804256045, 
+                    0.5509617804256045, 
+                    0.3958030707814346, 
+                    0.3958030707814346, 
+                    0.1823208363090417, 
+                    0.1823208363090417
+                ], 
+                0.5006594657897949
+            ], 
+            [
+                0.7747226357460022, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9858663784334558, 
+                    0.9858663784334558, 
+                    0.9858663784334558, 
+                    0.9858663784334558, 
+                    0.7533406752246627, 
+                    0.7533406752246627, 
+                    0.5509453356617597, 
+                    0.5509453356617597, 
+                    0.3962089777281207, 
+                    0.3962089777281207, 
+                    0.18287680209788387, 
+                    0.18287680209788387
+                ], 
+                0.5005397200584412
+            ], 
+            [
+                0.8034937381744385, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9856544552342843, 
+                    0.9856544552342843, 
+                    0.9856544552342843, 
+                    0.9856544552342843, 
+                    0.7532538408239596, 
+                    0.7532538408239596, 
+                    0.5510972843125231, 
+                    0.5510972843125231, 
+                    0.3967162264042702, 
+                    0.3967162264042702, 
+                    0.18352215907319852, 
+                    0.18352215907319852
+                ], 
+                0.5011966824531555
+            ], 
+            [
+                0.8333333134651184, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9851450436206755, 
+                    0.9851450436206755, 
+                    0.9851450436206755, 
+                    0.9851450436206755, 
+                    0.7529877860890242, 
+                    0.7529877860890242, 
+                    0.5510329168779861, 
+                    0.5510329168779861, 
+                    0.397024580818749, 
+                    0.397024580818749, 
+                    0.18390697908077294, 
+                    0.18390697908077294
+                ], 
+                0.500634491443634
+            ], 
+            [
+                0.8642810583114624, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9850055607721451, 
+                    0.9850055607721451, 
+                    0.9850055607721451, 
+                    0.9850055607721451, 
+                    0.7529792969746248, 
+                    0.7529792969746248, 
+                    0.55122227205561, 
+                    0.55122227205561, 
+                    0.39749728044247046, 
+                    0.39749728044247046, 
+                    0.18446781290231154, 
+                    0.18446781290231154
+                ], 
+                0.5013548135757446
+            ], 
+            [
+                0.8963781595230103, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9845612395644652, 
+                    0.9845612395644652, 
+                    0.9845612395644652, 
+                    0.9845612395644652, 
+                    0.7527885619052118, 
+                    0.7527885619052118, 
+                    0.5511950585287072, 
+                    0.5511950585287072, 
+                    0.3977790883527997, 
+                    0.3977790883527997, 
+                    0.18478361794396347, 
+                    0.18478361794396347
+                ], 
+                0.5008666515350342
+            ], 
+            [
+                0.9296671748161316, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9843502376754769, 
+                    0.9843502376754769, 
+                    0.9843502376754769, 
+                    0.9843502376754769, 
+                    0.7527550732097815, 
+                    0.7527550732097815, 
+                    0.5513128264129421, 
+                    0.5513128264129421, 
+                    0.3981412259761118, 
+                    0.3981412259761118, 
+                    0.18518017475656673, 
+                    0.18518017475656673
+                ], 
+                0.5011290311813354
+            ], 
+            [
+                0.9641925096511841, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.983970230552366, 
+                    0.983970230552366, 
+                    0.983970230552366, 
+                    0.983970230552366, 
+                    0.7526256209574743, 
+                    0.7526256209574743, 
+                    0.551308513800476, 
+                    0.551308513800476, 
+                    0.3983897666141884, 
+                    0.3983897666141884, 
+                    0.18542795357288158, 
+                    0.18542795357288158
+                ], 
+                0.5007034540176392
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9839692654645675, 
+                    0.9839692654645675, 
+                    0.9839692654645675, 
+                    0.9839692654645675, 
+                    0.7527279528598222, 
+                    0.7527279528598222, 
+                    0.5515261021080993, 
+                    0.5515261021080993, 
+                    0.3987712171138101, 
+                    0.3987712171138101, 
+                    0.18582351488634652, 
+                    0.18582351488634652
+                ], 
+                0.5015060901641846
+            ], 
+            [
+                1.0371372699737549, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9836521933513439, 
+                    0.9836521933513439, 
+                    0.9836521933513439, 
+                    0.9836521933513439, 
+                    0.7526431000131415, 
+                    0.7526431000131415, 
+                    0.5515292353956196, 
+                    0.5515292353956196, 
+                    0.3989783140776076, 
+                    0.3989783140776076, 
+                    0.186002086712683, 
+                    0.186002086712683
+                ], 
+                0.5011236667633057
+            ], 
+            [
+                1.0756537914276123, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9833651973863756, 
+                    0.9833651973863756, 
+                    0.9833651973863756, 
+                    0.9833651973863756, 
+                    0.7525769428013547, 
+                    0.7525769428013547, 
+                    0.551533333730978, 
+                    0.551533333730978, 
+                    0.39916572981513926, 
+                    0.39916572981513926, 
+                    0.186148285679108, 
+                    0.186148285679108
+                ], 
+                0.500761866569519
+            ], 
+            [
+                1.1156005859375, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9833701798092875, 
+                    0.9833701798092875, 
+                    0.9833701798092875, 
+                    0.9833701798092875, 
+                    0.7526711486690703, 
+                    0.7526711486690703, 
+                    0.5516907653323689, 
+                    0.5516907653323689, 
+                    0.3994354408533018, 
+                    0.3994354408533018, 
+                    0.18639591902811825, 
+                    0.18639591902811825
+                ], 
+                0.5013072490692139
+            ], 
+            [
+                1.1570310592651367, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9831404250785127, 
+                    0.9831404250785127, 
+                    0.9831404250785127, 
+                    0.9831404250785127, 
+                    0.7526291366829565, 
+                    0.7526291366829565, 
+                    0.551686433540902, 
+                    0.551686433540902, 
+                    0.39957831901050733, 
+                    0.39957831901050733, 
+                    0.18647692848586528, 
+                    0.18647692848586528
+                ], 
+                0.500968337059021
+            ], 
+            [
+                1.2000000476837158, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9829375444692926, 
+                    0.9829375444692926, 
+                    0.9829375444692926, 
+                    0.9829375444692926, 
+                    0.7525956041126739, 
+                    0.7525956041126739, 
+                    0.5516758991152999, 
+                    0.5516758991152999, 
+                    0.3997000409522219, 
+                    0.3997000409522219, 
+                    0.18652811272866895, 
+                    0.18652811272866895
+                ], 
+                0.5006394982337952
+            ], 
+            [
+                1.2445647716522217, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9829638719028736, 
+                    0.9829638719028736, 
+                    0.9829638719028736, 
+                    0.9829638719028736, 
+                    0.7526784566382937, 
+                    0.7526784566382937, 
+                    0.5517715354116368, 
+                    0.5517715354116368, 
+                    0.3998755171198591, 
+                    0.3998755171198591, 
+                    0.1866425653998045, 
+                    0.1866425653998045
+                ], 
+                0.5009877681732178
+            ], 
+            [
+                1.290784478187561, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9828106174847265, 
+                    0.9828106174847265, 
+                    0.9828106174847265, 
+                    0.9828106174847265, 
+                    0.7526517357580871, 
+                    0.7526517357580871, 
+                    0.5517414347984225, 
+                    0.5517414347984225, 
+                    0.39995295018506183, 
+                    0.39995295018506183, 
+                    0.1866346886292748, 
+                    0.1866346886292748
+                ], 
+                0.5006635785102844
+            ], 
+            [
+                1.3387207984924316, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9830254154621499, 
+                    0.9830254154621499, 
+                    0.9830254154621499, 
+                    0.9830254154621499, 
+                    0.7528099485310211, 
+                    0.7528099485310211, 
+                    0.5518903798600959, 
+                    0.5518903798600959, 
+                    0.4001325992215251, 
+                    0.4001325992215251, 
+                    0.18675254357370158, 
+                    0.18675254357370158
+                ], 
+                0.5014675259590149
+            ], 
+            [
+                1.3884371519088745, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.982915554277623, 
+                    0.982915554277623, 
+                    0.982915554277623, 
+                    0.982915554277623, 
+                    0.752778533884764, 
+                    0.752778533884764, 
+                    0.5518339895286393, 
+                    0.5518339895286393, 
+                    0.4001652980599395, 
+                    0.4001652980599395, 
+                    0.18668870002008955, 
+                    0.18668870002008955
+                ], 
+                0.5011312961578369
+            ], 
+            [
+                1.440000057220459, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9828262022798233, 
+                    0.9828262022798233, 
+                    0.9828262022798233, 
+                    0.9828262022798233, 
+                    0.7527432230859601, 
+                    0.7527432230859601, 
+                    0.5517637857299228, 
+                    0.5517637857299228, 
+                    0.4001773502076958, 
+                    0.4001773502076958, 
+                    0.1865982711648205, 
+                    0.1865982711648205
+                ], 
+                0.5007885098457336
+            ]
+        ]
+    }, 
+    {
+        "block_size": 16, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.7091412544250488, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9906961826036993, 
+                    0.9906961826036993, 
+                    0.9904234669805613, 
+                    0.9904234669805613, 
+                    0.8343402726219408, 
+                    0.8343402726219408, 
+                    0.6377648791210057, 
+                    0.6377648791210057, 
+                    0.48146923713150735, 
+                    0.48146923713150735, 
+                    0.3535945181253461, 
+                    0.3535945181253461, 
+                    0.16605124741178678, 
+                    0.16605124741178678
+                ], 
+                0.5012261867523193
+            ], 
+            [
+                0.7339382171630859, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9901899481158465, 
+                    0.9901899481158465, 
+                    0.9899203286063262, 
+                    0.9899203286063262, 
+                    0.8338110466709863, 
+                    0.8338110466709863, 
+                    0.6375040983156612, 
+                    0.6375040983156612, 
+                    0.4816724584279455, 
+                    0.4816724584279455, 
+                    0.3542194075847825, 
+                    0.3542194075847825, 
+                    0.16685426498051226, 
+                    0.16685426498051226
+                ], 
+                0.501227080821991
+            ], 
+            [
+                0.7596021890640259, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9896932220013284, 
+                    0.9896932220013284, 
+                    0.9894292464204382, 
+                    0.9894292464204382, 
+                    0.8333385699321909, 
+                    0.8333385699321909, 
+                    0.6372976496354288, 
+                    0.6372976496354288, 
+                    0.48191165141395675, 
+                    0.48191165141395675, 
+                    0.3548369621413194, 
+                    0.3548369621413194, 
+                    0.16762172747985124, 
+                    0.16762172747985124
+                ], 
+                0.5011925101280212
+            ], 
+            [
+                0.7861636281013489, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9892090941874666, 
+                    0.9892090941874666, 
+                    0.9889533728563322, 
+                    0.9889533728563322, 
+                    0.8329243176821216, 
+                    0.8329243176821216, 
+                    0.6371432264849239, 
+                    0.6371432264849239, 
+                    0.4821818086150946, 
+                    0.4821818086150946, 
+                    0.35544294687829076, 
+                    0.35544294687829076, 
+                    0.16835162315788324, 
+                    0.16835162315788324
+                ], 
+                0.5011700987815857
+            ], 
+            [
+                0.813653826713562, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.988740452103873, 
+                    0.988740452103873, 
+                    0.9884956244533942, 
+                    0.9884956244533942, 
+                    0.8325689379986493, 
+                    0.8325689379986493, 
+                    0.6370379595193788, 
+                    0.6370379595193788, 
+                    0.4824778899652637, 
+                    0.4824778899652637, 
+                    0.3560336384137745, 
+                    0.3560336384137745, 
+                    0.16904249931125065, 
+                    0.16904249931125065
+                ], 
+                0.5011651515960693
+            ], 
+            [
+                0.8421052694320679, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9882899492152881, 
+                    0.9882899492152881, 
+                    0.9880586522945, 
+                    0.9880586522945, 
+                    0.8322723028037186, 
+                    0.8322723028037186, 
+                    0.6369785310032346, 
+                    0.6369785310032346, 
+                    0.4827949356484161, 
+                    0.4827949356484161, 
+                    0.3566058500070738, 
+                    0.3566058500070738, 
+                    0.16969343566052167, 
+                    0.16969343566052167
+                ], 
+                0.5011793971061707
+            ], 
+            [
+                0.8715515732765198, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9878599822654094, 
+                    0.9878599822654094, 
+                    0.9876448218720083, 
+                    0.9876448218720083, 
+                    0.8320335732966565, 
+                    0.8320335732966565, 
+                    0.6369612877587407, 
+                    0.6369612877587407, 
+                    0.48312816089825605, 
+                    0.48312816089825605, 
+                    0.3571569353731167, 
+                    0.3571569353731167, 
+                    0.17030400321717687, 
+                    0.17030400321717687
+                ], 
+                0.501214861869812
+            ], 
+            [
+                0.9020276069641113, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9874526764810023, 
+                    0.9874526764810023, 
+                    0.9872562013614719, 
+                    0.9872562013614719, 
+                    0.8318512750210479, 
+                    0.8318512750210479, 
+                    0.6369823480980822, 
+                    0.6369823480980822, 
+                    0.4834730313709221, 
+                    0.4834730313709221, 
+                    0.3576847742845031, 
+                    0.3576847742845031, 
+                    0.17087421270842668, 
+                    0.17087421270842668
+                ], 
+                0.5012730956077576
+            ], 
+            [
+                0.9335692524909973, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9870651686515174, 
+                    0.9870651686515174, 
+                    0.9868914578013831, 
+                    0.9868914578013831, 
+                    0.831724928307795, 
+                    0.831724928307795, 
+                    0.637039410382831, 
+                    0.637039410382831, 
+                    0.48382689086846403, 
+                    0.48382689086846403, 
+                    0.35818883240490296, 
+                    0.35818883240490296, 
+                    0.17140576267135121, 
+                    0.17140576267135121
+                ], 
+                0.5013479590415955
+            ], 
+            [
+                0.9662138819694519, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9866946892392934, 
+                    0.9866946892392934, 
+                    0.986548595306881, 
+                    0.986548595306881, 
+                    0.8316542700816856, 
+                    0.8316542700816856, 
+                    0.6371308460325479, 
+                    0.6371308460325479, 
+                    0.4841879962701187, 
+                    0.4841879962701187, 
+                    0.3586693500825476, 
+                    0.3586693500825476, 
+                    0.17190106703353578, 
+                    0.17190106703353578
+                ], 
+                0.5014352798461914
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.986351906925133, 
+                    0.986351906925133, 
+                    0.986234530867027, 
+                    0.986234530867027, 
+                    0.8316338471222139, 
+                    0.8316338471222139, 
+                    0.6372497763131586, 
+                    0.6372497763131586, 
+                    0.4845501425564125, 
+                    0.4845501425564125, 
+                    0.35912365918495337, 
+                    0.35912365918495337, 
+                    0.17235882229228455, 
+                    0.17235882229228455
+                ], 
+                0.5015527606010437
+            ], 
+            [
+                1.0349675416946411, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9860385524545078, 
+                    0.9860385524545078, 
+                    0.9859503952991495, 
+                    0.9859503952991495, 
+                    0.8316603139028957, 
+                    0.8316603139028957, 
+                    0.6373921134220574, 
+                    0.6373921134220574, 
+                    0.48491002603622224, 
+                    0.48491002603622224, 
+                    0.359551245285374, 
+                    0.359551245285374, 
+                    0.1727800755350026, 
+                    0.1727800755350026
+                ], 
+                0.5017027258872986
+            ], 
+            [
+                1.0711578130722046, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9857560121953157, 
+                    0.9857560121953157, 
+                    0.9856970206578229, 
+                    0.9856970206578229, 
+                    0.8317299971073375, 
+                    0.8317299971073375, 
+                    0.637553821814893, 
+                    0.637553821814893, 
+                    0.4852646472664691, 
+                    0.4852646472664691, 
+                    0.35995186869219087, 
+                    0.35995186869219087, 
+                    0.17316598103389244, 
+                    0.17316598103389244
+                ], 
+                0.5018869638442993
+            ], 
+            [
+                1.1086134910583496, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9851551832746841, 
+                    0.9851551832746841, 
+                    0.9851180367048222, 
+                    0.9851180367048222, 
+                    0.8316000755215733, 
+                    0.8316000755215733, 
+                    0.6374721521069072, 
+                    0.6374721521069072, 
+                    0.485386917431815, 
+                    0.485386917431815, 
+                    0.36018057523364405, 
+                    0.36018057523364405, 
+                    0.1733404346825772, 
+                    0.1733404346825772
+                ], 
+                0.5006858706474304
+            ], 
+            [
+                1.1473790407180786, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9849136666774208, 
+                    0.9849136666774208, 
+                    0.984910798067664, 
+                    0.984910798067664, 
+                    0.8317586277689448, 
+                    0.8317586277689448, 
+                    0.6376767339106528, 
+                    0.6376767339106528, 
+                    0.4857388757758809, 
+                    0.4857388757758809, 
+                    0.36053894548754273, 
+                    0.36053894548754273, 
+                    0.17367256821726804, 
+                    0.17367256821726804
+                ], 
+                0.5009208917617798
+            ], 
+            [
+                1.1875, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9845985936113734, 
+                    0.9845985936113734, 
+                    0.9845985936113734, 
+                    0.9845985936113734, 
+                    0.831841032480306, 
+                    0.831841032480306, 
+                    0.6377731861302387, 
+                    0.6377731861302387, 
+                    0.4859790888428823, 
+                    0.4859790888428823, 
+                    0.3608075646996756, 
+                    0.3608075646996756, 
+                    0.17389509929046196, 
+                    0.17389509929046196
+                ], 
+                0.500684380531311
+            ], 
+            [
+                1.2290239334106445, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9844755513937256, 
+                    0.9844755513937256, 
+                    0.9844755513937256, 
+                    0.9844755513937256, 
+                    0.8320417043947436, 
+                    0.8320417043947436, 
+                    0.6379728649940059, 
+                    0.6379728649940059, 
+                    0.4862894198915021, 
+                    0.4862894198915021, 
+                    0.36110399770980606, 
+                    0.36110399770980606, 
+                    0.17415319394206052, 
+                    0.17415319394206052
+                ], 
+                0.5010842680931091
+            ], 
+            [
+                1.2719998359680176, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9842242583254358, 
+                    0.9842242583254358, 
+                    0.9842242583254358, 
+                    0.9842242583254358, 
+                    0.832177984232068, 
+                    0.832177984232068, 
+                    0.6380799757371939, 
+                    0.6380799757371939, 
+                    0.48650521037359373, 
+                    0.48650521037359373, 
+                    0.36132513785484016, 
+                    0.36132513785484016, 
+                    0.17432139038749614, 
+                    0.17432139038749614
+                ], 
+                0.5009245276451111
+            ], 
+            [
+                1.3164786100387573, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9841622495336567, 
+                    0.9841622495336567, 
+                    0.9841622495336567, 
+                    0.9841622495336567, 
+                    0.8324236694604135, 
+                    0.8324236694604135, 
+                    0.6382829470051737, 
+                    0.6382829470051737, 
+                    0.4867852822693395, 
+                    0.4867852822693395, 
+                    0.3615729307085195, 
+                    0.3615729307085195, 
+                    0.17452397348687498, 
+                    0.17452397348687498
+                ], 
+                0.5013855695724487
+            ], 
+            [
+                1.3625125885009766, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9841301600210968, 
+                    0.9841301600210968, 
+                    0.9841301600210968, 
+                    0.9841301600210968, 
+                    0.8326853377969339, 
+                    0.8326853377969339, 
+                    0.6384829456782287, 
+                    0.6384829456782287, 
+                    0.4870477236057744, 
+                    0.4870477236057744, 
+                    0.3617966887741107, 
+                    0.3617966887741107, 
+                    0.1746999480012204, 
+                    0.1746999480012204
+                ], 
+                0.5018733739852905
+            ], 
+            [
+                1.41015625, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9837384873722184, 
+                    0.9837384873722184, 
+                    0.9837384873722184, 
+                    0.9837384873722184, 
+                    0.832762752794051, 
+                    0.832762752794051, 
+                    0.6384617067900965, 
+                    0.6384617067900965, 
+                    0.48711365825212927, 
+                    0.48711365825212927, 
+                    0.36188794643117245, 
+                    0.36188794643117245, 
+                    0.17471099719840233, 
+                    0.17471099719840233
+                ], 
+                0.5009791254997253
+            ]
+        ]
+    }, 
+    {
+        "block_size": 17, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.7225000262260437, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9880597168598478, 
+                    0.9880597168598478, 
+                    0.9878111224900664, 
+                    0.9878111224900664, 
+                    0.832557681189637, 
+                    0.832557681189637, 
+                    0.6388712411691876, 
+                    0.6388712411691876, 
+                    0.4835067997649488, 
+                    0.4835067997649488, 
+                    0.3563499678531161, 
+                    0.3563499678531161, 
+                    0.16884053077567568, 
+                    0.16884053077567568
+                ], 
+                0.5006053447723389
+            ], 
+            [
+                0.7463698387145996, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9876394834705073, 
+                    0.9876394834705073, 
+                    0.9874078488198081, 
+                    0.9874078488198081, 
+                    0.8323291560576617, 
+                    0.8323291560576617, 
+                    0.6387796698172743, 
+                    0.6387796698172743, 
+                    0.4837815392267547, 
+                    0.4837815392267547, 
+                    0.35692251643791784, 
+                    0.35692251643791784, 
+                    0.1695473721761053, 
+                    0.1695473721761053
+                ], 
+                0.5007486939430237
+            ], 
+            [
+                0.7710282206535339, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.987086276880224, 
+                    0.987086276880224, 
+                    0.9869425685020815, 
+                    0.9869425685020815, 
+                    0.8322170269109056, 
+                    0.8322170269109056, 
+                    0.6387891744306574, 
+                    0.6387891744306574, 
+                    0.48413505554145797, 
+                    0.48413505554145797, 
+                    0.357518944889678, 
+                    0.357518944889678, 
+                    0.17026592643137786, 
+                    0.17026592643137786
+                ], 
+                0.5006831884384155
+            ], 
+            [
+                0.7965013384819031, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9867245216635856, 
+                    0.9867245216635856, 
+                    0.986594487853788, 
+                    0.986594487853788, 
+                    0.8321014813247419, 
+                    0.8321014813247419, 
+                    0.638773039807868, 
+                    0.638773039807868, 
+                    0.48444084661653875, 
+                    0.48444084661653875, 
+                    0.3580464553016525, 
+                    0.3580464553016525, 
+                    0.17088290974450343, 
+                    0.17088290974450343
+                ], 
+                0.5008922815322876
+            ], 
+            [
+                0.8228159546852112, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9863901877854663, 
+                    0.9863901877854663, 
+                    0.9862751791626658, 
+                    0.9862751791626658, 
+                    0.8320366373903952, 
+                    0.8320366373903952, 
+                    0.6387875505687346, 
+                    0.6387875505687346, 
+                    0.4847547387067984, 
+                    0.4847547387067984, 
+                    0.35854839591122123, 
+                    0.35854839591122123, 
+                    0.17145534199379087, 
+                    0.17145534199379087
+                ], 
+                0.5011243224143982
+            ], 
+            [
+                0.8500000238418579, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9860840221616832, 
+                    0.9860840221616832, 
+                    0.9859852966025807, 
+                    0.9859852966025807, 
+                    0.8320192289323718, 
+                    0.8320192289323718, 
+                    0.6388290077194763, 
+                    0.6388290077194763, 
+                    0.48507296802929323, 
+                    0.48507296802929323, 
+                    0.3590236246679148, 
+                    0.3590236246679148, 
+                    0.1719841896381438, 
+                    0.1719841896381438
+                ], 
+                0.5013792514801025
+            ], 
+            [
+                0.8780821561813354, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.985806515454002, 
+                    0.985806515454002, 
+                    0.9857252359864661, 
+                    0.9857252359864661, 
+                    0.8320457723392873, 
+                    0.8320457723392873, 
+                    0.6388938089433143, 
+                    0.6388938089433143, 
+                    0.485392170829318, 
+                    0.485392170829318, 
+                    0.3594714669901591, 
+                    0.3594714669901591, 
+                    0.17247075344021423, 
+                    0.17247075344021423
+                ], 
+                0.5016571283340454
+            ], 
+            [
+                0.9070920348167419, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9852353644138979, 
+                    0.9852353644138979, 
+                    0.9851489405213748, 
+                    0.9851489405213748, 
+                    0.8318608233138293, 
+                    0.8318608233138293, 
+                    0.6387174022255996, 
+                    0.6387174022255996, 
+                    0.4854710373029137, 
+                    0.4854710373029137, 
+                    0.3597313020277679, 
+                    0.3597313020277679, 
+                    0.17271956983943923, 
+                    0.17271956983943923
+                ], 
+                0.5005645155906677
+            ], 
+            [
+                0.9370603561401367, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9849926140950815, 
+                    0.9849926140950815, 
+                    0.9849352311764625, 
+                    0.9849352311764625, 
+                    0.8319752031759203, 
+                    0.8319752031759203, 
+                    0.6388297580038131, 
+                    0.6388297580038131, 
+                    0.48579639267150587, 
+                    0.48579639267150587, 
+                    0.3601345990552153, 
+                    0.3601345990552153, 
+                    0.1731390513577957, 
+                    0.1731390513577957
+                ], 
+                0.5008633136749268
+            ], 
+            [
+                0.9680187702178955, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9847810913533646, 
+                    0.9847810913533646, 
+                    0.9847519462289829, 
+                    0.9847519462289829, 
+                    0.8321233165814491, 
+                    0.8321233165814491, 
+                    0.638956299147343, 
+                    0.638956299147343, 
+                    0.4861151385610962, 
+                    0.4861151385610962, 
+                    0.3605103194735807, 
+                    0.3605103194735807, 
+                    0.1735209543607657, 
+                    0.1735209543607657
+                ], 
+                0.5011902451515198
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9846007108750855, 
+                    0.9846007108750855, 
+                    0.9845987263492844, 
+                    0.9845987263492844, 
+                    0.8323011614145287, 
+                    0.8323011614145287, 
+                    0.6390938564007834, 
+                    0.6390938564007834, 
+                    0.48642513361146544, 
+                    0.48642513361146544, 
+                    0.36085889497047874, 
+                    0.36085889497047874, 
+                    0.173867052616105, 
+                    0.173867052616105
+                ], 
+                0.5015450119972229
+            ], 
+            [
+                1.033037781715393, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.984094649861956, 
+                    0.984094649861956, 
+                    0.984094649861956, 
+                    0.984094649861956, 
+                    0.8322851772641278, 
+                    0.8322851772641278, 
+                    0.6390098223040718, 
+                    0.6390098223040718, 
+                    0.4865235132494008, 
+                    0.4865235132494008, 
+                    0.3610522989968351, 
+                    0.3610522989968351, 
+                    0.1740187096524849, 
+                    0.1740187096524849
+                ], 
+                0.5005465149879456
+            ], 
+            [
+                1.0671671628952026, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9840058621004127, 
+                    0.9840058621004127, 
+                    0.9840058621004127, 
+                    0.9840058621004127, 
+                    0.8325074240161503, 
+                    0.8325074240161503, 
+                    0.639156292945077, 
+                    0.639156292945077, 
+                    0.48680870378552826, 
+                    0.48680870378552826, 
+                    0.3613484278224272, 
+                    0.3613484278224272, 
+                    0.17429768079105845, 
+                    0.17429768079105845
+                ], 
+                0.501025915145874
+            ], 
+            [
+                1.102423906326294, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9837827623680079, 
+                    0.9837827623680079, 
+                    0.9837827623680079, 
+                    0.9837827623680079, 
+                    0.8326642359804549, 
+                    0.8326642359804549, 
+                    0.6392170911963776, 
+                    0.6392170911963776, 
+                    0.4870043151575289, 
+                    0.4870043151575289, 
+                    0.3615715361616548, 
+                    0.3615715361616548, 
+                    0.17448575380212977, 
+                    0.17448575380212977
+                ], 
+                0.5009352564811707
+            ], 
+            [
+                1.138845682144165, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9835855322274942, 
+                    0.9835855322274942, 
+                    0.9835855322274942, 
+                    0.9835855322274942, 
+                    0.8328397298464596, 
+                    0.8328397298464596, 
+                    0.6392819023158927, 
+                    0.6392819023158927, 
+                    0.48718994252831077, 
+                    0.48718994252831077, 
+                    0.3617734910324689, 
+                    0.3617734910324689, 
+                    0.17464934067829255, 
+                    0.17464934067829255
+                ], 
+                0.5008716583251953
+            ], 
+            [
+                1.1764706373214722, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9835780616634079, 
+                    0.9835780616634079, 
+                    0.9835780616634079, 
+                    0.9835780616634079, 
+                    0.8331127205886052, 
+                    0.8331127205886052, 
+                    0.6394351407977247, 
+                    0.6394351407977247, 
+                    0.48743689455193684, 
+                    0.48743689455193684, 
+                    0.36200069306601296, 
+                    0.36200069306601296, 
+                    0.17484502961438889, 
+                    0.17484502961438889
+                ], 
+                0.5014200210571289
+            ], 
+            [
+                1.2153385877609253, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9832006262084559, 
+                    0.9832006262084559, 
+                    0.9832006262084559, 
+                    0.9832006262084559, 
+                    0.8332049715520529, 
+                    0.8332049715520529, 
+                    0.639381300447117, 
+                    0.639381300447117, 
+                    0.4874959375669167, 
+                    0.4874959375669167, 
+                    0.3620995251328672, 
+                    0.3620995251328672, 
+                    0.17487895421018318, 
+                    0.17487895421018318
+                ], 
+                0.5005772709846497
+            ], 
+            [
+                1.2554906606674194, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9832430972477468, 
+                    0.9832430972477468, 
+                    0.9832430972477468, 
+                    0.9832430972477468, 
+                    0.8334985955817433, 
+                    0.8334985955817433, 
+                    0.6395315087525343, 
+                    0.6395315087525343, 
+                    0.4877154885323341, 
+                    0.4877154885323341, 
+                    0.36228630088619157, 
+                    0.36228630088619157, 
+                    0.17502774641907645, 
+                    0.17502774641907645
+                ], 
+                0.5011676549911499
+            ], 
+            [
+                1.2969694137573242, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9833093588800734, 
+                    0.9833093588800734, 
+                    0.9833093588800734, 
+                    0.9833093588800734, 
+                    0.8337962348351668, 
+                    0.8337962348351668, 
+                    0.6396764016520589, 
+                    0.6396764016520589, 
+                    0.4879188017797888, 
+                    0.4879188017797888, 
+                    0.3624526943560984, 
+                    0.3624526943560984, 
+                    0.1751535714653298, 
+                    0.1751535714653298
+                ], 
+                0.501773476600647
+            ], 
+            [
+                1.3398183584213257, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9830023936266968, 
+                    0.9830023936266968, 
+                    0.9830023936266968, 
+                    0.9830023936266968, 
+                    0.8339178591734232, 
+                    0.8339178591734232, 
+                    0.6396188115532473, 
+                    0.6396188115532473, 
+                    0.4879430803656826, 
+                    0.4879430803656826, 
+                    0.3625006691202858, 
+                    0.3625006691202858, 
+                    0.17512871735184027, 
+                    0.17512871735184027
+                ], 
+                0.5010038614273071
+            ], 
+            [
+                1.3840830326080322, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9829494183195929, 
+                    0.9829494183195929, 
+                    0.9829494183195929, 
+                    0.9829494183195929, 
+                    0.8341481339367744, 
+                    0.8341481339367744, 
+                    0.6396719417877174, 
+                    0.6396719417877174, 
+                    0.48804998946966444, 
+                    0.48804998946966444, 
+                    0.36259063474099945, 
+                    0.36259063474099945, 
+                    0.17516159592409022, 
+                    0.17516159592409022
+                ], 
+                0.5010684728622437
+            ]
+        ]
+    }, 
+    {
+        "block_size": 18, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8234188556671143, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9922840694178757, 
+                    0.9922840694178757, 
+                    0.9921371351092255, 
+                    0.9921371351092255, 
+                    0.9011252937225077, 
+                    0.9011252937225077, 
+                    0.7102419770562248, 
+                    0.7102419770562248, 
+                    0.558477908772081, 
+                    0.558477908772081, 
+                    0.43141291677497307, 
+                    0.43141291677497307, 
+                    0.3220506548913303, 
+                    0.3220506548913303, 
+                    0.1545730526275401, 
+                    0.1545730526275401
+                ], 
+                0.5011914372444153
+            ], 
+            [
+                0.8492003679275513, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9917717525679073, 
+                    0.9917717525679073, 
+                    0.991624950507069, 
+                    0.991624950507069, 
+                    0.9004783750195324, 
+                    0.9004783750195324, 
+                    0.7097755678362877, 
+                    0.7097755678362877, 
+                    0.5584335391090562, 
+                    0.5584335391090562, 
+                    0.43178616684470666, 
+                    0.43178616684470666, 
+                    0.3227543900894459, 
+                    0.3227543900894459, 
+                    0.155360095884829, 
+                    0.155360095884829
+                ], 
+                0.5012515187263489
+            ], 
+            [
+                0.8757890462875366, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9912570314963036, 
+                    0.9912570314963036, 
+                    0.9911117708550684, 
+                    0.9911117708550684, 
+                    0.8998765570976107, 
+                    0.8998765570976107, 
+                    0.7093642040641613, 
+                    0.7093642040641613, 
+                    0.5584440143473645, 
+                    0.5584440143473645, 
+                    0.43218644084485236, 
+                    0.43218644084485236, 
+                    0.3234436759740764, 
+                    0.3234436759740764, 
+                    0.15611335027307474, 
+                    0.15611335027307474
+                ], 
+                0.5012262463569641
+            ], 
+            [
+                0.9032102823257446, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9907429102282685, 
+                    0.9907429102282685, 
+                    0.990600671858516, 
+                    0.990600671858516, 
+                    0.8993236815503335, 
+                    0.8993236815503335, 
+                    0.7090082509690641, 
+                    0.7090082509690641, 
+                    0.5585057855264423, 
+                    0.5585057855264423, 
+                    0.4326086903163004, 
+                    0.4326086903163004, 
+                    0.3241148773942646, 
+                    0.3241148773942646, 
+                    0.1568311744104818, 
+                    0.1568311744104818
+                ], 
+                0.5011173486709595
+            ], 
+            [
+                0.9314900636672974, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9902323825722422, 
+                    0.9902323825722422, 
+                    0.9900946980065854, 
+                    0.9900946980065854, 
+                    0.8988229134909462, 
+                    0.8988229134909462, 
+                    0.7087073552322922, 
+                    0.7087073552322922, 
+                    0.5586148710595017, 
+                    0.5586148710595017, 
+                    0.43304796367026943, 
+                    0.43304796367026943, 
+                    0.3247648705085809, 
+                    0.3247648705085809, 
+                    0.1575124035153124, 
+                    0.1575124035153124
+                ], 
+                0.500928521156311
+            ], 
+            [
+                0.9606553316116333, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9897283890382512, 
+                    0.9897283890382512, 
+                    0.9895968191120765, 
+                    0.9895968191120765, 
+                    0.8983767219541947, 
+                    0.8983767219541947, 
+                    0.7084605056721704, 
+                    0.7084605056721704, 
+                    0.5587669746042329, 
+                    0.5587669746042329, 
+                    0.4334994983304034, 
+                    0.4334994983304034, 
+                    0.3253910555857328, 
+                    0.3253910555857328, 
+                    0.1581563293454189, 
+                    0.1581563293454189
+                ], 
+                0.500678300857544
+            ], 
+            [
+                0.9907337427139282, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9893717654471027, 
+                    0.9893717654471027, 
+                    0.9891986502931372, 
+                    0.9891986502931372, 
+                    0.8979521254610807, 
+                    0.8979521254610807, 
+                    0.7082248174979379, 
+                    0.7082248174979379, 
+                    0.5589129990823238, 
+                    0.5589129990823238, 
+                    0.43392072588859554, 
+                    0.43392072588859554, 
+                    0.32596451125787435, 
+                    0.32596451125787435, 
+                    0.1587288740505239, 
+                    0.1587288740505239
+                ], 
+                0.50071781873703
+            ], 
+            [
+                1.0217539072036743, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.989084700059505, 
+                    0.989084700059505, 
+                    0.988980430334752, 
+                    0.988980430334752, 
+                    0.8978791392670133, 
+                    0.8978791392670133, 
+                    0.7083864542713815, 
+                    0.7083864542713815, 
+                    0.5594589571259976, 
+                    0.5594589571259976, 
+                    0.4346538087075638, 
+                    0.4346538087075638, 
+                    0.32672641304531097, 
+                    0.32672641304531097, 
+                    0.15952703402501295, 
+                    0.15952703402501295
+                ], 
+                0.501811683177948
+            ], 
+            [
+                1.0537453889846802, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9886254407331547, 
+                    0.9886254407331547, 
+                    0.9885321975501612, 
+                    0.9885321975501612, 
+                    0.8976047129846911, 
+                    0.8976047129846911, 
+                    0.708288430513236, 
+                    0.708288430513236, 
+                    0.5597072189138673, 
+                    0.5597072189138673, 
+                    0.4351088284401365, 
+                    0.4351088284401365, 
+                    0.327262760058372, 
+                    0.327262760058372, 
+                    0.16005024758323874, 
+                    0.16005024758323874
+                ], 
+                0.5015857219696045
+            ], 
+            [
+                1.0867384672164917, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9881821653825463, 
+                    0.9881821653825463, 
+                    0.9881012145384797, 
+                    0.9881012145384797, 
+                    0.8973877040271739, 
+                    0.8973877040271739, 
+                    0.7082352926351144, 
+                    0.7082352926351144, 
+                    0.5599804974463807, 
+                    0.5599804974463807, 
+                    0.4355606877507658, 
+                    0.4355606877507658, 
+                    0.3277705523024521, 
+                    0.3277705523024521, 
+                    0.1605380254142452, 
+                    0.1605380254142452
+                ], 
+                0.5013765096664429
+            ], 
+            [
+                1.1207644939422607, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9877572338008236, 
+                    0.9877572338008236, 
+                    0.9876896398305749, 
+                    0.9876896398305749, 
+                    0.8972274194748314, 
+                    0.8972274194748314, 
+                    0.7082239988879964, 
+                    0.7082239988879964, 
+                    0.5602745209668838, 
+                    0.5602745209668838, 
+                    0.4360064181618222, 
+                    0.4360064181618222, 
+                    0.3282494849026991, 
+                    0.3282494849026991, 
+                    0.16099131943634534, 
+                    0.16099131943634534
+                ], 
+                0.5011886954307556
+            ], 
+            [
+                1.1558560132980347, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9873528283850032, 
+                    0.9873528283850032, 
+                    0.9872994299286324, 
+                    0.9872994299286324, 
+                    0.897122610537839, 
+                    0.897122610537839, 
+                    0.7082512810645261, 
+                    0.7082512810645261, 
+                    0.5605851785160243, 
+                    0.5605851785160243, 
+                    0.4364434122407487, 
+                    0.4364434122407487, 
+                    0.3286995631195221, 
+                    0.3286995631195221, 
+                    0.16141124895756084, 
+                    0.16141124895756084
+                ], 
+                0.5010265111923218
+            ], 
+            [
+                1.1920462846755981, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9869709262648683, 
+                    0.9869709262648683, 
+                    0.9869323222721348, 
+                    0.9869323222721348, 
+                    0.8970715195825958, 
+                    0.8970715195825958, 
+                    0.7083137061178075, 
+                    0.7083137061178075, 
+                    0.560908557006792, 
+                    0.560908557006792, 
+                    0.4368694108863409, 
+                    0.4368694108863409, 
+                    0.32912105314978746, 
+                    0.32912105314978746, 
+                    0.1617990550365077, 
+                    0.1617990550365077
+                ], 
+                0.5008942484855652
+            ], 
+            [
+                1.2293695211410522, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9866132742299054, 
+                    0.9866132742299054, 
+                    0.9865898218052224, 
+                    0.9865898218052224, 
+                    0.8970719319900334, 
+                    0.8970719319900334, 
+                    0.7084077337585775, 
+                    0.7084077337585775, 
+                    0.5612409690943317, 
+                    0.5612409690943317, 
+                    0.4372824846882043, 
+                    0.4372824846882043, 
+                    0.32951443452038903, 
+                    0.32951443452038903, 
+                    0.16215605960257992, 
+                    0.16215605960257992
+                ], 
+                0.5007954835891724
+            ], 
+            [
+                1.2678614854812622, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9862813684009739, 
+                    0.9862813684009739, 
+                    0.9862731919373027, 
+                    0.9862731919373027, 
+                    0.8971212313997515, 
+                    0.8971212313997515, 
+                    0.7085297693690982, 
+                    0.7085297693690982, 
+                    0.561578972687935, 
+                    0.561578972687935, 
+                    0.4376810109872829, 
+                    0.4376810109872829, 
+                    0.32988035514178266, 
+                    0.32988035514178266, 
+                    0.16248362966500507, 
+                    0.16248362966500507
+                ], 
+                0.5007334351539612
+            ], 
+            [
+                1.3075586557388306, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9859858391413968, 
+                    0.9859858391413968, 
+                    0.9859858391413968, 
+                    0.9859858391413968, 
+                    0.8972147927903977, 
+                    0.8972147927903977, 
+                    0.7086743157913525, 
+                    0.7086743157913525, 
+                    0.5619175712513272, 
+                    0.5619175712513272, 
+                    0.4380622485169458, 
+                    0.4380622485169458, 
+                    0.3302187065757371, 
+                    0.3302187065757371, 
+                    0.16278201991297905, 
+                    0.16278201991297905
+                ], 
+                0.5007343292236328
+            ], 
+            [
+                1.3484987020492554, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9857290904217217, 
+                    0.9857290904217217, 
+                    0.9857290904217217, 
+                    0.9857290904217217, 
+                    0.8973488743305605, 
+                    0.8973488743305605, 
+                    0.7088372428621831, 
+                    0.7088372428621831, 
+                    0.562253355310878, 
+                    0.562253355310878, 
+                    0.4384247630815962, 
+                    0.4384247630815962, 
+                    0.33053015604184766, 
+                    0.33053015604184766, 
+                    0.16305232297398042, 
+                    0.16305232297398042
+                ], 
+                0.5008034706115723
+            ], 
+            [
+                1.3907206058502197, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9855006440279345, 
+                    0.9855006440279345, 
+                    0.9855006440279345, 
+                    0.9855006440279345, 
+                    0.897521996283223, 
+                    0.897521996283223, 
+                    0.7090173229305371, 
+                    0.7090173229305371, 
+                    0.5625858466860821, 
+                    0.5625858466860821, 
+                    0.43876938314676084, 
+                    0.43876938314676084, 
+                    0.3308166929843805, 
+                    0.3308166929843805, 
+                    0.16329723443108646, 
+                    0.16329723443108646
+                ], 
+                0.5009143352508545
+            ], 
+            [
+                1.4342645406723022, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9853007903292444, 
+                    0.9853007903292444, 
+                    0.9853007903292444, 
+                    0.9853007903292444, 
+                    0.8977305886598335, 
+                    0.8977305886598335, 
+                    0.7092112488695235, 
+                    0.7092112488695235, 
+                    0.5629127169168867, 
+                    0.5629127169168867, 
+                    0.4390954916683952, 
+                    0.4390954916683952, 
+                    0.33107928524586966, 
+                    0.33107928524586966, 
+                    0.1635180800537122, 
+                    0.1635180800537122
+                ], 
+                0.5010674595832825
+            ], 
+            [
+                1.4791717529296875, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9851296183561327, 
+                    0.9851296183561327, 
+                    0.9851296183561327, 
+                    0.9851296183561327, 
+                    0.8979709267000566, 
+                    0.8979709267000566, 
+                    0.7094158101422354, 
+                    0.7094158101422354, 
+                    0.5632318555933018, 
+                    0.5632318555933018, 
+                    0.43940261618649723, 
+                    0.43940261618649723, 
+                    0.33131888278041144, 
+                    0.33131888278041144, 
+                    0.16371610903327188, 
+                    0.16371610903327188
+                ], 
+                0.5012626647949219
+            ], 
+            [
+                1.5254850387573242, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9849870293605564, 
+                    0.9849870293605564, 
+                    0.9849870293605564, 
+                    0.9849870293605564, 
+                    0.898239158672588, 
+                    0.898239158672588, 
+                    0.7096278936626517, 
+                    0.7096278936626517, 
+                    0.5635413434967474, 
+                    0.5635413434967474, 
+                    0.4396903917764348, 
+                    0.4396903917764348, 
+                    0.33153638803567165, 
+                    0.33153638803567165, 
+                    0.16389247825645684, 
+                    0.16389247825645684
+                ], 
+                0.5014994144439697
+            ]
+        ]
+    }, 
+    {
+        "block_size": 19, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.7458677887916565, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.991613404260927, 
+                    0.991613404260927, 
+                    0.9912353293557037, 
+                    0.9912353293557037, 
+                    0.898219386588831, 
+                    0.898219386588831, 
+                    0.7087052368154203, 
+                    0.7087052368154203, 
+                    0.5568857245469502, 
+                    0.5568857245469502, 
+                    0.430585651711082, 
+                    0.430585651711082, 
+                    0.3237402084179519, 
+                    0.3237402084179519, 
+                    0.1564052107879736, 
+                    0.1564052107879736
+                ], 
+                0.5007182955741882
+            ], 
+            [
+                0.7680609226226807, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9911286079990229, 
+                    0.9911286079990229, 
+                    0.9907478294454053, 
+                    0.9907478294454053, 
+                    0.8976487886606616, 
+                    0.8976487886606616, 
+                    0.7083767969488289, 
+                    0.7083767969488289, 
+                    0.5569628818232468, 
+                    0.5569628818232468, 
+                    0.4310413063380884, 
+                    0.4310413063380884, 
+                    0.3243101404025921, 
+                    0.3243101404025921, 
+                    0.1570011751685825, 
+                    0.1570011751685825
+                ], 
+                0.5005684494972229
+            ], 
+            [
+                0.7909143567085266, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9906924994695554, 
+                    0.9906924994695554, 
+                    0.9903465621795511, 
+                    0.9903465621795511, 
+                    0.897231268166803, 
+                    0.897231268166803, 
+                    0.7082178053980993, 
+                    0.7082178053980993, 
+                    0.5572203815557331, 
+                    0.5572203815557331, 
+                    0.4316329779556887, 
+                    0.4316329779556887, 
+                    0.3249482303479791, 
+                    0.3249482303479791, 
+                    0.15767245377146213, 
+                    0.15767245377146213
+                ], 
+                0.5008201003074646
+            ], 
+            [
+                0.8144478797912598, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9902087774441444, 
+                    0.9902087774441444, 
+                    0.9898650799259691, 
+                    0.9898650799259691, 
+                    0.8967519971024841, 
+                    0.8967519971024841, 
+                    0.7079782450448503, 
+                    0.7079782450448503, 
+                    0.5573699538468986, 
+                    0.5573699538468986, 
+                    0.43210230155053153, 
+                    0.43210230155053153, 
+                    0.3254783936430839, 
+                    0.3254783936430839, 
+                    0.158209030084694, 
+                    0.158209030084694
+                ], 
+                0.5005155801773071
+            ], 
+            [
+                0.8386815786361694, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9898710414163905, 
+                    0.9898710414163905, 
+                    0.989615499875423, 
+                    0.989615499875423, 
+                    0.8965948672827875, 
+                    0.8965948672827875, 
+                    0.7080885786810662, 
+                    0.7080885786810662, 
+                    0.5578908075202654, 
+                    0.5578908075202654, 
+                    0.43286728977699146, 
+                    0.43286728977699146, 
+                    0.326181804607705, 
+                    0.326181804607705, 
+                    0.1589527988206751, 
+                    0.1589527988206751
+                ], 
+                0.5013679265975952
+            ], 
+            [
+                0.8636363744735718, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9894037878172516, 
+                    0.9894037878172516, 
+                    0.9891540791251278, 
+                    0.9891540791251278, 
+                    0.8962162395554185, 
+                    0.8962162395554185, 
+                    0.7079343498468184, 
+                    0.7079343498468184, 
+                    0.5580976874773325, 
+                    0.5580976874773325, 
+                    0.4333334156212561, 
+                    0.4333334156212561, 
+                    0.32666414505345887, 
+                    0.32666414505345887, 
+                    0.15942644345346924, 
+                    0.15942644345346924
+                ], 
+                0.5010025501251221
+            ], 
+            [
+                0.8893336653709412, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9889428110110653, 
+                    0.9889428110110653, 
+                    0.9887009419556988, 
+                    0.9887009419556988, 
+                    0.8958870584970722, 
+                    0.8958870584970722, 
+                    0.7078191096840792, 
+                    0.7078191096840792, 
+                    0.5583291397947419, 
+                    0.5583291397947419, 
+                    0.43379678351163997, 
+                    0.43379678351163997, 
+                    0.3271250143670878, 
+                    0.3271250143670878, 
+                    0.1598729360913068, 
+                    0.1598729360913068
+                ], 
+                0.5006365180015564
+            ], 
+            [
+                0.915795624256134, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9886681287614478, 
+                    0.9886681287614478, 
+                    0.9885131524426131, 
+                    0.9885131524426131, 
+                    0.8958931983923151, 
+                    0.8958931983923151, 
+                    0.7080527001106613, 
+                    0.7080527001106613, 
+                    0.5589128001070183, 
+                    0.5589128001070183, 
+                    0.43452861352290395, 
+                    0.43452861352290395, 
+                    0.3277388533290866, 
+                    0.3277388533290866, 
+                    0.1605078682460794, 
+                    0.1605078682460794
+                ], 
+                0.5015433430671692
+            ], 
+            [
+                0.943044900894165, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9882375803379531, 
+                    0.9882375803379531, 
+                    0.9880909842344919, 
+                    0.9880909842344919, 
+                    0.8956665492444277, 
+                    0.8956665492444277, 
+                    0.7080101256345196, 
+                    0.7080101256345196, 
+                    0.5591801310573371, 
+                    0.5591801310573371, 
+                    0.43497312708476277, 
+                    0.43497312708476277, 
+                    0.32815013487720257, 
+                    0.32815013487720257, 
+                    0.16089573108504543, 
+                    0.16089573108504543
+                ], 
+                0.5012062191963196
+            ], 
+            [
+                0.9711049795150757, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9878193663528898, 
+                    0.9878193663528898, 
+                    0.9876824731893598, 
+                    0.9876824731893598, 
+                    0.8954892731291997, 
+                    0.8954892731291997, 
+                    0.7080000440225848, 
+                    0.7080000440225848, 
+                    0.5594623071627461, 
+                    0.5594623071627461, 
+                    0.4354084252692187, 
+                    0.4354084252692187, 
+                    0.3285396485787437, 
+                    0.3285396485787437, 
+                    0.16125859765068498, 
+                    0.16125859765068498
+                ], 
+                0.5008813738822937
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9874151996665373, 
+                    0.9874151996665373, 
+                    0.9872893022276186, 
+                    0.9872893022276186, 
+                    0.8953607581819951, 
+                    0.8953607581819951, 
+                    0.7080201532992465, 
+                    0.7080201532992465, 
+                    0.5597564360597196, 
+                    0.5597564360597196, 
+                    0.4358328793774676, 
+                    0.4358328793774676, 
+                    0.3289075459664575, 
+                    0.3289075459664575, 
+                    0.1615972408388388, 
+                    0.1615972408388388
+                ], 
+                0.5005723237991333
+            ], 
+            [
+                1.0297547578811646, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9871537041014277, 
+                    0.9871537041014277, 
+                    0.9869962807602245, 
+                    0.9869962807602245, 
+                    0.8952301170466916, 
+                    0.8952301170466916, 
+                    0.7080146755295709, 
+                    0.7080146755295709, 
+                    0.5600049739319295, 
+                    0.5600049739319295, 
+                    0.43620173541959983, 
+                    0.43620173541959983, 
+                    0.3292277002829244, 
+                    0.3292277002829244, 
+                    0.16187823388278766, 
+                    0.16187823388278766
+                ], 
+                0.5005322098731995
+            ], 
+            [
+                1.0603948831558228, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9870300246632211, 
+                    0.9870300246632211, 
+                    0.9869400868257937, 
+                    0.9869400868257937, 
+                    0.8954800200265942, 
+                    0.8954800200265942, 
+                    0.7083906361654863, 
+                    0.7083906361654863, 
+                    0.5606192649956804, 
+                    0.5606192649956804, 
+                    0.43683958626053965, 
+                    0.43683958626053965, 
+                    0.32970015256944263, 
+                    0.32970015256944263, 
+                    0.1623564784537549, 
+                    0.1623564784537549
+                ], 
+                0.501652717590332
+            ], 
+            [
+                1.0919467210769653, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9866808352486741, 
+                    0.9866808352486741, 
+                    0.9866055766695412, 
+                    0.9866055766695412, 
+                    0.8954893236734565, 
+                    0.8954893236734565, 
+                    0.7084846500442552, 
+                    0.7084846500442552, 
+                    0.5609289916769644, 
+                    0.5609289916769644, 
+                    0.4372189652610592, 
+                    0.4372189652610592, 
+                    0.330001485525434, 
+                    0.330001485525434, 
+                    0.16262372580770867, 
+                    0.16262372580770867
+                ], 
+                0.5014098882675171
+            ], 
+            [
+                1.1244373321533203, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9863510227894992, 
+                    0.9863510227894992, 
+                    0.9862909706654717, 
+                    0.9862909706654717, 
+                    0.8955416135656136, 
+                    0.8955416135656136, 
+                    0.7085992460794068, 
+                    0.7085992460794068, 
+                    0.5612411011070425, 
+                    0.5612411011070425, 
+                    0.4375837422858426, 
+                    0.4375837422858426, 
+                    0.3302833120209389, 
+                    0.3302833120209389, 
+                    0.1628707537850576, 
+                    0.1628707537850576
+                ], 
+                0.501196026802063
+            ], 
+            [
+                1.1578947305679321, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9860418714905083, 
+                    0.9860418714905083, 
+                    0.9859973444293131, 
+                    0.9859973444293131, 
+                    0.8956346914086156, 
+                    0.8956346914086156, 
+                    0.7087318815458411, 
+                    0.7087318815458411, 
+                    0.5615534520832457, 
+                    0.5615534520832457, 
+                    0.43793323589823613, 
+                    0.43793323589823613, 
+                    0.3305461419806972, 
+                    0.3305461419806972, 
+                    0.16309837975253474, 
+                    0.16309837975253474
+                ], 
+                0.5010140538215637
+            ], 
+            [
+                1.1923476457595825, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9857545074821668, 
+                    0.9857545074821668, 
+                    0.985725621946511, 
+                    0.985725621946511, 
+                    0.89576608979852, 
+                    0.89576608979852, 
+                    0.7088799987587187, 
+                    0.7088799987587187, 
+                    0.5618640301957889, 
+                    0.5618640301957889, 
+                    0.4382668792375683, 
+                    0.4382668792375683, 
+                    0.3307904914328867, 
+                    0.3307904914328867, 
+                    0.16330738490583477, 
+                    0.16330738490583477
+                ], 
+                0.5008662939071655
+            ], 
+            [
+                1.22782564163208, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9854898865062214, 
+                    0.9854898865062214, 
+                    0.9854765707302776, 
+                    0.9854765707302776, 
+                    0.895933096333633, 
+                    0.895933096333633, 
+                    0.7090410370029065, 
+                    0.7090410370029065, 
+                    0.5621709405378892, 
+                    0.5621709405378892, 
+                    0.438584198599887, 
+                    0.438584198599887, 
+                    0.33101686458555046, 
+                    0.33101686458555046, 
+                    0.1634985044005699, 
+                    0.1634985044005699
+                ], 
+                0.5007547736167908
+            ], 
+            [
+                1.2643593549728394, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9852514075478811, 
+                    0.9852514075478811, 
+                    0.9852514075478811, 
+                    0.9852514075478811, 
+                    0.8961322872756073, 
+                    0.8961322872756073, 
+                    0.7092119211555498, 
+                    0.7092119211555498, 
+                    0.562471901592496, 
+                    0.562471901592496, 
+                    0.43888441832812575, 
+                    0.43888441832812575, 
+                    0.33122551278651124, 
+                    0.33122551278651124, 
+                    0.16367212488807, 
+                    0.16367212488807
+                ], 
+                0.5006874799728394
+            ], 
+            [
+                1.3019801378250122, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.985054351928064, 
+                    0.985054351928064, 
+                    0.985054351928064, 
+                    0.985054351928064, 
+                    0.8963574644416847, 
+                    0.8963574644416847, 
+                    0.7093868374183534, 
+                    0.7093868374183534, 
+                    0.562762134274842, 
+                    0.562762134274842, 
+                    0.4391648742501719, 
+                    0.4391648742501719, 
+                    0.3314154837186271, 
+                    0.3314154837186271, 
+                    0.16382703327314668, 
+                    0.16382703327314668
+                ], 
+                0.5007017850875854
+            ], 
+            [
+                1.3407201766967773, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9848814185216903, 
+                    0.9848814185216903, 
+                    0.9848814185216903, 
+                    0.9848814185216903, 
+                    0.896608785060984, 
+                    0.896608785060984, 
+                    0.7095669246072911, 
+                    0.7095669246072911, 
+                    0.5630435587594, 
+                    0.5630435587594, 
+                    0.43942790544103083, 
+                    0.43942790544103083, 
+                    0.3315887419899392, 
+                    0.3315887419899392, 
+                    0.16396586328142415, 
+                    0.16396586328142415
+                ], 
+                0.5007534623146057
+            ]
+        ]
+    }, 
+    {
+        "block_size": 20, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.7561436891555786, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9925481950722155, 
+                    0.9925481950722155, 
+                    0.9923659090347187, 
+                    0.9923659090347187, 
+                    0.9529801757876492, 
+                    0.9529801757876492, 
+                    0.7699362882783026, 
+                    0.7699362882783026, 
+                    0.6251068964965575, 
+                    0.6251068964965575, 
+                    0.5020595545407666, 
+                    0.5020595545407666, 
+                    0.3933261135984283, 
+                    0.3933261135984283, 
+                    0.29864060643701484, 
+                    0.29864060643701484, 
+                    0.14680908934760076, 
+                    0.14680908934760076
+                ], 
+                0.501144528388977
+            ], 
+            [
+                0.7775778770446777, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.992040618974908, 
+                    0.992040618974908, 
+                    0.9918535446002736, 
+                    0.9918535446002736, 
+                    0.9522581445724393, 
+                    0.9522581445724393, 
+                    0.7694444079438508, 
+                    0.7694444079438508, 
+                    0.6248964459281017, 
+                    0.6248964459281017, 
+                    0.502292017470603, 
+                    0.502292017470603, 
+                    0.3939214443087261, 
+                    0.3939214443087261, 
+                    0.29934008000899787, 
+                    0.29934008000899787, 
+                    0.14751844930497102, 
+                    0.14751844930497102
+                ], 
+                0.5011458992958069
+            ], 
+            [
+                0.7996196746826172, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9915261573614261, 
+                    0.9915261573614261, 
+                    0.9913352874496232, 
+                    0.9913352874496232, 
+                    0.9515817607574201, 
+                    0.9515817607574201, 
+                    0.7690039997052301, 
+                    0.7690039997052301, 
+                    0.6247393979360987, 
+                    0.6247393979360987, 
+                    0.5025613568335382, 
+                    0.5025613568335382, 
+                    0.3945204447792347, 
+                    0.3945204447792347, 
+                    0.3000113448383949, 
+                    0.3000113448383949, 
+                    0.14819063352749756, 
+                    0.14819063352749756
+                ], 
+                0.501024067401886
+            ], 
+            [
+                0.8222862482070923, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9910069157465748, 
+                    0.9910069157465748, 
+                    0.990813329191134, 
+                    0.990813329191134, 
+                    0.9509546377085516, 
+                    0.9509546377085516, 
+                    0.768615291710191, 
+                    0.768615291710191, 
+                    0.6246331589329428, 
+                    0.6246331589329428, 
+                    0.5028625490616413, 
+                    0.5028625490616413, 
+                    0.3951182425649415, 
+                    0.3951182425649415, 
+                    0.30065246976064136, 
+                    0.30065246976064136, 
+                    0.14882514422832274, 
+                    0.14882514422832274
+                ], 
+                0.500777006149292
+            ], 
+            [
+                0.8455953598022461, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9906662612127214, 
+                    0.9906662612127214, 
+                    0.9903790196849378, 
+                    0.9903790196849378, 
+                    0.9503515111757925, 
+                    0.9503515111757925, 
+                    0.7682479490455265, 
+                    0.7682479490455265, 
+                    0.6245408080104022, 
+                    0.6245408080104022, 
+                    0.5031574540524475, 
+                    0.5031574540524475, 
+                    0.3956818012105074, 
+                    0.3956818012105074, 
+                    0.3012431453217683, 
+                    0.3012431453217683, 
+                    0.14939700907194578, 
+                    0.14939700907194578
+                ], 
+                0.500889241695404
+            ], 
+            [
+                0.8695651888847351, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9902851944933273, 
+                    0.9902851944933273, 
+                    0.9900901589702877, 
+                    0.9900901589702877, 
+                    0.950110701173595, 
+                    0.950110701173595, 
+                    0.768256356462645, 
+                    0.768256356462645, 
+                    0.6248525982617698, 
+                    0.6248525982617698, 
+                    0.5038172203774609, 
+                    0.5038172203774609, 
+                    0.396526306349625, 
+                    0.396526306349625, 
+                    0.30199429183394405, 
+                    0.30199429183394405, 
+                    0.1501721842330718, 
+                    0.1501721842330718
+                ], 
+                0.5016955733299255
+            ], 
+            [
+                0.8942145705223083, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9897792759930399, 
+                    0.9897792759930399, 
+                    0.9895847584266056, 
+                    0.9895847584266056, 
+                    0.9496478866339005, 
+                    0.9496478866339005, 
+                    0.7680171613102323, 
+                    0.7680171613102323, 
+                    0.6248754285862307, 
+                    0.6248754285862307, 
+                    0.5041767020648957, 
+                    0.5041767020648957, 
+                    0.39708622092515367, 
+                    0.39708622092515367, 
+                    0.3025301027560507, 
+                    0.3025301027560507, 
+                    0.15068532300165627, 
+                    0.15068532300165627
+                ], 
+                0.5011703372001648
+            ], 
+            [
+                0.919562578201294, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9892757041970235, 
+                    0.9892757041970235, 
+                    0.9890832860568677, 
+                    0.9890832860568677, 
+                    0.9492420581304267, 
+                    0.9492420581304267, 
+                    0.7678246705646872, 
+                    0.7678246705646872, 
+                    0.6249352759477834, 
+                    0.6249352759477834, 
+                    0.5045492807438829, 
+                    0.5045492807438829, 
+                    0.3976309521881242, 
+                    0.3976309521881242, 
+                    0.30303374517477427, 
+                    0.30303374517477427, 
+                    0.15116334068292267, 
+                    0.15116334068292267
+                ], 
+                0.5006071329116821
+            ], 
+            [
+                0.9456291794776917, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9889620133077115, 
+                    0.9889620133077115, 
+                    0.9888587196258438, 
+                    0.9888587196258438, 
+                    0.9491879854298985, 
+                    0.9491879854298985, 
+                    0.7679802277112671, 
+                    0.7679802277112671, 
+                    0.6253531786021402, 
+                    0.6253531786021402, 
+                    0.5052259474087902, 
+                    0.5052259474087902, 
+                    0.3983969235604968, 
+                    0.3983969235604968, 
+                    0.3036582862094957, 
+                    0.3036582862094957, 
+                    0.15180057918066484, 
+                    0.15180057918066484
+                ], 
+                0.501390278339386
+            ], 
+            [
+                0.9724346399307251, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9884832959765041, 
+                    0.9884832959765041, 
+                    0.9883826506423796, 
+                    0.9883826506423796, 
+                    0.9489002829456954, 
+                    0.9489002829456954, 
+                    0.76787529387851, 
+                    0.76787529387851, 
+                    0.6254741330741725, 
+                    0.6254741330741725, 
+                    0.5056074141296402, 
+                    0.5056074141296402, 
+                    0.39889740628489606, 
+                    0.39889740628489606, 
+                    0.3040926036691035, 
+                    0.3040926036691035, 
+                    0.15220533332387873, 
+                    0.15220533332387873
+                ], 
+                0.5008161664009094
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9881708092722894, 
+                    0.9881708092722894, 
+                    0.9880747996245317, 
+                    0.9880747996245317, 
+                    0.9487723188261925, 
+                    0.9487723188261925, 
+                    0.7679144128712704, 
+                    0.7679144128712704, 
+                    0.6257310549829297, 
+                    0.6257310549829297, 
+                    0.5060884286891565, 
+                    0.5060884286891565, 
+                    0.3994544641463087, 
+                    0.3994544641463087, 
+                    0.3045454255556679, 
+                    0.3045454255556679, 
+                    0.15264111184151632, 
+                    0.15264111184151632
+                ], 
+                0.5010061264038086
+            ], 
+            [
+                1.0283467769622803, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9879975397802051, 
+                    0.9879975397802051, 
+                    0.9879589372225628, 
+                    0.9879589372225628, 
+                    0.9488796426376019, 
+                    0.9488796426376019, 
+                    0.7681705813743224, 
+                    0.7681705813743224, 
+                    0.6261973135501632, 
+                    0.6261973135501632, 
+                    0.5067298328649295, 
+                    0.5067298328649295, 
+                    0.4001145451770306, 
+                    0.4001145451770306, 
+                    0.3050459997145296, 
+                    0.3050459997145296, 
+                    0.1531478863746807, 
+                    0.1531478863746807
+                ], 
+                0.5020257830619812
+            ], 
+            [
+                1.0574970245361328, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9875676917993002, 
+                    0.9875676917993002, 
+                    0.9875310691082547, 
+                    0.9875310691082547, 
+                    0.9487587370517713, 
+                    0.9487587370517713, 
+                    0.7681719477677379, 
+                    0.7681719477677379, 
+                    0.6263797420586791, 
+                    0.6263797420586791, 
+                    0.507100284511832, 
+                    0.507100284511832, 
+                    0.4005414196269533, 
+                    0.4005414196269533, 
+                    0.3053864726481391, 
+                    0.3053864726481391, 
+                    0.15345702913484827, 
+                    0.15345702913484827
+                ], 
+                0.5014718770980835
+            ], 
+            [
+                1.0874735116958618, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9871510548744317, 
+                    0.9871510548744317, 
+                    0.9871166936251677, 
+                    0.9871166936251677, 
+                    0.9486913669363083, 
+                    0.9486913669363083, 
+                    0.768204355286336, 
+                    0.768204355286336, 
+                    0.6265787830427599, 
+                    0.6265787830427599, 
+                    0.5074661150363006, 
+                    0.5074661150363006, 
+                    0.40094693088480776, 
+                    0.40094693088480776, 
+                    0.30570132573777387, 
+                    0.30570132573777387, 
+                    0.15374094016962753, 
+                    0.15374094016962753
+                ], 
+                0.5009252429008484
+            ], 
+            [
+                1.1182998418807983, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9870991074481988, 
+                    0.9870991074481988, 
+                    0.9870991074481988, 
+                    0.9870991074481988, 
+                    0.9489400731352431, 
+                    0.9489400731352431, 
+                    0.7685302516816578, 
+                    0.7685302516816578, 
+                    0.6270626648122125, 
+                    0.6270626648122125, 
+                    0.5080547948850563, 
+                    0.5080547948850563, 
+                    0.4015056221225374, 
+                    0.4015056221225374, 
+                    0.30609867799751755, 
+                    0.30609867799751755, 
+                    0.15414237864679328, 
+                    0.15414237864679328
+                ], 
+                0.5021407604217529
+            ], 
+            [
+                1.149999976158142, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9867245666714037, 
+                    0.9867245666714037, 
+                    0.9867245666714037, 
+                    0.9867245666714037, 
+                    0.9489713171230392, 
+                    0.9489713171230392, 
+                    0.7686127415348145, 
+                    0.7686127415348145, 
+                    0.6272813711899446, 
+                    0.6272813711899446, 
+                    0.50839950105434, 
+                    0.50839950105434, 
+                    0.40186200347336354, 
+                    0.40186200347336354, 
+                    0.30636179614651904, 
+                    0.30636179614651904, 
+                    0.154375683466559, 
+                    0.154375683466559
+                ], 
+                0.5016444325447083
+            ], 
+            [
+                1.1825987100601196, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9863668918187649, 
+                    0.9863668918187649, 
+                    0.9863668918187649, 
+                    0.9863668918187649, 
+                    0.9490502304156654, 
+                    0.9490502304156654, 
+                    0.768718148782958, 
+                    0.768718148782958, 
+                    0.6275091430569687, 
+                    0.6275091430569687, 
+                    0.5087353804557048, 
+                    0.5087353804557048, 
+                    0.4021978475176134, 
+                    0.4021978475176134, 
+                    0.3066035825196532, 
+                    0.3066035825196532, 
+                    0.15458869477195894, 
+                    0.15458869477195894
+                ], 
+                0.5011698603630066
+            ], 
+            [
+                1.2161215543746948, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.986027218741715, 
+                    0.986027218741715, 
+                    0.986027218741715, 
+                    0.986027218741715, 
+                    0.9491745212504658, 
+                    0.9491745212504658, 
+                    0.7688438990051205, 
+                    0.7688438990051205, 
+                    0.627743830539032, 
+                    0.627743830539032, 
+                    0.5090614094964139, 
+                    0.5090614094964139, 
+                    0.40251355583007564, 
+                    0.40251355583007564, 
+                    0.3068252752311234, 
+                    0.3068252752311234, 
+                    0.15478278790823413, 
+                    0.15478278790823413
+                ], 
+                0.5007214546203613
+            ], 
+            [
+                1.2505946159362793, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9842778360496838, 
+                    0.9842778360496838, 
+                    0.9838248865584708, 
+                    0.9838248865584708, 
+                    0.9525058132096802, 
+                    0.9525058132096802, 
+                    0.772073209202328, 
+                    0.772073209202328, 
+                    0.6309464356038553, 
+                    0.6309464356038553, 
+                    0.5118139826273967, 
+                    0.5118139826273967, 
+                    0.40465660915051666, 
+                    0.40465660915051666, 
+                    0.308225624265146, 
+                    0.308225624265146, 
+                    0.15632499489410073, 
+                    0.15632499489410073
+                ], 
+                0.5012475848197937
+            ], 
+            [
+                1.2860448360443115, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.983892713422595, 
+                    0.983892713422595, 
+                    0.9835180213991976, 
+                    0.9835180213991976, 
+                    0.9527258508780527, 
+                    0.9527258508780527, 
+                    0.7722514413166477, 
+                    0.7722514413166477, 
+                    0.6311984407117036, 
+                    0.6311984407117036, 
+                    0.512114969195551, 
+                    0.512114969195551, 
+                    0.40492565360388866, 
+                    0.40492565360388866, 
+                    0.30840262958931663, 
+                    0.30840262958931663, 
+                    0.15648850615111387, 
+                    0.15648850615111387
+                ], 
+                0.5005577802658081
+            ], 
+            [
+                1.3224999904632568, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9838521156303505, 
+                    0.9838521156303505, 
+                    0.983593023998664, 
+                    0.983593023998664, 
+                    0.9532645536993922, 
+                    0.9532645536993922, 
+                    0.7727277865869023, 
+                    0.7727277865869023, 
+                    0.6317362257578595, 
+                    0.6317362257578595, 
+                    0.512634926267483, 
+                    0.512634926267483, 
+                    0.4053477227746999, 
+                    0.4053477227746999, 
+                    0.30866757911686327, 
+                    0.30866757911686327, 
+                    0.15677805900056804, 
+                    0.15677805900056804
+                ], 
+                0.5015689134597778
+            ]
+        ]
+    }, 
+    {
+        "block_size": 21, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.9271558523178101, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9907285096621409, 
+                    0.9907285096621409, 
+                    0.9906343516993525, 
+                    0.9906343516993525, 
+                    0.9530430214412352, 
+                    0.9530430214412352, 
+                    0.7695382246992819, 
+                    0.7695382246992819, 
+                    0.6259602836977805, 
+                    0.6259602836977805, 
+                    0.5039985042964116, 
+                    0.5039985042964116, 
+                    0.39560596031206824, 
+                    0.39560596031206824, 
+                    0.30047420373238787, 
+                    0.30047420373238787, 
+                    0.14837319662740336, 
+                    0.14837319662740336
+                ], 
+                0.5008507370948792
+            ], 
+            [
+                0.9522503614425659, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9902204778738961, 
+                    0.9902204778738961, 
+                    0.9901269217133352, 
+                    0.9901269217133352, 
+                    0.952554062186831, 
+                    0.952554062186831, 
+                    0.7691987534037078, 
+                    0.7691987534037078, 
+                    0.6258759887654323, 
+                    0.6258759887654323, 
+                    0.5042719759156514, 
+                    0.5042719759156514, 
+                    0.39616511663330917, 
+                    0.39616511663330917, 
+                    0.30110026307421506, 
+                    0.30110026307421506, 
+                    0.14902735151141805, 
+                    0.14902735151141805
+                ], 
+                0.5005102753639221
+            ], 
+            [
+                0.9780240654945374, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9899501427106355, 
+                    0.9899501427106355, 
+                    0.9899110799334494, 
+                    0.9899110799334494, 
+                    0.952368122790557, 
+                    0.952368122790557, 
+                    0.7691906061081021, 
+                    0.7691906061081021, 
+                    0.6261423361580966, 
+                    0.6261423361580966, 
+                    0.5048624176245546, 
+                    0.5048624176245546, 
+                    0.39697106827066647, 
+                    0.39697106827066647, 
+                    0.30186855250613853, 
+                    0.30186855250613853, 
+                    0.14985817734324544, 
+                    0.14985817734324544
+                ], 
+                0.5016436576843262
+            ], 
+            [
+                1.0044952630996704, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9894653609210162, 
+                    0.9894653609210162, 
+                    0.9894271730372061, 
+                    0.9894271730372061, 
+                    0.9519899769891155, 
+                    0.9519899769891155, 
+                    0.7689521604860955, 
+                    0.7689521604860955, 
+                    0.6261442298285137, 
+                    0.6261442298285137, 
+                    0.5051775621363616, 
+                    0.5051775621363616, 
+                    0.39750878266087475, 
+                    0.39750878266087475, 
+                    0.3024239558051998, 
+                    0.3024239558051998, 
+                    0.15042251337745485, 
+                    0.15042251337745485
+                ], 
+                0.501213788986206
+            ], 
+            [
+                1.031683087348938, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9889884866046773, 
+                    0.9889884866046773, 
+                    0.9889514751538907, 
+                    0.9889514751538907, 
+                    0.9516667381540549, 
+                    0.9516667381540549, 
+                    0.7687607054173223, 
+                    0.7687607054173223, 
+                    0.6261843803448298, 
+                    0.6261843803448298, 
+                    0.5055095199761253, 
+                    0.5055095199761253, 
+                    0.3980351925290816, 
+                    0.3980351925290816, 
+                    0.3029478270955941, 
+                    0.3029478270955941, 
+                    0.1509484559164419, 
+                    0.1509484559164419
+                ], 
+                0.5007745027542114
+            ], 
+            [
+                1.059606671333313, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9888269491919405, 
+                    0.9888269491919405, 
+                    0.9888269491919405, 
+                    0.9888269491919405, 
+                    0.9516442938133932, 
+                    0.9516442938133932, 
+                    0.7688858930749755, 
+                    0.7688858930749755, 
+                    0.6265464532828239, 
+                    0.6265464532828239, 
+                    0.5061169784430195, 
+                    0.5061169784430195, 
+                    0.39876481626132587, 
+                    0.39876481626132587, 
+                    0.3035833834043587, 
+                    0.3035833834043587, 
+                    0.15161949474400924, 
+                    0.15161949474400924
+                ], 
+                0.5020376443862915
+            ], 
+            [
+                1.0882861614227295, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9883846035715067, 
+                    0.9883846035715067, 
+                    0.9883846035715067, 
+                    0.9883846035715067, 
+                    0.951430814489768, 
+                    0.951430814489768, 
+                    0.7687805058007938, 
+                    0.7687805058007938, 
+                    0.6266485675495598, 
+                    0.6266485675495598, 
+                    0.5064638785140193, 
+                    0.5064638785140193, 
+                    0.39925265132619986, 
+                    0.39925265132619986, 
+                    0.3040372248625869, 
+                    0.3040372248625869, 
+                    0.15206405306500767, 
+                    0.15206405306500767
+                ], 
+                0.5016127824783325
+            ], 
+            [
+                1.1177417039871216, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.987955285881702, 
+                    0.987955285881702, 
+                    0.987955285881702, 
+                    0.987955285881702, 
+                    0.9512711379808251, 
+                    0.9512711379808251, 
+                    0.7687149363832241, 
+                    0.7687149363832241, 
+                    0.6267782385478252, 
+                    0.6267782385478252, 
+                    0.506816613725303, 
+                    0.506816613725303, 
+                    0.39972306293956894, 
+                    0.39972306293956894, 
+                    0.304461019552368, 
+                    0.304461019552368, 
+                    0.1524748581003055, 
+                    0.1524748581003055
+                ], 
+                0.5011923909187317
+            ], 
+            [
+                1.1479946374893188, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9875405493308488, 
+                    0.9875405493308488, 
+                    0.9875405493308488, 
+                    0.9875405493308488, 
+                    0.9511643282719829, 
+                    0.9511643282719829, 
+                    0.7686866713905159, 
+                    0.7686866713905159, 
+                    0.6269322418005121, 
+                    0.6269322418005121, 
+                    0.5071722829657477, 
+                    0.5071722829657477, 
+                    0.4001748299754431, 
+                    0.4001748299754431, 
+                    0.3048556548439644, 
+                    0.3048556548439644, 
+                    0.15285357941944627, 
+                    0.15285357941944627
+                ], 
+                0.5007811784744263
+            ], 
+            [
+                1.1790664196014404, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.985656641769479, 
+                    0.985656641769479, 
+                    0.9849881049029202, 
+                    0.9849881049029202, 
+                    0.9536319632176591, 
+                    0.9536319632176591, 
+                    0.7713799122106112, 
+                    0.7713799122106112, 
+                    0.6297360143003696, 
+                    0.6297360143003696, 
+                    0.5097891416724456, 
+                    0.5097891416724456, 
+                    0.40239463885879534, 
+                    0.40239463885879534, 
+                    0.3064360997891662, 
+                    0.3064360997891662, 
+                    0.1544920937719921, 
+                    0.1544920937719921
+                ], 
+                0.5008059740066528
+            ], 
+            [
+                1.2109791040420532, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9854508570252061, 
+                    0.9854508570252061, 
+                    0.9849039703543513, 
+                    0.9849039703543513, 
+                    0.953945385537504, 
+                    0.953945385537504, 
+                    0.7717570911969148, 
+                    0.7717570911969148, 
+                    0.6302578105501583, 
+                    0.6302578105501583, 
+                    0.5104109447697381, 
+                    0.5104109447697381, 
+                    0.40300479155061364, 
+                    0.40300479155061364, 
+                    0.3068918462925654, 
+                    0.3068918462925654, 
+                    0.15498077124034787, 
+                    0.15498077124034787
+                ], 
+                0.5016600489616394
+            ], 
+            [
+                1.243755578994751, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9850095915407425, 
+                    0.9850095915407425, 
+                    0.9845257382478869, 
+                    0.9845257382478869, 
+                    0.954022925712943, 
+                    0.954022925712943, 
+                    0.7718580971711034, 
+                    0.7718580971711034, 
+                    0.6304831097913223, 
+                    0.6304831097913223, 
+                    0.5107579840007503, 
+                    0.5107579840007503, 
+                    0.4033820393710373, 
+                    0.4033820393710373, 
+                    0.30718813430891156, 
+                    0.30718813430891156, 
+                    0.15526862129114752, 
+                    0.15526862129114752
+                ], 
+                0.5010068416595459
+            ], 
+            [
+                1.277419090270996, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9848804238471304, 
+                    0.9848804238471304, 
+                    0.984510516614573, 
+                    0.984510516614573, 
+                    0.9544137001669549, 
+                    0.9544137001669549, 
+                    0.7722790926791242, 
+                    0.7722790926791242, 
+                    0.6310177489619228, 
+                    0.6310177489619228, 
+                    0.5113517387344846, 
+                    0.5113517387344846, 
+                    0.4039341644417009, 
+                    0.4039341644417009, 
+                    0.30758306357147075, 
+                    0.30758306357147075, 
+                    0.15569203800031275, 
+                    0.15569203800031275
+                ], 
+                0.5019948482513428
+            ], 
+            [
+                1.3119938373565674, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9844896318698962, 
+                    0.9844896318698962, 
+                    0.9841857288574752, 
+                    0.9841857288574752, 
+                    0.9545653766536929, 
+                    0.9545653766536929, 
+                    0.7724209820391374, 
+                    0.7724209820391374, 
+                    0.6312580601564641, 
+                    0.6312580601564641, 
+                    0.5116794628857515, 
+                    0.5116794628857515, 
+                    0.4042665820342472, 
+                    0.4042665820342472, 
+                    0.3078309620257285, 
+                    0.3078309620257285, 
+                    0.15592972014354986, 
+                    0.15592972014354986
+                ], 
+                0.5014207363128662
+            ], 
+            [
+                1.3475043773651123, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9841181755225824, 
+                    0.9841181755225824, 
+                    0.9838846881024697, 
+                    0.9838846881024697, 
+                    0.9547511649591429, 
+                    0.9547511649591429, 
+                    0.7725803495415454, 
+                    0.7725803495415454, 
+                    0.6315042808903015, 
+                    0.6315042808903015, 
+                    0.5119984238624307, 
+                    0.5119984238624307, 
+                    0.4045799139633813, 
+                    0.4045799139633813, 
+                    0.30805885786609166, 
+                    0.30805885786609166, 
+                    0.15614705033695542, 
+                    0.15614705033695542
+                ], 
+                0.5008752942085266
+            ], 
+            [
+                1.3839761018753052, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.984045713068008, 
+                    0.984045713068008, 
+                    0.9839134120462047, 
+                    0.9839134120462047, 
+                    0.9552607588492433, 
+                    0.9552607588492433, 
+                    0.7730741450646929, 
+                    0.7730741450646929, 
+                    0.6320720520377564, 
+                    0.6320720520377564, 
+                    0.5125706009663932, 
+                    0.5125706009663932, 
+                    0.4050730273433259, 
+                    0.4050730273433259, 
+                    0.30839008022431275, 
+                    0.30839008022431275, 
+                    0.15651005914494742, 
+                    0.15651005914494742
+                ], 
+                0.5019508600234985
+            ], 
+            [
+                1.4214348793029785, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9836573889078267, 
+                    0.9836573889078267, 
+                    0.9835955097729631, 
+                    0.9835955097729631, 
+                    0.9555491817052139, 
+                    0.9555491817052139, 
+                    0.7733089952293669, 
+                    0.7733089952293669, 
+                    0.6323704931506295, 
+                    0.6323704931506295, 
+                    0.5129056500034459, 
+                    0.5129056500034459, 
+                    0.4053757507238395, 
+                    0.4053757507238395, 
+                    0.30859742379458294, 
+                    0.30859742379458294, 
+                    0.15671353281297906, 
+                    0.15671353281297906
+                ], 
+                0.5013589262962341
+            ], 
+            [
+                1.4599076509475708, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9833125714724994, 
+                    0.9833125714724994, 
+                    0.9833124501221738, 
+                    0.9833124501221738, 
+                    0.955861392418946, 
+                    0.955861392418946, 
+                    0.7735525560723301, 
+                    0.7735525560723301, 
+                    0.6326675587246908, 
+                    0.6326675587246908, 
+                    0.5132278297090498, 
+                    0.5132278297090498, 
+                    0.4056593607952086, 
+                    0.4056593607952086, 
+                    0.30878739956685003, 
+                    0.30878739956685003, 
+                    0.15689986974924597, 
+                    0.15689986974924597
+                ], 
+                0.5008769631385803
+            ], 
+            [
+                1.4994215965270996, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9831072679877432, 
+                    0.9831072679877432, 
+                    0.9831072679877432, 
+                    0.9831072679877432, 
+                    0.9561528068100094, 
+                    0.9561528068100094, 
+                    0.7737563580065367, 
+                    0.7737563580065367, 
+                    0.6329162360456293, 
+                    0.6329162360456293, 
+                    0.513499734182454, 
+                    0.513499734182454, 
+                    0.4058969368228016, 
+                    0.4058969368228016, 
+                    0.3089442316917414, 
+                    0.3089442316917414, 
+                    0.15704718439037021, 
+                    0.15704718439037021
+                ], 
+                0.5007496476173401
+            ], 
+            [
+                1.540005087852478, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9829257627062313, 
+                    0.9829257627062313, 
+                    0.9829257627062313, 
+                    0.9829257627062313, 
+                    0.9564625669734818, 
+                    0.9564625669734818, 
+                    0.7739643653203363, 
+                    0.7739643653203363, 
+                    0.6331607485719862, 
+                    0.6331607485719862, 
+                    0.5137584934032378, 
+                    0.5137584934032378, 
+                    0.4061172264885378, 
+                    0.4061172264885378, 
+                    0.3090861509938493, 
+                    0.3090861509938493, 
+                    0.15717997532519723, 
+                    0.15717997532519723
+                ], 
+                0.5006684064865112
+            ], 
+            [
+                1.5816869735717773, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9827669446880748, 
+                    0.9827669446880748, 
+                    0.9827669446880748, 
+                    0.9827669446880748, 
+                    0.9567881955829913, 
+                    0.9567881955829913, 
+                    0.7741749773537425, 
+                    0.7741749773537425, 
+                    0.633400243457258, 
+                    0.633400243457258, 
+                    0.5140041423906542, 
+                    0.5140041423906542, 
+                    0.40632102342493237, 
+                    0.40632102342493237, 
+                    0.3092141228553932, 
+                    0.3092141228553932, 
+                    0.15729942146041587, 
+                    0.15729942146041587
+                ], 
+                0.5006308555603027
+            ]
+        ]
+    }, 
+    {
+        "block_size": 22, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8942444324493408, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9908265528214707, 
+                    0.9908265528214707, 
+                    0.9903721608293437, 
+                    0.9903721608293437, 
+                    0.989690555977051, 
+                    0.989690555977051, 
+                    0.8269247413324964, 
+                    0.8269247413324964, 
+                    0.6877805538765132, 
+                    0.6877805538765132, 
+                    0.5674318611419433, 
+                    0.5674318611419433, 
+                    0.4603916605109028, 
+                    0.4603916605109028, 
+                    0.3645732739869796, 
+                    0.3645732739869796, 
+                    0.2795113050275879, 
+                    0.2795113050275879, 
+                    0.14071343798101052, 
+                    0.14071343798101052
+                ], 
+                0.5015878081321716
+            ], 
+            [
+                0.9174020290374756, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9903270577693705, 
+                    0.9903270577693705, 
+                    0.9898569270195068, 
+                    0.9898569270195068, 
+                    0.9891786524482119, 
+                    0.9891786524482119, 
+                    0.8264399177732593, 
+                    0.8264399177732593, 
+                    0.6874163227128541, 
+                    0.6874163227128541, 
+                    0.5674285347806907, 
+                    0.5674285347806907, 
+                    0.4608416792483655, 
+                    0.4608416792483655, 
+                    0.36528505373558673, 
+                    0.36528505373558673, 
+                    0.28019586317213696, 
+                    0.28019586317213696, 
+                    0.14139550082536992, 
+                    0.14139550082536992
+                ], 
+                0.5011878609657288
+            ], 
+            [
+                0.9411593675613403, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9898396974104062, 
+                    0.9898396974104062, 
+                    0.9893562849552212, 
+                    0.9893562849552212, 
+                    0.9886864460201873, 
+                    0.9886864460201873, 
+                    0.8259981114256261, 
+                    0.8259981114256261, 
+                    0.6871049429534618, 
+                    0.6871049429534618, 
+                    0.5674849906743585, 
+                    0.5674849906743585, 
+                    0.4613328816707215, 
+                    0.4613328816707215, 
+                    0.3660045353817749, 
+                    0.3660045353817749, 
+                    0.28086163842184286, 
+                    0.28086163842184286, 
+                    0.14205507183346497, 
+                    0.14205507183346497
+                ], 
+                0.5007653832435608
+            ], 
+            [
+                0.9655319452285767, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9901398076064224, 
+                    0.9901398076064224, 
+                    0.9893233896452429, 
+                    0.9893233896452429, 
+                    0.9882346765194856, 
+                    0.9882346765194856, 
+                    0.8250113007146911, 
+                    0.8250113007146911, 
+                    0.6861440351723247, 
+                    0.6861440351723247, 
+                    0.5667870447890607, 
+                    0.5667870447890607, 
+                    0.461038352233688, 
+                    0.461038352233688, 
+                    0.3660203683349904, 
+                    0.3660203683349904, 
+                    0.281038155550069, 
+                    0.281038155550069, 
+                    0.14211252022375181, 
+                    0.14211252022375181
+                ], 
+                0.5011575222015381
+            ], 
+            [
+                0.9905356168746948, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9896918939225039, 
+                    0.9896918939225039, 
+                    0.9888545564697968, 
+                    0.9888545564697968, 
+                    0.9877855580830649, 
+                    0.9877855580830649, 
+                    0.8246253705101398, 
+                    0.8246253705101398, 
+                    0.6859013874081528, 
+                    0.6859013874081528, 
+                    0.5669234851347751, 
+                    0.5669234851347751, 
+                    0.46157893655115817, 
+                    0.46157893655115817, 
+                    0.36673682384671913, 
+                    0.36673682384671913, 
+                    0.28166272761777816, 
+                    0.28166272761777816, 
+                    0.14272502310725693, 
+                    0.14272502310725693
+                ], 
+                0.5008660554885864
+            ], 
+            [
+                1.0161868333816528, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9892594885630621, 
+                    0.9892594885630621, 
+                    0.9884056844379133, 
+                    0.9884056844379133, 
+                    0.9873645415059853, 
+                    0.9873645415059853, 
+                    0.8242876015897427, 
+                    0.8242876015897427, 
+                    0.6857110339153896, 
+                    0.6857110339153896, 
+                    0.5671090945434655, 
+                    0.5671090945434655, 
+                    0.4621424767231492, 
+                    0.4621424767231492, 
+                    0.36744477807363296, 
+                    0.36744477807363296, 
+                    0.28226088620763257, 
+                    0.28226088620763257, 
+                    0.14330957075328227, 
+                    0.14330957075328227
+                ], 
+                0.500626266002655
+            ], 
+            [
+                1.0425022840499878, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9888927087625868, 
+                    0.9888927087625868, 
+                    0.9880583518187778, 
+                    0.9880583518187778, 
+                    0.9870888841247432, 
+                    0.9870888841247432, 
+                    0.824111240285779, 
+                    0.824111240285779, 
+                    0.6857017272638227, 
+                    0.6857017272638227, 
+                    0.5674792470993892, 
+                    0.5674792470993892, 
+                    0.462854810945879, 
+                    0.462854810945879, 
+                    0.36824778549668585, 
+                    0.36824778549668585, 
+                    0.2829020682615414, 
+                    0.2829020682615414, 
+                    0.14394904979473422, 
+                    0.14394904979473422
+                ], 
+                0.5009709000587463
+            ], 
+            [
+                1.0694992542266846, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9885011002829679, 
+                    0.9885011002829679, 
+                    0.9876608227572022, 
+                    0.9876608227572022, 
+                    0.9867339041811165, 
+                    0.9867339041811165, 
+                    0.823872539887926, 
+                    0.823872539887926, 
+                    0.6856119929208058, 
+                    0.6856119929208058, 
+                    0.5677474311829976, 
+                    0.5677474311829976, 
+                    0.46344199284118137, 
+                    0.46344199284118137, 
+                    0.36892105792338853, 
+                    0.36892105792338853, 
+                    0.2834397640145491, 
+                    0.2834397640145491, 
+                    0.14447190667848447, 
+                    0.14447190667848447
+                ], 
+                0.5008460283279419
+            ], 
+            [
+                1.0971953868865967, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.988129929498518, 
+                    0.988129929498518, 
+                    0.9872890615715609, 
+                    0.9872890615715609, 
+                    0.9864120904795864, 
+                    0.9864120904795864, 
+                    0.8236810697536272, 
+                    0.8236810697536272, 
+                    0.685567871876592, 
+                    0.685567871876592, 
+                    0.5680492610499873, 
+                    0.5680492610499873, 
+                    0.4640335214149134, 
+                    0.4640335214149134, 
+                    0.3695732369014004, 
+                    0.3695732369014004, 
+                    0.28394756769667645, 
+                    0.28394756769667645, 
+                    0.14496493195062782, 
+                    0.14496493195062782
+                ], 
+                0.5007733702659607
+            ], 
+            [
+                1.1256086826324463, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9890656980717005, 
+                    0.9890656980717005, 
+                    0.9890656980717005, 
+                    0.9890656980717005, 
+                    0.9890656980717005, 
+                    0.9890656980717005, 
+                    0.821558359543756, 
+                    0.821558359543756, 
+                    0.6834606538740292, 
+                    0.6834606538740292, 
+                    0.5663128014837335, 
+                    0.5663128014837335, 
+                    0.46281938377455756, 
+                    0.46281938377455756, 
+                    0.3687720764303355, 
+                    0.3687720764303355, 
+                    0.2834343975653512, 
+                    0.2834343975653512, 
+                    0.1444651572558738, 
+                    0.1444651572558738
+                ], 
+                0.5009671449661255
+            ], 
+            [
+                1.1547577381134033, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9888681755895654, 
+                    0.9888681755895654, 
+                    0.9888681755895654, 
+                    0.9888681755895654, 
+                    0.9888681755895654, 
+                    0.9888681755895654, 
+                    0.8214152860413486, 
+                    0.8214152860413486, 
+                    0.683472527404662, 
+                    0.683472527404662, 
+                    0.5666663643046725, 
+                    0.5666663643046725, 
+                    0.463421756056884, 
+                    0.463421756056884, 
+                    0.3693963271859255, 
+                    0.3693963271859255, 
+                    0.2839044634025928, 
+                    0.2839044634025928, 
+                    0.14490577620991826, 
+                    0.14490577620991826
+                ], 
+                0.5015292167663574
+            ], 
+            [
+                1.1846617460250854, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9886996886979746, 
+                    0.9886996886979746, 
+                    0.9886996886979746, 
+                    0.9886996886979746, 
+                    0.9886996886979746, 
+                    0.9886996886979746, 
+                    0.8213183640001013, 
+                    0.8213183640001013, 
+                    0.6835236260447921, 
+                    0.6835236260447921, 
+                    0.5670403648075344, 
+                    0.5670403648075344, 
+                    0.4640150176933883, 
+                    0.4640150176933883, 
+                    0.3699924324580794, 
+                    0.3699924324580794, 
+                    0.2843439506640899, 
+                    0.2843439506640899, 
+                    0.14531747996814487, 
+                    0.14531747996814487
+                ], 
+                0.502165675163269
+            ], 
+            [
+                1.2153401374816895, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9882145828748442, 
+                    0.9882145828748442, 
+                    0.9881891774483409, 
+                    0.9881891774483409, 
+                    0.9881683703170306, 
+                    0.9881683703170306, 
+                    0.8210547353958929, 
+                    0.8210547353958929, 
+                    0.6833739110510747, 
+                    0.6833739110510747, 
+                    0.5671958475128486, 
+                    0.5671958475128486, 
+                    0.46439268611027346, 
+                    0.46439268611027346, 
+                    0.3704031436800339, 
+                    0.3704031436800339, 
+                    0.284657198732679, 
+                    0.284657198732679, 
+                    0.14557520878832247, 
+                    0.14557520878832247
+                ], 
+                0.5010064244270325
+            ], 
+            [
+                1.2468129396438599, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9880950519587512, 
+                    0.9880950519587512, 
+                    0.9880709429206069, 
+                    0.9880709429206069, 
+                    0.9880530437237415, 
+                    0.9880530437237415, 
+                    0.8210442244930924, 
+                    0.8210442244930924, 
+                    0.683495750216003, 
+                    0.683495750216003, 
+                    0.5676034645665963, 
+                    0.5676034645665963, 
+                    0.4649660475239228, 
+                    0.4649660475239228, 
+                    0.3709475772606302, 
+                    0.3709475772606302, 
+                    0.2850427983809578, 
+                    0.2850427983809578, 
+                    0.14593726016234934, 
+                    0.14593726016234934
+                ], 
+                0.5017659068107605
+            ], 
+            [
+                1.279100775718689, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9876732050744371, 
+                    0.9876732050744371, 
+                    0.9875990969848589, 
+                    0.9875990969848589, 
+                    0.9875762609058544, 
+                    0.9875762609058544, 
+                    0.8208521650463377, 
+                    0.8208521650463377, 
+                    0.6834013513579908, 
+                    0.6834013513579908, 
+                    0.5677824560413421, 
+                    0.5677824560413421, 
+                    0.4653218769708024, 
+                    0.4653218769708024, 
+                    0.3713104246963884, 
+                    0.3713104246963884, 
+                    0.28530766055686574, 
+                    0.28530766055686574, 
+                    0.14614994450162108, 
+                    0.14614994450162108
+                ], 
+                0.5007845759391785
+            ], 
+            [
+                1.3122247457504272, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9874166682879566, 
+                    0.9874166682879566, 
+                    0.9873660070602693, 
+                    0.9873660070602693, 
+                    0.9873374886201799, 
+                    0.9873374886201799, 
+                    0.8208473247439324, 
+                    0.8208473247439324, 
+                    0.6835025657620888, 
+                    0.6835025657620888, 
+                    0.5681339234605208, 
+                    0.5681339234605208, 
+                    0.46580303373038423, 
+                    0.46580303373038423, 
+                    0.37175414701171994, 
+                    0.37175414701171994, 
+                    0.28561384856449124, 
+                    0.28561384856449124, 
+                    0.14642735813393792, 
+                    0.14642735813393792
+                ], 
+                0.5007768869400024
+            ], 
+            [
+                1.346206545829773, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9873690894453913, 
+                    0.9873690894453913, 
+                    0.9873228180968424, 
+                    0.9873228180968424, 
+                    0.9873018771859795, 
+                    0.9873018771859795, 
+                    0.8209433234980344, 
+                    0.8209433234980344, 
+                    0.683701726507336, 
+                    0.683701726507336, 
+                    0.568559247188683, 
+                    0.568559247188683, 
+                    0.46632412818340585, 
+                    0.46632412818340585, 
+                    0.3722141494495551, 
+                    0.3722141494495551, 
+                    0.2859225404159369, 
+                    0.2859225404159369, 
+                    0.14671853879204394, 
+                    0.14671853879204394
+                ], 
+                0.5016883611679077
+            ], 
+            [
+                1.3810683488845825, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9870128784037518, 
+                    0.9870128784037518, 
+                    0.9869038928659943, 
+                    0.9869038928659943, 
+                    0.9868943529778637, 
+                    0.9868943529778637, 
+                    0.8208498773477699, 
+                    0.8208498773477699, 
+                    0.6836785208421616, 
+                    0.6836785208421616, 
+                    0.5687583652926946, 
+                    0.5687583652926946, 
+                    0.4666393977690256, 
+                    0.4666393977690256, 
+                    0.37250809432070564, 
+                    0.37250809432070564, 
+                    0.2861235802632118, 
+                    0.2861235802632118, 
+                    0.14687360625578338, 
+                    0.14687360625578338
+                ], 
+                0.500866711139679
+            ], 
+            [
+                1.4168329238891602, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9869988678376815, 
+                    0.9869988678376815, 
+                    0.9869061616590104, 
+                    0.9869061616590104, 
+                    0.9869024390014708, 
+                    0.9869024390014708, 
+                    0.8210057477168186, 
+                    0.8210057477168186, 
+                    0.6839173825319995, 
+                    0.6839173825319995, 
+                    0.569184335422876, 
+                    0.569184335422876, 
+                    0.46712198191564847, 
+                    0.46712198191564847, 
+                    0.372915722695383, 
+                    0.372915722695383, 
+                    0.2863879655522695, 
+                    0.2863879655522695, 
+                    0.14712484593128952, 
+                    0.14712484593128952
+                ], 
+                0.5018286108970642
+            ], 
+            [
+                1.4535236358642578, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9865798573358342, 
+                    0.9865798573358342, 
+                    0.9865275988233408, 
+                    0.9865275988233408, 
+                    0.9865275988233408, 
+                    0.9865275988233408, 
+                    0.8210063831266595, 
+                    0.8210063831266595, 
+                    0.683973649159235, 
+                    0.683973649159235, 
+                    0.569425949497489, 
+                    0.569425949497489, 
+                    0.4674380626253604, 
+                    0.4674380626253604, 
+                    0.373189836514762, 
+                    0.373189836514762, 
+                    0.2865659831651495, 
+                    0.2865659831651495, 
+                    0.14726708694823787, 
+                    0.14726708694823787
+                ], 
+                0.5007911920547485
+            ], 
+            [
+                1.4911644458770752, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9866159523688145, 
+                    0.9866159523688145, 
+                    0.9865885930157663, 
+                    0.9865885930157663, 
+                    0.9865885930157663, 
+                    0.9865885930157663, 
+                    0.8211972376507977, 
+                    0.8211972376507977, 
+                    0.6842265407535366, 
+                    0.6842265407535366, 
+                    0.5698298024843091, 
+                    0.5698298024843091, 
+                    0.46786822275604706, 
+                    0.46786822275604706, 
+                    0.373539348985188, 
+                    0.373539348985188, 
+                    0.28678538592070946, 
+                    0.28678538592070946, 
+                    0.14747574386516132, 
+                    0.14747574386516132
+                ], 
+                0.5018351674079895
+            ]
+        ]
+    }, 
+    {
+        "block_size": 23, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.861828088760376, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9888165938005389, 
+                    0.9888165938005389, 
+                    0.9882039247126209, 
+                    0.9882039247126209, 
+                    0.98714706323059, 
+                    0.98714706323059, 
+                    0.8222735339674934, 
+                    0.8222735339674934, 
+                    0.6830805840126478, 
+                    0.6830805840126478, 
+                    0.5668124064542389, 
+                    0.5668124064542389, 
+                    0.46363553854808925, 
+                    0.46363553854808925, 
+                    0.3694290434524885, 
+                    0.3694290434524885, 
+                    0.2834261808985422, 
+                    0.2834261808985422, 
+                    0.14445286737951943, 
+                    0.14445286737951943
+                ], 
+                0.5008223652839661
+            ], 
+            [
+                0.8832217454910278, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9884371433936088, 
+                    0.9884371433936088, 
+                    0.9878104983678709, 
+                    0.9878104983678709, 
+                    0.9867665500489147, 
+                    0.9867665500489147, 
+                    0.8220477473064234, 
+                    0.8220477473064234, 
+                    0.6830685757461721, 
+                    0.6830685757461721, 
+                    0.5670803679731978, 
+                    0.5670803679731978, 
+                    0.4640965405054872, 
+                    0.4640965405054872, 
+                    0.36993679364696436, 
+                    0.36993679364696436, 
+                    0.2838800616761842, 
+                    0.2838800616761842, 
+                    0.1449057721156741, 
+                    0.1449057721156741
+                ], 
+                0.5005267858505249
+            ], 
+            [
+                0.9051464200019836, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9881553707483698, 
+                    0.9881553707483698, 
+                    0.9875945681073398, 
+                    0.9875945681073398, 
+                    0.9866941450012446, 
+                    0.9866941450012446, 
+                    0.8221652559713876, 
+                    0.8221652559713876, 
+                    0.6834498853781527, 
+                    0.6834498853781527, 
+                    0.5677172959919113, 
+                    0.5677172959919113, 
+                    0.4648597626076489, 
+                    0.4648597626076489, 
+                    0.37066268219445203, 
+                    0.37066268219445203, 
+                    0.2844597234099148, 
+                    0.2844597234099148, 
+                    0.14552224093129784, 
+                    0.14552224093129784
+                ], 
+                0.5013908743858337
+            ], 
+            [
+                0.9276154041290283, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9878119604061864, 
+                    0.9878119604061864, 
+                    0.9872436326369373, 
+                    0.9872436326369373, 
+                    0.9863642286105612, 
+                    0.9863642286105612, 
+                    0.8220216856816612, 
+                    0.8220216856816612, 
+                    0.6835127232796289, 
+                    0.6835127232796289, 
+                    0.5680267662136711, 
+                    0.5680267662136711, 
+                    0.4653185492604804, 
+                    0.4653185492604804, 
+                    0.37113440209356524, 
+                    0.37113440209356524, 
+                    0.28485736166248204, 
+                    0.28485736166248204, 
+                    0.14591612984887334, 
+                    0.14591612984887334
+                ], 
+                0.5011692643165588
+            ], 
+            [
+                0.9506421089172363, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9874848503346311, 
+                    0.9874848503346311, 
+                    0.9869111046687228, 
+                    0.9869111046687228, 
+                    0.9860565676207651, 
+                    0.9860565676207651, 
+                    0.8219152043372776, 
+                    0.8219152043372776, 
+                    0.6836078189173966, 
+                    0.6836078189173966, 
+                    0.5683529286489665, 
+                    0.5683529286489665, 
+                    0.46577490732828, 
+                    0.46577490732828, 
+                    0.3715897395166062, 
+                    0.3715897395166062, 
+                    0.28523097567933076, 
+                    0.28523097567933076, 
+                    0.14628542834149402, 
+                    0.14628542834149402
+                ], 
+                0.5009841918945312
+            ], 
+            [
+                0.9742404222488403, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9871747337199615, 
+                    0.9871747337199615, 
+                    0.9865977514331001, 
+                    0.9865977514331001, 
+                    0.9857717363961713, 
+                    0.9857717363961713, 
+                    0.8218444200806474, 
+                    0.8218444200806474, 
+                    0.683732414102075, 
+                    0.683732414102075, 
+                    0.5686926102600605, 
+                    0.5686926102600605, 
+                    0.46622650529123905, 
+                    0.46622650529123905, 
+                    0.37202788370536694, 
+                    0.37202788370536694, 
+                    0.2855813477878862, 
+                    0.2855813477878862, 
+                    0.1466312403770861, 
+                    0.1466312403770861
+                ], 
+                0.5008367896080017
+            ], 
+            [
+                0.9984245300292969, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9868821537506972, 
+                    0.9868821537506972, 
+                    0.9863041774963062, 
+                    0.9863041774963062, 
+                    0.9855101261953271, 
+                    0.9855101261953271, 
+                    0.8218077386595978, 
+                    0.8218077386595978, 
+                    0.6838837145351406, 
+                    0.6838837145351406, 
+                    0.5690428102304314, 
+                    0.5690428102304314, 
+                    0.46667129511084016, 
+                    0.46667129511084016, 
+                    0.3724482617007997, 
+                    0.3724482617007997, 
+                    0.2859093498994181, 
+                    0.2859093498994181, 
+                    0.14695469735516387, 
+                    0.14695469735516387
+                ], 
+                0.5007280111312866
+            ], 
+            [
+                1.0232089757919312, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9881793539969128, 
+                    0.9881793539969128, 
+                    0.9881793539969128, 
+                    0.9881793539969128, 
+                    0.9881793539969128, 
+                    0.9881793539969128, 
+                    0.818865345601364, 
+                    0.818865345601364, 
+                    0.6809719993705237, 
+                    0.6809719993705237, 
+                    0.5666305559148697, 
+                    0.5666305559148697, 
+                    0.4648336225116116, 
+                    0.4648336225116116, 
+                    0.3711254104480001, 
+                    0.3711254104480001, 
+                    0.2850741429632226, 
+                    0.2850741429632226, 
+                    0.14600900136080086, 
+                    0.14600900136080086
+                ], 
+                0.5005313754081726
+            ], 
+            [
+                1.048608660697937, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9880068706437269, 
+                    0.9880068706437269, 
+                    0.9880068706437269, 
+                    0.9880068706437269, 
+                    0.9880068706437269, 
+                    0.9880068706437269, 
+                    0.8188406349434386, 
+                    0.8188406349434386, 
+                    0.6811367747194017, 
+                    0.6811367747194017, 
+                    0.5669850029770875, 
+                    0.5669850029770875, 
+                    0.46526620668635627, 
+                    0.46526620668635627, 
+                    0.37152193718738397, 
+                    0.37152193718738397, 
+                    0.28537478798724564, 
+                    0.28537478798724564, 
+                    0.1462937461287671, 
+                    0.1462937461287671
+                ], 
+                0.5008364319801331
+            ], 
+            [
+                1.0746389627456665, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9878551493355083, 
+                    0.9878551493355083, 
+                    0.9878551493355083, 
+                    0.9878551493355083, 
+                    0.9878551493355083, 
+                    0.9878551493355083, 
+                    0.8188489896240712, 
+                    0.8188489896240712, 
+                    0.681323442348406, 
+                    0.681323442348406, 
+                    0.5673443670390919, 
+                    0.5673443670390919, 
+                    0.46568848798864454, 
+                    0.46568848798864454, 
+                    0.3719002334834763, 
+                    0.3719002334834763, 
+                    0.28565530576561937, 
+                    0.28565530576561937, 
+                    0.14655927515648934, 
+                    0.14655927515648934
+                ], 
+                0.501193106174469
+            ], 
+            [
+                1.1013152599334717, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9877243123107787, 
+                    0.9877243123107787, 
+                    0.9877243123107787, 
+                    0.9877243123107787, 
+                    0.9877243123107787, 
+                    0.9877243123107787, 
+                    0.8188883554436195, 
+                    0.8188883554436195, 
+                    0.6815293315705714, 
+                    0.6815293315705714, 
+                    0.5677063881793506, 
+                    0.5677063881793506, 
+                    0.4660993418361793, 
+                    0.4660993418361793, 
+                    0.37226036130918905, 
+                    0.37226036130918905, 
+                    0.28591668700253825, 
+                    0.28591668700253825, 
+                    0.14680666754123206, 
+                    0.14680666754123206
+                ], 
+                0.5016012787818909
+            ], 
+            [
+                1.128653883934021, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9876143667587396, 
+                    0.9876143667587396, 
+                    0.9876143667587396, 
+                    0.9876143667587396, 
+                    0.9876143667587396, 
+                    0.9876143667587396, 
+                    0.8189565672050286, 
+                    0.8189565672050286, 
+                    0.6817518313374, 
+                    0.6817518313374, 
+                    0.568068982926739, 
+                    0.568068982926739, 
+                    0.46649782430418785, 
+                    0.46649782430418785, 
+                    0.37260247986795514, 
+                    0.37260247986795514, 
+                    0.2861599033705525, 
+                    0.2861599033705525, 
+                    0.14703695349080814, 
+                    0.14703695349080814
+                ], 
+                0.5020607113838196
+            ], 
+            [
+                1.1566710472106934, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9871829843401515, 
+                    0.9871829843401515, 
+                    0.9871523745892692, 
+                    0.9871523745892692, 
+                    0.9871195335180877, 
+                    0.9871195335180877, 
+                    0.8188189059464704, 
+                    0.8188189059464704, 
+                    0.6817329719236598, 
+                    0.6817329719236598, 
+                    0.5682065585747104, 
+                    0.5682065585747104, 
+                    0.46670635503482466, 
+                    0.46670635503482466, 
+                    0.37279776397431147, 
+                    0.37279776397431147, 
+                    0.28630712041525647, 
+                    0.28630712041525647, 
+                    0.1471438152287994, 
+                    0.1471438152287994
+                ], 
+                0.5007625222206116
+            ], 
+            [
+                1.1853837966918945, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9871074412261633, 
+                    0.9871074412261633, 
+                    0.9870777826313133, 
+                    0.9870777826313133, 
+                    0.9870478386548506, 
+                    0.9870478386548506, 
+                    0.818941728523451, 
+                    0.818941728523451, 
+                    0.6819865137614559, 
+                    0.6819865137614559, 
+                    0.5685711640409526, 
+                    0.5685711640409526, 
+                    0.4670840467636195, 
+                    0.4670840467636195, 
+                    0.3731095038135145, 
+                    0.3731095038135145, 
+                    0.2865199424955145, 
+                    0.2865199424955145, 
+                    0.14734637418584598, 
+                    0.14734637418584598
+                ], 
+                0.5013083815574646
+            ], 
+            [
+                1.2148091793060303, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9870523958557732, 
+                    0.9870523958557732, 
+                    0.9870238291529915, 
+                    0.9870238291529915, 
+                    0.9869968713202316, 
+                    0.9869968713202316, 
+                    0.819086585340045, 
+                    0.819086585340045, 
+                    0.6822493186314388, 
+                    0.6822493186314388, 
+                    0.5689309184726058, 
+                    0.5689309184726058, 
+                    0.46744714181979, 
+                    0.46744714181979, 
+                    0.37340380355261715, 
+                    0.37340380355261715, 
+                    0.28671704911569523, 
+                    0.28671704911569523, 
+                    0.14753432106112016, 
+                    0.14753432106112016
+                ], 
+                0.5019023418426514
+            ], 
+            [
+                1.2449650764465332, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9866994790374086, 
+                    0.9866994790374086, 
+                    0.9866046038707614, 
+                    0.9866046038707614, 
+                    0.9865646357500338, 
+                    0.9865646357500338, 
+                    0.8190075049233484, 
+                    0.8190075049233484, 
+                    0.6822550198645958, 
+                    0.6822550198645958, 
+                    0.5690582625060461, 
+                    0.5690582625060461, 
+                    0.467619578855101, 
+                    0.467619578855101, 
+                    0.3735538130272229, 
+                    0.3735538130272229, 
+                    0.2868220551235145, 
+                    0.2868220551235145, 
+                    0.1476011874014653, 
+                    0.1476011874014653
+                ], 
+                0.5008237361907959
+            ], 
+            [
+                1.275869607925415, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9864803553712121, 
+                    0.9864803553712121, 
+                    0.9864176730746466, 
+                    0.9864176730746466, 
+                    0.9863675181630793, 
+                    0.9863675181630793, 
+                    0.8191262212825889, 
+                    0.8191262212825889, 
+                    0.682462676753946, 
+                    0.682462676753946, 
+                    0.5693487470343318, 
+                    0.5693487470343318, 
+                    0.467910399643291, 
+                    0.467910399643291, 
+                    0.3737842256340094, 
+                    0.3737842256340094, 
+                    0.28697184349774996, 
+                    0.28697184349774996, 
+                    0.1477362571869622, 
+                    0.1477362571869622
+                ], 
+                0.5006020665168762
+            ], 
+            [
+                1.3075411319732666, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9864754063063129, 
+                    0.9864754063063129, 
+                    0.9864163662427728, 
+                    0.9864163662427728, 
+                    0.9863738636345432, 
+                    0.9863738636345432, 
+                    0.8193281901057945, 
+                    0.8193281901057945, 
+                    0.6827471571915531, 
+                    0.6827471571915531, 
+                    0.5696936183668472, 
+                    0.5696936183668472, 
+                    0.4682346322854785, 
+                    0.4682346322854785, 
+                    0.3740337489050497, 
+                    0.3740337489050497, 
+                    0.287129599884312, 
+                    0.287129599884312, 
+                    0.14788875095337753, 
+                    0.14788875095337753
+                ], 
+                0.5013088583946228
+            ], 
+            [
+                1.3399989604949951, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9864892553033503, 
+                    0.9864892553033503, 
+                    0.9864341862944613, 
+                    0.9864341862944613, 
+                    0.9863994200847844, 
+                    0.9863994200847844, 
+                    0.8195421211963242, 
+                    0.8195421211963242, 
+                    0.6830319458031555, 
+                    0.6830319458031555, 
+                    0.5700280679463758, 
+                    0.5700280679463758, 
+                    0.4685426013639126, 
+                    0.4685426013639126, 
+                    0.37426690031719123, 
+                    0.37426690031719123, 
+                    0.2872741341163955, 
+                    0.2872741341163955, 
+                    0.14802914362060524, 
+                    0.14802914362060524
+                ], 
+                0.5020549297332764
+            ], 
+            [
+                1.3732625246047974, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9862051687014266, 
+                    0.9862051687014266, 
+                    0.9860618470109971, 
+                    0.9860618470109971, 
+                    0.9860407093721496, 
+                    0.9860407093721496, 
+                    0.819525426928625, 
+                    0.819525426928625, 
+                    0.6830578045022673, 
+                    0.6830578045022673, 
+                    0.5701360039301028, 
+                    0.5701360039301028, 
+                    0.4686697599015711, 
+                    0.4686697599015711, 
+                    0.3743654992281276, 
+                    0.3743654992281276, 
+                    0.28733415969913373, 
+                    0.28733415969913373, 
+                    0.14805579314614498, 
+                    0.14805579314614498
+                ], 
+                0.5011482834815979
+            ], 
+            [
+                1.4073518514633179, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9860106083748953, 
+                    0.9860106083748953, 
+                    0.9857032905537456, 
+                    0.9857032905537456, 
+                    0.9856776705061374, 
+                    0.9856776705061374, 
+                    0.8195060100725338, 
+                    0.8195060100725338, 
+                    0.6830708075314461, 
+                    0.6830708075314461, 
+                    0.570225929193396, 
+                    0.570225929193396, 
+                    0.4687770794599728, 
+                    0.4687770794599728, 
+                    0.37444607313415895, 
+                    0.37444607313415895, 
+                    0.28738044261091183, 
+                    0.28738044261091183, 
+                    0.1480681750971686, 
+                    0.1480681750971686
+                ], 
+                0.50053870677948
+            ]
+        ]
+    }, 
+    {
+        "block_size": 24, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.790123462677002, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.992352444325265, 
+                    0.992352444325265, 
+                    0.9923214549029739, 
+                    0.9923214549029739, 
+                    0.9922787896104052, 
+                    0.9922787896104052, 
+                    0.866352342097402, 
+                    0.866352342097402, 
+                    0.7280799102879443, 
+                    0.7280799102879443, 
+                    0.6149936058020831, 
+                    0.6149936058020831, 
+                    0.5163496666586409, 
+                    0.5163496666586409, 
+                    0.42524463778728033, 
+                    0.42524463778728033, 
+                    0.34092685226941, 
+                    0.34092685226941, 
+                    0.2637394043168367, 
+                    0.2637394043168367, 
+                    0.13547676342290438, 
+                    0.13547676342290438
+                ], 
+                0.5015304684638977
+            ], 
+            [
+                0.808957040309906, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9919771192337398, 
+                    0.9919771192337398, 
+                    0.9919445961851876, 
+                    0.9919445961851876, 
+                    0.9919016064795765, 
+                    0.9919016064795765, 
+                    0.8658033449921575, 
+                    0.8658033449921575, 
+                    0.7276936971865827, 
+                    0.7276936971865827, 
+                    0.6149805858585673, 
+                    0.6149805858585673, 
+                    0.5166382978589315, 
+                    0.5166382978589315, 
+                    0.42576898955207937, 
+                    0.42576898955207937, 
+                    0.34154309884350087, 
+                    0.34154309884350087, 
+                    0.26424602258324525, 
+                    0.26424602258324525, 
+                    0.13596467961054814, 
+                    0.13596467961054814
+                ], 
+                0.5014511942863464
+            ], 
+            [
+                0.8282395601272583, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9916060453763346, 
+                    0.9916060453763346, 
+                    0.9915720414456036, 
+                    0.9915720414456036, 
+                    0.9915289460805944, 
+                    0.9915289460805944, 
+                    0.8652880527012694, 
+                    0.8652880527012694, 
+                    0.7273584388083053, 
+                    0.7273584388083053, 
+                    0.6150154171191436, 
+                    0.6150154171191436, 
+                    0.5169561818542702, 
+                    0.5169561818542702, 
+                    0.426299195838105, 
+                    0.426299195838105, 
+                    0.342142698891591, 
+                    0.342142698891591, 
+                    0.26472647004604005, 
+                    0.26472647004604005, 
+                    0.13642581329229508, 
+                    0.13642581329229508
+                ], 
+                0.5013214349746704
+            ], 
+            [
+                0.8479816913604736, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9912409876609803, 
+                    0.9912409876609803, 
+                    0.9912055679411216, 
+                    0.9912055679411216, 
+                    0.9911625926972726, 
+                    0.9911625926972726, 
+                    0.864808589387032, 
+                    0.864808589387032, 
+                    0.7270740960727897, 
+                    0.7270740960727897, 
+                    0.6150954975830777, 
+                    0.6150954975830777, 
+                    0.5172998196918267, 
+                    0.5172998196918267, 
+                    0.426832095342365, 
+                    0.426832095342365, 
+                    0.34272412705637556, 
+                    0.34272412705637556, 
+                    0.2651810904463113, 
+                    0.2651810904463113, 
+                    0.1368610072991439, 
+                    0.1368610072991439
+                ], 
+                0.5011479258537292
+            ], 
+            [
+                0.8681944012641907, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9908836731624443, 
+                    0.9908836731624443, 
+                    0.9908469146049069, 
+                    0.9908469146049069, 
+                    0.9908042897538043, 
+                    0.9908042897538043, 
+                    0.8643667434221206, 
+                    0.8643667434221206, 
+                    0.726840210151962, 
+                    0.726840210151962, 
+                    0.6152179983636944, 
+                    0.6152179983636944, 
+                    0.5176657566224566, 
+                    0.5176657566224566, 
+                    0.42736478103937475, 
+                    0.42736478103937475, 
+                    0.34328616310811727, 
+                    0.34328616310811727, 
+                    0.2656103963425116, 
+                    0.2656103963425116, 
+                    0.13727119717652184, 
+                    0.13727119717652184
+                ], 
+                0.5009382367134094
+            ], 
+            [
+                0.8888888955116272, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.990535773965579, 
+                    0.990535773965579, 
+                    0.9904977647388391, 
+                    0.9904977647388391, 
+                    0.9904557225059515, 
+                    0.9904557225059515, 
+                    0.8639639564606963, 
+                    0.8639639564606963, 
+                    0.7266559278143694, 
+                    0.7266559278143694, 
+                    0.6153799116600199, 
+                    0.6153799116600199, 
+                    0.5180506177235328, 
+                    0.5180506177235328, 
+                    0.42789460777806965, 
+                    0.42789460777806965, 
+                    0.3438278700327927, 
+                    0.3438278700327927, 
+                    0.26601503985393166, 
+                    0.26601503985393166, 
+                    0.13765738695860633, 
+                    0.13765738695860633
+                ], 
+                0.5007008910179138
+            ], 
+            [
+                0.9100766777992249, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9904442566363412, 
+                    0.9904442566363412, 
+                    0.9904442566363412, 
+                    0.9904442566363412, 
+                    0.9904442566363412, 
+                    0.9904442566363412, 
+                    0.863845042453218, 
+                    0.863845042453218, 
+                    0.7268400636446912, 
+                    0.7268400636446912, 
+                    0.6158991493779734, 
+                    0.6158991493779734, 
+                    0.5187318543662519, 
+                    0.5187318543662519, 
+                    0.42865659950603874, 
+                    0.42865659950603874, 
+                    0.3445310359417262, 
+                    0.3445310359417262, 
+                    0.2665081613956353, 
+                    0.2665081613956353, 
+                    0.13816893292600815, 
+                    0.13816893292600815
+                ], 
+                0.5021882057189941
+            ], 
+            [
+                0.9317694902420044, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.990130142229805, 
+                    0.990130142229805, 
+                    0.990130142229805, 
+                    0.990130142229805, 
+                    0.990130142229805, 
+                    0.990130142229805, 
+                    0.8635243336158774, 
+                    0.8635243336158774, 
+                    0.726749355806965, 
+                    0.726749355806965, 
+                    0.6161248555882534, 
+                    0.6161248555882534, 
+                    0.5191371952711225, 
+                    0.5191371952711225, 
+                    0.42916492524229055, 
+                    0.42916492524229055, 
+                    0.34502201664683413, 
+                    0.34502201664683413, 
+                    0.2668602839199154, 
+                    0.2668602839199154, 
+                    0.138504016953946, 
+                    0.138504016953946
+                ], 
+                0.5019760131835938
+            ], 
+            [
+                0.9539793729782104, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9898298088062112, 
+                    0.9898298088062112, 
+                    0.9898298088062112, 
+                    0.9898298088062112, 
+                    0.9898298088062112, 
+                    0.9898298088062112, 
+                    0.8632443135688821, 
+                    0.8632443135688821, 
+                    0.7267029823635963, 
+                    0.7267029823635963, 
+                    0.61637986248446, 
+                    0.61637986248446, 
+                    0.5195519374399157, 
+                    0.5195519374399157, 
+                    0.4296641761277935, 
+                    0.4296641761277935, 
+                    0.34549166286718447, 
+                    0.34549166286718447, 
+                    0.26719060690750257, 
+                    0.26719060690750257, 
+                    0.13881866623227943, 
+                    0.13881866623227943
+                ], 
+                0.5017737746238708
+            ], 
+            [
+                0.9767186641693115, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9895445370597954, 
+                    0.9895445370597954, 
+                    0.9895445370597954, 
+                    0.9895445370597954, 
+                    0.9895445370597954, 
+                    0.9895445370597954, 
+                    0.8630050335444746, 
+                    0.8630050335444746, 
+                    0.7266988600856289, 
+                    0.7266988600856289, 
+                    0.6166609368353322, 
+                    0.6166609368353322, 
+                    0.5199733276225244, 
+                    0.5199733276225244, 
+                    0.430152761533673, 
+                    0.430152761533673, 
+                    0.34593991970711946, 
+                    0.34593991970711946, 
+                    0.26750006512189517, 
+                    0.26750006512189517, 
+                    0.13911394247722966, 
+                    0.13911394247722966
+                ], 
+                0.5016157031059265
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9892754900411652, 
+                    0.9892754900411652, 
+                    0.9892754900411652, 
+                    0.9892754900411652, 
+                    0.9892754900411652, 
+                    0.9892754900411652, 
+                    0.8628062083757643, 
+                    0.8628062083757643, 
+                    0.7267346707770336, 
+                    0.7267346707770336, 
+                    0.6169648588139287, 
+                    0.6169648588139287, 
+                    0.5203987815295502, 
+                    0.5203987815295502, 
+                    0.4306293098322755, 
+                    0.4306293098322755, 
+                    0.34636687882216666, 
+                    0.34636687882216666, 
+                    0.26778961011059454, 
+                    0.26778961011059454, 
+                    0.13939088533486602, 
+                    0.13939088533486602
+                ], 
+                0.5015077590942383
+            ], 
+            [
+                1.0238362550735474, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9890237051044802, 
+                    0.9890237051044802, 
+                    0.9890237051044802, 
+                    0.9890237051044802, 
+                    0.9890237051044802, 
+                    0.9890237051044802, 
+                    0.8626472267370043, 
+                    0.8626472267370043, 
+                    0.7268078923542304, 
+                    0.7268078923542304, 
+                    0.6172884476663596, 
+                    0.6172884476663596, 
+                    0.5208258874429396, 
+                    0.5208258874429396, 
+                    0.43109265182596135, 
+                    0.43109265182596135, 
+                    0.34677275302877847, 
+                    0.34677275302877847, 
+                    0.26806019264333686, 
+                    0.26806019264333686, 
+                    0.13965050128871634, 
+                    0.13965050128871634
+                ], 
+                0.5014530420303345
+            ], 
+            [
+                1.0482406616210938, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9887900878429792, 
+                    0.9887900878429792, 
+                    0.9887900878429792, 
+                    0.9887900878429792, 
+                    0.9887900878429792, 
+                    0.9887900878429792, 
+                    0.8625271633729535, 
+                    0.8625271633729535, 
+                    0.7269158286241734, 
+                    0.7269158286241734, 
+                    0.617628582995529, 
+                    0.617628582995529, 
+                    0.5212524059742565, 
+                    0.5212524059742565, 
+                    0.4315418025971792, 
+                    0.4315418025971792, 
+                    0.34715785203531785, 
+                    0.34715785203531785, 
+                    0.2683127471260828, 
+                    0.2683127471260828, 
+                    0.13989375445420146, 
+                    0.13989375445420146
+                ], 
+                0.5014541149139404
+            ], 
+            [
+                1.073226809501648, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9885754080768666, 
+                    0.9885754080768666, 
+                    0.9885754080768666, 
+                    0.9885754080768666, 
+                    0.9885754080768666, 
+                    0.9885754080768666, 
+                    0.8624447925654181, 
+                    0.8624447925654181, 
+                    0.7270556369952802, 
+                    0.7270556369952802, 
+                    0.6179822216322755, 
+                    0.6179822216322755, 
+                    0.5216762662963967, 
+                    0.5216762662963967, 
+                    0.4319759421416792, 
+                    0.4319759421416792, 
+                    0.3475225594374759, 
+                    0.3475225594374759, 
+                    0.2685481778669515, 
+                    0.2685481778669515, 
+                    0.14012155911924506, 
+                    0.14012155911924506
+                ], 
+                0.5015130043029785
+            ], 
+            [
+                1.0988085269927979, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9883802978965832, 
+                    0.9883802978965832, 
+                    0.9883802978965832, 
+                    0.9883802978965832, 
+                    0.9883802978965832, 
+                    0.9883802978965832, 
+                    0.862398602018048, 
+                    0.862398602018048, 
+                    0.727224353384881, 
+                    0.727224353384881, 
+                    0.6183464098781986, 
+                    0.6183464098781986, 
+                    0.5220955590621807, 
+                    0.5220955590621807, 
+                    0.4323943951081117, 
+                    0.4323943951081117, 
+                    0.3478673109150549, 
+                    0.3478673109150549, 
+                    0.2687673468569054, 
+                    0.2687673468569054, 
+                    0.14033477371002245, 
+                    0.14033477371002245
+                ], 
+                0.5016311407089233
+            ], 
+            [
+                1.125, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9882052517122882, 
+                    0.9882052517122882, 
+                    0.9882052517122882, 
+                    0.9882052517122882, 
+                    0.9882052517122882, 
+                    0.9882052517122882, 
+                    0.8623868061616523, 
+                    0.8623868061616523, 
+                    0.7274189135905471, 
+                    0.7274189135905471, 
+                    0.6187182909897124, 
+                    0.6187182909897124, 
+                    0.5225085262151197, 
+                    0.5225085262151197, 
+                    0.43279660975918594, 
+                    0.43279660975918594, 
+                    0.3481925736259103, 
+                    0.3481925736259103, 
+                    0.2689710627825734, 
+                    0.2689710627825734, 
+                    0.14053419592761981, 
+                    0.14053419592761981
+                ], 
+                0.5018094778060913
+            ], 
+            [
+                1.1518157720565796, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9880506282220697, 
+                    0.9880506282220697, 
+                    0.9880506282220697, 
+                    0.9880506282220697, 
+                    0.9880506282220697, 
+                    0.9880506282220697, 
+                    0.8624073577930621, 
+                    0.8624073577930621, 
+                    0.7276361702344889, 
+                    0.7276361702344889, 
+                    0.6190951077288313, 
+                    0.6190951077288313, 
+                    0.5229135477656328, 
+                    0.5229135477656328, 
+                    0.4331821362690396, 
+                    0.4331821362690396, 
+                    0.34849882653448894, 
+                    0.34849882653448894, 
+                    0.2691600708769087, 
+                    0.2691600708769087, 
+                    0.14072055875475492, 
+                    0.14072055875475492
+                ], 
+                0.5020481944084167
+            ], 
+            [
+                1.1792707443237305, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9879166541595087, 
+                    0.9879166541595087, 
+                    0.9879166541595087, 
+                    0.9879166541595087, 
+                    0.9879166541595087, 
+                    0.9879166541595087, 
+                    0.8624579568315068, 
+                    0.8624579568315068, 
+                    0.7278729045078569, 
+                    0.7278729045078569, 
+                    0.6194741997175243, 
+                    0.6194741997175243, 
+                    0.5233091255779206, 
+                    0.5233091255779206, 
+                    0.43355060426760433, 
+                    0.43355060426760433, 
+                    0.34878654140842197, 
+                    0.34878654140842197, 
+                    0.2693350431906819, 
+                    0.2693350431906819, 
+                    0.14089452698688631, 
+                    0.14089452698688631
+                ], 
+                0.5023469924926758
+            ], 
+            [
+                1.2073801755905151, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9874494125201769, 
+                    0.9874494125201769, 
+                    0.9874066659367158, 
+                    0.9874066659367158, 
+                    0.9873904910860422, 
+                    0.9873904910860422, 
+                    0.862311261452052, 
+                    0.862311261452052, 
+                    0.7278564645990244, 
+                    0.7278564645990244, 
+                    0.6196143332847563, 
+                    0.6196143332847563, 
+                    0.5235041576276241, 
+                    0.5235041576276241, 
+                    0.43375469746656997, 
+                    0.43375469746656997, 
+                    0.3489491934885108, 
+                    0.3489491934885108, 
+                    0.2694316459452446, 
+                    0.2694316459452446, 
+                    0.1409635177043423, 
+                    0.1409635177043423
+                ], 
+                0.5007022023200989
+            ], 
+            [
+                1.2361595630645752, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9873494297382591, 
+                    0.9873494297382591, 
+                    0.9873073497053669, 
+                    0.9873073497053669, 
+                    0.9872941687298562, 
+                    0.9872941687298562, 
+                    0.8624179027705794, 
+                    0.8624179027705794, 
+                    0.728128206478242, 
+                    0.728128206478242, 
+                    0.6199974169056236, 
+                    0.6199974169056236, 
+                    0.5238832558070918, 
+                    0.5238832558070918, 
+                    0.43409372187408063, 
+                    0.43409372187408063, 
+                    0.3492052862208271, 
+                    0.3492052862208271, 
+                    0.2695826487908482, 
+                    0.2695826487908482, 
+                    0.14111737769737157, 
+                    0.14111737769737157
+                ], 
+                0.5010994076728821
+            ], 
+            [
+                1.265625, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.987270279345024, 
+                    0.987270279345024, 
+                    0.9872290190127446, 
+                    0.9872290190127446, 
+                    0.9872189062261807, 
+                    0.9872189062261807, 
+                    0.8625463789638358, 
+                    0.8625463789638358, 
+                    0.7284094180447513, 
+                    0.7284094180447513, 
+                    0.6203751175509596, 
+                    0.6203751175509596, 
+                    0.5242486814198356, 
+                    0.5242486814198356, 
+                    0.4344145120150857, 
+                    0.4344145120150857, 
+                    0.3494437572210188, 
+                    0.3494437572210188, 
+                    0.26972092206172715, 
+                    0.26972092206172715, 
+                    0.1412602076965463, 
+                    0.1412602076965463
+                ], 
+                0.5015520453453064
+            ]
+        ]
+    }, 
+    {
+        "block_size": 25, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8558826446533203, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9897528190766631, 
+                    0.9897528190766631, 
+                    0.9890040395129541, 
+                    0.9890040395129541, 
+                    0.9881586772634282, 
+                    0.9881586772634282, 
+                    0.8662961412245801, 
+                    0.8662961412245801, 
+                    0.7330006219786779, 
+                    0.7330006219786779, 
+                    0.618814688859897, 
+                    0.618814688859897, 
+                    0.5196360418506972, 
+                    0.5196360418506972, 
+                    0.42757216874755344, 
+                    0.42757216874755344, 
+                    0.34330374618522835, 
+                    0.34330374618522835, 
+                    0.2655630403012426, 
+                    0.2655630403012426, 
+                    0.13738444642621564, 
+                    0.13738444642621564
+                ], 
+                0.5005986094474792
+            ], 
+            [
+                0.8755033612251282, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9893795553620289, 
+                    0.9893795553620289, 
+                    0.9886930258415333, 
+                    0.9886930258415333, 
+                    0.9879536087816507, 
+                    0.9879536087816507, 
+                    0.8662038306731972, 
+                    0.8662038306731972, 
+                    0.7330972878473646, 
+                    0.7330972878473646, 
+                    0.6192554367938351, 
+                    0.6192554367938351, 
+                    0.5203388294603379, 
+                    0.5203388294603379, 
+                    0.42849098269356495, 
+                    0.42849098269356495, 
+                    0.3441624490580403, 
+                    0.3441624490580403, 
+                    0.26617403152923214, 
+                    0.26617403152923214, 
+                    0.13801742861049812, 
+                    0.13801742861049812
+                ], 
+                0.5011333227157593
+            ], 
+            [
+                0.8955738544464111, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9889601028012537, 
+                    0.9889601028012537, 
+                    0.9882505810284262, 
+                    0.9882505810284262, 
+                    0.9875227367622391, 
+                    0.9875227367622391, 
+                    0.8658807855802901, 
+                    0.8658807855802901, 
+                    0.7329291681518293, 
+                    0.7329291681518293, 
+                    0.6193831096340858, 
+                    0.6193831096340858, 
+                    0.5207289510446765, 
+                    0.5207289510446765, 
+                    0.4290938019455971, 
+                    0.4290938019455971, 
+                    0.34475411738750666, 
+                    0.34475411738750666, 
+                    0.2666058633660437, 
+                    0.2666058633660437, 
+                    0.13843325574126272, 
+                    0.13843325574126272
+                ], 
+                0.5005714893341064
+            ], 
+            [
+                0.9161044955253601, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9893913489252932, 
+                    0.9893913489252932, 
+                    0.988080539275825, 
+                    0.988080539275825, 
+                    0.9867996298862425, 
+                    0.9867996298862425, 
+                    0.8646130290690403, 
+                    0.8646130290690403, 
+                    0.7317145567067408, 
+                    0.7317145567067408, 
+                    0.6183348696174134, 
+                    0.6183348696174134, 
+                    0.5200325618598692, 
+                    0.5200325618598692, 
+                    0.42869564198712284, 
+                    0.42869564198712284, 
+                    0.34456198199586896, 
+                    0.34456198199586896, 
+                    0.26654489019925226, 
+                    0.26654489019925226, 
+                    0.13821590769703154, 
+                    0.13821590769703154
+                ], 
+                0.5007422566413879
+            ], 
+            [
+                0.9371058344841003, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.989086919078297, 
+                    0.989086919078297, 
+                    0.9878337157751631, 
+                    0.9878337157751631, 
+                    0.986672704757455, 
+                    0.986672704757455, 
+                    0.8646342396991731, 
+                    0.8646342396991731, 
+                    0.731919921177408, 
+                    0.731919921177408, 
+                    0.618870130047322, 
+                    0.618870130047322, 
+                    0.5207701635087921, 
+                    0.5207701635087921, 
+                    0.42957647218519157, 
+                    0.42957647218519157, 
+                    0.34533828508131015, 
+                    0.34533828508131015, 
+                    0.26707298895426673, 
+                    0.26707298895426673, 
+                    0.1387701496271102, 
+                    0.1387701496271102
+                ], 
+                0.5014756321907043
+            ], 
+            [
+                0.9585885405540466, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9887197472615266, 
+                    0.9887197472615266, 
+                    0.9874270860932869, 
+                    0.9874270860932869, 
+                    0.9862950714290205, 
+                    0.9862950714290205, 
+                    0.8644068875167955, 
+                    0.8644068875167955, 
+                    0.7318431867251731, 
+                    0.7318431867251731, 
+                    0.6190814874761272, 
+                    0.6190814874761272, 
+                    0.5211959883682681, 
+                    0.5211959883682681, 
+                    0.43015565628316627, 
+                    0.43015565628316627, 
+                    0.3458683842192339, 
+                    0.3458683842192339, 
+                    0.2674403955922622, 
+                    0.2674403955922622, 
+                    0.13912591447051506, 
+                    0.13912591447051506
+                ], 
+                0.5010775327682495
+            ], 
+            [
+                0.980563759803772, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9883660189302775, 
+                    0.9883660189302775, 
+                    0.9870367239843005, 
+                    0.9870367239843005, 
+                    0.9859401339753892, 
+                    0.9859401339753892, 
+                    0.8642214629083125, 
+                    0.8642214629083125, 
+                    0.7318035145196968, 
+                    0.7318035145196968, 
+                    0.6193217783230385, 
+                    0.6193217783230385, 
+                    0.5216302803091439, 
+                    0.5216302803091439, 
+                    0.4307215692352464, 
+                    0.4307215692352464, 
+                    0.34637454587567684, 
+                    0.34637454587567684, 
+                    0.2677855889350262, 
+                    0.2677855889350262, 
+                    0.1394614015508273, 
+                    0.1394614015508273
+                ], 
+                0.5007137060165405
+            ], 
+            [
+                1.0030426979064941, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.988068414689172, 
+                    0.988068414689172, 
+                    0.9867542199310823, 
+                    0.9867542199310823, 
+                    0.9857372668704645, 
+                    0.9857372668704645, 
+                    0.8642064306227618, 
+                    0.8642064306227618, 
+                    0.7319372653588376, 
+                    0.7319372653588376, 
+                    0.6197317319386949, 
+                    0.6197317319386949, 
+                    0.5221944140827899, 
+                    0.5221944140827899, 
+                    0.4313779517107081, 
+                    0.4313779517107081, 
+                    0.3469356825919388, 
+                    0.3469356825919388, 
+                    0.26815861762795856, 
+                    0.26815861762795856, 
+                    0.13983976734782094, 
+                    0.13983976734782094
+                ], 
+                0.5008797645568848
+            ], 
+            [
+                1.0260370969772339, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.98774681137114, 
+                    0.98774681137114, 
+                    0.9864037491102664, 
+                    0.9864037491102664, 
+                    0.9854332396874594, 
+                    0.9854332396874594, 
+                    0.8641026108975784, 
+                    0.8641026108975784, 
+                    0.7319651879197436, 
+                    0.7319651879197436, 
+                    0.6200178230805692, 
+                    0.6200178230805692, 
+                    0.5226334042508839, 
+                    0.5226334042508839, 
+                    0.4319081784981855, 
+                    0.4319081784981855, 
+                    0.34739035336970603, 
+                    0.34739035336970603, 
+                    0.2684595802738674, 
+                    0.2684595802738674, 
+                    0.1401348620141727, 
+                    0.1401348620141727
+                ], 
+                0.5005919337272644
+            ], 
+            [
+                1.0495585203170776, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9874892315053156, 
+                    0.9874892315053156, 
+                    0.9861709334284633, 
+                    0.9861709334284633, 
+                    0.9852864505682152, 
+                    0.9852864505682152, 
+                    0.864166779934616, 
+                    0.864166779934616, 
+                    0.7321612622664685, 
+                    0.7321612622664685, 
+                    0.6204648815022726, 
+                    0.6204648815022726, 
+                    0.523192569727715, 
+                    0.523192569727715, 
+                    0.43252105795161533, 
+                    0.43252105795161533, 
+                    0.34789554506014614, 
+                    0.34789554506014614, 
+                    0.2687862528852772, 
+                    0.2687862528852772, 
+                    0.1404729823744175, 
+                    0.1404729823744175
+                ], 
+                0.5008533596992493
+            ], 
+            [
+                1.0736191272735596, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.987201997516542, 
+                    0.987201997516542, 
+                    0.9858629638779817, 
+                    0.9858629638779817, 
+                    0.9850343468053735, 
+                    0.9850343468053735, 
+                    0.8641372369666412, 
+                    0.8641372369666412, 
+                    0.7322459390657738, 
+                    0.7322459390657738, 
+                    0.6207824070956734, 
+                    0.6207824070956734, 
+                    0.5236247729069482, 
+                    0.5236247729069482, 
+                    0.43301005934036607, 
+                    0.43301005934036607, 
+                    0.34829942236811384, 
+                    0.34829942236811384, 
+                    0.2690464897345425, 
+                    0.2690464897345425, 
+                    0.1407308455621817, 
+                    0.1407308455621817
+                ], 
+                0.5006434917449951
+            ], 
+            [
+                1.0982314348220825, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9870650001697412, 
+                    0.9870650001697412, 
+                    0.9858348201162149, 
+                    0.9858348201162149, 
+                    0.9851387591389569, 
+                    0.9851387591389569, 
+                    0.8644587384331426, 
+                    0.8644587384331426, 
+                    0.7326894798980924, 
+                    0.7326894798980924, 
+                    0.6214498024482429, 
+                    0.6214498024482429, 
+                    0.5243326636354254, 
+                    0.5243326636354254, 
+                    0.4337096976913982, 
+                    0.4337096976913982, 
+                    0.34884925625663027, 
+                    0.34884925625663027, 
+                    0.269391691385814, 
+                    0.269391691385814, 
+                    0.1411131087905334, 
+                    0.1411131087905334
+                ], 
+                0.5017526149749756
+            ], 
+            [
+                1.1234078407287598, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9868184311028982, 
+                    0.9868184311028982, 
+                    0.9855770183215428, 
+                    0.9855770183215428, 
+                    0.9849411204521623, 
+                    0.9849411204521623, 
+                    0.8644948549562871, 
+                    0.8644948549562871, 
+                    0.7328192786232604, 
+                    0.7328192786232604, 
+                    0.6217832677851012, 
+                    0.6217832677851012, 
+                    0.5247456324555504, 
+                    0.5247456324555504, 
+                    0.43415069979786675, 
+                    0.43415069979786675, 
+                    0.34920141357343754, 
+                    0.34920141357343754, 
+                    0.26961308755555113, 
+                    0.26961308755555113, 
+                    0.14133520767139562, 
+                    0.14133520767139562
+                ], 
+                0.5016341209411621
+            ], 
+            [
+                1.149161458015442, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9865880187417035, 
+                    0.9865880187417035, 
+                    0.9853389929934192, 
+                    0.9853389929934192, 
+                    0.9847673580128006, 
+                    0.9847673580128006, 
+                    0.8645593282575748, 
+                    0.8645593282575748, 
+                    0.7329673730896297, 
+                    0.7329673730896297, 
+                    0.6221220239754708, 
+                    0.6221220239754708, 
+                    0.5251490611614944, 
+                    0.5251490611614944, 
+                    0.43457056203819955, 
+                    0.43457056203819955, 
+                    0.34953150554232354, 
+                    0.34953150554232354, 
+                    0.26981811754355334, 
+                    0.26981811754355334, 
+                    0.14154245373256144, 
+                    0.14154245373256144
+                ], 
+                0.5015496611595154
+            ], 
+            [
+                1.175505518913269, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9873979088149845, 
+                    0.9873979088149845, 
+                    0.9873979088149845, 
+                    0.9873979088149845, 
+                    0.9873979088149845, 
+                    0.9873979088149845, 
+                    0.8619535727041199, 
+                    0.8619535727041199, 
+                    0.7304693341851423, 
+                    0.7304693341851423, 
+                    0.6199629240132641, 
+                    0.6199629240132641, 
+                    0.5234799294118384, 
+                    0.5234799294118384, 
+                    0.4333196311898729, 
+                    0.4333196311898729, 
+                    0.34860919214149827, 
+                    0.34860919214149827, 
+                    0.26920027885575826, 
+                    0.26920027885575826, 
+                    0.14081105643454367, 
+                    0.14081105643454367
+                ], 
+                0.5007700324058533
+            ], 
+            [
+                1.2024534940719604, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9873016420955482, 
+                    0.9873016420955482, 
+                    0.9873016420955482, 
+                    0.9873016420955482, 
+                    0.9873016420955482, 
+                    0.9873016420955482, 
+                    0.8620578431893441, 
+                    0.8620578431893441, 
+                    0.7306440828661585, 
+                    0.7306440828661585, 
+                    0.6203187951125934, 
+                    0.6203187951125934, 
+                    0.523881093916764, 
+                    0.523881093916764, 
+                    0.43372019684380864, 
+                    0.43372019684380864, 
+                    0.3489164057852826, 
+                    0.3489164057852826, 
+                    0.26938838678719923, 
+                    0.26938838678719923, 
+                    0.14099677716770131, 
+                    0.14099677716770131
+                ], 
+                0.5012438297271729
+            ], 
+            [
+                1.230019211769104, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.987225909295426, 
+                    0.987225909295426, 
+                    0.987225909295426, 
+                    0.987225909295426, 
+                    0.987225909295426, 
+                    0.987225909295426, 
+                    0.8621863693067093, 
+                    0.8621863693067093, 
+                    0.7308314175208704, 
+                    0.7308314175208704, 
+                    0.6206735507123843, 
+                    0.6206735507123843, 
+                    0.5242687897171195, 
+                    0.5242687897171195, 
+                    0.4340988291835155, 
+                    0.4340988291835155, 
+                    0.34920270284967275, 
+                    0.34920270284967275, 
+                    0.2695614708748882, 
+                    0.2695614708748882, 
+                    0.14116930972698447, 
+                    0.14116930972698447
+                ], 
+                0.5017685294151306
+            ], 
+            [
+                1.2582168579101562, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9871702870626905, 
+                    0.9871702870626905, 
+                    0.9871702870626905, 
+                    0.9871702870626905, 
+                    0.9871702870626905, 
+                    0.9871702870626905, 
+                    0.8623360328729232, 
+                    0.8623360328729232, 
+                    0.7310285004666464, 
+                    0.7310285004666464, 
+                    0.6210248167924156, 
+                    0.6210248167924156, 
+                    0.5246418860212891, 
+                    0.5246418860212891, 
+                    0.43445559661932953, 
+                    0.43445559661932953, 
+                    0.3494687355082603, 
+                    0.3494687355082603, 
+                    0.2697201622127591, 
+                    0.2697201622127591, 
+                    0.14132924739198666, 
+                    0.14132924739198666
+                ], 
+                0.5023415684700012
+            ], 
+            [
+                1.2870608568191528, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9867557202419529, 
+                    0.9867557202419529, 
+                    0.9867111616337473, 
+                    0.9867111616337473, 
+                    0.9867035459118968, 
+                    0.9867035459118968, 
+                    0.8622879866408346, 
+                    0.8622879866408346, 
+                    0.7310074240460321, 
+                    0.7310074240460321, 
+                    0.6211577187386006, 
+                    0.6211577187386006, 
+                    0.5248315581049693, 
+                    0.5248315581049693, 
+                    0.4346591185351844, 
+                    0.4346591185351844, 
+                    0.3496196911620349, 
+                    0.3496196911620349, 
+                    0.2698066523582272, 
+                    0.2698066523582272, 
+                    0.14139291325366196, 
+                    0.14139291325366196
+                ], 
+                0.5009052753448486
+            ], 
+            [
+                1.3165662288665771, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9867326334385844, 
+                    0.9867326334385844, 
+                    0.9866890649363748, 
+                    0.9866890649363748, 
+                    0.9866845709600301, 
+                    0.9866845709600301, 
+                    0.8624742584881856, 
+                    0.8624742584881856, 
+                    0.7312200693935332, 
+                    0.7312200693935332, 
+                    0.6215013020195628, 
+                    0.6215013020195628, 
+                    0.5251780370496916, 
+                    0.5251780370496916, 
+                    0.4349774030606553, 
+                    0.4349774030606553, 
+                    0.3498504986635231, 
+                    0.3498504986635231, 
+                    0.2699401521861153, 
+                    0.2699401521861153, 
+                    0.14153173224091875, 
+                    0.14153173224091875
+                ], 
+                0.5015496611595154
+            ], 
+            [
+                1.346747875213623, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9867282050741437, 
+                    0.9867282050741437, 
+                    0.9866857623277909, 
+                    0.9866857623277909, 
+                    0.986684419367018, 
+                    0.986684419367018, 
+                    0.8626714603366683, 
+                    0.8626714603366683, 
+                    0.7314338057015867, 
+                    0.7314338057015867, 
+                    0.6218346113089647, 
+                    0.6218346113089647, 
+                    0.5255067311549723, 
+                    0.5255067311549723, 
+                    0.43527379916903347, 
+                    0.43527379916903347, 
+                    0.35006237647511723, 
+                    0.35006237647511723, 
+                    0.2700604147934095, 
+                    0.2700604147934095, 
+                    0.14165918933891197, 
+                    0.14165918933891197
+                ], 
+                0.5022323131561279
+            ]
+        ]
+    }, 
+    {
+        "block_size": 26, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8038049936294556, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9916046000490762, 
+                    0.9916046000490762, 
+                    0.9915734577516748, 
+                    0.9915734577516748, 
+                    0.9915126783578919, 
+                    0.9915126783578919, 
+                    0.8993922563980732, 
+                    0.8993922563980732, 
+                    0.7708461622918124, 
+                    0.7708461622918124, 
+                    0.661609495958448, 
+                    0.661609495958448, 
+                    0.5660155792015719, 
+                    0.5660155792015719, 
+                    0.4793801298823155, 
+                    0.4793801298823155, 
+                    0.3982897108526709, 
+                    0.3982897108526709, 
+                    0.32179180145745034, 
+                    0.32179180145745034, 
+                    0.25004612949114124, 
+                    0.25004612949114124, 
+                    0.13117182645509862, 
+                    0.13117182645509862
+                ], 
+                0.5012604594230652
+            ], 
+            [
+                0.821553111076355, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9911971422319342, 
+                    0.9911971422319342, 
+                    0.9911642874910787, 
+                    0.9911642874910787, 
+                    0.9911020662331371, 
+                    0.9911020662331371, 
+                    0.8987728119361408, 
+                    0.8987728119361408, 
+                    0.7704706612017348, 
+                    0.7704706612017348, 
+                    0.6614909437506241, 
+                    0.6614909437506241, 
+                    0.5662371868444247, 
+                    0.5662371868444247, 
+                    0.47985479533648284, 
+                    0.47985479533648284, 
+                    0.39889621545447873, 
+                    0.39889621545447873, 
+                    0.32238791441215375, 
+                    0.32238791441215375, 
+                    0.2504935858318544, 
+                    0.2504935858318544, 
+                    0.13158316976957807, 
+                    0.13158316976957807
+                ], 
+                0.5008164644241333
+            ], 
+            [
+                0.8396930694580078, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9909832318851359, 
+                    0.9909832318851359, 
+                    0.9909832318851359, 
+                    0.9909832318851359, 
+                    0.9909832318851359, 
+                    0.9909832318851359, 
+                    0.8984804449982144, 
+                    0.8984804449982144, 
+                    0.7704418012357811, 
+                    0.7704418012357811, 
+                    0.6617479259668968, 
+                    0.6617479259668968, 
+                    0.5668157353629557, 
+                    0.5668157353629557, 
+                    0.480628931179148, 
+                    0.480628931179148, 
+                    0.3997349513810436, 
+                    0.3997349513810436, 
+                    0.32314641386594384, 
+                    0.32314641386594384, 
+                    0.25103171702344057, 
+                    0.25103171702344057, 
+                    0.13212417887623648, 
+                    0.13212417887623648
+                ], 
+                0.5019247531890869
+            ], 
+            [
+                0.8582335710525513, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9905924569806619, 
+                    0.9905924569806619, 
+                    0.9905924569806619, 
+                    0.9905924569806619, 
+                    0.9905924569806619, 
+                    0.9905924569806619, 
+                    0.8979499211693998, 
+                    0.8979499211693998, 
+                    0.7701575111529224, 
+                    0.7701575111529224, 
+                    0.6617155475221649, 
+                    0.6617155475221649, 
+                    0.5670923309801889, 
+                    0.5670923309801889, 
+                    0.4811116527342478, 
+                    0.4811116527342478, 
+                    0.4003057560140959, 
+                    0.4003057560140959, 
+                    0.32368089079305795, 
+                    0.32368089079305795, 
+                    0.25141846569749854, 
+                    0.25141846569749854, 
+                    0.13248089769176202, 
+                    0.13248089769176202
+                ], 
+                0.5013747811317444
+            ], 
+            [
+                0.8771834373474121, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9902073965520901, 
+                    0.9902073965520901, 
+                    0.9902073965520901, 
+                    0.9902073965520901, 
+                    0.9902073965520901, 
+                    0.9902073965520901, 
+                    0.8974630692141979, 
+                    0.8974630692141979, 
+                    0.769915920600647, 
+                    0.769915920600647, 
+                    0.6617222829179404, 
+                    0.6617222829179404, 
+                    0.5673928880079756, 
+                    0.5673928880079756, 
+                    0.4815971120228407, 
+                    0.4815971120228407, 
+                    0.4008604957171166, 
+                    0.4008604957171166, 
+                    0.32418885016099047, 
+                    0.32418885016099047, 
+                    0.25177968400488016, 
+                    0.25177968400488016, 
+                    0.13281531432088764, 
+                    0.13281531432088764
+                ], 
+                0.5007583498954773
+            ], 
+            [
+                0.8965517282485962, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9891444678821536, 
+                    0.9891444678821536, 
+                    0.9882958790361953, 
+                    0.9882958790361953, 
+                    0.986893945410459, 
+                    0.986893945410459, 
+                    0.8989720126628423, 
+                    0.8989720126628423, 
+                    0.771589614694529, 
+                    0.771589614694529, 
+                    0.663627382482033, 
+                    0.663627382482033, 
+                    0.5693731052354316, 
+                    0.5693731052354316, 
+                    0.4834749391704025, 
+                    0.4834749391704025, 
+                    0.40251450186404175, 
+                    0.40251450186404175, 
+                    0.3255239599379209, 
+                    0.3255239599379209, 
+                    0.2527125383022603, 
+                    0.2527125383022603, 
+                    0.13368818901114332, 
+                    0.13368818901114332
+                ], 
+                0.5007762908935547
+            ], 
+            [
+                0.9163476824760437, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9887700806459904, 
+                    0.9887700806459904, 
+                    0.9879769437568175, 
+                    0.9879769437568175, 
+                    0.9867102517858987, 
+                    0.9867102517858987, 
+                    0.8989794186064927, 
+                    0.8989794186064927, 
+                    0.771813849696649, 
+                    0.771813849696649, 
+                    0.6640919521332944, 
+                    0.6640919521332944, 
+                    0.5700612571981666, 
+                    0.5700612571981666, 
+                    0.48424842567925197, 
+                    0.48424842567925197, 
+                    0.40326524386547186, 
+                    0.40326524386547186, 
+                    0.3261514985342412, 
+                    0.3261514985342412, 
+                    0.25312896812920693, 
+                    0.25312896812920693, 
+                    0.13413314935897197, 
+                    0.13413314935897197
+                ], 
+                0.5009154081344604
+            ], 
+            [
+                0.9365807175636292, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998901390023183, 
+                    0.9998901390023183, 
+                    0.982701668728944, 
+                    0.982701668728944, 
+                    0.976434892592798, 
+                    0.976434892592798, 
+                    0.8871527363853978, 
+                    0.8871527363853978, 
+                    0.7600960724230611, 
+                    0.7600960724230611, 
+                    0.6520079082051472, 
+                    0.6520079082051472, 
+                    0.5591232523369514, 
+                    0.5591232523369514, 
+                    0.47520782303793474, 
+                    0.47520782303793474, 
+                    0.3961025850762552, 
+                    0.3961025850762552, 
+                    0.3208517505674407, 
+                    0.3208517505674407, 
+                    0.2498775026008087, 
+                    0.2498775026008087, 
+                    0.12960864895534605, 
+                    0.12960864895534605
+                ], 
+                0.5005945563316345
+            ], 
+            [
+                0.9572604894638062, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9889103441523123, 
+                    0.9889103441523123, 
+                    0.9874365839687905, 
+                    0.9874365839687905, 
+                    0.9852390841640651, 
+                    0.9852390841640651, 
+                    0.8971833236374914, 
+                    0.8971833236374914, 
+                    0.7704153062428976, 
+                    0.7704153062428976, 
+                    0.6630506160133142, 
+                    0.6630506160133142, 
+                    0.5695695853449567, 
+                    0.5695695853449567, 
+                    0.4841710147414323, 
+                    0.4841710147414323, 
+                    0.40341387853754773, 
+                    0.40341387853754773, 
+                    0.3263638014722854, 
+                    0.3263638014722854, 
+                    0.2533015371109754, 
+                    0.2533015371109754, 
+                    0.13415284945198225, 
+                    0.13415284945198225
+                ], 
+                0.5007613897323608
+            ], 
+            [
+                0.9783968925476074, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9886153253497519, 
+                    0.9886153253497519, 
+                    0.9872311864849589, 
+                    0.9872311864849589, 
+                    0.9852397441446916, 
+                    0.9852397441446916, 
+                    0.8974475637582765, 
+                    0.8974475637582765, 
+                    0.7708725368207807, 
+                    0.7708725368207807, 
+                    0.6637282780105064, 
+                    0.6637282780105064, 
+                    0.5704078447850027, 
+                    0.5704078447850027, 
+                    0.48501937636471254, 
+                    0.48501937636471254, 
+                    0.40417990683714844, 
+                    0.40417990683714844, 
+                    0.32697260604829426, 
+                    0.32697260604829426, 
+                    0.25369039802367765, 
+                    0.25369039802367765, 
+                    0.13459124793696084, 
+                    0.13459124793696084
+                ], 
+                0.50147545337677
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9882565533028278, 
+                    0.9882565533028278, 
+                    0.9868210443623558, 
+                    0.9868210443623558, 
+                    0.9848302466593734, 
+                    0.9848302466593734, 
+                    0.8972625946383513, 
+                    0.8972625946383513, 
+                    0.7708700369245302, 
+                    0.7708700369245302, 
+                    0.663917791402164, 
+                    0.663917791402164, 
+                    0.5707856010088302, 
+                    0.5707856010088302, 
+                    0.4854687636836588, 
+                    0.4854687636836588, 
+                    0.40461512020056534, 
+                    0.40461512020056534, 
+                    0.3273274507030082, 
+                    0.3273274507030082, 
+                    0.253918604057281, 
+                    0.253918604057281, 
+                    0.13481882269278211, 
+                    0.13481882269278211
+                ], 
+                0.5007535815238953
+            ], 
+            [
+                1.0220800638198853, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9879704658124019, 
+                    0.9879704658124019, 
+                    0.986598154362581, 
+                    0.986598154362581, 
+                    0.9847654243665683, 
+                    0.9847654243665683, 
+                    0.8974754584023916, 
+                    0.8974754584023916, 
+                    0.7712476436811775, 
+                    0.7712476436811775, 
+                    0.6644835319542705, 
+                    0.6644835319542705, 
+                    0.5714824522330344, 
+                    0.5714824522330344, 
+                    0.48616310323461376, 
+                    0.48616310323461376, 
+                    0.4052306212227316, 
+                    0.4052306212227316, 
+                    0.32780809701272745, 
+                    0.32780809701272745, 
+                    0.25422106213875134, 
+                    0.25422106213875134, 
+                    0.13515895595222346, 
+                    0.13515895595222346
+                ], 
+                0.5010800361633301
+            ], 
+            [
+                1.0446476936340332, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9876625567877334, 
+                    0.9876625567877334, 
+                    0.9862953139693789, 
+                    0.9862953139693789, 
+                    0.9845395892473221, 
+                    0.9845395892473221, 
+                    0.897522556939535, 
+                    0.897522556939535, 
+                    0.7714475727343066, 
+                    0.7714475727343066, 
+                    0.6648529072790345, 
+                    0.6648529072790345, 
+                    0.5719866809457311, 
+                    0.5719866809457311, 
+                    0.4866849501951881, 
+                    0.4866849501951881, 
+                    0.4056992020330955, 
+                    0.4056992020330955, 
+                    0.32817410058879126, 
+                    0.32817410058879126, 
+                    0.2544506602583344, 
+                    0.2544506602583344, 
+                    0.13540428422702636, 
+                    0.13540428422702636
+                ], 
+                0.5008187294006348
+            ], 
+            [
+                1.0677136182785034, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9873695399614503, 
+                    0.9873695399614503, 
+                    0.9860115845855266, 
+                    0.9860115845855266, 
+                    0.9843363780739628, 
+                    0.9843363780739628, 
+                    0.8976063423324062, 
+                    0.8976063423324062, 
+                    0.7716703960996913, 
+                    0.7716703960996913, 
+                    0.6652349786112494, 
+                    0.6652349786112494, 
+                    0.572486926526967, 
+                    0.572486926526967, 
+                    0.48718952492903644, 
+                    0.48718952492903644, 
+                    0.40614411764036973, 
+                    0.40614411764036973, 
+                    0.32851698149668973, 
+                    0.32851698149668973, 
+                    0.25466311484550747, 
+                    0.25466311484550747, 
+                    0.135636020272236, 
+                    0.135636020272236
+                ], 
+                0.5005884766578674
+            ], 
+            [
+                1.0912888050079346, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9871375211648288, 
+                    0.9871375211648288, 
+                    0.9858674262399212, 
+                    0.9858674262399212, 
+                    0.9843642864325697, 
+                    0.9843642864325697, 
+                    0.8979397802953137, 
+                    0.8979397802953137, 
+                    0.7721204429207099, 
+                    0.7721204429207099, 
+                    0.6658313689766212, 
+                    0.6658313689766212, 
+                    0.5731564608138245, 
+                    0.5731564608138245, 
+                    0.4878156092763566, 
+                    0.4878156092763566, 
+                    0.40667360169578975, 
+                    0.40667360169578975, 
+                    0.3289169957277124, 
+                    0.3289169957277124, 
+                    0.25490891691490464, 
+                    0.25490891691490464, 
+                    0.13592366240317755, 
+                    0.13592366240317755
+                ], 
+                0.5010099411010742
+            ], 
+            [
+                1.115384578704834, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9869274754015924, 
+                    0.9869274754015924, 
+                    0.9857548987582981, 
+                    0.9857548987582981, 
+                    0.9844256606824026, 
+                    0.9844256606824026, 
+                    0.8983080284864783, 
+                    0.8983080284864783, 
+                    0.7725879445246985, 
+                    0.7725879445246985, 
+                    0.6664308162512514, 
+                    0.6664308162512514, 
+                    0.5738110545956066, 
+                    0.5738110545956066, 
+                    0.4884160954678898, 
+                    0.4884160954678898, 
+                    0.4071743308206703, 
+                    0.4071743308206703, 
+                    0.3292916736449833, 
+                    0.3292916736449833, 
+                    0.2551375813738874, 
+                    0.2551375813738874, 
+                    0.13619528445156726, 
+                    0.13619528445156726
+                ], 
+                0.501477837562561
+            ], 
+            [
+                1.1400123834609985, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.986651217120686, 
+                    0.986651217120686, 
+                    0.9854518987634593, 
+                    0.9854518987634593, 
+                    0.9841515412940554, 
+                    0.9841515412940554, 
+                    0.8983394213472753, 
+                    0.8983394213472753, 
+                    0.7727179445102975, 
+                    0.7727179445102975, 
+                    0.6666858004419381, 
+                    0.6666858004419381, 
+                    0.5741578340693821, 
+                    0.5741578340693821, 
+                    0.48876208347603783, 
+                    0.48876208347603783, 
+                    0.4074718905719231, 
+                    0.4074718905719231, 
+                    0.3295140439220302, 
+                    0.3295140439220302, 
+                    0.25527051486998803, 
+                    0.25527051486998803, 
+                    0.13633744364160577, 
+                    0.13633744364160577
+                ], 
+                0.5009102821350098
+            ], 
+            [
+                1.1651840209960938, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9864820566253456, 
+                    0.9864820566253456, 
+                    0.9853956233812543, 
+                    0.9853956233812543, 
+                    0.9842716071254707, 
+                    0.9842716071254707, 
+                    0.8987657714380273, 
+                    0.8987657714380273, 
+                    0.7732106971002367, 
+                    0.7732106971002367, 
+                    0.6672848536322099, 
+                    0.6672848536322099, 
+                    0.574782193511176, 
+                    0.574782193511176, 
+                    0.48931616544385337, 
+                    0.48931616544385337, 
+                    0.4079226006961773, 
+                    0.4079226006961773, 
+                    0.3298456140842564, 
+                    0.3298456140842564, 
+                    0.255470307380356, 
+                    0.255470307380356, 
+                    0.13658193124357054, 
+                    0.13658193124357054
+                ], 
+                0.5014699697494507
+            ], 
+            [
+                1.1909114122390747, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.986236720162247, 
+                    0.986236720162247, 
+                    0.9851306598235182, 
+                    0.9851306598235182, 
+                    0.9840403723231866, 
+                    0.9840403723231866, 
+                    0.8988466578907365, 
+                    0.8988466578907365, 
+                    0.773361170186728, 
+                    0.773361170186728, 
+                    0.6675409187040287, 
+                    0.6675409187040287, 
+                    0.5751062548818455, 
+                    0.5751062548818455, 
+                    0.4896258306615144, 
+                    0.4896258306615144, 
+                    0.4081804679997596, 
+                    0.4081804679997596, 
+                    0.3300333965635507, 
+                    0.3300333965635507, 
+                    0.2555794166748462, 
+                    0.2555794166748462, 
+                    0.13670338921298048, 
+                    0.13670338921298048
+                ], 
+                0.5009727478027344
+            ], 
+            [
+                1.2172068357467651, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.986004261338171, 
+                    0.986004261338171, 
+                    0.9848803598880603, 
+                    0.9848803598880603, 
+                    0.9838271911244182, 
+                    0.9838271911244182, 
+                    0.8989473947209748, 
+                    0.8989473947209748, 
+                    0.7735179683169494, 
+                    0.7735179683169494, 
+                    0.6677954346533079, 
+                    0.6677954346533079, 
+                    0.5754191895606621, 
+                    0.5754191895606621, 
+                    0.48991919134375495, 
+                    0.48991919134375495, 
+                    0.4084210804677613, 
+                    0.4084210804677613, 
+                    0.3302063192418924, 
+                    0.3302063192418924, 
+                    0.25567815767244545, 
+                    0.25567815767244545, 
+                    0.136816216656141, 
+                    0.136816216656141
+                ], 
+                0.5005030035972595
+            ], 
+            [
+                1.2440828084945679, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9858991138565919, 
+                    0.9858991138565919, 
+                    0.9849065963064306, 
+                    0.9849065963064306, 
+                    0.9840254083036206, 
+                    0.9840254083036206, 
+                    0.8994314927228461, 
+                    0.8994314927228461, 
+                    0.7740235942119214, 
+                    0.7740235942119214, 
+                    0.6683774027709307, 
+                    0.6683774027709307, 
+                    0.5759918635701842, 
+                    0.5759918635701842, 
+                    0.49040607960419696, 
+                    0.49040607960419696, 
+                    0.40880456694196354, 
+                    0.40880456694196354, 
+                    0.33048197001823343, 
+                    0.33048197001823343, 
+                    0.2558401265802352, 
+                    0.2558401265802352, 
+                    0.13702816397800957, 
+                    0.13702816397800957
+                ], 
+                0.5012210011482239
+            ]
+        ]
+    }, 
+    {
+        "block_size": 27, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8391990661621094, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9905369573642911, 
+                    0.9905369573642911, 
+                    0.9905007079641591, 
+                    0.9905007079641591, 
+                    0.9904467574183395, 
+                    0.9904467574183395, 
+                    0.8986310651839738, 
+                    0.8986310651839738, 
+                    0.7677700093217847, 
+                    0.7677700093217847, 
+                    0.661162494607086, 
+                    0.661162494607086, 
+                    0.5674693499033225, 
+                    0.5674693499033225, 
+                    0.4815867107241722, 
+                    0.4815867107241722, 
+                    0.4006882638301396, 
+                    0.4006882638301396, 
+                    0.32407859470773603, 
+                    0.32407859470773603, 
+                    0.25164054932928215, 
+                    0.25164054932928215, 
+                    0.13255070647315623, 
+                    0.13255070647315623
+                ], 
+                0.5011999607086182
+            ], 
+            [
+                0.8570703864097595, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9901846204596276, 
+                    0.9901846204596276, 
+                    0.9901470441495388, 
+                    0.9901470441495388, 
+                    0.9900929545240642, 
+                    0.9900929545240642, 
+                    0.8982187331315948, 
+                    0.8982187331315948, 
+                    0.7675851493930571, 
+                    0.7675851493930571, 
+                    0.6612288903388169, 
+                    0.6612288903388169, 
+                    0.5677636486763393, 
+                    0.5677636486763393, 
+                    0.48203866351109936, 
+                    0.48203866351109936, 
+                    0.40120853551674696, 
+                    0.40120853551674696, 
+                    0.3245457923887381, 
+                    0.3245457923887381, 
+                    0.25197600833531525, 
+                    0.25197600833531525, 
+                    0.1328742137647608, 
+                    0.1328742137647608
+                ], 
+                0.5006933808326721
+            ], 
+            [
+                0.8753222823143005, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9900746481811379, 
+                    0.9900746481811379, 
+                    0.9900746481811379, 
+                    0.9900746481811379, 
+                    0.9900746481811379, 
+                    0.9900746481811379, 
+                    0.898127610251097, 
+                    0.898127610251097, 
+                    0.7677688458504973, 
+                    0.7677688458504973, 
+                    0.6616517216502199, 
+                    0.6616517216502199, 
+                    0.5683706459529133, 
+                    0.5683706459529133, 
+                    0.48274276368367497, 
+                    0.48274276368367497, 
+                    0.40191945084243674, 
+                    0.40191945084243674, 
+                    0.3251443788563527, 
+                    0.3251443788563527, 
+                    0.2523860326534206, 
+                    0.2523860326534206, 
+                    0.1333083122018184, 
+                    0.1333083122018184
+                ], 
+                0.501980185508728
+            ], 
+            [
+                0.8939629197120667, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9897474112578755, 
+                    0.9897474112578755, 
+                    0.9897474112578755, 
+                    0.9897474112578755, 
+                    0.9897474112578755, 
+                    0.9897474112578755, 
+                    0.8977967418414537, 
+                    0.8977967418414537, 
+                    0.7676647838118531, 
+                    0.7676647838118531, 
+                    0.6617761056315778, 
+                    0.6617761056315778, 
+                    0.5686899300102413, 
+                    0.5686899300102413, 
+                    0.48318287612125393, 
+                    0.48318287612125393, 
+                    0.4023967535931903, 
+                    0.4023967535931903, 
+                    0.32555653211205454, 
+                    0.32555653211205454, 
+                    0.25267270125047103, 
+                    0.25267270125047103, 
+                    0.133584995217009, 
+                    0.133584995217009
+                ], 
+                0.5014654994010925
+            ], 
+            [
+                0.9130004644393921, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9894294831978022, 
+                    0.9894294831978022, 
+                    0.9894294831978022, 
+                    0.9894294831978022, 
+                    0.9894294831978022, 
+                    0.9894294831978022, 
+                    0.897505550985358, 
+                    0.897505550985358, 
+                    0.767598494804059, 
+                    0.767598494804059, 
+                    0.6619270604412365, 
+                    0.6619270604412365, 
+                    0.5690206804084061, 
+                    0.5690206804084061, 
+                    0.48361818197888046, 
+                    0.48361818197888046, 
+                    0.40285603344849946, 
+                    0.40285603344849946, 
+                    0.3259458757288914, 
+                    0.3259458757288914, 
+                    0.2529393925714379, 
+                    0.2529393925714379, 
+                    0.13384309983950451, 
+                    0.13384309983950451
+                ], 
+                0.5009695887565613
+            ], 
+            [
+                0.9324434399604797, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.989744336003677, 
+                    0.989744336003677, 
+                    0.9882523907600808, 
+                    0.9882523907600808, 
+                    0.9879925231436335, 
+                    0.9879925231436335, 
+                    0.8962186028799254, 
+                    0.8962186028799254, 
+                    0.7664305899971192, 
+                    0.7664305899971192, 
+                    0.6610142631297692, 
+                    0.6610142631297692, 
+                    0.56840189436577, 
+                    0.56840189436577, 
+                    0.4832540826475622, 
+                    0.4832540826475622, 
+                    0.4026671825925212, 
+                    0.4026671825925212, 
+                    0.3258532441990388, 
+                    0.3258532441990388, 
+                    0.2529078406821882, 
+                    0.2529078406821882, 
+                    0.13370208566611266, 
+                    0.13370208566611266
+                ], 
+                0.5010777115821838
+            ], 
+            [
+                0.9523004293441772, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9884403548956906, 
+                    0.9884403548956906, 
+                    0.9870052653200699, 
+                    0.9870052653200699, 
+                    0.9853062100170678, 
+                    0.9853062100170678, 
+                    0.8983895180899896, 
+                    0.8983895180899896, 
+                    0.7688895553508088, 
+                    0.7688895553508088, 
+                    0.6634535769914872, 
+                    0.6634535769914872, 
+                    0.5706870302131921, 
+                    0.5706870302131921, 
+                    0.48527138452357754, 
+                    0.48527138452357754, 
+                    0.4043509789015738, 
+                    0.4043509789015738, 
+                    0.3271444608861255, 
+                    0.3271444608861255, 
+                    0.25377264638616176, 
+                    0.25377264638616176, 
+                    0.1345893638483921, 
+                    0.1345893638483921
+                ], 
+                0.5005035400390625
+            ], 
+            [
+                0.9725803136825562, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9881742488837886, 
+                    0.9881742488837886, 
+                    0.9868023351007775, 
+                    0.9868023351007775, 
+                    0.9852429024915684, 
+                    0.9852429024915684, 
+                    0.8985846080071422, 
+                    0.8985846080071422, 
+                    0.7693167773739056, 
+                    0.7693167773739056, 
+                    0.6640385948898433, 
+                    0.6640385948898433, 
+                    0.5713596942825858, 
+                    0.5713596942825858, 
+                    0.48594661301677305, 
+                    0.48594661301677305, 
+                    0.40496278785395645, 
+                    0.40496278785395645, 
+                    0.32762203085535235, 
+                    0.32762203085535235, 
+                    0.25407846910405163, 
+                    0.25407846910405163, 
+                    0.13493698415860156, 
+                    0.13493698415860156
+                ], 
+                0.5009379982948303
+            ], 
+            [
+                0.9932920932769775, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9879279403795581, 
+                    0.9879279403795581, 
+                    0.9866278900956215, 
+                    0.9866278900956215, 
+                    0.9852114556189486, 
+                    0.9852114556189486, 
+                    0.8988212051708976, 
+                    0.8988212051708976, 
+                    0.7697741549394719, 
+                    0.7697741549394719, 
+                    0.6646362875529246, 
+                    0.6646362875529246, 
+                    0.5720266269068702, 
+                    0.5720266269068702, 
+                    0.4866010394240183, 
+                    0.4866010394240183, 
+                    0.40554511331271254, 
+                    0.40554511331271254, 
+                    0.3280712237131574, 
+                    0.3280712237131574, 
+                    0.25436355503438435, 
+                    0.25436355503438435, 
+                    0.13526415972679662, 
+                    0.13526415972679662
+                ], 
+                0.5014105439186096
+            ], 
+            [
+                1.0144449472427368, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9876076309605257, 
+                    0.9876076309605257, 
+                    0.9862767188573048, 
+                    0.9862767188573048, 
+                    0.9848892426390373, 
+                    0.9848892426390373, 
+                    0.8987526853675235, 
+                    0.8987526853675235, 
+                    0.7698809343985614, 
+                    0.7698809343985614, 
+                    0.6648887552097911, 
+                    0.6648887552097911, 
+                    0.5723815243568778, 
+                    0.5723815243568778, 
+                    0.48698849146905265, 
+                    0.48698849146905265, 
+                    0.4059069564613829, 
+                    0.4059069564613829, 
+                    0.3283530648402802, 
+                    0.3283530648402802, 
+                    0.25454223214386396, 
+                    0.25454223214386396, 
+                    0.13544875900413855, 
+                    0.13544875900413855
+                ], 
+                0.5007630586624146
+            ], 
+            [
+                1.0360482931137085, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9873383268629072, 
+                    0.9873383268629072, 
+                    0.9860273623303968, 
+                    0.9860273623303968, 
+                    0.9847226294227596, 
+                    0.9847226294227596, 
+                    0.8988615222656324, 
+                    0.8988615222656324, 
+                    0.7701679835202848, 
+                    0.7701679835202848, 
+                    0.6652977144008132, 
+                    0.6652977144008132, 
+                    0.5728587611145092, 
+                    0.5728587611145092, 
+                    0.4874635041321056, 
+                    0.4874635041321056, 
+                    0.4063281386469648, 
+                    0.4063281386469648, 
+                    0.3286739990688206, 
+                    0.3286739990688206, 
+                    0.25474348764555477, 
+                    0.25474348764555477, 
+                    0.13566986121910782, 
+                    0.13566986121910782
+                ], 
+                0.5006185173988342
+            ], 
+            [
+                1.058111548423767, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9870852422651434, 
+                    0.9870852422651434, 
+                    0.9857979514432941, 
+                    0.9857979514432941, 
+                    0.9845774329892751, 
+                    0.9845774329892751, 
+                    0.8990014539353776, 
+                    0.8990014539353776, 
+                    0.7704757308671395, 
+                    0.7704757308671395, 
+                    0.6657150566975985, 
+                    0.6657150566975985, 
+                    0.5733312150624745, 
+                    0.5733312150624745, 
+                    0.48792330467468614, 
+                    0.48792330467468614, 
+                    0.40672882282234, 
+                    0.40672882282234, 
+                    0.32897564775790733, 
+                    0.32897564775790733, 
+                    0.2549304374859062, 
+                    0.2549304374859062, 
+                    0.13587930776283877, 
+                    0.13587930776283877
+                ], 
+                0.5005161166191101
+            ], 
+            [
+                1.0806448459625244, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9869161217006676, 
+                    0.9869161217006676, 
+                    0.9857271019499972, 
+                    0.9857271019499972, 
+                    0.9846560909304712, 
+                    0.9846560909304712, 
+                    0.8993756918149131, 
+                    0.8993756918149131, 
+                    0.7710216639946511, 
+                    0.7710216639946511, 
+                    0.6663404597172587, 
+                    0.6663404597172587, 
+                    0.5739668210282981, 
+                    0.5739668210282981, 
+                    0.488501958914496, 
+                    0.488501958914496, 
+                    0.4072134019265914, 
+                    0.4072134019265914, 
+                    0.32933508719769283, 
+                    0.32933508719769283, 
+                    0.25515176677217954, 
+                    0.25515176677217954, 
+                    0.136145092905087, 
+                    0.136145092905087
+                ], 
+                0.5011708736419678
+            ], 
+            [
+                1.103657841682434, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9866499147490035, 
+                    0.9866499147490035, 
+                    0.9854445418892254, 
+                    0.9854445418892254, 
+                    0.984415876805348, 
+                    0.984415876805348, 
+                    0.8994294413072014, 
+                    0.8994294413072014, 
+                    0.7712075504718843, 
+                    0.7712075504718843, 
+                    0.6666219778478013, 
+                    0.6666219778478013, 
+                    0.574302376670042, 
+                    0.574302376670042, 
+                    0.48883270788219624, 
+                    0.48883270788219624, 
+                    0.4074995279729776, 
+                    0.4074995279729776, 
+                    0.3295464858688557, 
+                    0.3295464858688557, 
+                    0.25527972222538786, 
+                    0.25527972222538786, 
+                    0.1362825206911151, 
+                    0.1362825206911151
+                ], 
+                0.5006507039070129
+            ], 
+            [
+                1.1271610260009766, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.986525409541831, 
+                    0.986525409541831, 
+                    0.9854304289813235, 
+                    0.9854304289813235, 
+                    0.9845485352397965, 
+                    0.9845485352397965, 
+                    0.8998576597394948, 
+                    0.8998576597394948, 
+                    0.7717797354727028, 
+                    0.7717797354727028, 
+                    0.6672465120063696, 
+                    0.6672465120063696, 
+                    0.5749135326308841, 
+                    0.5749135326308841, 
+                    0.48937189324698877, 
+                    0.48937189324698877, 
+                    0.4079397668465281, 
+                    0.4079397668465281, 
+                    0.3298680181465385, 
+                    0.3298680181465385, 
+                    0.2554752749182299, 
+                    0.2554752749182299, 
+                    0.13652376627721186, 
+                    0.13652376627721186
+                ], 
+                0.5014278292655945
+            ], 
+            [
+                1.1511647701263428, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.986290240100198, 
+                    0.986290240100198, 
+                    0.9851859812148348, 
+                    0.9851859812148348, 
+                    0.9843496815298538, 
+                    0.9843496815298538, 
+                    0.899959339905886, 
+                    0.899959339905886, 
+                    0.7719891379698159, 
+                    0.7719891379698159, 
+                    0.6675295307035385, 
+                    0.6675295307035385, 
+                    0.5752313977476861, 
+                    0.5752313977476861, 
+                    0.48967228835690424, 
+                    0.48967228835690424, 
+                    0.4081911211105619, 
+                    0.4081911211105619, 
+                    0.33004935218448284, 
+                    0.33004935218448284, 
+                    0.2555824098842217, 
+                    0.2555824098842217, 
+                    0.13664221053647096, 
+                    0.13664221053647096
+                ], 
+                0.5009893774986267
+            ], 
+            [
+                1.1756795644760132, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9860671590961686, 
+                    0.9860671590961686, 
+                    0.984956132842005, 
+                    0.984956132842005, 
+                    0.9841686667019827, 
+                    0.9841686667019827, 
+                    0.9000813641424876, 
+                    0.9000813641424876, 
+                    0.7722072560030498, 
+                    0.7722072560030498, 
+                    0.6678120886023694, 
+                    0.6678120886023694, 
+                    0.5755409917598382, 
+                    0.5755409917598382, 
+                    0.48995939804945987, 
+                    0.48995939804945987, 
+                    0.4084276547873703, 
+                    0.4084276547873703, 
+                    0.3302179953743399, 
+                    0.3302179953743399, 
+                    0.2556806853045232, 
+                    0.2556806853045232, 
+                    0.13675288394836552, 
+                    0.13675288394836552
+                ], 
+                0.5005806684494019
+            ], 
+            [
+                1.200716495513916, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9860109344457285, 
+                    0.9860109344457285, 
+                    0.9850255872848694, 
+                    0.9850255872848694, 
+                    0.9843763325489185, 
+                    0.9843763325489185, 
+                    0.9005686006226646, 
+                    0.9005686006226646, 
+                    0.7727967121572817, 
+                    0.7727967121572817, 
+                    0.6684202130809072, 
+                    0.6684202130809072, 
+                    0.5761091192376747, 
+                    0.5761091192376747, 
+                    0.4904411744153515, 
+                    0.4904411744153515, 
+                    0.40880862118989786, 
+                    0.40880862118989786, 
+                    0.3304909202216984, 
+                    0.3304909202216984, 
+                    0.25584376603787923, 
+                    0.25584376603787923, 
+                    0.13696333772909072, 
+                    0.13696333772909072
+                ], 
+                0.5015539526939392
+            ], 
+            [
+                1.22628653049469, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9858211114980507, 
+                    0.9858211114980507, 
+                    0.984835350996108, 
+                    0.984835350996108, 
+                    0.984235144350967, 
+                    0.984235144350967, 
+                    0.9007218143278971, 
+                    0.9007218143278971, 
+                    0.7730214452502984, 
+                    0.7730214452502984, 
+                    0.6686923329935083, 
+                    0.6686923329935083, 
+                    0.576394574027128, 
+                    0.576394574027128, 
+                    0.49069677687530094, 
+                    0.49069677687530094, 
+                    0.40901298352067944, 
+                    0.40901298352067944, 
+                    0.33063311464558914, 
+                    0.33063311464558914, 
+                    0.25592386445026966, 
+                    0.25592386445026966, 
+                    0.1370581383167863, 
+                    0.1370581383167863
+                ], 
+                0.5012345910072327
+            ], 
+            [
+                1.2524011135101318, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.985643809240061, 
+                    0.985643809240061, 
+                    0.9846601156683328, 
+                    0.9846601156683328, 
+                    0.9841113392445622, 
+                    0.9841113392445622, 
+                    0.9008865233215214, 
+                    0.9008865233215214, 
+                    0.7732463537861712, 
+                    0.7732463537861712, 
+                    0.6689580915810048, 
+                    0.6689580915810048, 
+                    0.5766684363369223, 
+                    0.5766684363369223, 
+                    0.49093813208125886, 
+                    0.49093813208125886, 
+                    0.4092031669296546, 
+                    0.4092031669296546, 
+                    0.330763676863906, 
+                    0.330763676863906, 
+                    0.2559957589354812, 
+                    0.2559957589354812, 
+                    0.13714617627256095, 
+                    0.13714617627256095
+                ], 
+                0.5009438395500183
+            ], 
+            [
+                1.2790719270706177, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9854789839765008, 
+                    0.9854789839765008, 
+                    0.9844999150525908, 
+                    0.9844999150525908, 
+                    0.9840048024326375, 
+                    0.9840048024326375, 
+                    0.9010592597962165, 
+                    0.9010592597962165, 
+                    0.7734682887411102, 
+                    0.7734682887411102, 
+                    0.6692153701363233, 
+                    0.6692153701363233, 
+                    0.576929454009274, 
+                    0.576929454009274, 
+                    0.49116471631169306, 
+                    0.49116471631169306, 
+                    0.4093791102137525, 
+                    0.4093791102137525, 
+                    0.3308826585444426, 
+                    0.3308826585444426, 
+                    0.256059389410719, 
+                    0.256059389410719, 
+                    0.13722759200622348, 
+                    0.13722759200622348
+                ], 
+                0.5006796717643738
+            ]
+        ]
+    }, 
+    {
+        "block_size": 28, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8168423175811768, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9939862222356843, 
+                    0.9939862222356843, 
+                    0.9938346241424155, 
+                    0.9938346241424155, 
+                    0.9935560654316954, 
+                    0.9935560654316954, 
+                    0.9363022864563781, 
+                    0.9363022864563781, 
+                    0.808339770948747, 
+                    0.808339770948747, 
+                    0.6987781573815947, 
+                    0.6987781573815947, 
+                    0.6053912499653298, 
+                    0.6053912499653298, 
+                    0.5210431358289133, 
+                    0.5210431358289133, 
+                    0.4442425021574349, 
+                    0.4442425021574349, 
+                    0.37152029261064007, 
+                    0.37152029261064007, 
+                    0.30251917778852, 
+                    0.30251917778852, 
+                    0.23635488571975846, 
+                    0.23635488571975846, 
+                    0.12537688053094953, 
+                    0.12537688053094953
+                ], 
+                0.5006016492843628
+            ], 
+            [
+                0.8336407542228699, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9938648688624769, 
+                    0.9938648688624769, 
+                    0.9936191063953462, 
+                    0.9936191063953462, 
+                    0.9931667265418934, 
+                    0.9931667265418934, 
+                    0.9353721632772527, 
+                    0.9353721632772527, 
+                    0.807531017158708, 
+                    0.807531017158708, 
+                    0.6981177101751062, 
+                    0.6981177101751062, 
+                    0.6051068387823285, 
+                    0.6051068387823285, 
+                    0.5211374912525744, 
+                    0.5211374912525744, 
+                    0.44458546922276604, 
+                    0.44458546922276604, 
+                    0.3719811741132619, 
+                    0.3719811741132619, 
+                    0.30294206393840656, 
+                    0.30294206393840656, 
+                    0.23666293787904494, 
+                    0.23666293787904494, 
+                    0.1256250246307988, 
+                    0.1256250246307988
+                ], 
+                0.5006541609764099
+            ], 
+            [
+                0.8507847189903259, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9934870931108492, 
+                    0.9934870931108492, 
+                    0.9932208806906546, 
+                    0.9932208806906546, 
+                    0.9927493675713265, 
+                    0.9927493675713265, 
+                    0.9346015711049894, 
+                    0.9346015711049894, 
+                    0.8069263816150994, 
+                    0.8069263816150994, 
+                    0.6977304995160672, 
+                    0.6977304995160672, 
+                    0.6051140520046199, 
+                    0.6051140520046199, 
+                    0.5215112145225668, 
+                    0.5215112145225668, 
+                    0.44515805929805957, 
+                    0.44515805929805957, 
+                    0.3726164353227308, 
+                    0.3726164353227308, 
+                    0.30348126896571687, 
+                    0.30348126896571687, 
+                    0.2370341582738705, 
+                    0.2370341582738705, 
+                    0.1259695074056421, 
+                    0.1259695074056421
+                ], 
+                0.5005239844322205
+            ], 
+            [
+                0.8682812452316284, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9931267651330569, 
+                    0.9931267651330569, 
+                    0.9928918137749818, 
+                    0.9928918137749818, 
+                    0.9924902807133374, 
+                    0.9924902807133374, 
+                    0.9340984001233095, 
+                    0.9340984001233095, 
+                    0.8066448566407114, 
+                    0.8066448566407114, 
+                    0.6977571235542711, 
+                    0.6977571235542711, 
+                    0.6055463666830346, 
+                    0.6055463666830346, 
+                    0.5222803710213004, 
+                    0.5222803710213004, 
+                    0.44605153727142194, 
+                    0.44605153727142194, 
+                    0.3734951859694613, 
+                    0.3734951859694613, 
+                    0.30418653428465825, 
+                    0.30418653428465825, 
+                    0.23750019416247764, 
+                    0.23750019416247764, 
+                    0.12645175069169917, 
+                    0.12645175069169917
+                ], 
+                0.5013412237167358
+            ], 
+            [
+                0.8861375451087952, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9927374852547314, 
+                    0.9927374852547314, 
+                    0.99248361392566, 
+                    0.99248361392566, 
+                    0.992067032193258, 
+                    0.992067032193258, 
+                    0.9333741339460425, 
+                    0.9333741339460425, 
+                    0.8061145219783122, 
+                    0.8061145219783122, 
+                    0.6974690740440582, 
+                    0.6974690740440582, 
+                    0.6056400268818739, 
+                    0.6056400268818739, 
+                    0.5227016648255104, 
+                    0.5227016648255104, 
+                    0.4466243661232178, 
+                    0.4466243661232178, 
+                    0.3740935868995677, 
+                    0.3740935868995677, 
+                    0.3046759593578442, 
+                    0.3046759593578442, 
+                    0.2378272977526239, 
+                    0.2378272977526239, 
+                    0.12675729258013088, 
+                    0.12675729258013088
+                ], 
+                0.5010091662406921
+            ], 
+            [
+                0.9043611288070679, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9923385519847904, 
+                    0.9923385519847904, 
+                    0.9920679609752713, 
+                    0.9920679609752713, 
+                    0.9916383484155712, 
+                    0.9916383484155712, 
+                    0.932673274058765, 
+                    0.932673274058765, 
+                    0.8056201006959602, 
+                    0.8056201006959602, 
+                    0.6972274928425515, 
+                    0.6972274928425515, 
+                    0.6057729393630069, 
+                    0.6057729393630069, 
+                    0.5231437140758204, 
+                    0.5231437140758204, 
+                    0.4471967702032906, 
+                    0.4471967702032906, 
+                    0.374675706760701, 
+                    0.374675706760701, 
+                    0.3051440233152645, 
+                    0.3051440233152645, 
+                    0.23813577626212923, 
+                    0.23813577626212923, 
+                    0.1270469360983876, 
+                    0.1270469360983876
+                ], 
+                0.5005597472190857
+            ], 
+            [
+                0.9229594469070435, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9919797062975828, 
+                    0.9919797062975828, 
+                    0.9917830435313293, 
+                    0.9917830435313293, 
+                    0.9914801598899932, 
+                    0.9914801598899932, 
+                    0.9323872893444833, 
+                    0.9323872893444833, 
+                    0.8056011110446327, 
+                    0.8056011110446327, 
+                    0.697568966292364, 
+                    0.697568966292364, 
+                    0.606480263119341, 
+                    0.606480263119341, 
+                    0.5241028980937551, 
+                    0.5241028980937551, 
+                    0.4481825224466626, 
+                    0.4481825224466626, 
+                    0.3755714954373812, 
+                    0.3755714954373812, 
+                    0.3058300509036822, 
+                    0.3058300509036822, 
+                    0.23857285805897058, 
+                    0.23857285805897058, 
+                    0.12752286081859784, 
+                    0.12752286081859784
+                ], 
+                0.5014755129814148
+            ], 
+            [
+                0.9419402480125427, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9915749082805247, 
+                    0.9915749082805247, 
+                    0.991367523101611, 
+                    0.991367523101611, 
+                    0.9910578771462166, 
+                    0.9910578771462166, 
+                    0.93175223771812, 
+                    0.93175223771812, 
+                    0.805189802018975, 
+                    0.805189802018975, 
+                    0.6974226251832687, 
+                    0.6974226251832687, 
+                    0.6066821596583688, 
+                    0.6066821596583688, 
+                    0.5245692232304952, 
+                    0.5245692232304952, 
+                    0.44873689258593497, 
+                    0.44873689258593497, 
+                    0.37610788078878493, 
+                    0.37610788078878493, 
+                    0.3062480327328389, 
+                    0.3062480327328389, 
+                    0.23884146863481281, 
+                    0.23884146863481281, 
+                    0.12777761328306725, 
+                    0.12777761328306725
+                ], 
+                0.5008143782615662
+            ], 
+            [
+                0.9613113403320312, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9912072277195764, 
+                    0.9912072277195764, 
+                    0.9910601327826078, 
+                    0.9910601327826078, 
+                    0.9908473553477714, 
+                    0.9908473553477714, 
+                    0.9314378200071813, 
+                    0.9314378200071813, 
+                    0.8051375587316079, 
+                    0.8051375587316079, 
+                    0.6977051819606156, 
+                    0.6977051819606156, 
+                    0.6072919698762563, 
+                    0.6072919698762563, 
+                    0.5253888705359467, 
+                    0.5253888705359467, 
+                    0.4495643671886285, 
+                    0.4495643671886285, 
+                    0.37684568483435626, 
+                    0.37684568483435626, 
+                    0.3068040643987563, 
+                    0.3068040643987563, 
+                    0.2391909573438686, 
+                    0.2391909573438686, 
+                    0.12815420561969282, 
+                    0.12815420561969282
+                ], 
+                0.5011058449745178
+            ], 
+            [
+                0.9810808897018433, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9910524256775624, 
+                    0.9910524256775624, 
+                    0.9908083415643859, 
+                    0.9908083415643859, 
+                    0.9904563566851523, 
+                    0.9904563566851523, 
+                    0.9307099909933461, 
+                    0.9307099909933461, 
+                    0.8046281848951808, 
+                    0.8046281848951808, 
+                    0.6974311941490969, 
+                    0.6974311941490969, 
+                    0.6073430618159523, 
+                    0.6073430618159523, 
+                    0.5256823795990729, 
+                    0.5256823795990729, 
+                    0.44994474212551183, 
+                    0.44994474212551183, 
+                    0.3772198770086339, 
+                    0.3772198770086339, 
+                    0.30709230186764686, 
+                    0.30709230186764686, 
+                    0.23937342108370238, 
+                    0.23937342108370238, 
+                    0.12830599059453504, 
+                    0.12830599059453504
+                ], 
+                0.5009396076202393
+            ], 
+            [
+                1.0012569427490234, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9907041957787548, 
+                    0.9907041957787548, 
+                    0.9904677319961549, 
+                    0.9904677319961549, 
+                    0.9901422505131761, 
+                    0.9901422505131761, 
+                    0.9302964498968707, 
+                    0.9302964498968707, 
+                    0.8044643286431309, 
+                    0.8044643286431309, 
+                    0.6975636112807512, 
+                    0.6975636112807512, 
+                    0.6077744528859877, 
+                    0.6077744528859877, 
+                    0.5263009775184566, 
+                    0.5263009775184566, 
+                    0.45057476582845307, 
+                    0.45057476582845307, 
+                    0.37777810577718096, 
+                    0.37777810577718096, 
+                    0.30750739978740715, 
+                    0.30750739978740715, 
+                    0.23963080299468303, 
+                    0.23963080299468303, 
+                    0.12857160395771156, 
+                    0.12857160395771156
+                ], 
+                0.5006571412086487
+            ], 
+            [
+                1.0218479633331299, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9903653559868214, 
+                    0.9903653559868214, 
+                    0.9902002497168245, 
+                    0.9902002497168245, 
+                    0.989978696426821, 
+                    0.989978696426821, 
+                    0.9301064981999058, 
+                    0.9301064981999058, 
+                    0.8045385854015284, 
+                    0.8045385854015284, 
+                    0.6979651248532195, 
+                    0.6979651248532195, 
+                    0.6084433939249876, 
+                    0.6084433939249876, 
+                    0.5271088661161449, 
+                    0.5271088661161449, 
+                    0.4513406962040092, 
+                    0.4513406962040092, 
+                    0.37843033231037493, 
+                    0.37843033231037493, 
+                    0.3079850970016098, 
+                    0.3079850970016098, 
+                    0.23992434270511448, 
+                    0.23992434270511448, 
+                    0.128897912501981, 
+                    0.128897912501981
+                ], 
+                0.5008238554000854
+            ], 
+            [
+                1.0428624153137207, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9900526864169226, 
+                    0.9900526864169226, 
+                    0.9899577024847641, 
+                    0.9899577024847641, 
+                    0.9898375134254757, 
+                    0.9898375134254757, 
+                    0.9299646928796521, 
+                    0.9299646928796521, 
+                    0.8046563084900936, 
+                    0.8046563084900936, 
+                    0.6984022291835378, 
+                    0.6984022291835378, 
+                    0.6091237763313477, 
+                    0.6091237763313477, 
+                    0.5279038990904089, 
+                    0.5279038990904089, 
+                    0.452079847122747, 
+                    0.452079847122747, 
+                    0.37905089782375967, 
+                    0.37905089782375967, 
+                    0.3084359173875595, 
+                    0.3084359173875595, 
+                    0.24019967510575038, 
+                    0.24019967510575038, 
+                    0.12920755447173574, 
+                    0.12920755447173574
+                ], 
+                0.5010180473327637
+            ], 
+            [
+                1.064309000968933, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9898781584084609, 
+                    0.9898781584084609, 
+                    0.9897376299870877, 
+                    0.9897376299870877, 
+                    0.9896248408736116, 
+                    0.9896248408736116, 
+                    0.9296513584321247, 
+                    0.9296513584321247, 
+                    0.8045820586127752, 
+                    0.8045820586127752, 
+                    0.6986032992432926, 
+                    0.6986032992432926, 
+                    0.6095645696462693, 
+                    0.6095645696462693, 
+                    0.5284710207674588, 
+                    0.5284710207674588, 
+                    0.45262369379263734, 
+                    0.45262369379263734, 
+                    0.3795117285381663, 
+                    0.3795117285381663, 
+                    0.3087685726953461, 
+                    0.3087685726953461, 
+                    0.24040079277826595, 
+                    0.24040079277826595, 
+                    0.12941931487942146, 
+                    0.12941931487942146
+                ], 
+                0.5012999176979065
+            ], 
+            [
+                1.0861966609954834, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9896576821959971, 
+                    0.9896576821959971, 
+                    0.9896156041418691, 
+                    0.9896156041418691, 
+                    0.9895660733462237, 
+                    0.9895660733462237, 
+                    0.9295836602185056, 
+                    0.9295836602185056, 
+                    0.8047595396876274, 
+                    0.8047595396876274, 
+                    0.6990795748282481, 
+                    0.6990795748282481, 
+                    0.6102406049559078, 
+                    0.6102406049559078, 
+                    0.5292218109669724, 
+                    0.5292218109669724, 
+                    0.4532996065499041, 
+                    0.4532996065499041, 
+                    0.3800655776902521, 
+                    0.3800655776902521, 
+                    0.30916506951316663, 
+                    0.30916506951316663, 
+                    0.2406400468251976, 
+                    0.2406400468251976, 
+                    0.12969427622336327, 
+                    0.12969427622336327
+                ], 
+                0.5018121600151062
+            ], 
+            [
+                1.1085344552993774, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9893089830177126, 
+                    0.9893089830177126, 
+                    0.9892656344785671, 
+                    0.9892656344785671, 
+                    0.9892165022487702, 
+                    0.9892165022487702, 
+                    0.9292457607893917, 
+                    0.9292457607893917, 
+                    0.8046417408370029, 
+                    0.8046417408370029, 
+                    0.6992069706503776, 
+                    0.6992069706503776, 
+                    0.6105807395239046, 
+                    0.6105807395239046, 
+                    0.5296694677180196, 
+                    0.5296694677180196, 
+                    0.45372570126908474, 
+                    0.45372570126908474, 
+                    0.38042096012452326, 
+                    0.38042096012452326, 
+                    0.30941638791637716, 
+                    0.30941638791637716, 
+                    0.24078838033067163, 
+                    0.24078838033067163, 
+                    0.12984564187243697, 
+                    0.12984564187243697
+                ], 
+                0.5008848905563354
+            ], 
+            [
+                1.1313316822052002, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9892341067237631, 
+                    0.9892341067237631, 
+                    0.9892341067237631, 
+                    0.9892341067237631, 
+                    0.9892341067237631, 
+                    0.9892341067237631, 
+                    0.9292364856852686, 
+                    0.9292364856852686, 
+                    0.8048574055393757, 
+                    0.8048574055393757, 
+                    0.6996969633306046, 
+                    0.6996969633306046, 
+                    0.6112317199031159, 
+                    0.6112317199031159, 
+                    0.5303636277894294, 
+                    0.5303636277894294, 
+                    0.45433390316954037, 
+                    0.45433390316954037, 
+                    0.3809088437656391, 
+                    0.3809088437656391, 
+                    0.3097609649435981, 
+                    0.3097609649435981, 
+                    0.24099364195852588, 
+                    0.24099364195852588, 
+                    0.13008717738329542, 
+                    0.13008717738329542
+                ], 
+                0.5020023584365845
+            ], 
+            [
+                1.1545976400375366, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9889115908144401, 
+                    0.9889115908144401, 
+                    0.9889115908144401, 
+                    0.9889115908144401, 
+                    0.9889115908144401, 
+                    0.9889115908144401, 
+                    0.928971108442834, 
+                    0.928971108442834, 
+                    0.8047942267446331, 
+                    0.8047942267446331, 
+                    0.6998620606643542, 
+                    0.6998620606643542, 
+                    0.6115757102837684, 
+                    0.6115757102837684, 
+                    0.530785702764556, 
+                    0.530785702764556, 
+                    0.45472058867840687, 
+                    0.45472058867840687, 
+                    0.3812222104894597, 
+                    0.3812222104894597, 
+                    0.3099780410055835, 
+                    0.3099780410055835, 
+                    0.2411187687212205, 
+                    0.2411187687212205, 
+                    0.1302192578454101, 
+                    0.1302192578454101
+                ], 
+                0.5011463165283203
+            ], 
+            [
+                1.1783421039581299, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9881548429234007, 
+                    0.9881548429234007, 
+                    0.9867124447311548, 
+                    0.9867124447311548, 
+                    0.9852694334529057, 
+                    0.9852694334529057, 
+                    0.9304952810315157, 
+                    0.9304952810315157, 
+                    0.806401039079633, 
+                    0.806401039079633, 
+                    0.7016371765933732, 
+                    0.7016371765933732, 
+                    0.6132808718804882, 
+                    0.6132808718804882, 
+                    0.5323270718829181, 
+                    0.5323270718829181, 
+                    0.456003814242658, 
+                    0.456003814242658, 
+                    0.3822303610420798, 
+                    0.3822303610420798, 
+                    0.31071913381361593, 
+                    0.31071913381361593, 
+                    0.24161109220895816, 
+                    0.24161109220895816, 
+                    0.1307114657666394, 
+                    0.1307114657666394
+                ], 
+                0.5009462833404541
+            ], 
+            [
+                1.2025748491287231, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9878811139590844, 
+                    0.9878811139590844, 
+                    0.9865107996865687, 
+                    0.9865107996865687, 
+                    0.9851990084369379, 
+                    0.9851990084369379, 
+                    0.9306795940240026, 
+                    0.9306795940240026, 
+                    0.806753904604905, 
+                    0.806753904604905, 
+                    0.7022251340327398, 
+                    0.7022251340327398, 
+                    0.61396614678036, 
+                    0.61396614678036, 
+                    0.5330032027991934, 
+                    0.5330032027991934, 
+                    0.4565683438411895, 
+                    0.4565683438411895, 
+                    0.38266845586095055, 
+                    0.38266845586095055, 
+                    0.31102315242607276, 
+                    0.31102315242607276, 
+                    0.24178820787865532, 
+                    0.24178820787865532, 
+                    0.13094110614733978, 
+                    0.13094110614733978
+                ], 
+                0.5010009407997131
+            ], 
+            [
+                1.2273060083389282, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9876099233393274, 
+                    0.9876099233393274, 
+                    0.9863022637078247, 
+                    0.9863022637078247, 
+                    0.9851074393174327, 
+                    0.9851074393174327, 
+                    0.9308386096778724, 
+                    0.9308386096778724, 
+                    0.8070650685877081, 
+                    0.8070650685877081, 
+                    0.7027494096637811, 
+                    0.7027494096637811, 
+                    0.6145782582828992, 
+                    0.6145782582828992, 
+                    0.5336051112226176, 
+                    0.5336051112226176, 
+                    0.4570682532024861, 
+                    0.4570682532024861, 
+                    0.38305363401498116, 
+                    0.38305363401498116, 
+                    0.31128842109994537, 
+                    0.31128842109994537, 
+                    0.24194101782854316, 
+                    0.24194101782854316, 
+                    0.13114032676511994, 
+                    0.13114032676511994
+                ], 
+                0.5008874535560608
+            ]
+        ]
+    }, 
+    {
+        "block_size": 29, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8212890625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9930106685791762, 
+                    0.9930106685791762, 
+                    0.9928304799452102, 
+                    0.9928304799452102, 
+                    0.9925417961278737, 
+                    0.9925417961278737, 
+                    0.9321471667431029, 
+                    0.9321471667431029, 
+                    0.8057400535779506, 
+                    0.8057400535779506, 
+                    0.699540679312723, 
+                    0.699540679312723, 
+                    0.6057374010955617, 
+                    0.6057374010955617, 
+                    0.5225110610891085, 
+                    0.5225110610891085, 
+                    0.44516179234844694, 
+                    0.44516179234844694, 
+                    0.3735035347720916, 
+                    0.3735035347720916, 
+                    0.30406736452402694, 
+                    0.30406736452402694, 
+                    0.23750560763803524, 
+                    0.23750560763803524, 
+                    0.12644463132883446, 
+                    0.12644463132883446
+                ], 
+                0.5010069608688354
+            ], 
+            [
+                0.8376188278198242, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9926273506256642, 
+                    0.9926273506256642, 
+                    0.9924367408757186, 
+                    0.9924367408757186, 
+                    0.9921402773389291, 
+                    0.9921402773389291, 
+                    0.9313999903231002, 
+                    0.9313999903231002, 
+                    0.8052365649776495, 
+                    0.8052365649776495, 
+                    0.6992545095071516, 
+                    0.6992545095071516, 
+                    0.6058154862444249, 
+                    0.6058154862444249, 
+                    0.5229256911952871, 
+                    0.5229256911952871, 
+                    0.4457943066354973, 
+                    0.4457943066354973, 
+                    0.3740966384149486, 
+                    0.3740966384149486, 
+                    0.30455503816340224, 
+                    0.30455503816340224, 
+                    0.2378227103545311, 
+                    0.2378227103545311, 
+                    0.12674187528827022, 
+                    0.12674187528827022
+                ], 
+                0.5006824135780334
+            ], 
+            [
+                0.8542733192443848, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9925786643347801, 
+                    0.9925786643347801, 
+                    0.992258006845749, 
+                    0.992258006845749, 
+                    0.9917740273460269, 
+                    0.9917740273460269, 
+                    0.930474187773318, 
+                    0.930474187773318, 
+                    0.8045490202085923, 
+                    0.8045490202085923, 
+                    0.6987603442237899, 
+                    0.6987603442237899, 
+                    0.6056608241959884, 
+                    0.6056608241959884, 
+                    0.5231051314656807, 
+                    0.5231051314656807, 
+                    0.44619647836685183, 
+                    0.44619647836685183, 
+                    0.3745005361235404, 
+                    0.3745005361235404, 
+                    0.3048957995957801, 
+                    0.3048957995957801, 
+                    0.2380470377986659, 
+                    0.2380470377986659, 
+                    0.12691759686823748, 
+                    0.12691759686823748
+                ], 
+                0.5009133219718933
+            ], 
+            [
+                0.8712589144706726, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9922023075363661, 
+                    0.9922023075363661, 
+                    0.991863802004414, 
+                    0.991863802004414, 
+                    0.9913682882742806, 
+                    0.9913682882742806, 
+                    0.9297721852138808, 
+                    0.9297721852138808, 
+                    0.80411274273465, 
+                    0.80411274273465, 
+                    0.6985488178633069, 
+                    0.6985488178633069, 
+                    0.6058077453686481, 
+                    0.6058077453686481, 
+                    0.5235544900015029, 
+                    0.5235544900015029, 
+                    0.4468216940336632, 
+                    0.4468216940336632, 
+                    0.3750630005681268, 
+                    0.3750630005681268, 
+                    0.30534504061693163, 
+                    0.30534504061693163, 
+                    0.23833213658346789, 
+                    0.23833213658346789, 
+                    0.12718766734675285, 
+                    0.12718766734675285
+                ], 
+                0.5005224347114563
+            ], 
+            [
+                0.8885822296142578, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.991861919083604, 
+                    0.991861919083604, 
+                    0.9915701670442415, 
+                    0.9915701670442415, 
+                    0.9911562075870242, 
+                    0.9911562075870242, 
+                    0.929405860589802, 
+                    0.929405860589802, 
+                    0.8040397803722192, 
+                    0.8040397803722192, 
+                    0.6987356431911275, 
+                    0.6987356431911275, 
+                    0.6063651964184624, 
+                    0.6063651964184624, 
+                    0.5243618933057538, 
+                    0.5243618933057538, 
+                    0.4477375660970621, 
+                    0.4477375660970621, 
+                    0.37583398327377016, 
+                    0.37583398327377016, 
+                    0.3059391291024045, 
+                    0.3059391291024045, 
+                    0.23870148072991754, 
+                    0.23870148072991754, 
+                    0.12758363757753657, 
+                    0.12758363757753657
+                ], 
+                0.5010964870452881
+            ], 
+            [
+                0.90625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9914842459011372, 
+                    0.9914842459011372, 
+                    0.9911778685219736, 
+                    0.9911778685219736, 
+                    0.990756824993075, 
+                    0.990756824993075, 
+                    0.9287758026006737, 
+                    0.9287758026006737, 
+                    0.8036868576093081, 
+                    0.8036868576093081, 
+                    0.6986061281145537, 
+                    0.6986061281145537, 
+                    0.6065751688128942, 
+                    0.6065751688128942, 
+                    0.5248304135919684, 
+                    0.5248304135919684, 
+                    0.4483372029363778, 
+                    0.4483372029363778, 
+                    0.3763532963897216, 
+                    0.3763532963897216, 
+                    0.30634296951911305, 
+                    0.30634296951911305, 
+                    0.2389524637823846, 
+                    0.2389524637823846, 
+                    0.12782408405373094, 
+                    0.12782408405373094
+                ], 
+                0.5005315542221069
+            ], 
+            [
+                0.9242690801620483, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9911706658268188, 
+                    0.9911706658268188, 
+                    0.9909511408804599, 
+                    0.9909511408804599, 
+                    0.9906592322409897, 
+                    0.9906592322409897, 
+                    0.9286328148374988, 
+                    0.9286328148374988, 
+                    0.8038461973028619, 
+                    0.8038461973028619, 
+                    0.6990285015081937, 
+                    0.6990285015081937, 
+                    0.6073415487493669, 
+                    0.6073415487493669, 
+                    0.5257779114086093, 
+                    0.5257779114086093, 
+                    0.44932502719035283, 
+                    0.44932502719035283, 
+                    0.3771548296518127, 
+                    0.3771548296518127, 
+                    0.3069461791657919, 
+                    0.3069461791657919, 
+                    0.23932213812334308, 
+                    0.23932213812334308, 
+                    0.12823950297321585, 
+                    0.12823950297321585
+                ], 
+                0.5013922452926636
+            ], 
+            [
+                0.9426463842391968, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9907982278331993, 
+                    0.9907982278331993, 
+                    0.9905691392553067, 
+                    0.9905691392553067, 
+                    0.9902745712054893, 
+                    0.9902745712054893, 
+                    0.9280838088233809, 
+                    0.9280838088233809, 
+                    0.8035768427867971, 
+                    0.8035768427867971, 
+                    0.6989747376273702, 
+                    0.6989747376273702, 
+                    0.6076012005111219, 
+                    0.6076012005111219, 
+                    0.5262511997072702, 
+                    0.5262511997072702, 
+                    0.44988899524423626, 
+                    0.44988899524423626, 
+                    0.377627144513259, 
+                    0.377627144513259, 
+                    0.3073047599316047, 
+                    0.3073047599316047, 
+                    0.2395408994573431, 
+                    0.2395408994573431, 
+                    0.12845183281297481, 
+                    0.12845183281297481
+                ], 
+                0.5006742477416992
+            ], 
+            [
+                0.9613891243934631, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9904812238052858, 
+                    0.9904812238052858, 
+                    0.9903214706473665, 
+                    0.9903214706473665, 
+                    0.9901231236737768, 
+                    0.9901231236737768, 
+                    0.9279052697685718, 
+                    0.9279052697685718, 
+                    0.8036880178284828, 
+                    0.8036880178284828, 
+                    0.6993219735265355, 
+                    0.6993219735265355, 
+                    0.6082517872226443, 
+                    0.6082517872226443, 
+                    0.5270486931186343, 
+                    0.5270486931186343, 
+                    0.4507064528882566, 
+                    0.4507064528882566, 
+                    0.37828095756621055, 
+                    0.37828095756621055, 
+                    0.30779052277736385, 
+                    0.30779052277736385, 
+                    0.23983543582234354, 
+                    0.23983543582234354, 
+                    0.12877972683065533, 
+                    0.12877972683065533
+                ], 
+                0.5009726285934448
+            ], 
+            [
+                0.9805045127868652, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9903862276407946, 
+                    0.9903862276407946, 
+                    0.9900934627434649, 
+                    0.9900934627434649, 
+                    0.9897778537341652, 
+                    0.9897778537341652, 
+                    0.9272405984989031, 
+                    0.9272405984989031, 
+                    0.8032945494999221, 
+                    0.8032945494999221, 
+                    0.6991193084075557, 
+                    0.6991193084075557, 
+                    0.6083354062933877, 
+                    0.6083354062933877, 
+                    0.5273339529294242, 
+                    0.5273339529294242, 
+                    0.45108055462930596, 
+                    0.45108055462930596, 
+                    0.37859529274034437, 
+                    0.37859529274034437, 
+                    0.3080261207565536, 
+                    0.3080261207565536, 
+                    0.23997585460349832, 
+                    0.23997585460349832, 
+                    0.1288952961736444, 
+                    0.1288952961736444
+                ], 
+                0.5009901523590088
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9900858049920935, 
+                    0.9900858049920935, 
+                    0.9898178164453192, 
+                    0.9898178164453192, 
+                    0.9895243375945318, 
+                    0.9895243375945318, 
+                    0.9269429736162865, 
+                    0.9269429736162865, 
+                    0.8032721194371808, 
+                    0.8032721194371808, 
+                    0.6993038716036897, 
+                    0.6993038716036897, 
+                    0.6087918012394579, 
+                    0.6087918012394579, 
+                    0.5279254660645389, 
+                    0.5279254660645389, 
+                    0.45169326477084265, 
+                    0.45169326477084265, 
+                    0.3790811648418238, 
+                    0.3790811648418238, 
+                    0.30838263537595034, 
+                    0.30838263537595034, 
+                    0.24018880086700478, 
+                    0.24018880086700478, 
+                    0.12912203295125527, 
+                    0.12912203295125527
+                ], 
+                0.5007488131523132
+            ], 
+            [
+                1.019883155822754, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9898091852748302, 
+                    0.9898091852748302, 
+                    0.9896188420279023, 
+                    0.9896188420279023, 
+                    0.9894254334196264, 
+                    0.9894254334196264, 
+                    0.9268971611793495, 
+                    0.9268971611793495, 
+                    0.8034955474089208, 
+                    0.8034955474089208, 
+                    0.6997362758396617, 
+                    0.6997362758396617, 
+                    0.6094733973075706, 
+                    0.6094733973075706, 
+                    0.5286894658011755, 
+                    0.5286894658011755, 
+                    0.45243061637015036, 
+                    0.45243061637015036, 
+                    0.3796535085210069, 
+                    0.3796535085210069, 
+                    0.30879883093363486, 
+                    0.30879883093363486, 
+                    0.2404374454275842, 
+                    0.2404374454275842, 
+                    0.12940834152119066, 
+                    0.12940834152119066
+                ], 
+                0.5010368824005127
+            ], 
+            [
+                1.0401614904403687, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9895622090136154, 
+                    0.9895622090136154, 
+                    0.9894631744577007, 
+                    0.9894631744577007, 
+                    0.9893572925799103, 
+                    0.9893572925799103, 
+                    0.9268969567171267, 
+                    0.9268969567171267, 
+                    0.8037524547215932, 
+                    0.8037524547215932, 
+                    0.7001900459580876, 
+                    0.7001900459580876, 
+                    0.6101550968634312, 
+                    0.6101550968634312, 
+                    0.5294329161478405, 
+                    0.5294329161478405, 
+                    0.45313475539141795, 
+                    0.45313475539141795, 
+                    0.380195375899577, 
+                    0.380195375899577, 
+                    0.30919044023665093, 
+                    0.30919044023665093, 
+                    0.24067047816709708, 
+                    0.24067047816709708, 
+                    0.1296799335955625, 
+                    0.1296799335955625
+                ], 
+                0.5014198422431946
+            ], 
+            [
+                1.0608432292938232, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.989239535248621, 
+                    0.989239535248621, 
+                    0.989137978639072, 
+                    0.989137978639072, 
+                    0.9890337457754954, 
+                    0.9890337457754954, 
+                    0.9265868100954949, 
+                    0.9265868100954949, 
+                    0.8036887189496215, 
+                    0.8036887189496215, 
+                    0.7002982511112203, 
+                    0.7002982511112203, 
+                    0.6104881999162511, 
+                    0.6104881999162511, 
+                    0.5298674998850736, 
+                    0.5298674998850736, 
+                    0.4535760312815303, 
+                    0.4535760312815303, 
+                    0.3805366349473783, 
+                    0.3805366349473783, 
+                    0.30943430198625016, 
+                    0.30943430198625016, 
+                    0.2408117737852877, 
+                    0.2408117737852877, 
+                    0.12982537162828003, 
+                    0.12982537162828003
+                ], 
+                0.5006130337715149
+            ], 
+            [
+                1.081936001777649, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9891389526217572, 
+                    0.9891389526217572, 
+                    0.988986552778344, 
+                    0.988986552778344, 
+                    0.9888962703110132, 
+                    0.9888962703110132, 
+                    0.9264198329316906, 
+                    0.9264198329316906, 
+                    0.8037566311711908, 
+                    0.8037566311711908, 
+                    0.7005328744698803, 
+                    0.7005328744698803, 
+                    0.6109275661073826, 
+                    0.6109275661073826, 
+                    0.5303760068851029, 
+                    0.5303760068851029, 
+                    0.4540650222170941, 
+                    0.4540650222170941, 
+                    0.38090922617865314, 
+                    0.38090922617865314, 
+                    0.3096990514692846, 
+                    0.3096990514692846, 
+                    0.2409654054360651, 
+                    0.2409654054360651, 
+                    0.12999523060567292, 
+                    0.12999523060567292
+                ], 
+                0.5011408925056458
+            ], 
+            [
+                1.1034482717514038, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.989016246690049, 
+                    0.989016246690049, 
+                    0.9889723298400316, 
+                    0.9889723298400316, 
+                    0.9889310124186715, 
+                    0.9889310124186715, 
+                    0.9265216808954939, 
+                    0.9265216808954939, 
+                    0.8040756745297548, 
+                    0.8040756745297548, 
+                    0.7010145646785083, 
+                    0.7010145646785083, 
+                    0.6115829658420615, 
+                    0.6115829658420615, 
+                    0.5310465932688783, 
+                    0.5310465932688783, 
+                    0.454671278549773, 
+                    0.454671278549773, 
+                    0.38136532675607254, 
+                    0.38136532675607254, 
+                    0.3100230024060074, 
+                    0.3100230024060074, 
+                    0.2411553674118467, 
+                    0.2411553674118467, 
+                    0.13022559767506942, 
+                    0.13022559767506942
+                ], 
+                0.5019837617874146
+            ], 
+            [
+                1.125388264656067, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9887320821711939, 
+                    0.9887320821711939, 
+                    0.988687370046253, 
+                    0.988687370046253, 
+                    0.9886472210416816, 
+                    0.9886472210416816, 
+                    0.9263188238474742, 
+                    0.9263188238474742, 
+                    0.8040825939486883, 
+                    0.8040825939486883, 
+                    0.7011661318204829, 
+                    0.7011661318204829, 
+                    0.6119153780855336, 
+                    0.6119153780855336, 
+                    0.5314391766041344, 
+                    0.5314391766041344, 
+                    0.4550466042130405, 
+                    0.4550466042130405, 
+                    0.38164630510405767, 
+                    0.38164630510405767, 
+                    0.31021816645839295, 
+                    0.31021816645839295, 
+                    0.24126474857307637, 
+                    0.24126474857307637, 
+                    0.1303441501947389, 
+                    0.1303441501947389
+                ], 
+                0.5012747049331665
+            ], 
+            [
+                1.1477644443511963, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9884578779681104, 
+                    0.9884578779681104, 
+                    0.9884124638321408, 
+                    0.9884124638321408, 
+                    0.9883736377480599, 
+                    0.9883736377480599, 
+                    0.926148530415782, 
+                    0.926148530415782, 
+                    0.804108525792389, 
+                    0.804108525792389, 
+                    0.7013285780671784, 
+                    0.7013285780671784, 
+                    0.6122459466629476, 
+                    0.6122459466629476, 
+                    0.5318187122478332, 
+                    0.5318187122478332, 
+                    0.4554028654485636, 
+                    0.4554028654485636, 
+                    0.38191021053404695, 
+                    0.38191021053404695, 
+                    0.3103996211897525, 
+                    0.3103996211897525, 
+                    0.24136494309460305, 
+                    0.24136494309460305, 
+                    0.13045560156436514, 
+                    0.13045560156436514
+                ], 
+                0.5005889534950256
+            ], 
+            [
+                1.1705856323242188, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9885028179764662, 
+                    0.9885028179764662, 
+                    0.9885028179764662, 
+                    0.9885028179764662, 
+                    0.9885028179764662, 
+                    0.9885028179764662, 
+                    0.9263184365080488, 
+                    0.9263184365080488, 
+                    0.8044480003207234, 
+                    0.8044480003207234, 
+                    0.7017988106272106, 
+                    0.7017988106272106, 
+                    0.6128440576146096, 
+                    0.6128440576146096, 
+                    0.532401187542254, 
+                    0.532401187542254, 
+                    0.45590961139751157, 
+                    0.45590961139751157, 
+                    0.3822838496414811, 
+                    0.3822838496414811, 
+                    0.31066023034408125, 
+                    0.31066023034408125, 
+                    0.24151422374242715, 
+                    0.24151422374242715, 
+                    0.13064695932347611, 
+                    0.13064695932347611
+                ], 
+                0.5020924806594849
+            ], 
+            [
+                1.193860411643982, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9882593790404394, 
+                    0.9882593790404394, 
+                    0.9882593790404394, 
+                    0.9882593790404394, 
+                    0.9882593790404394, 
+                    0.9882593790404394, 
+                    0.9262036962537304, 
+                    0.9262036962537304, 
+                    0.8044980687117956, 
+                    0.8044980687117956, 
+                    0.7019686586937085, 
+                    0.7019686586937085, 
+                    0.6131563839021128, 
+                    0.6131563839021128, 
+                    0.532743517401864, 
+                    0.532743517401864, 
+                    0.45622051613500125, 
+                    0.45622051613500125, 
+                    0.38250929489296426, 
+                    0.38250929489296426, 
+                    0.3108115829546305, 
+                    0.3108115829546305, 
+                    0.2415942591634824, 
+                    0.2415942591634824, 
+                    0.13074239539843344, 
+                    0.13074239539843344
+                ], 
+                0.5014839172363281
+            ], 
+            [
+                1.2175980806350708, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9880278194125682, 
+                    0.9880278194125682, 
+                    0.9880278194125682, 
+                    0.9880278194125682, 
+                    0.9880278194125682, 
+                    0.9880278194125682, 
+                    0.9261127216233267, 
+                    0.9261127216233267, 
+                    0.8045560468266489, 
+                    0.8045560468266489, 
+                    0.702139709600279, 
+                    0.702139709600279, 
+                    0.6134592176320239, 
+                    0.6134592176320239, 
+                    0.5330687287056055, 
+                    0.5330687287056055, 
+                    0.45651127588766854, 
+                    0.45651127588766854, 
+                    0.38271771757850176, 
+                    0.38271771757850176, 
+                    0.31094948898481095, 
+                    0.31094948898481095, 
+                    0.24166490538284327, 
+                    0.24166490538284327, 
+                    0.13083114131689585, 
+                    0.13083114131689585
+                ], 
+                0.5009005069732666
+            ]
+        ]
+    }, 
+    {
+        "block_size": 30, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8264462947845459, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999390793450619, 
+                    0.9999390793450619, 
+                    0.9999390793450619, 
+                    0.9999390793450619, 
+                    0.9999390793450619, 
+                    0.9999390793450619, 
+                    0.920294236772154, 
+                    0.920294236772154, 
+                    0.814932783873116, 
+                    0.814932783873116, 
+                    0.7249257020846136, 
+                    0.7249257020846136, 
+                    0.643076991954958, 
+                    0.643076991954958, 
+                    0.566094686950088, 
+                    0.566094686950088, 
+                    0.49228640438746907, 
+                    0.49228640438746907, 
+                    0.42069741956189616, 
+                    0.42069741956189616, 
+                    0.35078088383357914, 
+                    0.35078088383357914, 
+                    0.28227587453339564, 
+                    0.28227587453339564, 
+                    0.21490864831668505, 
+                    0.21490864831668505, 
+                    0.12339541658662766, 
+                    0.12339541658662766
+                ], 
+                0.5012320876121521
+            ], 
+            [
+                0.8423511385917664, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999347989328585, 
+                    0.9999347989328585, 
+                    0.9999347989328585, 
+                    0.9999347989328585, 
+                    0.9999347989328585, 
+                    0.9999347989328585, 
+                    0.9202847199363415, 
+                    0.9202847199363415, 
+                    0.8149216614000229, 
+                    0.8149216614000229, 
+                    0.7249158010703057, 
+                    0.7249158010703057, 
+                    0.6430710650721156, 
+                    0.6430710650721156, 
+                    0.5660939123480593, 
+                    0.5660939123480593, 
+                    0.49228949766596924, 
+                    0.49228949766596924, 
+                    0.4207022396448908, 
+                    0.4207022396448908, 
+                    0.35078662296166013, 
+                    0.35078662296166013, 
+                    0.28228069041121634, 
+                    0.28228069041121634, 
+                    0.21491203460665576, 
+                    0.21491203460665576, 
+                    0.12339880662923093, 
+                    0.12339880662923093
+                ], 
+                0.5012354254722595
+            ], 
+            [
+                0.8585620522499084, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999303822786203, 
+                    0.9999303822786203, 
+                    0.9999303822786203, 
+                    0.9999303822786203, 
+                    0.9999303822786203, 
+                    0.9999303822786203, 
+                    0.9202749571316632, 
+                    0.9202749571316632, 
+                    0.8149103748672751, 
+                    0.8149103748672751, 
+                    0.7249059244720667, 
+                    0.7249059244720667, 
+                    0.6430652905814315, 
+                    0.6430652905814315, 
+                    0.5660932460374953, 
+                    0.5660932460374953, 
+                    0.4922925289875135, 
+                    0.4922925289875135, 
+                    0.42070683615496385, 
+                    0.42070683615496385, 
+                    0.35079199356685187, 
+                    0.35079199356685187, 
+                    0.28228510506750704, 
+                    0.28228510506750704, 
+                    0.2149150449205889, 
+                    0.2149150449205889, 
+                    0.12340194960223301, 
+                    0.12340194960223301
+                ], 
+                0.5012380480766296
+            ], 
+            [
+                0.8750849962234497, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999258411854005, 
+                    0.9999258411854005, 
+                    0.9999258411854005, 
+                    0.9999258411854005, 
+                    0.9999258411854005, 
+                    0.9999258411854005, 
+                    0.9202649341326832, 
+                    0.9202649341326832, 
+                    0.8148988924760202, 
+                    0.8148988924760202, 
+                    0.7248960185432719, 
+                    0.7248960185432719, 
+                    0.6430595868197789, 
+                    0.6430595868197789, 
+                    0.5660925902092773, 
+                    0.5660925902092773, 
+                    0.4922954079294978, 
+                    0.4922954079294978, 
+                    0.4207111393624911, 
+                    0.4207111393624911, 
+                    0.35079694748167883, 
+                    0.35079694748167883, 
+                    0.28228909021656107, 
+                    0.28228909021656107, 
+                    0.21491766333466175, 
+                    0.21491766333466175, 
+                    0.12340484346534784, 
+                    0.12340484346534784
+                ], 
+                0.5012396574020386
+            ], 
+            [
+                0.8919259309768677, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999211889169336, 
+                    0.9999211889169336, 
+                    0.9999211889169336, 
+                    0.9999211889169336, 
+                    0.9999211889169336, 
+                    0.9999211889169336, 
+                    0.9202546259261734, 
+                    0.9202546259261734, 
+                    0.8148871661635632, 
+                    0.8148871661635632, 
+                    0.7248860104070414, 
+                    0.7248860104070414, 
+                    0.6430538536027831, 
+                    0.6430538536027831, 
+                    0.5660918329539871, 
+                    0.5660918329539871, 
+                    0.4922980351746237, 
+                    0.4922980351746237, 
+                    0.4207150739908365, 
+                    0.4207150739908365, 
+                    0.35080143276892684, 
+                    0.35080143276892684, 
+                    0.282292614000276, 
+                    0.282292614000276, 
+                    0.21491987003595547, 
+                    0.21491987003595547, 
+                    0.1234074842141459, 
+                    0.1234074842141459
+                ], 
+                0.501240074634552
+            ], 
+            [
+                0.9090909361839294, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999164401123493, 
+                    0.9999164401123493, 
+                    0.9999164401123493, 
+                    0.9999164401123493, 
+                    0.9999164401123493, 
+                    0.9999164401123493, 
+                    0.920243993558232, 
+                    0.920243993558232, 
+                    0.8148751279126083, 
+                    0.8148751279126083, 
+                    0.7248758046889788, 
+                    0.7248758046889788, 
+                    0.6430479696880156, 
+                    0.6430479696880156, 
+                    0.5660908465447873, 
+                    0.5660908465447873, 
+                    0.49230030122062934, 
+                    0.49230030122062934, 
+                    0.42071855809748315, 
+                    0.42071855809748315, 
+                    0.3508053926620869, 
+                    0.3508053926620869, 
+                    0.2822956400326966, 
+                    0.2822956400326966, 
+                    0.21492164045953616, 
+                    0.21492164045953616, 
+                    0.12340986549302943, 
+                    0.12340986549302943
+                ], 
+                0.5012390613555908
+            ], 
+            [
+                0.9265862703323364, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999116106754277, 
+                    0.9999116106754277, 
+                    0.9999116106754277, 
+                    0.9999116106754277, 
+                    0.9999116106754277, 
+                    0.9999116106754277, 
+                    0.9202329803274762, 
+                    0.9202329803274762, 
+                    0.8148626853640071, 
+                    0.8148626853640071, 
+                    0.7248652795977683, 
+                    0.7248652795977683, 
+                    0.6430417897740736, 
+                    0.6430417897740736, 
+                    0.566089485342265, 
+                    0.566089485342265, 
+                    0.49230208479302723, 
+                    0.49230208479302723, 
+                    0.42072150169950584, 
+                    0.42072150169950584, 
+                    0.35080876431159264, 
+                    0.35080876431159264, 
+                    0.28229812627333495, 
+                    0.28229812627333495, 
+                    0.21492294430836079, 
+                    0.21492294430836079, 
+                    0.12341197812551823, 
+                    0.12341197812551823
+                ], 
+                0.5012363195419312
+            ], 
+            [
+                0.9444183111190796, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999906717639702, 
+                    0.999906717639702, 
+                    0.999906717639702, 
+                    0.999906717639702, 
+                    0.999906717639702, 
+                    0.999906717639702, 
+                    0.9202215071667915, 
+                    0.9202215071667915, 
+                    0.8148497166168879, 
+                    0.8148497166168879, 
+                    0.7248542823028585, 
+                    0.7248542823028585, 
+                    0.643035140983152, 
+                    0.643035140983152, 
+                    0.5660875832896096, 
+                    0.5660875832896096, 
+                    0.4923032508962207, 
+                    0.4923032508962207, 
+                    0.42072380512088026, 
+                    0.42072380512088026, 
+                    0.350811477301597, 
+                    0.350811477301597, 
+                    0.282300023707313, 
+                    0.282300023707313, 
+                    0.21492374438090558, 
+                    0.21492374438090558, 
+                    0.12341380958186939, 
+                    0.12341380958186939
+                ], 
+                0.5012314915657043
+            ], 
+            [
+                0.9625934958457947, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999017790115718, 
+                    0.9999017790115718, 
+                    0.9999017790115718, 
+                    0.9999017790115718, 
+                    0.9999017790115718, 
+                    0.9999017790115718, 
+                    0.9202094670478027, 
+                    0.9202094670478027, 
+                    0.8148360640101068, 
+                    0.8148360640101068, 
+                    0.724842623495027, 
+                    0.724842623495027, 
+                    0.6430278186578742, 
+                    0.6430278186578742, 
+                    0.566084950851271, 
+                    0.566084950851271, 
+                    0.492303648437606, 
+                    0.492303648437606, 
+                    0.4207253569855461, 
+                    0.4207253569855461, 
+                    0.3508134518791395, 
+                    0.3508134518791395, 
+                    0.2823012747887335, 
+                    0.2823012747887335, 
+                    0.2149239951999846, 
+                    0.2149239951999846, 
+                    0.12341534334950524, 
+                    0.12341534334950524
+                ], 
+                0.501224160194397
+            ], 
+            [
+                0.9811185002326965, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998968135942391, 
+                    0.9998968135942391, 
+                    0.9998968135942391, 
+                    0.9998968135942391, 
+                    0.9998968135942391, 
+                    0.9998968135942391, 
+                    0.920196718183119, 
+                    0.920196718183119, 
+                    0.8148215267030599, 
+                    0.8148215267030599, 
+                    0.7248300709130017, 
+                    0.7248300709130017, 
+                    0.6430195813663636, 
+                    0.6430195813663636, 
+                    0.5660813713304284, 
+                    0.5660813713304284, 
+                    0.4923031073325882, 
+                    0.4923031073325882, 
+                    0.42072603180311896, 
+                    0.42072603180311896, 
+                    0.35081459684864913, 
+                    0.35081459684864913, 
+                    0.28230181161199047, 
+                    0.28230181161199047, 
+                    0.21492364138759237, 
+                    0.21492364138759237, 
+                    0.12341655819496178, 
+                    0.12341655819496178
+                ], 
+                0.5012138485908508
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999891840796144, 
+                    0.999891840796144, 
+                    0.999891840796144, 
+                    0.999891840796144, 
+                    0.999891840796144, 
+                    0.999891840796144, 
+                    0.9201830757621534, 
+                    0.9201830757621534, 
+                    0.8148058517504704, 
+                    0.8148058517504704, 
+                    0.7248163416544057, 
+                    0.7248163416544057, 
+                    0.6430101449200406, 
+                    0.6430101449200406, 
+                    0.5660765964020678, 
+                    0.5660765964020678, 
+                    0.4923014349986962, 
+                    0.4923014349986962, 
+                    0.4207256870637988, 
+                    0.4207256870637988, 
+                    0.3508148070753502, 
+                    0.3508148070753502, 
+                    0.28230155372379023, 
+                    0.28230155372379023, 
+                    0.21492261571622762, 
+                    0.21492261571622762, 
+                    0.12341742727333618, 
+                    0.12341742727333618
+                ], 
+                0.5011999607086182
+            ], 
+            [
+                1.019244909286499, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998868804278808, 
+                    0.9998868804278808, 
+                    0.9998868804278808, 
+                    0.9998868804278808, 
+                    0.9998868804278808, 
+                    0.9998868804278808, 
+                    0.9201683018747767, 
+                    0.9201683018747767, 
+                    0.8147887233828207, 
+                    0.8147887233828207, 
+                    0.7248010929720091, 
+                    0.7248010929720091, 
+                    0.642999175203295, 
+                    0.642999175203295, 
+                    0.5660703407072867, 
+                    0.5660703407072867, 
+                    0.49229841211467107, 
+                    0.49229841211467107, 
+                    0.4207241597433562, 
+                    0.4207241597433562, 
+                    0.35081396048604235, 
+                    0.35081396048604235, 
+                    0.2823004055311463, 
+                    0.2823004055311463, 
+                    0.21492083679467563, 
+                    0.21492083679467563, 
+                    0.12341791707933343, 
+                    0.12341791707933343
+                ], 
+                0.5011818408966064
+            ], 
+            [
+                1.0388600826263428, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998819524920738, 
+                    0.9998819524920738, 
+                    0.9998819524920738, 
+                    0.9998819524920738, 
+                    0.9998819524920738, 
+                    0.9998819524920738, 
+                    0.9201520932109722, 
+                    0.9201520932109722, 
+                    0.8147697500585757, 
+                    0.8147697500585757, 
+                    0.7247839112426502, 
+                    0.7247839112426502, 
+                    0.6429862795476456, 
+                    0.6429862795476456, 
+                    0.5660622753304427, 
+                    0.5660622753304427, 
+                    0.4922937874808706, 
+                    0.4922937874808706, 
+                    0.4207212621073413, 
+                    0.4207212621073413, 
+                    0.3508119145084293, 
+                    0.3508119145084293, 
+                    0.2822982531884985, 
+                    0.2822982531884985, 
+                    0.21491820626704905, 
+                    0.21491820626704905, 
+                    0.12341798617101336, 
+                    0.12341798617101336
+                ], 
+                0.5011587142944336
+            ], 
+            [
+                1.0588529109954834, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998770769711203, 
+                    0.9998770769711203, 
+                    0.9998770769711203, 
+                    0.9998770769711203, 
+                    0.9998770769711203, 
+                    0.9998770769711203, 
+                    0.9201340659973927, 
+                    0.9201340659973927, 
+                    0.8147484488030436, 
+                    0.8147484488030436, 
+                    0.7247642987077529, 
+                    0.7247642987077529, 
+                    0.6429709963674055, 
+                    0.6429709963674055, 
+                    0.566052019908136, 
+                    0.566052019908136, 
+                    0.4922872718381284, 
+                    0.4922872718381284, 
+                    0.4207167766585579, 
+                    0.4207167766585579, 
+                    0.3508085017841278, 
+                    0.3508085017841278, 
+                    0.282294960882926, 
+                    0.282294960882926, 
+                    0.21491460546216368, 
+                    0.21491460546216368, 
+                    0.12341758364717785, 
+                    0.12341758364717785
+                ], 
+                0.5011295080184937
+            ], 
+            [
+                1.0792303085327148, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998722736174849, 
+                    0.9998722736174849, 
+                    0.9998722736174849, 
+                    0.9998722736174849, 
+                    0.9998722736174849, 
+                    0.9998722736174849, 
+                    0.92011373755226, 
+                    0.92011373755226, 
+                    0.8147242262273469, 
+                    0.8147242262273469, 
+                    0.7247416575049235, 
+                    0.7247416575049235, 
+                    0.6429527826574158, 
+                    0.6429527826574158, 
+                    0.5660391331029926, 
+                    0.5660391331029926, 
+                    0.4922785303869703, 
+                    0.4922785303869703, 
+                    0.4207104500607385, 
+                    0.4207104500607385, 
+                    0.3508035250348363, 
+                    0.3508035250348363, 
+                    0.2822903663470186, 
+                    0.2822903663470186, 
+                    0.21490989132947347, 
+                    0.21490989132947347, 
+                    0.12341664728818907, 
+                    0.12341664728818907
+                ], 
+                0.5010932087898254
+            ], 
+            [
+                1.100000023841858, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998675617515241, 
+                    0.9998675617515241, 
+                    0.9998675617515241, 
+                    0.9998675617515241, 
+                    0.9998675617515241, 
+                    0.9998675617515241, 
+                    0.9200905036209545, 
+                    0.9200905036209545, 
+                    0.8146963554812076, 
+                    0.8146963554812076, 
+                    0.7247152703977233, 
+                    0.7247152703977233, 
+                    0.6429309989347798, 
+                    0.6429309989347798, 
+                    0.566023101106603, 
+                    0.566023101106603, 
+                    0.4922671737900695, 
+                    0.4922671737900695, 
+                    0.42070198583275964, 
+                    0.42070198583275964, 
+                    0.35079675088695567, 
+                    0.35079675088695567, 
+                    0.28228427546577983, 
+                    0.28228427546577983, 
+                    0.21490389153077166, 
+                    0.21490389153077166, 
+                    0.12341510131614926, 
+                    0.12341510131614926
+                ], 
+                0.5010483264923096
+            ], 
+            [
+                1.1211693286895752, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998629600711242, 
+                    0.9998629600711242, 
+                    0.9998629600711242, 
+                    0.9998629600711242, 
+                    0.9998629600711242, 
+                    0.9998629600711242, 
+                    0.9200636105241806, 
+                    0.9200636105241806, 
+                    0.8146639482171849, 
+                    0.8146639482171849, 
+                    0.7246842775018331, 
+                    0.7246842775018331, 
+                    0.6429048910665531, 
+                    0.6429048910665531, 
+                    0.5660033237675467, 
+                    0.5660033237675467, 
+                    0.4922527473100484, 
+                    0.4922527473100484, 
+                    0.42069103554662207, 
+                    0.42069103554662207, 
+                    0.35078790243898017, 
+                    0.35078790243898017, 
+                    0.28227645575708216, 
+                    0.28227645575708216, 
+                    0.21489639849329148, 
+                    0.21489639849329148, 
+                    0.12341285366465991, 
+                    0.12341285366465991
+                ], 
+                0.5009933114051819
+            ], 
+            [
+                1.142746090888977, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998584864776731, 
+                    0.9998584864776731, 
+                    0.9998584864776731, 
+                    0.9998584864776731, 
+                    0.9998584864776731, 
+                    0.9998584864776731, 
+                    0.9200321208891974, 
+                    0.9200321208891974, 
+                    0.8146259204802991, 
+                    0.8146259204802991, 
+                    0.7246476481491302, 
+                    0.7246476481491302, 
+                    0.642873568358662, 
+                    0.642873568358662, 
+                    0.5659790978577464, 
+                    0.5659790978577464, 
+                    0.49223471771730615, 
+                    0.49223471771730615, 
+                    0.4206771882051959, 
+                    0.4206771882051959, 
+                    0.35077665028294713, 
+                    0.35077665028294713, 
+                    0.2822666284817001, 
+                    0.2822666284817001, 
+                    0.21488716217990714, 
+                    0.21488716217990714, 
+                    0.12340979266521893, 
+                    0.12340979266521893
+                ], 
+                0.5009262561798096
+            ], 
+            [
+                1.1647381782531738, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998541579217525, 
+                    0.9998541579217525, 
+                    0.9998541579217525, 
+                    0.9998541579217525, 
+                    0.9998541579217525, 
+                    0.9998541579217525, 
+                    0.9199948714306596, 
+                    0.9199948714306596, 
+                    0.8145809511320479, 
+                    0.8145809511320479, 
+                    0.7246041468452596, 
+                    0.7246041468452596, 
+                    0.6428359771196412, 
+                    0.6428359771196412, 
+                    0.5659495968948889, 
+                    0.5659495968948889, 
+                    0.49221245751603515, 
+                    0.49221245751603515, 
+                    0.42065995744974033, 
+                    0.42065995744974033, 
+                    0.35076260167614653, 
+                    0.35076260167614653, 
+                    0.2822544590882269, 
+                    0.2822544590882269, 
+                    0.21487588130816268, 
+                    0.21487588130816268, 
+                    0.12340578299981446, 
+                    0.12340578299981446
+                ], 
+                0.5008447766304016
+            ], 
+            [
+                1.1871533393859863, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998499902717859, 
+                    0.9998499902717859, 
+                    0.9998499902717859, 
+                    0.9998499902717859, 
+                    0.9998499902717859, 
+                    0.9998499902717859, 
+                    0.9199504209463848, 
+                    0.9199504209463848, 
+                    0.814527431200385, 
+                    0.814527431200385, 
+                    0.7245522920796809, 
+                    0.7245522920796809, 
+                    0.6427908687631084, 
+                    0.6427908687631084, 
+                    0.5659138468109594, 
+                    0.5659138468109594, 
+                    0.492185225906749, 
+                    0.492185225906749, 
+                    0.4206387660956174, 
+                    0.4206387660956174, 
+                    0.3507452874206536, 
+                    0.3507452874206536, 
+                    0.2822395456080441, 
+                    0.2822395456080441, 
+                    0.21486219265675008, 
+                    0.21486219265675008, 
+                    0.12340066076536255, 
+                    0.12340066076536255
+                ], 
+                0.5007460713386536
+            ], 
+            [
+                1.2100000381469727, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998459982081823, 
+                    0.9998459982081823, 
+                    0.9998459982081823, 
+                    0.9998459982081823, 
+                    0.9998459982081823, 
+                    0.9998459982081823, 
+                    0.9198969862238858, 
+                    0.9198969862238858, 
+                    0.8144634021228321, 
+                    0.8144634021228321, 
+                    0.7244903064858116, 
+                    0.7244903064858116, 
+                    0.6427367613477561, 
+                    0.6427367613477561, 
+                    0.5658706966324348, 
+                    0.5658706966324348, 
+                    0.4921521458333637, 
+                    0.4921521458333637, 
+                    0.4206129274606269, 
+                    0.4206129274606269, 
+                    0.3507241460014015, 
+                    0.3507241460014015, 
+                    0.2822214045720949, 
+                    0.2822214045720949, 
+                    0.21484565804685551, 
+                    0.21484565804685551, 
+                    0.12339422746015269, 
+                    0.12339422746015269
+                ], 
+                0.5006269216537476
+            ]
+        ]
+    }, 
+    {
+        "block_size": 31, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8313148617744446, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999277142557393, 
+                    0.9999277142557393, 
+                    0.9999277142557393, 
+                    0.9999277142557393, 
+                    0.9999277142557393, 
+                    0.9999277142557393, 
+                    0.9202097048482842, 
+                    0.9202097048482842, 
+                    0.8148538755255674, 
+                    0.8148538755255674, 
+                    0.7248533823550541, 
+                    0.7248533823550541, 
+                    0.6430125399256998, 
+                    0.6430125399256998, 
+                    0.5660837880134829, 
+                    0.5660837880134829, 
+                    0.4923070320716983, 
+                    0.4923070320716983, 
+                    0.4207189073798371, 
+                    0.4207189073798371, 
+                    0.3508167357598905, 
+                    0.3508167357598905, 
+                    0.28230234310743096, 
+                    0.28230234310743096, 
+                    0.21492657133355614, 
+                    0.21492657133355614, 
+                    0.12341564230300117, 
+                    0.12341564230300117
+                ], 
+                0.5012291669845581
+            ], 
+            [
+                0.8468158841133118, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999237190638008, 
+                    0.9999237190638008, 
+                    0.9999237190638008, 
+                    0.9999237190638008, 
+                    0.9999237190638008, 
+                    0.9999237190638008, 
+                    0.9201971038763513, 
+                    0.9201971038763513, 
+                    0.8148407715223431, 
+                    0.8148407715223431, 
+                    0.7248418389127914, 
+                    0.7248418389127914, 
+                    0.6430049529520112, 
+                    0.6430049529520112, 
+                    0.5660808400784583, 
+                    0.5660808400784583, 
+                    0.49230682000875664, 
+                    0.49230682000875664, 
+                    0.420720273039915, 
+                    0.420720273039915, 
+                    0.35081819036439643, 
+                    0.35081819036439643, 
+                    0.28230333550494513, 
+                    0.28230333550494513, 
+                    0.21492663659317213, 
+                    0.21492663659317213, 
+                    0.12341690110224317, 
+                    0.12341690110224317
+                ], 
+                0.5012209415435791
+            ], 
+            [
+                0.8626059293746948, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999196462100465, 
+                    0.9999196462100465, 
+                    0.9999196462100465, 
+                    0.9999196462100465, 
+                    0.9999196462100465, 
+                    0.9999196462100465, 
+                    0.9201837728618023, 
+                    0.9201837728618023, 
+                    0.8148268200448886, 
+                    0.8148268200448886, 
+                    0.7248294289831398, 
+                    0.7248294289831398, 
+                    0.6429964571754949, 
+                    0.6429964571754949, 
+                    0.5660770065629067, 
+                    0.5660770065629067, 
+                    0.49230576505182466, 
+                    0.49230576505182466, 
+                    0.42072082238577807, 
+                    0.42072082238577807, 
+                    0.3508189176995518, 
+                    0.3508189176995518, 
+                    0.28230369207137196, 
+                    0.28230369207137196, 
+                    0.21492617243635667, 
+                    0.21492617243635667, 
+                    0.12341787854696329, 
+                    0.12341787854696329
+                ], 
+                0.5012099742889404
+            ], 
+            [
+                0.8786904215812683, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999155047636232, 
+                    0.9999155047636232, 
+                    0.9999155047636232, 
+                    0.9999155047636232, 
+                    0.9999155047636232, 
+                    0.9999155047636232, 
+                    0.9201695537598993, 
+                    0.9201695537598993, 
+                    0.8148118083785159, 
+                    0.8148118083785159, 
+                    0.7248159137191721, 
+                    0.7248159137191721, 
+                    0.6429868029957271, 
+                    0.6429868029957271, 
+                    0.5660720797912902, 
+                    0.5660720797912902, 
+                    0.4923037082866569, 
+                    0.4923037082866569, 
+                    0.42072043680161286, 
+                    0.42072043680161286, 
+                    0.3508188315130272, 
+                    0.3508188315130272, 
+                    0.2823033467615993, 
+                    0.2823033467615993, 
+                    0.214925122927333, 
+                    0.214925122927333, 
+                    0.12341855269497792, 
+                    0.12341855269497792
+                ], 
+                0.5011957287788391
+            ], 
+            [
+                0.8950747847557068, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999113043409026, 
+                    0.9999113043409026, 
+                    0.9999113043409026, 
+                    0.9999113043409026, 
+                    0.9999113043409026, 
+                    0.9999113043409026, 
+                    0.9201542467048895, 
+                    0.9201542467048895, 
+                    0.8147954750718237, 
+                    0.8147954750718237, 
+                    0.7248010070069417, 
+                    0.7248010070069417, 
+                    0.6429756995728934, 
+                    0.6429756995728934, 
+                    0.5660658223381803, 
+                    0.5660658223381803, 
+                    0.49230046912918035, 
+                    0.49230046912918035, 
+                    0.4207189810855612, 
+                    0.4207189810855612, 
+                    0.35081783188062565, 
+                    0.35081783188062565, 
+                    0.2823022214014924, 
+                    0.2823022214014924, 
+                    0.214923420907881, 
+                    0.214923420907881, 
+                    0.123418896367972, 
+                    0.123418896367972
+                ], 
+                0.5011777281761169
+            ], 
+            [
+                0.9117646813392639, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999070550477972, 
+                    0.9999070550477972, 
+                    0.9999070550477972, 
+                    0.9999070550477972, 
+                    0.9999070550477972, 
+                    0.9999070550477972, 
+                    0.9201376006623312, 
+                    0.9201376006623312, 
+                    0.814777500324885, 
+                    0.814777500324885, 
+                    0.724784367024587, 
+                    0.724784367024587, 
+                    0.64296280793358, 
+                    0.64296280793358, 
+                    0.5660579619270325, 
+                    0.5660579619270325, 
+                    0.49229584134064636, 
+                    0.49229584134064636, 
+                    0.42071630021737705, 
+                    0.42071630021737705, 
+                    0.3508158025234639, 
+                    0.3508158025234639, 
+                    0.2823002233843541, 
+                    0.2823002233843541, 
+                    0.21492098593751677, 
+                    0.21492098593751677, 
+                    0.12341887621846813, 
+                    0.12341887621846813
+                ], 
+                0.5011551976203918
+            ], 
+            [
+                0.9287658333778381, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999027674173676, 
+                    0.9999027674173676, 
+                    0.9999027674173676, 
+                    0.9999027674173676, 
+                    0.9999027674173676, 
+                    0.9999027674173676, 
+                    0.9201193020746815, 
+                    0.9201193020746815, 
+                    0.8147574944470981, 
+                    0.8147574944470981, 
+                    0.7247655861801744, 
+                    0.7247655861801744, 
+                    0.642947732760073, 
+                    0.642947732760073, 
+                    0.5660481853392153, 
+                    0.5660481853392153, 
+                    0.49228958828747754, 
+                    0.49228958828747754, 
+                    0.4207122155297945, 
+                    0.4207122155297945, 
+                    0.3508126076291114, 
+                    0.3508126076291114, 
+                    0.2822972429323235, 
+                    0.2822972429323235, 
+                    0.2149177218523825, 
+                    0.2149177218523825, 
+                    0.12341845162764309, 
+                    0.12341845162764309
+                ], 
+                0.5011274814605713
+            ], 
+            [
+                0.9460839033126831, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998984523434271, 
+                    0.9998984523434271, 
+                    0.9998984523434271, 
+                    0.9998984523434271, 
+                    0.9998984523434271, 
+                    0.9998984523434271, 
+                    0.9200989610304409, 
+                    0.9200989610304409, 
+                    0.8147349839833872, 
+                    0.8147349839833872, 
+                    0.7247441791070518, 
+                    0.7247441791070518, 
+                    0.6429300126252496, 
+                    0.6429300126252496, 
+                    0.5660361311593681, 
+                    0.5660361311593681, 
+                    0.49228143731154095, 
+                    0.49228143731154095, 
+                    0.42070652016811805, 
+                    0.42070652016811805, 
+                    0.3508080880962325, 
+                    0.3508080880962325, 
+                    0.2822931498534022, 
+                    0.2822931498534022, 
+                    0.21491351384972615, 
+                    0.21491351384972615, 
+                    0.1234175733795621, 
+                    0.1234175733795621
+                ], 
+                0.5010935068130493
+            ], 
+            [
+                0.9637249708175659, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998941210110663, 
+                    0.9998941210110663, 
+                    0.9998941210110663, 
+                    0.9998941210110663, 
+                    0.9998941210110663, 
+                    0.9998941210110663, 
+                    0.92007609445503, 
+                    0.92007609445503, 
+                    0.8147093950446846, 
+                    0.8147093950446846, 
+                    0.724719568321743, 
+                    0.724719568321743, 
+                    0.6429091083612698, 
+                    0.6429091083612698, 
+                    0.5660213811388981, 
+                    0.5660213811388981, 
+                    0.49227107303611195, 
+                    0.49227107303611195, 
+                    0.42069897371426285, 
+                    0.42069897371426285, 
+                    0.350802057079466, 
+                    0.350802057079466, 
+                    0.2822877896867348, 
+                    0.2822877896867348, 
+                    0.2149082250130808, 
+                    0.2149082250130808, 
+                    0.12341618208356472, 
+                    0.12341618208356472
+                ], 
+                0.5010522603988647
+            ], 
+            [
+                0.9816949367523193, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998897848249871, 
+                    0.9998897848249871, 
+                    0.9998897848249871, 
+                    0.9998897848249871, 
+                    0.9998897848249871, 
+                    0.9998897848249871, 
+                    0.920050105624657, 
+                    0.920050105624657, 
+                    0.8146800332455368, 
+                    0.8146800332455368, 
+                    0.7246910671009823, 
+                    0.7246910671009823, 
+                    0.6428843892159999, 
+                    0.6428843892159999, 
+                    0.5660034499174675, 
+                    0.5660034499174675, 
+                    0.4922581294013668, 
+                    0.4922581294013668, 
+                    0.420689295793706, 
+                    0.420689295793706, 
+                    0.35079429469238216, 
+                    0.35079429469238216, 
+                    0.2822809791068613, 
+                    0.2822809791068613, 
+                    0.2149016921563121, 
+                    0.2149016921563121, 
+                    0.12341420627613595, 
+                    0.12341420627613595
+                ], 
+                0.5010023713111877
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998854553364932, 
+                    0.9998854553364932, 
+                    0.9998854553364932, 
+                    0.9998854553364932, 
+                    0.9998854553364932, 
+                    0.9998854553364932, 
+                    0.9200202592160187, 
+                    0.9200202592160187, 
+                    0.814646059542755, 
+                    0.814646059542755, 
+                    0.7246578589967885, 
+                    0.7246578589967885, 
+                    0.6428551163781244, 
+                    0.6428551163781244, 
+                    0.5659817727955837, 
+                    0.5659817727955837, 
+                    0.4922421802023945, 
+                    0.4922421802023945, 
+                    0.42067715849034376, 
+                    0.42067715849034376, 
+                    0.3507845417079835, 
+                    0.3507845417079835, 
+                    0.282272500438941, 
+                    0.282272500438941, 
+                    0.21489372084254382, 
+                    0.21489372084254382, 
+                    0.12341156014843664, 
+                    0.12341156014843664
+                ], 
+                0.5009423494338989
+            ], 
+            [
+                1.0186463594436646, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998811441702334, 
+                    0.9998811441702334, 
+                    0.9998811441702334, 
+                    0.9998811441702334, 
+                    0.9998811441702334, 
+                    0.9998811441702334, 
+                    0.9199856509011136, 
+                    0.9199856509011136, 
+                    0.814606461146064, 
+                    0.814606461146064, 
+                    0.7246189733646861, 
+                    0.7246189733646861, 
+                    0.6428204233535417, 
+                    0.6428204233535417, 
+                    0.5659556911776099, 
+                    0.5659556911776099, 
+                    0.49222272783710436, 
+                    0.49222272783710436, 
+                    0.42066217732919836, 
+                    0.42066217732919836, 
+                    0.3507724920545611, 
+                    0.3507724920545611, 
+                    0.28226209511536526, 
+                    0.28226209511536526, 
+                    0.21488407942342766, 
+                    0.21488407942342766, 
+                    0.12340814082370023, 
+                    0.12340814082370023
+                ], 
+                0.500870406627655
+            ], 
+            [
+                1.0376404523849487, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998768629513273, 
+                    0.9998768629513273, 
+                    0.9998768629513273, 
+                    0.9998768629513273, 
+                    0.9998768629513273, 
+                    0.9998768629513273, 
+                    0.9199451702971898, 
+                    0.9199451702971898, 
+                    0.814560016478217, 
+                    0.814560016478217, 
+                    0.7245732560840751, 
+                    0.7245732560840751, 
+                    0.6427792926183741, 
+                    0.6427792926183741, 
+                    0.5659244352626428, 
+                    0.5659244352626428, 
+                    0.4921991899157359, 
+                    0.4921991899157359, 
+                    0.4206439005336996, 
+                    0.4206439005336996, 
+                    0.3507577838662516, 
+                    0.3507577838662516, 
+                    0.2822494558375804, 
+                    0.2822494558375804, 
+                    0.21487249188475552, 
+                    0.21487249188475552, 
+                    0.12340382507293457, 
+                    0.12340382507293457
+                ], 
+                0.5007842779159546
+            ], 
+            [
+                1.0569887161254883, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998726232340843, 
+                    0.9998726232340843, 
+                    0.9998726232340843, 
+                    0.9998726232340843, 
+                    0.9998726232340843, 
+                    0.9998726232340843, 
+                    0.9198974558093553, 
+                    0.9198974558093553, 
+                    0.8145052529696839, 
+                    0.8145052529696839, 
+                    0.7245193345627198, 
+                    0.7245193345627198, 
+                    0.6427305278301056, 
+                    0.6427305278301056, 
+                    0.5658871034504603, 
+                    0.5658871034504603, 
+                    0.49217088333624887, 
+                    0.49217088333624887, 
+                    0.4206217962478748, 
+                    0.4206217962478748, 
+                    0.35073998879825447, 
+                    0.35073998879825447, 
+                    0.28223421720639114, 
+                    0.28223421720639114, 
+                    0.21485862925929272, 
+                    0.21485862925929272, 
+                    0.12339846537648594, 
+                    0.12339846537648594
+                ], 
+                0.500681459903717
+            ], 
+            [
+                1.0766977071762085, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998684364331047, 
+                    0.9998684364331047, 
+                    0.9998684364331047, 
+                    0.9998684364331047, 
+                    0.9998684364331047, 
+                    0.9998684364331047, 
+                    0.9198408396250937, 
+                    0.9198408396250937, 
+                    0.814440396238604, 
+                    0.814440396238604, 
+                    0.7244555758969435, 
+                    0.7244555758969435, 
+                    0.6426727207682175, 
+                    0.6426727207682175, 
+                    0.5658426378543969, 
+                    0.5658426378543969, 
+                    0.4921370053277112, 
+                    0.4921370053277112, 
+                    0.42059523730629084, 
+                    0.42059523730629084, 
+                    0.3507185992660798, 
+                    0.3507185992660798, 
+                    0.2822159444887696, 
+                    0.2822159444887696, 
+                    0.21484209932664333, 
+                    0.21484209932664333, 
+                    0.12339188518459539, 
+                    0.12339188518459539
+                ], 
+                0.5005588531494141
+            ], 
+            [
+                1.0967742204666138, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9201196578291726, 
+                    0.9201196578291726, 
+                    0.8147391236157089, 
+                    0.8147391236157089, 
+                    0.724769497577363, 
+                    0.724769497577363, 
+                    0.6429715329701254, 
+                    0.6429715329701254, 
+                    0.5660881538636541, 
+                    0.5660881538636541, 
+                    0.49233100461794527, 
+                    0.49233100461794527, 
+                    0.4207476095541455, 
+                    0.4207476095541455, 
+                    0.3508350411475072, 
+                    0.3508350411475072, 
+                    0.2823032644262328, 
+                    0.2823032644262328, 
+                    0.21490008900938962, 
+                    0.21490008900938962, 
+                    0.12347816465587605, 
+                    0.12347816465587605
+                ], 
+                0.5012391805648804
+            ], 
+            [
+                1.1172250509262085, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.920043198477846, 
+                    0.920043198477846, 
+                    0.8146488203904162, 
+                    0.8146488203904162, 
+                    0.7246781824548855, 
+                    0.7246781824548855, 
+                    0.6428853875677832, 
+                    0.6428853875677832, 
+                    0.5660198124883732, 
+                    0.5660198124883732, 
+                    0.4922779794084844, 
+                    0.4922779794084844, 
+                    0.420705635433454, 
+                    0.420705635433454, 
+                    0.3508015315712835, 
+                    0.3508015315712835, 
+                    0.282275174478871, 
+                    0.282275174478871, 
+                    0.21487542732119397, 
+                    0.21487542732119397, 
+                    0.12346720547327604, 
+                    0.12346720547327604
+                ], 
+                0.5010555386543274
+            ], 
+            [
+                1.1380572319030762, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9199498213710429, 
+                    0.9199498213710429, 
+                    0.8145402321797816, 
+                    0.8145402321797816, 
+                    0.7245697349542363, 
+                    0.7245697349542363, 
+                    0.6427841757591324, 
+                    0.6427841757591324, 
+                    0.5659399673833119, 
+                    0.5659399673833119, 
+                    0.4922161318735058, 
+                    0.4922161318735058, 
+                    0.42065670127421684, 
+                    0.42065670127421684, 
+                    0.3507623847008092, 
+                    0.3507623847008092, 
+                    0.2822422745767789, 
+                    0.2822422745767789, 
+                    0.21484646392029963, 
+                    0.21484646392029963, 
+                    0.12345430515340237, 
+                    0.12345430515340237
+                ], 
+                0.5008391737937927
+            ], 
+            [
+                1.1592779159545898, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9198357936428229, 
+                    0.9198357936428229, 
+                    0.8144096403200783, 
+                    0.8144096403200783, 
+                    0.7244408944711657, 
+                    0.7244408944711657, 
+                    0.6426651883768295, 
+                    0.6426651883768295, 
+                    0.5658465942973622, 
+                    0.5658465942973622, 
+                    0.4921439099220645, 
+                    0.4921439099220645, 
+                    0.4205995752799399, 
+                    0.4205995752799399, 
+                    0.350716585501386, 
+                    0.350716585501386, 
+                    0.28220368376739574, 
+                    0.28220368376739574, 
+                    0.21481239907153918, 
+                    0.21481239907153918, 
+                    0.1234390986564913, 
+                    0.1234390986564913
+                ], 
+                0.500583827495575
+            ], 
+            [
+                1.1808942556381226, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998271201861453, 
+                    0.9998271201861453, 
+                    0.9998271201861453, 
+                    0.9998271201861453, 
+                    0.9998271201861453, 
+                    0.9998271201861453, 
+                    0.9194442694763368, 
+                    0.9194442694763368, 
+                    0.8142010629020735, 
+                    0.8142010629020735, 
+                    0.7242949643721514, 
+                    0.7242949643721514, 
+                    0.6425558787720443, 
+                    0.6425558787720443, 
+                    0.5658070584115267, 
+                    0.5658070584115267, 
+                    0.49215531561712034, 
+                    0.49215531561712034, 
+                    0.4206422596934946, 
+                    0.4206422596934946, 
+                    0.35077860789216847, 
+                    0.35077860789216847, 
+                    0.2822700695577677, 
+                    0.2822700695577677, 
+                    0.21486673769299075, 
+                    0.21486673769299075, 
+                    0.12356010776854877, 
+                    0.12356010776854877
+                ], 
+                0.5006213188171387
+            ], 
+            [
+                1.2029136419296265, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999911080274274, 
+                    0.9999911080274274, 
+                    0.9999911080274274, 
+                    0.9999911080274274, 
+                    0.9196341980583008, 
+                    0.9196341980583008, 
+                    0.8143916353386617, 
+                    0.8143916353386617, 
+                    0.7244937675924116, 
+                    0.7244937675924116, 
+                    0.6427380218472107, 
+                    0.6427380218472107, 
+                    0.5659553281987553, 
+                    0.5659553281987553, 
+                    0.4922719767938915, 
+                    0.4922719767938915, 
+                    0.4207329459470165, 
+                    0.4207329459470165, 
+                    0.3508468595476401, 
+                    0.3508468595476401, 
+                    0.28231856504543773, 
+                    0.28231856504543773, 
+                    0.2148927265442311, 
+                    0.2148927265442311, 
+                    0.1236288873268688, 
+                    0.1236288873268688
+                ], 
+                0.5010548233985901
+            ]
+        ]
+    }, 
+    {
+        "block_size": 32, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8359183669090271, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9994503188486806, 
+                    0.9994503188486806, 
+                    0.9994304212538929, 
+                    0.9994304212538929, 
+                    0.9993962582016597, 
+                    0.9993962582016597, 
+                    0.9434071582079203, 
+                    0.9434071582079203, 
+                    0.8403515348775278, 
+                    0.8403515348775278, 
+                    0.7530754863159574, 
+                    0.7530754863159574, 
+                    0.6743678861965817, 
+                    0.6743678861965817, 
+                    0.6009551142527085, 
+                    0.6009551142527085, 
+                    0.5308729966569214, 
+                    0.5308729966569214, 
+                    0.46308565813618313, 
+                    0.46308565813618313, 
+                    0.39709249967066806, 
+                    0.39709249967066806, 
+                    0.33231729493722567, 
+                    0.33231729493722567, 
+                    0.26856029894666683, 
+                    0.26856029894666683, 
+                    0.205426916539378, 
+                    0.205426916539378, 
+                    0.11964295939850705, 
+                    0.11964295939850705
+                ], 
+                0.5007060170173645
+            ], 
+            [
+                0.8510351181030273, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9994119303136885, 
+                    0.9994119303136885, 
+                    0.9993904595218925, 
+                    0.9993904595218925, 
+                    0.9993546207624578, 
+                    0.9993546207624578, 
+                    0.9433262284819627, 
+                    0.9433262284819627, 
+                    0.8402718654530411, 
+                    0.8402718654530411, 
+                    0.7530076905806483, 
+                    0.7530076905806483, 
+                    0.6743313427394554, 
+                    0.6743313427394554, 
+                    0.6009563289782586, 
+                    0.6009563289782586, 
+                    0.5309074489609873, 
+                    0.5309074489609873, 
+                    0.46314452145811325, 
+                    0.46314452145811325, 
+                    0.3971559322369209, 
+                    0.3971559322369209, 
+                    0.3323768891677553, 
+                    0.3323768891677553, 
+                    0.2686071407462529, 
+                    0.2686071407462529, 
+                    0.2054590893192102, 
+                    0.2054590893192102, 
+                    0.11967122845513001, 
+                    0.11967122845513001
+                ], 
+                0.5007825493812561
+            ], 
+            [
+                0.8664252161979675, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9993723576315372, 
+                    0.9993723576315372, 
+                    0.9993492541650645, 
+                    0.9993492541650645, 
+                    0.999311778481146, 
+                    0.999311778481146, 
+                    0.9432451787723921, 
+                    0.9432451787723921, 
+                    0.8401937242774087, 
+                    0.8401937242774087, 
+                    0.7529432379836083, 
+                    0.7529432379836083, 
+                    0.6742993081864377, 
+                    0.6742993081864377, 
+                    0.6009616083342092, 
+                    0.6009616083342092, 
+                    0.5309444291190323, 
+                    0.5309444291190323, 
+                    0.4632038102744978, 
+                    0.4632038102744978, 
+                    0.3972181197449929, 
+                    0.3972181197449929, 
+                    0.33243423013129897, 
+                    0.33243423013129897, 
+                    0.26865162084252453, 
+                    0.26865162084252453, 
+                    0.20548926375626153, 
+                    0.20548926375626153, 
+                    0.1196980299867365, 
+                    0.1196980299867365
+                ], 
+                0.500857949256897
+            ], 
+            [
+                0.8820936679840088, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9993316948900373, 
+                    0.9993316948900373, 
+                    0.9993069039644241, 
+                    0.9993069039644241, 
+                    0.9992678432827878, 
+                    0.9992678432827878, 
+                    0.9431642427451252, 
+                    0.9431642427451252, 
+                    0.8401172851882237, 
+                    0.8401172851882237, 
+                    0.7528821769538437, 
+                    0.7528821769538437, 
+                    0.6742716107812161, 
+                    0.6742716107812161, 
+                    0.600970589528954, 
+                    0.600970589528954, 
+                    0.5309834849428282, 
+                    0.5309834849428282, 
+                    0.4632631022942959, 
+                    0.4632631022942959, 
+                    0.3972787824557564, 
+                    0.3972787824557564, 
+                    0.3324891835927017, 
+                    0.3324891835927017, 
+                    0.2686937106121079, 
+                    0.2686937106121079, 
+                    0.2055174650182915, 
+                    0.2055174650182915, 
+                    0.11972340143687818, 
+                    0.11972340143687818
+                ], 
+                0.5009316802024841
+            ], 
+            [
+                0.8980454802513123, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9992900448637597, 
+                    0.9992900448637597, 
+                    0.9992635170749828, 
+                    0.9992635170749828, 
+                    0.9992229365778356, 
+                    0.9992229365778356, 
+                    0.9430836284586804, 
+                    0.9430836284586804, 
+                    0.8400426720463103, 
+                    0.8400426720463103, 
+                    0.7528244895860383, 
+                    0.7528244895860383, 
+                    0.6742480113738708, 
+                    0.6742480113738708, 
+                    0.6009828624352787, 
+                    0.6009828624352787, 
+                    0.5310241440634262, 
+                    0.5310241440634262, 
+                    0.46332197881653914, 
+                    0.46332197881653914, 
+                    0.39733765271656096, 
+                    0.39733765271656096, 
+                    0.33254162578106206, 
+                    0.33254162578106206, 
+                    0.26873338423564824, 
+                    0.26873338423564824, 
+                    0.20554371390213066, 
+                    0.20554371390213066, 
+                    0.1197473776961177, 
+                    0.1197473776961177
+                ], 
+                0.5010031461715698
+            ], 
+            [
+                0.9142857193946838, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9992475181434666, 
+                    0.9992475181434666, 
+                    0.9992192101162108, 
+                    0.9992192101162108, 
+                    0.9991771881809515, 
+                    0.9991771881809515, 
+                    0.9430035094265528, 
+                    0.9430035094265528, 
+                    0.8399699496898739, 
+                    0.8399699496898739, 
+                    0.7527700849185412, 
+                    0.7527700849185412, 
+                    0.6742282005217124, 
+                    0.6742282005217124, 
+                    0.6009979697159374, 
+                    0.6009979697159374, 
+                    0.5310659148160292, 
+                    0.5310659148160292, 
+                    0.46338002454054417, 
+                    0.46338002454054417, 
+                    0.3973944731766674, 
+                    0.3973944731766674, 
+                    0.33259144071343033, 
+                    0.33259144071343033, 
+                    0.26877061610728875, 
+                    0.26877061610728875, 
+                    0.20556802480236194, 
+                    0.20556802480236194, 
+                    0.11976999016211233, 
+                    0.11976999016211233
+                ], 
+                0.5010716915130615
+            ], 
+            [
+                0.9308196306228638, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9992042321729648, 
+                    0.9992042321729648, 
+                    0.9991741071572917, 
+                    0.9991741071572917, 
+                    0.9991307351208772, 
+                    0.9991307351208772, 
+                    0.9429240144925355, 
+                    0.9429240144925355, 
+                    0.8398991138839457, 
+                    0.8398991138839457, 
+                    0.7527187914970869, 
+                    0.7527187914970869, 
+                    0.6742117949944971, 
+                    0.6742117949944971, 
+                    0.6010154061919354, 
+                    0.6010154061919354, 
+                    0.5311082862109954, 
+                    0.5311082862109954, 
+                    0.46343682641703704, 
+                    0.46343682641703704, 
+                    0.3974489942544909, 
+                    0.3974489942544909, 
+                    0.33263851700529, 
+                    0.33263851700529, 
+                    0.2688053779276702, 
+                    0.2688053779276702, 
+                    0.20559040344941606, 
+                    0.20559040344941606, 
+                    0.1197912656984121, 
+                    0.1197912656984121
+                ], 
+                0.5011365413665771
+            ], 
+            [
+                0.9476525783538818, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9991603102125225, 
+                    0.9991603102125225, 
+                    0.9991283386171361, 
+                    0.9991283386171361, 
+                    0.9990837203659931, 
+                    0.9990837203659931, 
+                    0.942845216278134, 
+                    0.942845216278134, 
+                    0.839830079991723, 
+                    0.839830079991723, 
+                    0.7526703489647695, 
+                    0.7526703489647695, 
+                    0.6741983333745727, 
+                    0.6741983333745727, 
+                    0.6010346172091867, 
+                    0.6010346172091867, 
+                    0.5311507267670204, 
+                    0.5311507267670204, 
+                    0.463491971421531, 
+                    0.463491971421531, 
+                    0.39750097081595626, 
+                    0.39750097081595626, 
+                    0.33268274416734994, 
+                    0.33268274416734994, 
+                    0.2688376354642263, 
+                    0.2688376354642263, 
+                    0.2056108443881045, 
+                    0.2056108443881045, 
+                    0.1198112254887421, 
+                    0.1198112254887421
+                ], 
+                0.5011968016624451
+            ], 
+            [
+                0.9647899270057678, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9991158802464677, 
+                    0.9991158802464677, 
+                    0.9990820400982758, 
+                    0.9990820400982758, 
+                    0.9990362914886624, 
+                    0.9990362914886624, 
+                    0.9427671178350989, 
+                    0.9427671178350989, 
+                    0.8397626699914965, 
+                    0.8397626699914965, 
+                    0.7526243982845064, 
+                    0.7526243982845064, 
+                    0.6741872704140787, 
+                    0.6741872704140787, 
+                    0.601054995735382, 
+                    0.601054995735382, 
+                    0.5311926820793319, 
+                    0.5311926820793319, 
+                    0.4635450431864726, 
+                    0.4635450431864726, 
+                    0.39755015799280835, 
+                    0.39755015799280835, 
+                    0.3327240083228815, 
+                    0.3327240083228815, 
+                    0.2688673449000684, 
+                    0.2688673449000684, 
+                    0.20562932812212656, 
+                    0.20562932812212656, 
+                    0.11982988375055598, 
+                    0.11982988375055598
+                ], 
+                0.5012516379356384
+            ], 
+            [
+                0.9822372198104858, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9990710738539912, 
+                    0.9990710738539912, 
+                    0.9990353511753984, 
+                    0.9990353511753984, 
+                    0.9989885992939831, 
+                    0.9989885992939831, 
+                    0.9426896370547729, 
+                    0.9426896370547729, 
+                    0.8396965973311915, 
+                    0.8396965973311915, 
+                    0.75258047016452, 
+                    0.75258047016452, 
+                    0.6741779697639627, 
+                    0.6741779697639627, 
+                    0.6010758778832348, 
+                    0.6010758778832348, 
+                    0.5312335708832183, 
+                    0.5312335708832183, 
+                    0.4635956173584366, 
+                    0.4635956173584366, 
+                    0.3975963060973488, 
+                    0.3975963060973488, 
+                    0.3327621872990502, 
+                    0.3327621872990502, 
+                    0.2688944487178484, 
+                    0.2688944487178484, 
+                    0.20564581785933847, 
+                    0.20564581785933847, 
+                    0.11984724626798138, 
+                    0.11984724626798138
+                ], 
+                0.5012999773025513
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9990260250640624, 
+                    0.9990260250640624, 
+                    0.9989884141617342, 
+                    0.9989884141617342, 
+                    0.9989407964402093, 
+                    0.9989407964402093, 
+                    0.9426125882821697, 
+                    0.9426125882821697, 
+                    0.8396314490832527, 
+                    0.8396314490832527, 
+                    0.7525379711503922, 
+                    0.7525379711503922, 
+                    0.674169694608712, 
+                    0.674169694608712, 
+                    0.6010965365364619, 
+                    0.6010965365364619, 
+                    0.5312727794253075, 
+                    0.5312727794253075, 
+                    0.4636432555691764, 
+                    0.4636432555691764, 
+                    0.39763915453325555, 
+                    0.39763915453325555, 
+                    0.33279714501061786, 
+                    0.33279714501061786, 
+                    0.26891887103575973, 
+                    0.26891887103575973, 
+                    0.20566025573805038, 
+                    0.20566025573805038, 
+                    0.1198633087081367, 
+                    0.1198633087081367
+                ], 
+                0.5013405680656433
+            ], 
+            [
+                1.0180840492248535, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9989808692118973, 
+                    0.9989808692118973, 
+                    0.9989413728731907, 
+                    0.9989413728731907, 
+                    0.9988930360748016, 
+                    0.9988930360748016, 
+                    0.9425356603843396, 
+                    0.9425356603843396, 
+                    0.8395666646306378, 
+                    0.8395666646306378, 
+                    0.7524961667550794, 
+                    0.7524961667550794, 
+                    0.6741615957200333, 
+                    0.6741615957200333, 
+                    0.6011161726956995, 
+                    0.6011161726956995, 
+                    0.5313096538863251, 
+                    0.5313096538863251, 
+                    0.463687497861438, 
+                    0.463687497861438, 
+                    0.3976784245787354, 
+                    0.3976784245787354, 
+                    0.3328287250095058, 
+                    0.3328287250095058, 
+                    0.26894051224499116, 
+                    0.26894051224499116, 
+                    0.20567255844834323, 
+                    0.20567255844834323, 
+                    0.11987805467056944, 
+                    0.11987805467056944
+                ], 
+                0.5013719797134399
+            ], 
+            [
+                1.0364950895309448, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9989357418186152, 
+                    0.9989357418186152, 
+                    0.9988943714147387, 
+                    0.9988943714147387, 
+                    0.9988454705137734, 
+                    0.9988454705137734, 
+                    0.9424583904005944, 
+                    0.9424583904005944, 
+                    0.8395015100115975, 
+                    0.8395015100115975, 
+                    0.7524541608738264, 
+                    0.7524541608738264, 
+                    0.6741526962901204, 
+                    0.6741526962901204, 
+                    0.6011339041182322, 
+                    0.6011339041182322, 
+                    0.5313434905639124, 
+                    0.5313434905639124, 
+                    0.46372785337500644, 
+                    0.46372785337500644, 
+                    0.39771381089290725, 
+                    0.39771381089290725, 
+                    0.3328567430657278, 
+                    0.3328567430657278, 
+                    0.268959242836679, 
+                    0.268959242836679, 
+                    0.2056826120679506, 
+                    0.2056826120679506, 
+                    0.11989145338372804, 
+                    0.11989145338372804
+                ], 
+                0.5013927221298218
+            ], 
+            [
+                1.055238962173462, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9988907775122955, 
+                    0.9988907775122955, 
+                    0.9988475530101856, 
+                    0.9988475530101856, 
+                    0.9987982499883098, 
+                    0.9987982499883098, 
+                    0.9423801316189793, 
+                    0.9423801316189793, 
+                    0.8394350468625656, 
+                    0.8394350468625656, 
+                    0.7524108705837608, 
+                    0.7524108705837608, 
+                    0.674141872895209, 
+                    0.674141872895209, 
+                    0.6011487507741441, 
+                    0.6011487507741441, 
+                    0.531373523487736, 
+                    0.531373523487736, 
+                    0.4637637890549611, 
+                    0.4637637890549611, 
+                    0.39774497154773536, 
+                    0.39774497154773536, 
+                    0.3328809785861366, 
+                    0.3328809785861366, 
+                    0.26897489621319576, 
+                    0.26897489621319576, 
+                    0.20569026594587178, 
+                    0.20569026594587178, 
+                    0.1199034569884361, 
+                    0.1199034569884361
+                ], 
+                0.5014007687568665
+            ], 
+            [
+                1.074321985244751, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9988461090075267, 
+                    0.9988461090075267, 
+                    0.9988010588952752, 
+                    0.9988010588952752, 
+                    0.9987515214804086, 
+                    0.9987515214804086, 
+                    0.9423000147239016, 
+                    0.9423000147239016, 
+                    0.8393660946061139, 
+                    0.8393660946061139, 
+                    0.7523649952677924, 
+                    0.7523649952677924, 
+                    0.6741278317251304, 
+                    0.6741278317251304, 
+                    0.6011596165162166, 
+                    0.6011596165162166, 
+                    0.5313989090476864, 
+                    0.5313989090476864, 
+                    0.4637947160870135, 
+                    0.4637947160870135, 
+                    0.39777151631352775, 
+                    0.39777151631352775, 
+                    0.3329011646252955, 
+                    0.3329011646252955, 
+                    0.2689872602537011, 
+                    0.2689872602537011, 
+                    0.2056953254210505, 
+                    0.2056953254210505, 
+                    0.11991399729529492, 
+                    0.11991399729529492
+                ], 
+                0.5013940334320068
+            ], 
+            [
+                1.09375, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9988018661616828, 
+                    0.9988018661616828, 
+                    0.9987550272953587, 
+                    0.9987550272953587, 
+                    0.9987054276694513, 
+                    0.9987054276694513, 
+                    0.9422169002558418, 
+                    0.9422169002558418, 
+                    0.8392931843332812, 
+                    0.8392931843332812, 
+                    0.752314978783227, 
+                    0.752314978783227, 
+                    0.6741090791638713, 
+                    0.6741090791638713, 
+                    0.6011652662921795, 
+                    0.6011652662921795, 
+                    0.531418707162213, 
+                    0.531418707162213, 
+                    0.46381997367537436, 
+                    0.46381997367537436, 
+                    0.3977929928954335, 
+                    0.3977929928954335, 
+                    0.33291697620692234, 
+                    0.33291697620692234, 
+                    0.2689960673546852, 
+                    0.2689960673546852, 
+                    0.20569754308726673, 
+                    0.20569754308726673, 
+                    0.11992298190181915, 
+                    0.11992298190181915
+                ], 
+                0.5013698935508728
+            ], 
+            [
+                1.1135293245315552, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9987581751232772, 
+                    0.9987581751232772, 
+                    0.9987095925057357, 
+                    0.9987095925057357, 
+                    0.998660106008365, 
+                    0.998660106008365, 
+                    0.9421293202934586, 
+                    0.9421293202934586, 
+                    0.8392145024276029, 
+                    0.8392145024276029, 
+                    0.7522589631788474, 
+                    0.7522589631788474, 
+                    0.6740838855626945, 
+                    0.6740838855626945, 
+                    0.6011642981093057, 
+                    0.6011642981093057, 
+                    0.531431858377148, 
+                    0.531431858377148, 
+                    0.46383880971028996, 
+                    0.46383880971028996, 
+                    0.3978088707167567, 
+                    0.3978088707167567, 
+                    0.3329280165680944, 
+                    0.3329280165680944, 
+                    0.26900098260496447, 
+                    0.26900098260496447, 
+                    0.2056966082967982, 
+                    0.2056966082967982, 
+                    0.11993028951209943, 
+                    0.11993028951209943
+                ], 
+                0.5013251900672913
+            ], 
+            [
+                1.1336663961410522, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9987151575873946, 
+                    0.9987151575873946, 
+                    0.9986648840921919, 
+                    0.9986648840921919, 
+                    0.9986156879455901, 
+                    0.9986156879455901, 
+                    0.9420354067479219, 
+                    0.9420354067479219, 
+                    0.839127821631206, 
+                    0.839127821631206, 
+                    0.7521947321426276, 
+                    0.7521947321426276, 
+                    0.6740502408830958, 
+                    0.6740502408830958, 
+                    0.6011551087670763, 
+                    0.6011551087670763, 
+                    0.5314371562050165, 
+                    0.5314371562050165, 
+                    0.46385035776820593, 
+                    0.46385035776820593, 
+                    0.39781852173754123, 
+                    0.39781852173754123, 
+                    0.3329338009014036, 
+                    0.3329338009014036, 
+                    0.2690015896645548, 
+                    0.2690015896645548, 
+                    0.20569213450235635, 
+                    0.20569213450235635, 
+                    0.11993576428530342, 
+                    0.11993576428530342
+                ], 
+                0.5012563467025757
+            ], 
+            [
+                1.154167652130127, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9986729301708436, 
+                    0.9986729301708436, 
+                    0.9986210262267438, 
+                    0.9986210262267438, 
+                    0.9985722983063429, 
+                    0.9985722983063429, 
+                    0.941932803103982, 
+                    0.941932803103982, 
+                    0.8390304167447187, 
+                    0.8390304167447187, 
+                    0.7521196420634585, 
+                    0.7521196420634585, 
+                    0.6740058006520118, 
+                    0.6740058006520118, 
+                    0.6011358522461274, 
+                    0.6011358522461274, 
+                    0.5314332138342545, 
+                    0.5314332138342545, 
+                    0.4638536097381141, 
+                    0.4638536097381141, 
+                    0.39782119774879016, 
+                    0.39782119774879016, 
+                    0.33293373702568, 
+                    0.33293373702568, 
+                    0.26899737385192163, 
+                    0.26899737385192163, 
+                    0.20568364394146482, 
+                    0.20568364394146482, 
+                    0.1199392089989145, 
+                    0.1199392089989145
+                ], 
+                0.5011588335037231
+            ], 
+            [
+                1.1750396490097046, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9986316039207382, 
+                    0.9986316039207382, 
+                    0.9985781371748848, 
+                    0.9985781371748848, 
+                    0.9985300548471366, 
+                    0.9985300548471366, 
+                    0.9418185557378347, 
+                    0.9418185557378347, 
+                    0.8389189616333234, 
+                    0.8389189616333234, 
+                    0.7520305381909062, 
+                    0.7520305381909062, 
+                    0.6739478203649516, 
+                    0.6739478203649516, 
+                    0.6011043894061004, 
+                    0.6011043894061004, 
+                    0.5314184242006067, 
+                    0.5314184242006067, 
+                    0.463847383255924, 
+                    0.463847383255924, 
+                    0.39781600337874273, 
+                    0.39781600337874273, 
+                    0.3329271023531348, 
+                    0.3329271023531348, 
+                    0.268987701825838, 
+                    0.268987701825838, 
+                    0.20567054912855126, 
+                    0.20567054912855126, 
+                    0.11994037675776033, 
+                    0.11994037675776033
+                ], 
+                0.5010274648666382
+            ], 
+            [
+                1.1962890625, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9985912839662385, 
+                    0.9985912839662385, 
+                    0.9985363289455945, 
+                    0.9985363289455945, 
+                    0.9984890679917402, 
+                    0.9984890679917402, 
+                    0.9416889801418283, 
+                    0.9416889801418283, 
+                    0.838789403566148, 
+                    0.838789403566148, 
+                    0.7519236529062474, 
+                    0.7519236529062474, 
+                    0.6738730761878476, 
+                    0.6738730761878476, 
+                    0.6010582274214007, 
+                    0.6010582274214007, 
+                    0.5313909121963687, 
+                    0.5313909121963687, 
+                    0.46383028296018314, 
+                    0.46383028296018314, 
+                    0.39780186396590533, 
+                    0.39780186396590533, 
+                    0.33291301634207104, 
+                    0.33291301634207104, 
+                    0.26897179713203695, 
+                    0.26897179713203695, 
+                    0.20565213042839137, 
+                    0.20565213042839137, 
+                    0.11993896093900817, 
+                    0.11993896093900817
+                ], 
+                0.5008559226989746
+            ]
+        ]
+    }, 
+    {
+        "block_size": 33, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8402777910232544, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993880186921101, 
+                    0.9993880186921101, 
+                    0.9993660951043051, 
+                    0.9993660951043051, 
+                    0.9993277925839565, 
+                    0.9993277925839565, 
+                    0.9432051827941332, 
+                    0.9432051827941332, 
+                    0.8402669090863956, 
+                    0.8402669090863956, 
+                    0.7529212984929324, 
+                    0.7529212984929324, 
+                    0.6742222060353489, 
+                    0.6742222060353489, 
+                    0.600941167236892, 
+                    0.600941167236892, 
+                    0.5308511302773736, 
+                    0.5308511302773736, 
+                    0.4632353311675411, 
+                    0.4632353311675411, 
+                    0.39726566860418194, 
+                    0.39726566860418194, 
+                    0.33251797004073363, 
+                    0.33251797004073363, 
+                    0.2687246024324776, 
+                    0.2687246024324776, 
+                    0.20554710549708763, 
+                    0.20554710549708763, 
+                    0.11974520472742703, 
+                    0.11974520472742703
+                ], 
+                0.5009666085243225
+            ], 
+            [
+                0.855028510093689, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993499267619531, 
+                    0.9993499267619531, 
+                    0.9993264396849955, 
+                    0.9993264396849955, 
+                    0.9992865261862867, 
+                    0.9992865261862867, 
+                    0.943125963818554, 
+                    0.943125963818554, 
+                    0.8401959930737192, 
+                    0.8401959930737192, 
+                    0.7528630541141876, 
+                    0.7528630541141876, 
+                    0.6741981728769834, 
+                    0.6741981728769834, 
+                    0.6009524431093882, 
+                    0.6009524431093882, 
+                    0.5308937379456475, 
+                    0.5308937379456475, 
+                    0.4632916591991679, 
+                    0.4632916591991679, 
+                    0.39732134113363526, 
+                    0.39732134113363526, 
+                    0.33256454145022896, 
+                    0.33256454145022896, 
+                    0.26875894677295614, 
+                    0.26875894677295614, 
+                    0.20556894964919875, 
+                    0.20556894964919875, 
+                    0.11976510947527412, 
+                    0.11976510947527412
+                ], 
+                0.5010296106338501
+            ], 
+            [
+                0.8700381517410278, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999310868860361, 
+                    0.999310868860361, 
+                    0.9992857679961213, 
+                    0.9992857679961213, 
+                    0.9992442935902736, 
+                    0.9992442935902736, 
+                    0.9430468875537867, 
+                    0.9430468875537867, 
+                    0.8401264892953063, 
+                    0.8401264892953063, 
+                    0.7528077016176871, 
+                    0.7528077016176871, 
+                    0.6741777480106605, 
+                    0.6741777480106605, 
+                    0.6009664461007855, 
+                    0.6009664461007855, 
+                    0.530937505389843, 
+                    0.530937505389843, 
+                    0.4633473820760904, 
+                    0.4633473820760904, 
+                    0.39737532353073296, 
+                    0.39737532353073296, 
+                    0.3326090909723573, 
+                    0.3326090909723573, 
+                    0.2687914592110569, 
+                    0.2687914592110569, 
+                    0.20558940960972424, 
+                    0.20558940960972424, 
+                    0.11978407219492698, 
+                    0.11978407219492698
+                ], 
+                0.5010908842086792
+            ], 
+            [
+                0.8853113055229187, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992709347004882, 
+                    0.9992709347004882, 
+                    0.999244174261535, 
+                    0.999244174261535, 
+                    0.99920120081383, 
+                    0.99920120081383, 
+                    0.9429681140310552, 
+                    0.9429681140310552, 
+                    0.8400584616712017, 
+                    0.8400584616712017, 
+                    0.7527551783420978, 
+                    0.7527551783420978, 
+                    0.6741606697641537, 
+                    0.6741606697641537, 
+                    0.6009827998136549, 
+                    0.6009827998136549, 
+                    0.5309820180773587, 
+                    0.5309820180773587, 
+                    0.4634021818580418, 
+                    0.4634021818580418, 
+                    0.39742742841876677, 
+                    0.39742742841876677, 
+                    0.33265153548518844, 
+                    0.33265153548518844, 
+                    0.2688221155974221, 
+                    0.2688221155974221, 
+                    0.2056084819666306, 
+                    0.2056084819666306, 
+                    0.11980210576513166, 
+                    0.11980210576513166
+                ], 
+                0.5011498332023621
+            ], 
+            [
+                0.9008525609970093, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992302205552996, 
+                    0.9992302205552996, 
+                    0.99920175980449, 
+                    0.99920175980449, 
+                    0.9991573609353436, 
+                    0.9991573609353436, 
+                    0.9428897681242681, 
+                    0.9428897681242681, 
+                    0.8399919207262436, 
+                    0.8399919207262436, 
+                    0.7527053559972413, 
+                    0.7527053559972413, 
+                    0.6741466145581408, 
+                    0.6741466145581408, 
+                    0.6010010878557621, 
+                    0.6010010878557621, 
+                    0.5310268440779788, 
+                    0.5310268440779788, 
+                    0.4634557385559914, 
+                    0.4634557385559914, 
+                    0.3974774698577125, 
+                    0.3974774698577125, 
+                    0.33269179040534996, 
+                    0.33269179040534996, 
+                    0.2688508861547581, 
+                    0.2688508861547581, 
+                    0.20562615478601878, 
+                    0.20562615478601878, 
+                    0.1198192185180423, 
+                    0.1198192185180423
+                ], 
+                0.5012059211730957
+            ], 
+            [
+                0.9166666865348816, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991888284773897, 
+                    0.9991888284773897, 
+                    0.9991586322287906, 
+                    0.9991586322287906, 
+                    0.9991128931311273, 
+                    0.9991128931311273, 
+                    0.9428119298478636, 
+                    0.9428119298478636, 
+                    0.8399268142628242, 
+                    0.8399268142628242, 
+                    0.7526580331610885, 
+                    0.7526580331610885, 
+                    0.6741351926718732, 
+                    0.6741351926718732, 
+                    0.6010208519129964, 
+                    0.6010208519129964, 
+                    0.5310715327342501, 
+                    0.5310715327342501, 
+                    0.4635077281286862, 
+                    0.4635077281286862, 
+                    0.3975252607900544, 
+                    0.3975252607900544, 
+                    0.3327297671367725, 
+                    0.3327297671367725, 
+                    0.268877733312396, 
+                    0.268877733312396, 
+                    0.20564240589398172, 
+                    0.20564240589398172, 
+                    0.11983541352855617, 
+                    0.11983541352855617
+                ], 
+                0.5012583136558533
+            ], 
+            [
+                0.9327583909034729, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991468654523624, 
+                    0.9991468654523624, 
+                    0.999114904524534, 
+                    0.999114904524534, 
+                    0.9990679216372332, 
+                    0.9990679216372332, 
+                    0.9427346231836681, 
+                    0.9427346231836681, 
+                    0.8398630167345004, 
+                    0.8398630167345004, 
+                    0.7526129267144505, 
+                    0.7526129267144505, 
+                    0.6741259430864299, 
+                    0.6741259430864299, 
+                    0.601041588938262, 
+                    0.601041588938262, 
+                    0.5311156124137227, 
+                    0.5311156124137227, 
+                    0.46355781969859594, 
+                    0.46355781969859594, 
+                    0.39757060990162535, 
+                    0.39757060990162535, 
+                    0.3327653701229465, 
+                    0.3327653701229465, 
+                    0.2689026092205488, 
+                    0.2689026092205488, 
+                    0.20565720087172298, 
+                    0.20565720087172298, 
+                    0.11985068778296365, 
+                    0.11985068778296365
+                ], 
+                0.5013062357902527
+            ], 
+            [
+                0.9491325616836548, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991044425027982, 
+                    0.9991044425027982, 
+                    0.9990706941162621, 
+                    0.9990706941162621, 
+                    0.9990225746570724, 
+                    0.9990225746570724, 
+                    0.9426578031255172, 
+                    0.9426578031255172, 
+                    0.8398003169711958, 
+                    0.8398003169711958, 
+                    0.7525696618908438, 
+                    0.7525696618908438, 
+                    0.6741183271249895, 
+                    0.6741183271249895, 
+                    0.6010627471907364, 
+                    0.6010627471907364, 
+                    0.5311585871839494, 
+                    0.5311585871839494, 
+                    0.46360567188082835, 
+                    0.46360567188082835, 
+                    0.39761331783139797, 
+                    0.39761331783139797, 
+                    0.3327984934064058, 
+                    0.3327984934064058, 
+                    0.268925452875188, 
+                    0.268925452875188, 
+                    0.20567049071723853, 
+                    0.20567049071723853, 
+                    0.11986503118746064, 
+                    0.11986503118746064
+                ], 
+                0.5013488531112671
+            ], 
+            [
+                0.9657941460609436, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990616737573071, 
+                    0.9990616737573071, 
+                    0.9990261218695858, 
+                    0.9990261218695858, 
+                    0.9989769832344464, 
+                    0.9989769832344464, 
+                    0.9425813405033531, 
+                    0.9425813405033531, 
+                    0.8397384038625603, 
+                    0.8397384038625603, 
+                    0.7525277605485335, 
+                    0.7525277605485335, 
+                    0.674111720531172, 
+                    0.674111720531172, 
+                    0.601083720916655, 
+                    0.601083720916655, 
+                    0.5311999322325752, 
+                    0.5311999322325752, 
+                    0.4636509281180003, 
+                    0.4636509281180003, 
+                    0.397653172649228, 
+                    0.397653172649228, 
+                    0.3328290166473707, 
+                    0.3328290166473707, 
+                    0.26894618679217913, 
+                    0.26894618679217913, 
+                    0.20568220906823395, 
+                    0.20568220906823395, 
+                    0.11987842539714481, 
+                    0.11987842539714481
+                ], 
+                0.5013850331306458
+            ], 
+            [
+                0.98274827003479, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990186755017073, 
+                    0.9990186755017073, 
+                    0.9989813110747495, 
+                    0.9989813110747495, 
+                    0.9989312801137381, 
+                    0.9989312801137381, 
+                    0.9425050040688967, 
+                    0.9425050040688967, 
+                    0.8396768494592062, 
+                    0.8396768494592062, 
+                    0.7524866272046864, 
+                    0.7524866272046864, 
+                    0.6741054036218282, 
+                    0.6741054036218282, 
+                    0.6011038433547512, 
+                    0.6011038433547512, 
+                    0.5312390878346019, 
+                    0.5312390878346019, 
+                    0.4636932108784236, 
+                    0.4636932108784236, 
+                    0.3976899444877249, 
+                    0.3976899444877249, 
+                    0.3328568004763841, 
+                    0.3328568004763841, 
+                    0.2689647131266381, 
+                    0.2689647131266381, 
+                    0.2056922689351537, 
+                    0.2056922689351537, 
+                    0.11989084240269594, 
+                    0.11989084240269594
+                ], 
+                0.5014136433601379
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989755652287792, 
+                    0.9989755652287792, 
+                    0.9989363864256969, 
+                    0.9989363864256969, 
+                    0.9988855986088563, 
+                    0.9988855986088563, 
+                    0.9424284391762086, 
+                    0.9424284391762086, 
+                    0.8396150888712242, 
+                    0.8396150888712242, 
+                    0.7524455322761269, 
+                    0.7524455322761269, 
+                    0.6740985490360146, 
+                    0.6740985490360146, 
+                    0.6011223777499329, 
+                    0.6011223777499329, 
+                    0.5312754516473297, 
+                    0.5312754516473297, 
+                    0.46373211456685154, 
+                    0.46373211456685154, 
+                    0.39772337920083395, 
+                    0.39772337920083395, 
+                    0.33288168109358013, 
+                    0.33288168109358013, 
+                    0.2689809091149017, 
+                    0.2689809091149017, 
+                    0.20570055879274152, 
+                    0.20570055879274152, 
+                    0.1199022428509849, 
+                    0.1199022428509849
+                ], 
+                0.501433253288269
+            ], 
+            [
+                1.017554521560669, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988237689855959, 
+                    0.9988237689855959, 
+                    0.9986867228272746, 
+                    0.9986867228272746, 
+                    0.998567418943371, 
+                    0.998567418943371, 
+                    0.9420462915946187, 
+                    0.9420462915946187, 
+                    0.8392214616224198, 
+                    0.8392214616224198, 
+                    0.7520209760018004, 
+                    0.7520209760018004, 
+                    0.673707871360607, 
+                    0.673707871360607, 
+                    0.6008044068059747, 
+                    0.6008044068059747, 
+                    0.5310180338070564, 
+                    0.5310180338070564, 
+                    0.46353403953875155, 
+                    0.46353403953875155, 
+                    0.39756985432723896, 
+                    0.39756985432723896, 
+                    0.3327609640380736, 
+                    0.3327609640380736, 
+                    0.26888564070806087, 
+                    0.26888564070806087, 
+                    0.20562954547568066, 
+                    0.20562954547568066, 
+                    0.11982033795349054, 
+                    0.11982033795349054
+                ], 
+                0.5005029439926147
+            ], 
+            [
+                1.0354173183441162, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987775925609739, 
+                    0.9987775925609739, 
+                    0.9986320846890243, 
+                    0.9986320846890243, 
+                    0.9985117661656182, 
+                    0.9985117661656182, 
+                    0.9419614669799361, 
+                    0.9419614669799361, 
+                    0.8391532012641282, 
+                    0.8391532012641282, 
+                    0.751976403999468, 
+                    0.751976403999468, 
+                    0.6737002460579384, 
+                    0.6737002460579384, 
+                    0.6008227870844083, 
+                    0.6008227870844083, 
+                    0.5310537619182157, 
+                    0.5310537619182157, 
+                    0.46357131590518347, 
+                    0.46357131590518347, 
+                    0.39760103765835264, 
+                    0.39760103765835264, 
+                    0.33278340456252276, 
+                    0.33278340456252276, 
+                    0.2688994685599325, 
+                    0.2688994685599325, 
+                    0.2056355978260008, 
+                    0.2056355978260008, 
+                    0.1198312366268367, 
+                    0.1198312366268367
+                ], 
+                0.5005074739456177
+            ], 
+            [
+                1.053593635559082, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987315424759825, 
+                    0.9987315424759825, 
+                    0.9985774438761623, 
+                    0.9985774438761623, 
+                    0.9984565513131709, 
+                    0.9984565513131709, 
+                    0.9418747568741197, 
+                    0.9418747568741197, 
+                    0.8390824086702604, 
+                    0.8390824086702604, 
+                    0.7519291357305792, 
+                    0.7519291357305792, 
+                    0.6736891406445003, 
+                    0.6736891406445003, 
+                    0.600836963335874, 
+                    0.600836963335874, 
+                    0.5310844705295961, 
+                    0.5310844705295961, 
+                    0.4636035635387384, 
+                    0.4636035635387384, 
+                    0.397627699708077, 
+                    0.397627699708077, 
+                    0.33280206696842163, 
+                    0.33280206696842163, 
+                    0.2689102671728168, 
+                    0.2689102671728168, 
+                    0.20563927124031914, 
+                    0.20563927124031914, 
+                    0.1198408523726949, 
+                    0.1198408523726949
+                ], 
+                0.5004971623420715
+            ], 
+            [
+                1.0720890760421753, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988043445999115, 
+                    0.9988043445999115, 
+                    0.9987580368538672, 
+                    0.9987580368538672, 
+                    0.9987057147662359, 
+                    0.9987057147662359, 
+                    0.9421068956015289, 
+                    0.9421068956015289, 
+                    0.8393483988719662, 
+                    0.8393483988719662, 
+                    0.7522609916153306, 
+                    0.7522609916153306, 
+                    0.6740444842170408, 
+                    0.6740444842170408, 
+                    0.601162731234917, 
+                    0.601162731234917, 
+                    0.5313788432280555, 
+                    0.5313788432280555, 
+                    0.46384431330239617, 
+                    0.46384431330239617, 
+                    0.3978173561586433, 
+                    0.3978173561586433, 
+                    0.3329476532054956, 
+                    0.3329476532054956, 
+                    0.26901873333232057, 
+                    0.26901873333232057, 
+                    0.20571264150971522, 
+                    0.20571264150971522, 
+                    0.11993636912197977, 
+                    0.11993636912197977
+                ], 
+                0.5013856887817383
+            ], 
+            [
+                1.0909091234207153, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987624154311493, 
+                    0.9987624154311493, 
+                    0.9987143941167194, 
+                    0.9987143941167194, 
+                    0.9986620870916277, 
+                    0.9986620870916277, 
+                    0.942017430659482, 
+                    0.942017430659482, 
+                    0.8392703468965171, 
+                    0.8392703468965171, 
+                    0.7522027689621296, 
+                    0.7522027689621296, 
+                    0.6740174818061848, 
+                    0.6740174818061848, 
+                    0.6011588568962902, 
+                    0.6011588568962902, 
+                    0.5313899075356879, 
+                    0.5313899075356879, 
+                    0.4638585498150427, 
+                    0.4638585498150427, 
+                    0.39782883811008785, 
+                    0.39782883811008785, 
+                    0.33295419440111546, 
+                    0.33295419440111546, 
+                    0.2690201283105387, 
+                    0.2690201283105387, 
+                    0.2057091674024821, 
+                    0.2057091674024821, 
+                    0.11994153180126797, 
+                    0.11994153180126797
+                ], 
+                0.5013302564620972
+            ], 
+            [
+                1.1100594997406006, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987210550089716, 
+                    0.9987210550089716, 
+                    0.998671361799766, 
+                    0.998671361799766, 
+                    0.9986192355747637, 
+                    0.9986192355747637, 
+                    0.9419211418689981, 
+                    0.9419211418689981, 
+                    0.8391840608378182, 
+                    0.8391840608378182, 
+                    0.7521359020025783, 
+                    0.7521359020025783, 
+                    0.67398157594612, 
+                    0.67398157594612, 
+                    0.601146640020232, 
+                    0.601146640020232, 
+                    0.531392948871783, 
+                    0.531392948871783, 
+                    0.4638657654419668, 
+                    0.4638657654419668, 
+                    0.3978344210687605, 
+                    0.3978344210687605, 
+                    0.33295589133524334, 
+                    0.33295589133524334, 
+                    0.2690175519308376, 
+                    0.2690175519308376, 
+                    0.20570240247884175, 
+                    0.20570240247884175, 
+                    0.11994505570937082, 
+                    0.11994505570937082
+                ], 
+                0.5012510418891907
+            ], 
+            [
+                1.1295461654663086, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.998680365693118, 
+                    0.998680365693118, 
+                    0.9986290490414214, 
+                    0.9986290490414214, 
+                    0.9985772705839513, 
+                    0.9985772705839513, 
+                    0.9418156965486825, 
+                    0.9418156965486825, 
+                    0.8390869739289702, 
+                    0.8390869739289702, 
+                    0.752057840619243, 
+                    0.752057840619243, 
+                    0.6739345051260734, 
+                    0.6739345051260734, 
+                    0.6011243370649937, 
+                    0.6011243370649937, 
+                    0.5313866390646941, 
+                    0.5313866390646941, 
+                    0.46386499769151834, 
+                    0.46386499769151834, 
+                    0.39783337667315044, 
+                    0.39783337667315044, 
+                    0.3329521520284843, 
+                    0.3329521520284843, 
+                    0.26901048519756254, 
+                    0.26901048519756254, 
+                    0.20569186596795463, 
+                    0.20569186596795463, 
+                    0.11994673494002996, 
+                    0.11994673494002996
+                ], 
+                0.5011436939239502
+            ], 
+            [
+                1.1493748426437378, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986404451275878, 
+                    0.9986404451275878, 
+                    0.9985875600373626, 
+                    0.9985875600373626, 
+                    0.9985362965036315, 
+                    0.9985362965036315, 
+                    0.9416981938448691, 
+                    0.9416981938448691, 
+                    0.8389759695637633, 
+                    0.8389759695637633, 
+                    0.7519655524260253, 
+                    0.7519655524260253, 
+                    0.6738736296323261, 
+                    0.6738736296323261, 
+                    0.6010899289283855, 
+                    0.6010899289283855, 
+                    0.5313694401194717, 
+                    0.5313694401194717, 
+                    0.4638551182022596, 
+                    0.4638551182022596, 
+                    0.39782483720063394, 
+                    0.39782483720063394, 
+                    0.3329422624238114, 
+                    0.3329422624238114, 
+                    0.26899829889858834, 
+                    0.26899829889858834, 
+                    0.2056769755624401, 
+                    0.2056769755624401, 
+                    0.11994631804186301, 
+                    0.11994631804186301
+                ], 
+                0.501003086566925
+            ], 
+            [
+                1.1695516109466553, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986013858838798, 
+                    0.9986013858838798, 
+                    0.9985469936802432, 
+                    0.9985469936802432, 
+                    0.9984964114301453, 
+                    0.9984964114301453, 
+                    0.9415650416306346, 
+                    0.9415650416306346, 
+                    0.8388472695332916, 
+                    0.8388472695332916, 
+                    0.7518554297718556, 
+                    0.7518554297718556, 
+                    0.6737958593563618, 
+                    0.6737958593563618, 
+                    0.6010410664357702, 
+                    0.6010410664357702, 
+                    0.5313395610444587, 
+                    0.5313395610444587, 
+                    0.4638347981046385, 
+                    0.4638347981046385, 
+                    0.3978077668588481, 
+                    0.3978077668588481, 
+                    0.3329253617225696, 
+                    0.3329253617225696, 
+                    0.26898023157364725, 
+                    0.26898023157364725, 
+                    0.20565702711707418, 
+                    0.20565702711707418, 
+                    0.1199434989197676, 
+                    0.1199434989197676
+                ], 
+                0.5008232593536377
+            ], 
+            [
+                1.1900826692581177, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994400730185871, 
+                    0.9994400730185871, 
+                    0.9983728659295701, 
+                    0.9983728659295701, 
+                    0.9982954960409944, 
+                    0.9982954960409944, 
+                    0.9412593108481205, 
+                    0.9412593108481205, 
+                    0.8385415419917898, 
+                    0.8385415419917898, 
+                    0.7515572985900313, 
+                    0.7515572985900313, 
+                    0.6735454458360827, 
+                    0.6735454458360827, 
+                    0.6008501653220962, 
+                    0.6008501653220962, 
+                    0.5311922990485799, 
+                    0.5311922990485799, 
+                    0.46372202089861364, 
+                    0.46372202089861364, 
+                    0.39771776035522255, 
+                    0.39771776035522255, 
+                    0.3328505758983581, 
+                    0.3328505758983581, 
+                    0.2689163313141189, 
+                    0.2689163313141189, 
+                    0.2056027408491732, 
+                    0.2056027408491732, 
+                    0.11990291312009405, 
+                    0.11990291312009405
+                ], 
+                0.500791072845459
+            ]
+        ]
+    }, 
+    {
+        "block_size": 34, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8444119691848755, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995717119946047, 
+                    0.9995717119946047, 
+                    0.9995494109092096, 
+                    0.9995494109092096, 
+                    0.9994649274964532, 
+                    0.9994649274964532, 
+                    0.9647308702964678, 
+                    0.9647308702964678, 
+                    0.8633744307751006, 
+                    0.8633744307751006, 
+                    0.7779683769831595, 
+                    0.7779683769831595, 
+                    0.7023408674072572, 
+                    0.7023408674072572, 
+                    0.6315323143997404, 
+                    0.6315323143997404, 
+                    0.5644180406885617, 
+                    0.5644180406885617, 
+                    0.5002125176922106, 
+                    0.5002125176922106, 
+                    0.437917459765254, 
+                    0.437917459765254, 
+                    0.3769075300529314, 
+                    0.3769075300529314, 
+                    0.31659759251110103, 
+                    0.31659759251110103, 
+                    0.2568775241856026, 
+                    0.2568775241856026, 
+                    0.19732048857101078, 
+                    0.19732048857101078, 
+                    0.11669484264579377, 
+                    0.11669484264579377
+                ], 
+                0.5008748769760132
+            ], 
+            [
+                0.8588136434555054, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999540933125853, 
+                    0.999540933125853, 
+                    0.9995163662070754, 
+                    0.9995163662070754, 
+                    0.9994255747316747, 
+                    0.9994255747316747, 
+                    0.9645971470172364, 
+                    0.9645971470172364, 
+                    0.8632274482824174, 
+                    0.8632274482824174, 
+                    0.7778185328863262, 
+                    0.7778185328863262, 
+                    0.7022397522559019, 
+                    0.7022397522559019, 
+                    0.6314889994491449, 
+                    0.6314889994491449, 
+                    0.5644455805575533, 
+                    0.5644455805575533, 
+                    0.5002879710631376, 
+                    0.5002879710631376, 
+                    0.4380069407355419, 
+                    0.4380069407355419, 
+                    0.37698300890063985, 
+                    0.37698300890063985, 
+                    0.3166565663698616, 
+                    0.3166565663698616, 
+                    0.25691683443465146, 
+                    0.25691683443465146, 
+                    0.19734258502250365, 
+                    0.19734258502250365, 
+                    0.11671778743051567, 
+                    0.11671778743051567
+                ], 
+                0.500921905040741
+            ], 
+            [
+                0.8734610080718994, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995088288146191, 
+                    0.9995088288146191, 
+                    0.9994818020363084, 
+                    0.9994818020363084, 
+                    0.9993843946580624, 
+                    0.9993843946580624, 
+                    0.9644594835489507, 
+                    0.9644594835489507, 
+                    0.8630784466860401, 
+                    0.8630784466860401, 
+                    0.7776689041480119, 
+                    0.7776689041480119, 
+                    0.7021403916143932, 
+                    0.7021403916143932, 
+                    0.6314479434530745, 
+                    0.6314479434530745, 
+                    0.5644739335654083, 
+                    0.5644739335654083, 
+                    0.5003615831817134, 
+                    0.5003615831817134, 
+                    0.4380925961789334, 
+                    0.4380925961789334, 
+                    0.37705433814166406, 
+                    0.37705433814166406, 
+                    0.3167116154015479, 
+                    0.3167116154015479, 
+                    0.2569530018133016, 
+                    0.2569530018133016, 
+                    0.19736239391684554, 
+                    0.19736239391684554, 
+                    0.11673945372296378, 
+                    0.11673945372296378
+                ], 
+                0.5009605288505554
+            ], 
+            [
+                0.8883581161499023, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9994754137041639, 
+                    0.9994754137041639, 
+                    0.9994457203727571, 
+                    0.9994457203727571, 
+                    0.9993413897716774, 
+                    0.9993413897716774, 
+                    0.9643177806737704, 
+                    0.9643177806737704, 
+                    0.8629271655733537, 
+                    0.8629271655733537, 
+                    0.7775189829806691, 
+                    0.7775189829806691, 
+                    0.70204208099648, 
+                    0.70204208099648, 
+                    0.6314081911744938, 
+                    0.6314081911744938, 
+                    0.5645020106484386, 
+                    0.5645020106484386, 
+                    0.5004324089501354, 
+                    0.5004324089501354, 
+                    0.43817376116446843, 
+                    0.43817376116446843, 
+                    0.37712109888267986, 
+                    0.37712109888267986, 
+                    0.31676247719906436, 
+                    0.31676247719906436, 
+                    0.2569858427766833, 
+                    0.2569858427766833, 
+                    0.19737975941496674, 
+                    0.19737975941496674, 
+                    0.11675978139007374, 
+                    0.11675978139007374
+                ], 
+                0.5009887218475342
+            ], 
+            [
+                0.9035093188285828, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9994407068731198, 
+                    0.9994407068731198, 
+                    0.999408127182958, 
+                    0.999408127182958, 
+                    0.9992965681349307, 
+                    0.9992965681349307, 
+                    0.9641718604176043, 
+                    0.9641718604176043, 
+                    0.8627731933746868, 
+                    0.8627731933746868, 
+                    0.7773680560127572, 
+                    0.7773680560127572, 
+                    0.7019439239019818, 
+                    0.7019439239019818, 
+                    0.6313686149707439, 
+                    0.6313686149707439, 
+                    0.5645285990364459, 
+                    0.5645285990364459, 
+                    0.5004994311136373, 
+                    0.5004994311136373, 
+                    0.4382497263045687, 
+                    0.4382497263045687, 
+                    0.37718283521927654, 
+                    0.37718283521927654, 
+                    0.316808854197324, 
+                    0.316808854197324, 
+                    0.2570151388055028, 
+                    0.2570151388055028, 
+                    0.19739449225737746, 
+                    0.19739449225737746, 
+                    0.11677869543993562, 
+                    0.11677869543993562
+                ], 
+                0.5010040998458862
+            ], 
+            [
+                0.9189189076423645, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9994047315208675, 
+                    0.9994047315208675, 
+                    0.9993690321238041, 
+                    0.9993690321238041, 
+                    0.9992499431604446, 
+                    0.9992499431604446, 
+                    0.9640214424108817, 
+                    0.9640214424108817, 
+                    0.8626159336286842, 
+                    0.8626159336286842, 
+                    0.7772151679025064, 
+                    0.7772151679025064, 
+                    0.7018448039585857, 
+                    0.7018448039585857, 
+                    0.6313278935672406, 
+                    0.6313278935672406, 
+                    0.5645523475462445, 
+                    0.5645523475462445, 
+                    0.5005615487867036, 
+                    0.5005615487867036, 
+                    0.4383197274415622, 
+                    0.4383197274415622, 
+                    0.37723904519064383, 
+                    0.37723904519064383, 
+                    0.3168504058804037, 
+                    0.3168504058804037, 
+                    0.2570406297468512, 
+                    0.2570406297468512, 
+                    0.19740636394779096, 
+                    0.19740636394779096, 
+                    0.11679610371860441, 
+                    0.11679610371860441
+                ], 
+                0.5010039210319519
+            ], 
+            [
+                0.9345913529396057, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9993675145950489, 
+                    0.9993675145950489, 
+                    0.9993284481852482, 
+                    0.9993284481852482, 
+                    0.9992015333305128, 
+                    0.9992015333305128, 
+                    0.9638661152036534, 
+                    0.9638661152036534, 
+                    0.8624545648534582, 
+                    0.8624545648534582, 
+                    0.7770590785620615, 
+                    0.7770590785620615, 
+                    0.7017433521285574, 
+                    0.7017433521285574, 
+                    0.631284486675124, 
+                    0.631284486675124, 
+                    0.5645717483775822, 
+                    0.5645717483775822, 
+                    0.5006175631030293, 
+                    0.5006175631030293, 
+                    0.4383829330595013, 
+                    0.4383829330595013, 
+                    0.3772891699840787, 
+                    0.3772891699840787, 
+                    0.3168867395531701, 
+                    0.3168867395531701, 
+                    0.2570620059252702, 
+                    0.2570620059252702, 
+                    0.19741509982688762, 
+                    0.19741509982688762, 
+                    0.11681189414163931, 
+                    0.11681189414163931
+                ], 
+                0.5009848475456238
+            ], 
+            [
+                0.9505310654640198, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9993290863663556, 
+                    0.9993290863663556, 
+                    0.9992863912806116, 
+                    0.9992863912806116, 
+                    0.9991513618557947, 
+                    0.9991513618557947, 
+                    0.9637053013813316, 
+                    0.9637053013813316, 
+                    0.862287992635851, 
+                    0.862287992635851, 
+                    0.7768982126481283, 
+                    0.7768982126481283, 
+                    0.701637907941601, 
+                    0.701637907941601, 
+                    0.6312366045632917, 
+                    0.6312366045632917, 
+                    0.56458511477423, 
+                    0.56458511477423, 
+                    0.5006661595060238, 
+                    0.5006661595060238, 
+                    0.43843842908251107, 
+                    0.43843842908251107, 
+                    0.3773325810960855, 
+                    0.3773325810960855, 
+                    0.3169173994422849, 
+                    0.3169173994422849, 
+                    0.2570788987835296, 
+                    0.2570788987835296, 
+                    0.1974203708187816, 
+                    0.1974203708187816, 
+                    0.1168259313256374, 
+                    0.1168259313256374
+                ], 
+                0.5009431838989258
+            ], 
+            [
+                0.9667426347732544, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9992894799513413, 
+                    0.9992894799513413, 
+                    0.9992428797840678, 
+                    0.9992428797840678, 
+                    0.999099456272993, 
+                    0.999099456272993, 
+                    0.9635382151108179, 
+                    0.9635382151108179, 
+                    0.862114792230412, 
+                    0.862114792230412, 
+                    0.7767305996585311, 
+                    0.7767305996585311, 
+                    0.7015264734878288, 
+                    0.7015264734878288, 
+                    0.6311821715990749, 
+                    0.6311821715990749, 
+                    0.5645905537823299, 
+                    0.5645905537823299, 
+                    0.5007058861741706, 
+                    0.5007058861741706, 
+                    0.4384852006775091, 
+                    0.4384852006775091, 
+                    0.3773685651335788, 
+                    0.3773685651335788, 
+                    0.31694185383009527, 
+                    0.31694185383009527, 
+                    0.257090869805803, 
+                    0.257090869805803, 
+                    0.19742178360613946, 
+                    0.19742178360613946, 
+                    0.11683805253636748, 
+                    0.11683805253636748
+                ], 
+                0.5008745193481445
+            ], 
+            [
+                0.983230710029602, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9992487307848255, 
+                    0.9992487307848255, 
+                    0.9991979340162269, 
+                    0.9991979340162269, 
+                    0.999045847981233, 
+                    0.999045847981233, 
+                    0.9633638103584546, 
+                    0.9633638103584546, 
+                    0.8619331396405028, 
+                    0.8619331396405028, 
+                    0.7765538027166445, 
+                    0.7765538027166445, 
+                    0.7014066587367407, 
+                    0.7014066587367407, 
+                    0.6311187826047654, 
+                    0.6311187826047654, 
+                    0.5645859333064805, 
+                    0.5645859333064805, 
+                    0.5007351279790557, 
+                    0.5007351279790557, 
+                    0.43852211060051, 
+                    0.43852211060051, 
+                    0.3773963058803037, 
+                    0.3773963058803037, 
+                    0.31695947988523476, 
+                    0.31695947988523476, 
+                    0.25709739739184284, 
+                    0.25709739739184284, 
+                    0.19741886895290103, 
+                    0.19741886895290103, 
+                    0.1168480628280535, 
+                    0.1168480628280535
+                ], 
+                0.5007737874984741
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9992067904708276, 
+                    0.9992067904708276, 
+                    0.99915157575869, 
+                    0.99915157575869, 
+                    0.9989905671574176, 
+                    0.9989905671574176, 
+                    0.9631807181873837, 
+                    0.9631807181873837, 
+                    0.8617407293390802, 
+                    0.8617407293390802, 
+                    0.77636483456455, 
+                    0.77636483456455, 
+                    0.7012756172829993, 
+                    0.7012756172829993, 
+                    0.631043651502388, 
+                    0.631043651502388, 
+                    0.5645688432256818, 
+                    0.5645688432256818, 
+                    0.5007520759299581, 
+                    0.5007520759299581, 
+                    0.4385478740608162, 
+                    0.4385478740608162, 
+                    0.37741486353774384, 
+                    0.37741486353774384, 
+                    0.3169695460797214, 
+                    0.3169695460797214, 
+                    0.2570978615552283, 
+                    0.2570978615552283, 
+                    0.19741106797320251, 
+                    0.19741106797320251, 
+                    0.1168557293859656, 
+                    0.1168557293859656
+                ], 
+                0.5006349086761475
+            ], 
+            [
+                1.0170552730560303, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9991787132761012, 
+                    0.9991787132761012, 
+                    0.9991484516624259, 
+                    0.9991484516624259, 
+                    0.9990500414268723, 
+                    0.9990500414268723, 
+                    0.9632482968815069, 
+                    0.9632482968815069, 
+                    0.8618603321055667, 
+                    0.8618603321055667, 
+                    0.7765715532493819, 
+                    0.7765715532493819, 
+                    0.7015254828227274, 
+                    0.7015254828227274, 
+                    0.6313459052954793, 
+                    0.6313459052954793, 
+                    0.564893366609307, 
+                    0.564893366609307, 
+                    0.5010497160518135, 
+                    0.5010497160518135, 
+                    0.43879361297483394, 
+                    0.43879361297483394, 
+                    0.37760116927961956, 
+                    0.37760116927961956, 
+                    0.31710890421187327, 
+                    0.31710890421187327, 
+                    0.2571964179125691, 
+                    0.2571964179125691, 
+                    0.19747266698084484, 
+                    0.19747266698084484, 
+                    0.11694927164784978, 
+                    0.11694927164784978
+                ], 
+                0.5014110207557678
+            ], 
+            [
+                1.0344014167785645, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9991324815840847, 
+                    0.9991324815840847, 
+                    0.9991001611216027, 
+                    0.9991001611216027, 
+                    0.9989971739246065, 
+                    0.9989971739246065, 
+                    0.9630513578648531, 
+                    0.9630513578648531, 
+                    0.8616441831542381, 
+                    0.8616441831542381, 
+                    0.7763513776048244, 
+                    0.7763513776048244, 
+                    0.7013623194115219, 
+                    0.7013623194115219, 
+                    0.6312344350405121, 
+                    0.6312344350405121, 
+                    0.5648370064654031, 
+                    0.5648370064654031, 
+                    0.5010290866842991, 
+                    0.5010290866842991, 
+                    0.43878663390129263, 
+                    0.43878663390129263, 
+                    0.3775935577243065, 
+                    0.3775935577243065, 
+                    0.3170979538803691, 
+                    0.3170979538803691, 
+                    0.2571803026158564, 
+                    0.2571803026158564, 
+                    0.19745169094159626, 
+                    0.19745169094159626, 
+                    0.11695012278986396, 
+                    0.11695012278986396
+                ], 
+                0.501163899898529
+            ], 
+            [
+                1.0520434379577637, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9990848778134179, 
+                    0.9990848778134179, 
+                    0.9990504110343621, 
+                    0.9990504110343621, 
+                    0.9989428112104998, 
+                    0.9989428112104998, 
+                    0.9628387716543275, 
+                    0.9628387716543275, 
+                    0.8614060898920033, 
+                    0.8614060898920033, 
+                    0.776105262775181, 
+                    0.776105262775181, 
+                    0.7011754624817784, 
+                    0.7011754624817784, 
+                    0.631099665416724, 
+                    0.631099665416724, 
+                    0.5647587245406007, 
+                    0.5647587245406007, 
+                    0.5009892976909421, 
+                    0.5009892976909421, 
+                    0.4387636339786204, 
+                    0.4387636339786204, 
+                    0.3775731025252731, 
+                    0.3775731025252731, 
+                    0.3170765054363765, 
+                    0.3170765054363765, 
+                    0.25715556716577215, 
+                    0.25715556716577215, 
+                    0.19742349089542596, 
+                    0.19742349089542596, 
+                    0.11694767305166366, 
+                    0.11694767305166366
+                ], 
+                0.500853419303894
+            ], 
+            [
+                1.069986343383789, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9990359194142088, 
+                    0.9990359194142088, 
+                    0.998999218630926, 
+                    0.998999218630926, 
+                    0.998886981934066, 
+                    0.998886981934066, 
+                    0.9626068937897956, 
+                    0.9626068937897956, 
+                    0.8611405831902661, 
+                    0.8611405831902661, 
+                    0.7758268010744811, 
+                    0.7758268010744811, 
+                    0.7009593247348032, 
+                    0.7009593247348032, 
+                    0.6309365646303168, 
+                    0.6309365646303168, 
+                    0.5646544529972017, 
+                    0.5646544529972017, 
+                    0.5009273325440823, 
+                    0.5009273325440823, 
+                    0.438722380349458, 
+                    0.438722380349458, 
+                    0.3775380714793523, 
+                    0.3775380714793523, 
+                    0.31704313772711795, 
+                    0.31704313772711795, 
+                    0.25712097503141207, 
+                    0.25712097503141207, 
+                    0.1973869498024838, 
+                    0.1973869498024838, 
+                    0.1169414522892879, 
+                    0.1169414522892879
+                ], 
+                0.5004680156707764
+            ], 
+            [
+                1.0882352590560913, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9991236792267502, 
+                    0.9991236792267502, 
+                    0.9991075155576669, 
+                    0.9991075155576669, 
+                    0.99905909976096, 
+                    0.99905909976096, 
+                    0.9627673932543541, 
+                    0.9627673932543541, 
+                    0.8613334099913362, 
+                    0.8613334099913362, 
+                    0.7761063895686089, 
+                    0.7761063895686089, 
+                    0.7012624157403965, 
+                    0.7012624157403965, 
+                    0.6312695286818407, 
+                    0.6312695286818407, 
+                    0.5649843831541993, 
+                    0.5649843831541993, 
+                    0.5012151753445298, 
+                    0.5012151753445298, 
+                    0.4389535183648295, 
+                    0.4389535183648295, 
+                    0.3777118041246858, 
+                    0.3777118041246858, 
+                    0.3171717759969427, 
+                    0.3171717759969427, 
+                    0.25721042616931855, 
+                    0.25721042616931855, 
+                    0.19743867225201403, 
+                    0.19743867225201403, 
+                    0.11704754717615037, 
+                    0.11704754717615037
+                ], 
+                0.5013571381568909
+            ], 
+            [
+                1.1067954301834106, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9990796653341844, 
+                    0.9990796653341844, 
+                    0.999062503632226, 
+                    0.999062503632226, 
+                    0.9990121617979573, 
+                    0.9990121617979573, 
+                    0.9624938922467555, 
+                    0.9624938922467555, 
+                    0.8609988959091333, 
+                    0.8609988959091333, 
+                    0.775742060447086, 
+                    0.775742060447086, 
+                    0.7009654335105846, 
+                    0.7009654335105846, 
+                    0.6310254584718974, 
+                    0.6310254584718974, 
+                    0.5648045228015435, 
+                    0.5648045228015435, 
+                    0.5010888717605985, 
+                    0.5010888717605985, 
+                    0.4388599854997246, 
+                    0.4388599854997246, 
+                    0.3776356298369947, 
+                    0.3776356298369947, 
+                    0.3171052509330393, 
+                    0.3171052509330393, 
+                    0.25714877727606394, 
+                    0.25714877727606394, 
+                    0.1973795712924477, 
+                    0.1973795712924477, 
+                    0.11703030951331943, 
+                    0.11703030951331943
+                ], 
+                0.5007739663124084
+            ], 
+            [
+                1.1256722211837769, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9991431311839777, 
+                    0.9991431311839777, 
+                    0.9991431311839777, 
+                    0.9991431311839777, 
+                    0.9991431311839777, 
+                    0.9991431311839777, 
+                    0.9624942130910574, 
+                    0.9624942130910574, 
+                    0.8609698318569089, 
+                    0.8609698318569089, 
+                    0.7757441582834882, 
+                    0.7757441582834882, 
+                    0.7010054970243403, 
+                    0.7010054970243403, 
+                    0.6310987908692335, 
+                    0.6310987908692335, 
+                    0.5648986045485359, 
+                    0.5648986045485359, 
+                    0.5011813300201534, 
+                    0.5011813300201534, 
+                    0.43893613635014134, 
+                    0.43893613635014134, 
+                    0.3776895233914637, 
+                    0.3776895233914637, 
+                    0.3171396083175949, 
+                    0.3171396083175949, 
+                    0.2571641207317374, 
+                    0.2571641207317374, 
+                    0.19737438151704167, 
+                    0.19737438151704167, 
+                    0.11708744854447953, 
+                    0.11708744854447953
+                ], 
+                0.5010157227516174
+            ], 
+            [
+                1.1448708772659302, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9997986012398307, 
+                    0.9997986012398307, 
+                    0.9994222033962087, 
+                    0.9994222033962087, 
+                    0.9994179811812227, 
+                    0.9994179811812227, 
+                    0.9621366490879907, 
+                    0.9621366490879907, 
+                    0.8606515138511937, 
+                    0.8606515138511937, 
+                    0.775455294527674, 
+                    0.775455294527674, 
+                    0.7008124912433793, 
+                    0.7008124912433793, 
+                    0.6309568841677026, 
+                    0.6309568841677026, 
+                    0.5648174819495326, 
+                    0.5648174819495326, 
+                    0.5011533808649733, 
+                    0.5011533808649733, 
+                    0.43894031739436806, 
+                    0.43894031739436806, 
+                    0.37770899969756544, 
+                    0.37770899969756544, 
+                    0.3171632112253064, 
+                    0.3171632112253064, 
+                    0.2571830250216975, 
+                    0.2571830250216975, 
+                    0.1973780073196689, 
+                    0.1973780073196689, 
+                    0.11717974740946467, 
+                    0.11717974740946467
+                ], 
+                0.5010892748832703
+            ], 
+            [
+                1.16439688205719, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9991059965523545, 
+                    0.9991059965523545, 
+                    0.9990569045528929, 
+                    0.9990569045528929, 
+                    0.9989217418150967, 
+                    0.9989217418150967, 
+                    0.9622933744819555, 
+                    0.9622933744819555, 
+                    0.8606130607369915, 
+                    0.8606130607369915, 
+                    0.7753786322799078, 
+                    0.7753786322799078, 
+                    0.700741101231117, 
+                    0.700741101231117, 
+                    0.6309090803975815, 
+                    0.6309090803975815, 
+                    0.564786764341789, 
+                    0.564786764341789, 
+                    0.5011228563966394, 
+                    0.5011228563966394, 
+                    0.4388975941853284, 
+                    0.4388975941853284, 
+                    0.37764972444923356, 
+                    0.37764972444923356, 
+                    0.31709086933924135, 
+                    0.31709086933924135, 
+                    0.2571002947098814, 
+                    0.2571002947098814, 
+                    0.19728847055057877, 
+                    0.19728847055057877, 
+                    0.11714580660481975, 
+                    0.11714580660481975
+                ], 
+                0.5005990862846375
+            ], 
+            [
+                1.1842560768127441, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9992422524744958, 
+                    0.9992422524744958, 
+                    0.9992207743127972, 
+                    0.9992207743127972, 
+                    0.9991629129152838, 
+                    0.9991629129152838, 
+                    0.962306480040992, 
+                    0.962306480040992, 
+                    0.8605212740868536, 
+                    0.8605212740868536, 
+                    0.7752963532106872, 
+                    0.7752963532106872, 
+                    0.7006997390118161, 
+                    0.7006997390118161, 
+                    0.6308956897083343, 
+                    0.6308956897083343, 
+                    0.564796873000477, 
+                    0.564796873000477, 
+                    0.501143297405326, 
+                    0.501143297405326, 
+                    0.4389151047221592, 
+                    0.4389151047221592, 
+                    0.3776570313836786, 
+                    0.3776570313836786, 
+                    0.3170864805635214, 
+                    0.3170864805635214, 
+                    0.257081649417381, 
+                    0.257081649417381, 
+                    0.19725059075859863, 
+                    0.19725059075859863, 
+                    0.1172053558168915, 
+                    0.1172053558168915
+                ], 
+                0.5006694793701172
+            ]
+        ]
+    }, 
+    {
+        "block_size": 35, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8483379483222961, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991304573493484, 
+                    0.9991304573493484, 
+                    0.9990521870669564, 
+                    0.9990521870669564, 
+                    0.9989124999520204, 
+                    0.9989124999520204, 
+                    0.9639263260617121, 
+                    0.9639263260617121, 
+                    0.8632162415719823, 
+                    0.8632162415719823, 
+                    0.7782522690174032, 
+                    0.7782522690174032, 
+                    0.7023623252457938, 
+                    0.7023623252457938, 
+                    0.6319982504432562, 
+                    0.6319982504432562, 
+                    0.5648073049168644, 
+                    0.5648073049168644, 
+                    0.5006782420754142, 
+                    0.5006782420754142, 
+                    0.4380682081295887, 
+                    0.4380682081295887, 
+                    0.3767569759353348, 
+                    0.3767569759353348, 
+                    0.3164643392813174, 
+                    0.3164643392813174, 
+                    0.2567444461600589, 
+                    0.2567444461600589, 
+                    0.1972379589046473, 
+                    0.1972379589046473, 
+                    0.11661212720809466, 
+                    0.11661212720809466
+                ], 
+                0.5009447932243347
+            ], 
+            [
+                0.8624064922332764, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990709354175343, 
+                    0.9990709354175343, 
+                    0.9989885318774678, 
+                    0.9989885318774678, 
+                    0.9988400212916506, 
+                    0.9988400212916506, 
+                    0.9637708403232494, 
+                    0.9637708403232494, 
+                    0.8630814212288567, 
+                    0.8630814212288567, 
+                    0.7781255974253786, 
+                    0.7781255974253786, 
+                    0.7022822623110788, 
+                    0.7022822623110788, 
+                    0.6319794378535729, 
+                    0.6319794378535729, 
+                    0.5648570758895777, 
+                    0.5648570758895777, 
+                    0.500765919748259, 
+                    0.500765919748259, 
+                    0.4381780175132397, 
+                    0.4381780175132397, 
+                    0.3768686515933959, 
+                    0.3768686515933959, 
+                    0.31655425859284453, 
+                    0.31655425859284453, 
+                    0.25681041992238646, 
+                    0.25681041992238646, 
+                    0.1972789658898937, 
+                    0.1972789658898937, 
+                    0.11664863576141489, 
+                    0.11664863576141489
+                ], 
+                0.5010597109794617
+            ], 
+            [
+                0.8767082691192627, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999009490621339, 
+                    0.999009490621339, 
+                    0.9989229044325961, 
+                    0.9989229044325961, 
+                    0.9987654135979886, 
+                    0.9987654135979886, 
+                    0.9636147495338281, 
+                    0.9636147495338281, 
+                    0.8629486600584618, 
+                    0.8629486600584618, 
+                    0.7780035416203278, 
+                    0.7780035416203278, 
+                    0.7022087853910105, 
+                    0.7022087853910105, 
+                    0.6319671621174973, 
+                    0.6319671621174973, 
+                    0.5649117620503967, 
+                    0.5649117620503967, 
+                    0.5008552095611675, 
+                    0.5008552095611675, 
+                    0.43828642576284355, 
+                    0.43828642576284355, 
+                    0.3769766752260807, 
+                    0.3769766752260807, 
+                    0.3166401923293732, 
+                    0.3166401923293732, 
+                    0.25687292529045797, 
+                    0.25687292529045797, 
+                    0.1973175509692737, 
+                    0.1973175509692737, 
+                    0.11668353668968423, 
+                    0.11668353668968423
+                ], 
+                0.5011710524559021
+            ], 
+            [
+                0.8912472724914551, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989462355074089, 
+                    0.9989462355074089, 
+                    0.998855415599786, 
+                    0.998855415599786, 
+                    0.9986888281672476, 
+                    0.9986888281672476, 
+                    0.9634584134792669, 
+                    0.9634584134792669, 
+                    0.8628181691682609, 
+                    0.8628181691682609, 
+                    0.7778861607250895, 
+                    0.7778861607250895, 
+                    0.7021416514110634, 
+                    0.7021416514110634, 
+                    0.6319608762550829, 
+                    0.6319608762550829, 
+                    0.5649705494041803, 
+                    0.5649705494041803, 
+                    0.5009453580225232, 
+                    0.5009453580225232, 
+                    0.43839284614060176, 
+                    0.43839284614060176, 
+                    0.37708070854741216, 
+                    0.37708070854741216, 
+                    0.3167220002765519, 
+                    0.3167220002765519, 
+                    0.25693192284630056, 
+                    0.25693192284630056, 
+                    0.19735370063162233, 
+                    0.19735370063162233, 
+                    0.11671683247325541, 
+                    0.11671683247325541
+                ], 
+                0.5012776851654053
+            ], 
+            [
+                0.9060274362564087, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988812921651571, 
+                    0.9988812921651571, 
+                    0.9987861828129434, 
+                    0.9987861828129434, 
+                    0.9986104262238459, 
+                    0.9986104262238459, 
+                    0.9633021398788246, 
+                    0.9633021398788246, 
+                    0.8626900712741493, 
+                    0.8626900712741493, 
+                    0.7777734002344185, 
+                    0.7777734002344185, 
+                    0.7020804990918905, 
+                    0.7020804990918905, 
+                    0.6319599392123497, 
+                    0.6319599392123497, 
+                    0.5650325690560737, 
+                    0.5650325690560737, 
+                    0.5010355982774048, 
+                    0.5010355982774048, 
+                    0.43849670258957035, 
+                    0.43849670258957035, 
+                    0.3771804295912777, 
+                    0.3771804295912777, 
+                    0.31679954866372173, 
+                    0.31679954866372173, 
+                    0.2569873700321357, 
+                    0.2569873700321357, 
+                    0.19738739204737693, 
+                    0.19738739204737693, 
+                    0.11674852193615036, 
+                    0.11674852193615036
+                ], 
+                0.5013782978057861
+            ], 
+            [
+                0.9210526347160339, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988147909752602, 
+                    0.9988147909752602, 
+                    0.9987153286787736, 
+                    0.9987153286787736, 
+                    0.9985303771850332, 
+                    0.9985303771850332, 
+                    0.9631461686850595, 
+                    0.9631461686850595, 
+                    0.8625643852548502, 
+                    0.8625643852548502, 
+                    0.7776650791203332, 
+                    0.7776650791203332, 
+                    0.7020248415977692, 
+                    0.7020248415977692, 
+                    0.6319636138938051, 
+                    0.6319636138938051, 
+                    0.5650968985354329, 
+                    0.5650968985354329, 
+                    0.5011251505297362, 
+                    0.5011251505297362, 
+                    0.43859742802508694, 
+                    0.43859742802508694, 
+                    0.37727552899426975, 
+                    0.37727552899426975, 
+                    0.31687270619329677, 
+                    0.31687270619329677, 
+                    0.25703921775391014, 
+                    0.25703921775391014, 
+                    0.1974185904671562, 
+                    0.1974185904671562, 
+                    0.116778599253861, 
+                    0.116778599253861
+                ], 
+                0.5014714002609253
+            ], 
+            [
+                0.9363270401954651, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985358021439589, 
+                    0.9985358021439589, 
+                    0.9981985167583464, 
+                    0.9981985167583464, 
+                    0.9625619113061917, 
+                    0.9625619113061917, 
+                    0.861981672820571, 
+                    0.861981672820571, 
+                    0.7769976920427085, 
+                    0.7769976920427085, 
+                    0.701375387076956, 
+                    0.701375387076956, 
+                    0.6313918390302492, 
+                    0.6313918390302492, 
+                    0.564599019138466, 
+                    0.564599019138466, 
+                    0.5007389099372148, 
+                    0.5007389099372148, 
+                    0.43829478947161715, 
+                    0.43829478947161715, 
+                    0.3770420052644923, 
+                    0.3770420052644923, 
+                    0.31669169157570476, 
+                    0.31669169157570476, 
+                    0.2568976874874002, 
+                    0.2568976874874002, 
+                    0.1973141705672121, 
+                    0.1973141705672121, 
+                    0.11665414829126482, 
+                    0.11665414829126482
+                ], 
+                0.5005492568016052
+            ], 
+            [
+                0.9518547058105469, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99925292265493, 
+                    0.99925292265493, 
+                    0.9983008331105023, 
+                    0.9983008331105023, 
+                    0.9979456029247887, 
+                    0.9979456029247887, 
+                    0.9622934276090305, 
+                    0.9622934276090305, 
+                    0.8618708480930865, 
+                    0.8618708480930865, 
+                    0.776935813594385, 
+                    0.776935813594385, 
+                    0.7013770258750301, 
+                    0.7013770258750301, 
+                    0.6314561506123864, 
+                    0.6314561506123864, 
+                    0.5647199849659102, 
+                    0.5647199849659102, 
+                    0.5008901590022169, 
+                    0.5008901590022169, 
+                    0.43846022690257347, 
+                    0.43846022690257347, 
+                    0.3772059510983737, 
+                    0.3772059510983737, 
+                    0.3168389961860812, 
+                    0.3168389961860812, 
+                    0.25702608161175455, 
+                    0.25702608161175455, 
+                    0.19741989466623588, 
+                    0.19741989466623588, 
+                    0.11677728918717484, 
+                    0.11677728918717484
+                ], 
+                0.5008148550987244
+            ], 
+            [
+                0.9676399230957031, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983556047979758, 
+                    0.9983556047979758, 
+                    0.9982341948285773, 
+                    0.9982341948285773, 
+                    0.9980183950979653, 
+                    0.9980183950979653, 
+                    0.9624022833143228, 
+                    0.9624022833143228, 
+                    0.8619072673726872, 
+                    0.8619072673726872, 
+                    0.777010303646509, 
+                    0.777010303646509, 
+                    0.7015177648502913, 
+                    0.7015177648502913, 
+                    0.6316467384273091, 
+                    0.6316467384273091, 
+                    0.5649645645110795, 
+                    0.5649645645110795, 
+                    0.5011083033480205, 
+                    0.5011083033480205, 
+                    0.43864755915366277, 
+                    0.43864755915366277, 
+                    0.3773469166226858, 
+                    0.3773469166226858, 
+                    0.31692281429558394, 
+                    0.31692281429558394, 
+                    0.257064300647778, 
+                    0.257064300647778, 
+                    0.19742006396210257, 
+                    0.19742006396210257, 
+                    0.11677071655139125, 
+                    0.11677071655139125
+                ], 
+                0.5005457997322083
+            ], 
+            [
+                0.9836869239807129, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9980481883369552, 
+                    0.9980481883369552, 
+                    0.9977095238859189, 
+                    0.9977095238859189, 
+                    0.9619010432030309, 
+                    0.9619010432030309, 
+                    0.861431420796257, 
+                    0.861431420796257, 
+                    0.7764904769842556, 
+                    0.7764904769842556, 
+                    0.7010425570678503, 
+                    0.7010425570678503, 
+                    0.6312555254781882, 
+                    0.6312555254781882, 
+                    0.5646505190826463, 
+                    0.5646505190826463, 
+                    0.5008775597773654, 
+                    0.5008775597773654, 
+                    0.43847477557213327, 
+                    0.43847477557213327, 
+                    0.3772161031579509, 
+                    0.3772161031579509, 
+                    0.3168187492863307, 
+                    0.3168187492863307, 
+                    0.25697966609627115, 
+                    0.25697966609627115, 
+                    0.19735434381444766, 
+                    0.19735434381444766, 
+                    0.11669294672752337, 
+                    0.11669294672752337
+                ], 
+                0.5005009174346924
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9979463518317119, 
+                    0.9979463518317119, 
+                    0.9975954808779774, 
+                    0.9975954808779774, 
+                    0.9617246356385994, 
+                    0.9617246356385994, 
+                    0.8612971298983035, 
+                    0.8612971298983035, 
+                    0.7763833813148053, 
+                    0.7763833813148053, 
+                    0.7009969352798021, 
+                    0.7009969352798021, 
+                    0.6312700053043604, 
+                    0.6312700053043604, 
+                    0.5647199830880639, 
+                    0.5647199830880639, 
+                    0.5009625718459036, 
+                    0.5009625718459036, 
+                    0.4385628885935487, 
+                    0.4385628885935487, 
+                    0.37729364334765464, 
+                    0.37729364334765464, 
+                    0.3168751403332447, 
+                    0.3168751403332447, 
+                    0.25701737151023607, 
+                    0.25701737151023607, 
+                    0.1973749772042109, 
+                    0.1973749772042109, 
+                    0.11671729060143973, 
+                    0.11671729060143973
+                ], 
+                0.5006145238876343
+            ], 
+            [
+                1.0165836811065674, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.997846696730266, 
+                    0.997846696730266, 
+                    0.9974883361162208, 
+                    0.9974883361162208, 
+                    0.961560450029822, 
+                    0.961560450029822, 
+                    0.861175601931277, 
+                    0.861175601931277, 
+                    0.776292106430194, 
+                    0.776292106430194, 
+                    0.7009669234650842, 
+                    0.7009669234650842, 
+                    0.6312971947747797, 
+                    0.6312971947747797, 
+                    0.5647983402584229, 
+                    0.5647983402584229, 
+                    0.5010523609455235, 
+                    0.5010523609455235, 
+                    0.4386528312477067, 
+                    0.4386528312477067, 
+                    0.3773712067300583, 
+                    0.3773712067300583, 
+                    0.31693115501769814, 
+                    0.31693115501769814, 
+                    0.2570546859621942, 
+                    0.2570546859621942, 
+                    0.19739526153899853, 
+                    0.19739526153899853, 
+                    0.11674319352383689, 
+                    0.11674319352383689
+                ], 
+                0.5007485151290894
+            ], 
+            [
+                1.0334422588348389, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9977353156552595, 
+                    0.9977353156552595, 
+                    0.9973578929671979, 
+                    0.9973578929671979, 
+                    0.9613599603932483, 
+                    0.9613599603932483, 
+                    0.8610170335366522, 
+                    0.8610170335366522, 
+                    0.7761580625929023, 
+                    0.7761580625929023, 
+                    0.7008932698609251, 
+                    0.7008932698609251, 
+                    0.631282563907271, 
+                    0.631282563907271, 
+                    0.5648353656245635, 
+                    0.5648353656245635, 
+                    0.5011061941706733, 
+                    0.5011061941706733, 
+                    0.43871133703161924, 
+                    0.43871133703161924, 
+                    0.37742236907595056, 
+                    0.37742236907595056, 
+                    0.31696633295855253, 
+                    0.31696633295855253, 
+                    0.2570758499189885, 
+                    0.2570758499189885, 
+                    0.19740387522974062, 
+                    0.19740387522974062, 
+                    0.11675748795311194, 
+                    0.11675748795311194
+                ], 
+                0.5007646679878235
+            ], 
+            [
+                1.0505805015563965, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9979169762407178, 
+                    0.9979169762407178, 
+                    0.9977598231718485, 
+                    0.9977598231718485, 
+                    0.9975141461934046, 
+                    0.9975141461934046, 
+                    0.9615939261899441, 
+                    0.9615939261899441, 
+                    0.8612924204449812, 
+                    0.8612924204449812, 
+                    0.77652851644035, 
+                    0.77652851644035, 
+                    0.7013199116259994, 
+                    0.7013199116259994, 
+                    0.6317191447929115, 
+                    0.6317191447929115, 
+                    0.5652789668191842, 
+                    0.5652789668191842, 
+                    0.5014859270256385, 
+                    0.5014859270256385, 
+                    0.4390337621064284, 
+                    0.4390337621064284, 
+                    0.3776825889270048, 
+                    0.3776825889270048, 
+                    0.31716395810616843, 
+                    0.31716395810616843, 
+                    0.2572224922516606, 
+                    0.2572224922516606, 
+                    0.197502447354695, 
+                    0.197502447354695, 
+                    0.1168811440339376, 
+                    0.1168811440339376
+                ], 
+                0.5005124807357788
+            ], 
+            [
+                1.0680029392242432, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9981355277335447, 
+                    0.9981355277335447, 
+                    0.997898031927838, 
+                    0.997898031927838, 
+                    0.9975254964677834, 
+                    0.9975254964677834, 
+                    0.9613858651172713, 
+                    0.9613858651172713, 
+                    0.8611211668885299, 
+                    0.8611211668885299, 
+                    0.7763776704365344, 
+                    0.7763776704365344, 
+                    0.7012239547777785, 
+                    0.7012239547777785, 
+                    0.6316776597305981, 
+                    0.6316776597305981, 
+                    0.565282933695231, 
+                    0.565282933695231, 
+                    0.5015079942606387, 
+                    0.5015079942606387, 
+                    0.4390622665383869, 
+                    0.4390622665383869, 
+                    0.3777075111765799, 
+                    0.3777075111765799, 
+                    0.31717847657650056, 
+                    0.31717847657650056, 
+                    0.25722771477757406, 
+                    0.25722771477757406, 
+                    0.19749945314583647, 
+                    0.19749945314583647, 
+                    0.11688666443350659, 
+                    0.11688666443350659
+                ], 
+                0.5007224082946777
+            ], 
+            [
+                1.085714340209961, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.997672910640662, 
+                    0.997672910640662, 
+                    0.9971542537353111, 
+                    0.9971542537353111, 
+                    0.9608048534294946, 
+                    0.9608048534294946, 
+                    0.8605822095785982, 
+                    0.8605822095785982, 
+                    0.7758086653494124, 
+                    0.7758086653494124, 
+                    0.700721466696452, 
+                    0.700721466696452, 
+                    0.6312739265917673, 
+                    0.6312739265917673, 
+                    0.5649630734733379, 
+                    0.5649630734733379, 
+                    0.5012695173633874, 
+                    0.5012695173633874, 
+                    0.4388784900264549, 
+                    0.4388784900264549, 
+                    0.3775627154767362, 
+                    0.3775627154767362, 
+                    0.31705985135544407, 
+                    0.31705985135544407, 
+                    0.25712908181994887, 
+                    0.25712908181994887, 
+                    0.1974207880571469, 
+                    0.1974207880571469, 
+                    0.11680500590189766, 
+                    0.11680500590189766
+                ], 
+                0.5008522868156433
+            ], 
+            [
+                1.1037193536758423, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987821481270494, 
+                    0.9987821481270494, 
+                    0.997593358603141, 
+                    0.997593358603141, 
+                    0.9970743679047401, 
+                    0.9970743679047401, 
+                    0.9606619116850241, 
+                    0.9606619116850241, 
+                    0.860604994512885, 
+                    0.860604994512885, 
+                    0.7759263107207822, 
+                    0.7759263107207822, 
+                    0.7009029662375514, 
+                    0.7009029662375514, 
+                    0.6314970644021147, 
+                    0.6314970644021147, 
+                    0.5652151985053582, 
+                    0.5652151985053582, 
+                    0.5015120981044379, 
+                    0.5015120981044379, 
+                    0.43909955979820137, 
+                    0.43909955979820137, 
+                    0.37775562255558337, 
+                    0.37775562255558337, 
+                    0.3172206209616741, 
+                    0.3172206209616741, 
+                    0.25725914592317495, 
+                    0.25725914592317495, 
+                    0.19751505425338364, 
+                    0.19751505425338364, 
+                    0.11694687554466776, 
+                    0.11694687554466776
+                ], 
+                0.5011081695556641
+            ], 
+            [
+                1.1220229864120483, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9979486902623582, 
+                    0.9979486902623582, 
+                    0.9977633735108757, 
+                    0.9977633735108757, 
+                    0.9974969205332053, 
+                    0.9974969205332053, 
+                    0.9611869756758956, 
+                    0.9611869756758956, 
+                    0.8610057670417639, 
+                    0.8610057670417639, 
+                    0.7763862575237498, 
+                    0.7763862575237498, 
+                    0.7013790991162947, 
+                    0.7013790991162947, 
+                    0.6319349658905453, 
+                    0.6319349658905453, 
+                    0.5656194161901943, 
+                    0.5656194161901943, 
+                    0.5018221183062552, 
+                    0.5018221183062552, 
+                    0.4393399942356062, 
+                    0.4393399942356062, 
+                    0.3779298660532038, 
+                    0.3779298660532038, 
+                    0.31733598854826045, 
+                    0.31733598854826045, 
+                    0.2573308046016683, 
+                    0.2573308046016683, 
+                    0.19755088551253866, 
+                    0.19755088551253866, 
+                    0.11699784974948574, 
+                    0.11699784974948574
+                ], 
+                0.5011945366859436
+            ], 
+            [
+                1.1406302452087402, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9978753047505835, 
+                    0.9978753047505835, 
+                    0.9976807909030401, 
+                    0.9976807909030401, 
+                    0.9974106060767841, 
+                    0.9974106060767841, 
+                    0.9609750401263617, 
+                    0.9609750401263617, 
+                    0.860816071442833, 
+                    0.860816071442833, 
+                    0.7762195224162918, 
+                    0.7762195224162918, 
+                    0.7012641806263551, 
+                    0.7012641806263551, 
+                    0.631869583055842, 
+                    0.631869583055842, 
+                    0.5655927674654538, 
+                    0.5655927674654538, 
+                    0.5018132033715392, 
+                    0.5018132033715392, 
+                    0.439338334618172, 
+                    0.439338334618172, 
+                    0.37792762605940616, 
+                    0.37792762605940616, 
+                    0.31732818747072383, 
+                    0.31732818747072383, 
+                    0.25731753469922036, 
+                    0.25731753469922036, 
+                    0.19753213643502643, 
+                    0.19753213643502643, 
+                    0.11700060908454729, 
+                    0.11700060908454729
+                ], 
+                0.50094074010849
+            ], 
+            [
+                1.1595460176467896, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9973785638700446, 
+                    0.9973785638700446, 
+                    0.996911186504231, 
+                    0.996911186504231, 
+                    0.9601741394911615, 
+                    0.9601741394911615, 
+                    0.8600612933910969, 
+                    0.8600612933910969, 
+                    0.7754262078739961, 
+                    0.7754262078739961, 
+                    0.7005591370064819, 
+                    0.7005591370064819, 
+                    0.6312945650670434, 
+                    0.6312945650670434, 
+                    0.5651248468317045, 
+                    0.5651248468317045, 
+                    0.5014555328397324, 
+                    0.5014555328397324, 
+                    0.43905587384063915, 
+                    0.43905587384063915, 
+                    0.37770148845031243, 
+                    0.37770148845031243, 
+                    0.3171431182940908, 
+                    0.3171431182940908, 
+                    0.25716423991468274, 
+                    0.25716423991468274, 
+                    0.19740976417387437, 
+                    0.19740976417387437, 
+                    0.11688327127996948, 
+                    0.11688327127996948
+                ], 
+                0.5009493231773376
+            ], 
+            [
+                1.1787755489349365, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9977882352485745, 
+                    0.9977882352485745, 
+                    0.9976749512735069, 
+                    0.9976749512735069, 
+                    0.997529746944125, 
+                    0.997529746944125, 
+                    0.9608643971059989, 
+                    0.9608643971059989, 
+                    0.8607139902581072, 
+                    0.8607139902581072, 
+                    0.7762017223914444, 
+                    0.7762017223914444, 
+                    0.701328080742409, 
+                    0.701328080742409, 
+                    0.6319868086876756, 
+                    0.6319868086876756, 
+                    0.5657466180128986, 
+                    0.5657466180128986, 
+                    0.5019552182511148, 
+                    0.5019552182511148, 
+                    0.43946039811692994, 
+                    0.43946039811692994, 
+                    0.3780210448708765, 
+                    0.3780210448708765, 
+                    0.31738904839568344, 
+                    0.31738904839568344, 
+                    0.25734966690698363, 
+                    0.25734966690698363, 
+                    0.1975345468552759, 
+                    0.1975345468552759, 
+                    0.11707239844474729, 
+                    0.11707239844474729
+                ], 
+                0.5011224746704102
+            ]
+        ]
+    }, 
+    {
+        "block_size": 36, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8520709872245789, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9989753458122979, 
+                    0.9989753458122979, 
+                    0.9989282709173221, 
+                    0.9989282709173221, 
+                    0.998792654530291, 
+                    0.998792654530291, 
+                    0.9825233803728082, 
+                    0.9825233803728082, 
+                    0.8836339545557499, 
+                    0.8836339545557499, 
+                    0.8006819606828022, 
+                    0.8006819606828022, 
+                    0.7268082661542528, 
+                    0.7268082661542528, 
+                    0.6589990136208969, 
+                    0.6589990136208969, 
+                    0.5954705943160374, 
+                    0.5954705943160374, 
+                    0.5340499508578076, 
+                    0.5340499508578076, 
+                    0.47468035689941834, 
+                    0.47468035689941834, 
+                    0.41622237830680064, 
+                    0.41622237830680064, 
+                    0.35878668830529176, 
+                    0.35878668830529176, 
+                    0.30223622626775803, 
+                    0.30223622626775803, 
+                    0.24603996564514027, 
+                    0.24603996564514027, 
+                    0.18978720751542835, 
+                    0.18978720751542835, 
+                    0.11386610602683818, 
+                    0.11386610602683818
+                ], 
+                0.5006803870201111
+            ], 
+            [
+                0.8658211827278137, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9989019697031919, 
+                    0.9989019697031919, 
+                    0.998851051830725, 
+                    0.998851051830725, 
+                    0.998707212645047, 
+                    0.998707212645047, 
+                    0.9822873480849813, 
+                    0.9822873480849813, 
+                    0.88343574667392, 
+                    0.88343574667392, 
+                    0.8004903956408517, 
+                    0.8004903956408517, 
+                    0.7266736829932655, 
+                    0.7266736829932655, 
+                    0.6589555725780046, 
+                    0.6589555725780046, 
+                    0.5955049272445189, 
+                    0.5955049272445189, 
+                    0.5341533146710626, 
+                    0.5341533146710626, 
+                    0.4748209219305892, 
+                    0.4748209219305892, 
+                    0.4163961231154402, 
+                    0.4163961231154402, 
+                    0.3589693638181546, 
+                    0.3589693638181546, 
+                    0.3023892521067519, 
+                    0.3023892521067519, 
+                    0.24615637634016482, 
+                    0.24615637634016482, 
+                    0.18986076918162584, 
+                    0.18986076918162584, 
+                    0.11392948882120872, 
+                    0.11392948882120872
+                ], 
+                0.5009083151817322
+            ], 
+            [
+                0.8797932863235474, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9988259155557254, 
+                    0.9988259155557254, 
+                    0.9987709721921906, 
+                    0.9987709721921906, 
+                    0.9986187872003872, 
+                    0.9986187872003872, 
+                    0.9820502309141279, 
+                    0.9820502309141279, 
+                    0.8832414673586307, 
+                    0.8832414673586307, 
+                    0.8003066527692546, 
+                    0.8003066527692546, 
+                    0.7265510213876749, 
+                    0.7265510213876749, 
+                    0.6589249279719012, 
+                    0.6589249279719012, 
+                    0.5955492453433737, 
+                    0.5955492453433737, 
+                    0.534262762616178, 
+                    0.534262762616178, 
+                    0.47496288954815, 
+                    0.47496288954815, 
+                    0.4165664463136866, 
+                    0.4165664463136866, 
+                    0.3591446454604163, 
+                    0.3591446454604163, 
+                    0.30253425805482176, 
+                    0.30253425805482176, 
+                    0.2462657858486459, 
+                    0.2462657858486459, 
+                    0.18992968130932728, 
+                    0.18992968130932728, 
+                    0.11398937423416988, 
+                    0.11398937423416988
+                ], 
+                0.5011298656463623
+            ], 
+            [
+                0.8939908146858215, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9987472612707332, 
+                    0.9987472612707332, 
+                    0.9986881120902656, 
+                    0.9986881120902656, 
+                    0.9985274851113562, 
+                    0.9985274851113562, 
+                    0.9818126293290313, 
+                    0.9818126293290313, 
+                    0.8830515718581834, 
+                    0.8830515718581834, 
+                    0.8001309906895704, 
+                    0.8001309906895704, 
+                    0.7264400971347317, 
+                    0.7264400971347317, 
+                    0.6589063594711676, 
+                    0.6589063594711676, 
+                    0.5956025483932443, 
+                    0.5956025483932443, 
+                    0.5343771614705921, 
+                    0.5343771614705921, 
+                    0.47510529077745384, 
+                    0.47510529077745384, 
+                    0.41673265100105933, 
+                    0.41673265100105933, 
+                    0.35931225089594415, 
+                    0.35931225089594415, 
+                    0.30267127481694245, 
+                    0.30267127481694245, 
+                    0.24636836453341182, 
+                    0.24636836453341182, 
+                    0.18999408890987157, 
+                    0.18999408890987157, 
+                    0.11404587378668186, 
+                    0.11404587378668186
+                ], 
+                0.5013435482978821
+            ], 
+            [
+                0.9084174633026123, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9986482818196897, 
+                    0.9986482818196897, 
+                    0.9985626049696424, 
+                    0.9985626049696424, 
+                    0.9983182608936816, 
+                    0.9983182608936816, 
+                    0.9813176073849932, 
+                    0.9813176073849932, 
+                    0.882589601342167, 
+                    0.882589601342167, 
+                    0.799618740668417, 
+                    0.799618740668417, 
+                    0.7259441971902354, 
+                    0.7259441971902354, 
+                    0.6584972011275487, 
+                    0.6584972011275487, 
+                    0.5953015414317886, 
+                    0.5953015414317886, 
+                    0.5341649766822392, 
+                    0.5341649766822392, 
+                    0.47496709534270376, 
+                    0.47496709534270376, 
+                    0.4166507871226906, 
+                    0.4166507871226906, 
+                    0.3592681266513188, 
+                    0.3592681266513188, 
+                    0.30264000182376044, 
+                    0.30264000182376044, 
+                    0.24634115718036526, 
+                    0.24634115718036526, 
+                    0.18996790029790808, 
+                    0.18996790029790808, 
+                    0.11400271144018963, 
+                    0.11400271144018963
+                ], 
+                0.5005084872245789
+            ], 
+            [
+                0.9230769276618958, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9985639054605081, 
+                    0.9985639054605081, 
+                    0.9984714733232789, 
+                    0.9984714733232789, 
+                    0.9982145987284765, 
+                    0.9982145987284765, 
+                    0.9810699581759474, 
+                    0.9810699581759474, 
+                    0.8824013365298303, 
+                    0.8824013365298303, 
+                    0.7994522672539035, 
+                    0.7994522672539035, 
+                    0.7258514950671118, 
+                    0.7258514950671118, 
+                    0.6585003215433961, 
+                    0.6585003215433961, 
+                    0.5953728977422441, 
+                    0.5953728977422441, 
+                    0.5342917963377373, 
+                    0.5342917963377373, 
+                    0.475114505033803, 
+                    0.475114505033803, 
+                    0.4168146522693529, 
+                    0.4168146522693529, 
+                    0.3594273452470256, 
+                    0.3594273452470256, 
+                    0.30276731201040835, 
+                    0.30276731201040835, 
+                    0.2464350903030237, 
+                    0.2464350903030237, 
+                    0.19002650168721952, 
+                    0.19002650168721952, 
+                    0.11405526984492233, 
+                    0.11405526984492233
+                ], 
+                0.500713586807251
+            ], 
+            [
+                0.9379729628562927, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9984772550951355, 
+                    0.9984772550951355, 
+                    0.9983777262338811, 
+                    0.9983777262338811, 
+                    0.9981082570046665, 
+                    0.9981082570046665, 
+                    0.980823449618757, 
+                    0.980823449618757, 
+                    0.8822185697977473, 
+                    0.8822185697977473, 
+                    0.7992943752421072, 
+                    0.7992943752421072, 
+                    0.7257697740603227, 
+                    0.7257697740603227, 
+                    0.658513331140701, 
+                    0.658513331140701, 
+                    0.5954503822578997, 
+                    0.5954503822578997, 
+                    0.5344204424547854, 
+                    0.5344204424547854, 
+                    0.4752597337825314, 
+                    0.4752597337825314, 
+                    0.4169725384714307, 
+                    0.4169725384714307, 
+                    0.35957809475926417, 
+                    0.35957809475926417, 
+                    0.30288661165844066, 
+                    0.30288661165844066, 
+                    0.24652250603385115, 
+                    0.24652250603385115, 
+                    0.19008085791050516, 
+                    0.19008085791050516, 
+                    0.11410465124129482, 
+                    0.11410465124129482
+                ], 
+                0.500906229019165
+            ], 
+            [
+                0.9531093835830688, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9983884447052068, 
+                    0.9983884447052068, 
+                    0.9982814746594973, 
+                    0.9982814746594973, 
+                    0.9979993829233464, 
+                    0.9979993829233464, 
+                    0.9805784997452763, 
+                    0.9805784997452763, 
+                    0.88204139335688, 
+                    0.88204139335688, 
+                    0.7991448532719951, 
+                    0.7991448532719951, 
+                    0.7256983422702519, 
+                    0.7256983422702519, 
+                    0.6585351291913524, 
+                    0.6585351291913524, 
+                    0.5955328312943416, 
+                    0.5955328312943416, 
+                    0.5345498273695156, 
+                    0.5345498273695156, 
+                    0.4754019961801714, 
+                    0.4754019961801714, 
+                    0.4171240142216211, 
+                    0.4171240142216211, 
+                    0.35972033490805716, 
+                    0.35972033490805716, 
+                    0.30299806603331053, 
+                    0.30299806603331053, 
+                    0.2466036202111779, 
+                    0.2466036202111779, 
+                    0.19013110915446807, 
+                    0.19013110915446807, 
+                    0.11415097734357132, 
+                    0.11415097734357132
+                ], 
+                0.5010848045349121
+            ], 
+            [
+                0.9684900641441345, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9982975932609267, 
+                    0.9982975932609267, 
+                    0.9981828354732392, 
+                    0.9981828354732392, 
+                    0.9978881297641111, 
+                    0.9978881297641111, 
+                    0.9803354425686884, 
+                    0.9803354425686884, 
+                    0.8818697744505608, 
+                    0.8818697744505608, 
+                    0.7990033496882576, 
+                    0.7990033496882576, 
+                    0.7256363768355582, 
+                    0.7256363768355582, 
+                    0.6585645341850103, 
+                    0.6585645341850103, 
+                    0.5956190593182914, 
+                    0.5956190593182914, 
+                    0.5346788893909222, 
+                    0.5346788893909222, 
+                    0.47554055462649786, 
+                    0.47554055462649786, 
+                    0.41726870147521916, 
+                    0.41726870147521916, 
+                    0.3598540608192984, 
+                    0.3598540608192984, 
+                    0.3031018488284406, 
+                    0.3031018488284406, 
+                    0.24667863982726138, 
+                    0.24667863982726138, 
+                    0.19017738130062722, 
+                    0.19017738130062722, 
+                    0.11419436450274728, 
+                    0.11419436450274728
+                ], 
+                0.5012477040290833
+            ], 
+            [
+                0.9841189384460449, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9982048240422277, 
+                    0.9982048240422277, 
+                    0.9980819308397346, 
+                    0.9980819308397346, 
+                    0.9977746560842173, 
+                    0.9977746560842173, 
+                    0.9800945118118195, 
+                    0.9800945118118195, 
+                    0.8817035398201103, 
+                    0.8817035398201103, 
+                    0.7988693610147488, 
+                    0.7988693610147488, 
+                    0.7255829178519216, 
+                    0.7255829178519216, 
+                    0.6586002820193042, 
+                    0.6586002820193042, 
+                    0.5957078571317178, 
+                    0.5957078571317178, 
+                    0.534806588293026, 
+                    0.534806588293026, 
+                    0.47567471141640144, 
+                    0.47567471141640144, 
+                    0.41740626446082946, 
+                    0.41740626446082946, 
+                    0.3599792907775097, 
+                    0.3599792907775097, 
+                    0.3031981324019397, 
+                    0.3031981324019397, 
+                    0.2467477560972209, 
+                    0.2467477560972209, 
+                    0.1902197813531209, 
+                    0.1902197813531209, 
+                    0.1142349212025906, 
+                    0.1142349212025906
+                ], 
+                0.5013932585716248
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9980954862755345, 
+                    0.9980954862755345, 
+                    0.9979209406637773, 
+                    0.9979209406637773, 
+                    0.9974996846978794, 
+                    0.9974996846978794, 
+                    0.9795358052690639, 
+                    0.9795358052690639, 
+                    0.8812209432855312, 
+                    0.8812209432855312, 
+                    0.7983599252610943, 
+                    0.7983599252610943, 
+                    0.7251229822494893, 
+                    0.7251229822494893, 
+                    0.6582465902224924, 
+                    0.6582465902224924, 
+                    0.5954595658654277, 
+                    0.5954595658654277, 
+                    0.5346380039523889, 
+                    0.5346380039523889, 
+                    0.47556339148865134, 
+                    0.47556339148865134, 
+                    0.41733528172814743, 
+                    0.41733528172814743, 
+                    0.3599318692606883, 
+                    0.3599318692606883, 
+                    0.30315770155510574, 
+                    0.30315770155510574, 
+                    0.24671060014087606, 
+                    0.24671060014087606, 
+                    0.1901862284172458, 
+                    0.1901862284172458, 
+                    0.11418909832668342, 
+                    0.11418909832668342
+                ], 
+                0.5005555748939514
+            ], 
+            [
+                1.0161373615264893, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.997745572351521, 
+                    0.997745572351521, 
+                    0.9971947399275768, 
+                    0.9971947399275768, 
+                    0.9789355312840735, 
+                    0.9789355312840735, 
+                    0.8807062496206697, 
+                    0.8807062496206697, 
+                    0.7978185507420373, 
+                    0.7978185507420373, 
+                    0.7246361911834364, 
+                    0.7246361911834364, 
+                    0.6578728464082247, 
+                    0.6578728464082247, 
+                    0.5951962580506867, 
+                    0.5951962580506867, 
+                    0.5344571982351211, 
+                    0.5344571982351211, 
+                    0.4754414667689258, 
+                    0.4754414667689258, 
+                    0.41725442268043067, 
+                    0.41725442268043067, 
+                    0.3598751209997221, 
+                    0.3598751209997221, 
+                    0.3031090408424303, 
+                    0.3031090408424303, 
+                    0.24666653653040518, 
+                    0.24666653653040518, 
+                    0.1901474384965907, 
+                    0.1901474384965907, 
+                    0.11413794686550907, 
+                    0.11413794686550907
+                ], 
+                0.5010578632354736
+            ], 
+            [
+                1.032535195350647, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9978989436467974, 
+                    0.9978989436467974, 
+                    0.9977010540499038, 
+                    0.9977010540499038, 
+                    0.9972472579212978, 
+                    0.9972472579212978, 
+                    0.9790453298672438, 
+                    0.9790453298672438, 
+                    0.8808990651871216, 
+                    0.8808990651871216, 
+                    0.7981133191793774, 
+                    0.7981133191793774, 
+                    0.7250458580685915, 
+                    0.7250458580685915, 
+                    0.6583428622287502, 
+                    0.6583428622287502, 
+                    0.5956484070337638, 
+                    0.5956484070337638, 
+                    0.5348898278667451, 
+                    0.5348898278667451, 
+                    0.4758160445890463, 
+                    0.4758160445890463, 
+                    0.4175841357853837, 
+                    0.4175841357853837, 
+                    0.3601506671604681, 
+                    0.3601506671604681, 
+                    0.3033220935473988, 
+                    0.3033220935473988, 
+                    0.24682638713244498, 
+                    0.24682638713244498, 
+                    0.19025582681610734, 
+                    0.19025582681610734, 
+                    0.11426022048541985, 
+                    0.11426022048541985
+                ], 
+                0.5007624626159668
+            ], 
+            [
+                1.0491975545883179, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9977983921284199, 
+                    0.9977983921284199, 
+                    0.9975881996794935, 
+                    0.9975881996794935, 
+                    0.9971184676143394, 
+                    0.9971184676143394, 
+                    0.9788030452942434, 
+                    0.9788030452942434, 
+                    0.8807433737172342, 
+                    0.8807433737172342, 
+                    0.7979967053349915, 
+                    0.7979967053349915, 
+                    0.7250133172039854, 
+                    0.7250133172039854, 
+                    0.658392732930215, 
+                    0.658392732930215, 
+                    0.5957397104690586, 
+                    0.5957397104690586, 
+                    0.5350079318636228, 
+                    0.5350079318636228, 
+                    0.4759319034082959, 
+                    0.4759319034082959, 
+                    0.41769584365321877, 
+                    0.41769584365321877, 
+                    0.36024694174543337, 
+                    0.36024694174543337, 
+                    0.30339333864033735, 
+                    0.30339333864033735, 
+                    0.24687580534038667, 
+                    0.24687580534038667, 
+                    0.1902848575586996, 
+                    0.1902848575586996, 
+                    0.1142918162302775, 
+                    0.1142918162302775
+                ], 
+                0.5008278489112854
+            ], 
+            [
+                1.0661288499832153, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9976964953391534, 
+                    0.9976964953391534, 
+                    0.9974735877245781, 
+                    0.9974735877245781, 
+                    0.9969882030210296, 
+                    0.9969882030210296, 
+                    0.9785619636873846, 
+                    0.9785619636873846, 
+                    0.8805895954132081, 
+                    0.8805895954132081, 
+                    0.7978825198486359, 
+                    0.7978825198486359, 
+                    0.7249823264725355, 
+                    0.7249823264725355, 
+                    0.6584413086809766, 
+                    0.6584413086809766, 
+                    0.595826956360042, 
+                    0.595826956360042, 
+                    0.535119347515456, 
+                    0.535119347515456, 
+                    0.4760398643358893, 
+                    0.4760398643358893, 
+                    0.41779864351093315, 
+                    0.41779864351093315, 
+                    0.36033441542143646, 
+                    0.36033441542143646, 
+                    0.3034573392800206, 
+                    0.3034573392800206, 
+                    0.24691961012937763, 
+                    0.24691961012937763, 
+                    0.19030997723228407, 
+                    0.19030997723228407, 
+                    0.11432082209951795, 
+                    0.11432082209951795
+                ], 
+                0.5008642673492432
+            ], 
+            [
+                1.0833333730697632, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9984914522992415, 
+                    0.9984914522992415, 
+                    0.9972503134778006, 
+                    0.9972503134778006, 
+                    0.9965723535086939, 
+                    0.9965723535086939, 
+                    0.977801420474852, 
+                    0.977801420474852, 
+                    0.8800452010122305, 
+                    0.8800452010122305, 
+                    0.7973464907009629, 
+                    0.7973464907009629, 
+                    0.7245228992655247, 
+                    0.7245228992655247, 
+                    0.6581091601829425, 
+                    0.6581091601829425, 
+                    0.5956136436848727, 
+                    0.5956136436848727, 
+                    0.534990090100798, 
+                    0.534990090100798, 
+                    0.47597150692862944, 
+                    0.47597150692862944, 
+                    0.4177708393033627, 
+                    0.4177708393033627, 
+                    0.3603316149464363, 
+                    0.3603316149464363, 
+                    0.3034666533548624, 
+                    0.3034666533548624, 
+                    0.24693384921959644, 
+                    0.24693384921959644, 
+                    0.19032058080359665, 
+                    0.19032058080359665, 
+                    0.11434572422127363, 
+                    0.11434572422127363
+                ], 
+                0.501384973526001
+            ], 
+            [
+                1.1008155345916748, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9974871073261172, 
+                    0.9974871073261172, 
+                    0.9972390696913502, 
+                    0.9972390696913502, 
+                    0.9967240047176146, 
+                    0.9967240047176146, 
+                    0.978079321520153, 
+                    0.978079321520153, 
+                    0.8802809527678512, 
+                    0.8802809527678512, 
+                    0.7976533935825559, 
+                    0.7976533935825559, 
+                    0.724915976966327, 
+                    0.724915976966327, 
+                    0.6585261369236551, 
+                    0.6585261369236551, 
+                    0.5959826961013728, 
+                    0.5959826961013728, 
+                    0.535317286058744, 
+                    0.535317286058744, 
+                    0.4762290538509927, 
+                    0.4762290538509927, 
+                    0.4179759542688366, 
+                    0.4179759542688366, 
+                    0.36048245740753576, 
+                    0.36048245740753576, 
+                    0.3035633879640737, 
+                    0.3035633879640737, 
+                    0.24699010678494976, 
+                    0.24699010678494976, 
+                    0.1903479491499374, 
+                    0.1903479491499374, 
+                    0.11437107561095419, 
+                    0.11437107561095419
+                ], 
+                0.5008330941200256
+            ], 
+            [
+                1.1185797452926636, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.997379630275897, 
+                    0.997379630275897, 
+                    0.9971193582071096, 
+                    0.9971193582071096, 
+                    0.9965904433323364, 
+                    0.9965904433323364, 
+                    0.9778347115097182, 
+                    0.9778347115097182, 
+                    0.8801215436179435, 
+                    0.8801215436179435, 
+                    0.7975333795539046, 
+                    0.7975333795539046, 
+                    0.7248752239347246, 
+                    0.7248752239347246, 
+                    0.6585575514277859, 
+                    0.6585575514277859, 
+                    0.5960474967440107, 
+                    0.5960474967440107, 
+                    0.535401118204472, 
+                    0.535401118204472, 
+                    0.4763085441416044, 
+                    0.4763085441416044, 
+                    0.4180494777562597, 
+                    0.4180494777562597, 
+                    0.36054255597111623, 
+                    0.36054255597111623, 
+                    0.30360510671575053, 
+                    0.30360510671575053, 
+                    0.24701645507833273, 
+                    0.24701645507833273, 
+                    0.19036035278611144, 
+                    0.19036035278611144, 
+                    0.11439224599162472, 
+                    0.11439224599162472
+                ], 
+                0.5007566809654236
+            ], 
+            [
+                1.136630654335022, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9967425669264759, 
+                    0.9967425669264759, 
+                    0.9958404036599141, 
+                    0.9958404036599141, 
+                    0.9765139314408736, 
+                    0.9765139314408736, 
+                    0.8789633210327107, 
+                    0.8789633210327107, 
+                    0.7962852558518118, 
+                    0.7962852558518118, 
+                    0.7236967698640652, 
+                    0.7236967698640652, 
+                    0.6575776159908624, 
+                    0.6575776159908624, 
+                    0.5952861587435939, 
+                    0.5952861587435939, 
+                    0.5347993901544651, 
+                    0.5347993901544651, 
+                    0.4758411348133408, 
+                    0.4758411348133408, 
+                    0.4176762637431799, 
+                    0.4176762637431799, 
+                    0.3602408077965204, 
+                    0.3602408077965204, 
+                    0.30335707922694305, 
+                    0.30335707922694305, 
+                    0.24681266317509662, 
+                    0.24681266317509662, 
+                    0.1902025881143885, 
+                    0.1902025881143885, 
+                    0.11421242918521285, 
+                    0.11421242918521285
+                ], 
+                0.5008545517921448
+            ], 
+            [
+                1.1549729108810425, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9971906004807463, 
+                    0.9971906004807463, 
+                    0.9969748201672124, 
+                    0.9969748201672124, 
+                    0.9965550357709183, 
+                    0.9965550357709183, 
+                    0.9777269869843901, 
+                    0.9777269869843901, 
+                    0.880143100142463, 
+                    0.880143100142463, 
+                    0.7976772147165089, 
+                    0.7976772147165089, 
+                    0.7251724606148596, 
+                    0.7251724606148596, 
+                    0.6589450271953944, 
+                    0.6589450271953944, 
+                    0.5964327010087679, 
+                    0.5964327010087679, 
+                    0.5357713228336475, 
+                    0.5357713228336475, 
+                    0.4766230568568694, 
+                    0.4766230568568694, 
+                    0.41831812144165237, 
+                    0.41831812144165237, 
+                    0.3607582674423366, 
+                    0.3607582674423366, 
+                    0.3037649086670354, 
+                    0.3037649086670354, 
+                    0.2471298633174476, 
+                    0.2471298633174476, 
+                    0.19042959015383532, 
+                    0.19042959015383532, 
+                    0.11449753812438815, 
+                    0.11449753812438815
+                ], 
+                0.5013526082038879
+            ], 
+            [
+                1.1736111640930176, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.997082232858583, 
+                    0.997082232858583, 
+                    0.9968569569555886, 
+                    0.9968569569555886, 
+                    0.9964284000992766, 
+                    0.9964284000992766, 
+                    0.9774647469637183, 
+                    0.9774647469637183, 
+                    0.8799523797580957, 
+                    0.8799523797580957, 
+                    0.7975222345354646, 
+                    0.7975222345354646, 
+                    0.7250892623634655, 
+                    0.7250892623634655, 
+                    0.6589283429316461, 
+                    0.6589283429316461, 
+                    0.5964501057486291, 
+                    0.5964501057486291, 
+                    0.5358078307012697, 
+                    0.5358078307012697, 
+                    0.47665982812011465, 
+                    0.47665982812011465, 
+                    0.4183523098694001, 
+                    0.4183523098694001, 
+                    0.36078409499759967, 
+                    0.36078409499759967, 
+                    0.303779022958538, 
+                    0.303779022958538, 
+                    0.24713415949402465, 
+                    0.24713415949402465, 
+                    0.19042496178921248, 
+                    0.19042496178921248, 
+                    0.11450894659739833, 
+                    0.11450894659739833
+                ], 
+                0.5011127591133118
+            ]
+        ]
+    }, 
+    {
+        "block_size": 37, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8556249737739563, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988779874798211, 
+                    0.9988779874798211, 
+                    0.9988224399141585, 
+                    0.9988224399141585, 
+                    0.9986779838900322, 
+                    0.9986779838900322, 
+                    0.9826165224223893, 
+                    0.9826165224223893, 
+                    0.8840302785772625, 
+                    0.8840302785772625, 
+                    0.8010216720241494, 
+                    0.8010216720241494, 
+                    0.7266610335690736, 
+                    0.7266610335690736, 
+                    0.6585345871704523, 
+                    0.6585345871704523, 
+                    0.5946003269280349, 
+                    0.5946003269280349, 
+                    0.5336563711535534, 
+                    0.5336563711535534, 
+                    0.47459382351946666, 
+                    0.47459382351946666, 
+                    0.4165899438281611, 
+                    0.4165899438281611, 
+                    0.3593912896343656, 
+                    0.3593912896343656, 
+                    0.3027556737826772, 
+                    0.3027556737826772, 
+                    0.24645645854389756, 
+                    0.24645645854389756, 
+                    0.19004303197152247, 
+                    0.19004303197152247, 
+                    0.11408421117941546, 
+                    0.11408421117941546
+                ], 
+                0.5010837316513062
+            ], 
+            [
+                0.8690707087516785, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988010170586141, 
+                    0.9988010170586141, 
+                    0.9987411098556949, 
+                    0.9987411098556949, 
+                    0.9985884143125235, 
+                    0.9985884143125235, 
+                    0.9823946048529186, 
+                    0.9823946048529186, 
+                    0.8838512143160228, 
+                    0.8838512143160228, 
+                    0.800842340043619, 
+                    0.800842340043619, 
+                    0.7265329425620299, 
+                    0.7265329425620299, 
+                    0.6585017536026717, 
+                    0.6585017536026717, 
+                    0.5946572985879796, 
+                    0.5946572985879796, 
+                    0.5337691627026719, 
+                    0.5337691627026719, 
+                    0.4747263390321408, 
+                    0.4747263390321408, 
+                    0.41672413754313153, 
+                    0.41672413754313153, 
+                    0.3595111010189284, 
+                    0.3595111010189284, 
+                    0.30285137125066, 
+                    0.30285137125066, 
+                    0.2465248412259679, 
+                    0.2465248412259679, 
+                    0.19008509056945402, 
+                    0.19008509056945402, 
+                    0.11412242812914385, 
+                    0.11412242812914385
+                ], 
+                0.5012115836143494
+            ], 
+            [
+                0.8827277421951294, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987210346687065, 
+                    0.9987210346687065, 
+                    0.9986565519372709, 
+                    0.9986565519372709, 
+                    0.9984954803145873, 
+                    0.9984954803145873, 
+                    0.9821699961330269, 
+                    0.9821699961330269, 
+                    0.8836731442244641, 
+                    0.8836731442244641, 
+                    0.8006667651339158, 
+                    0.8006667651339158, 
+                    0.7264124803853388, 
+                    0.7264124803853388, 
+                    0.6584774257787218, 
+                    0.6584774257787218, 
+                    0.5947203816516864, 
+                    0.5947203816516864, 
+                    0.533884136631256, 
+                    0.533884136631256, 
+                    0.47485756223734427, 
+                    0.47485756223734427, 
+                    0.4168544925924135, 
+                    0.4168544925924135, 
+                    0.3596257869318935, 
+                    0.3596257869318935, 
+                    0.30294194158608834, 
+                    0.30294194158608834, 
+                    0.24658905280567975, 
+                    0.24658905280567975, 
+                    0.1901243455015784, 
+                    0.1901243455015784, 
+                    0.1141587575782093, 
+                    0.1141587575782093
+                ], 
+                0.5013304948806763
+            ], 
+            [
+                0.8965993523597717, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986381055341735, 
+                    0.9986381055341735, 
+                    0.9985688326450797, 
+                    0.9985688326450797, 
+                    0.9983992754025173, 
+                    0.9983992754025173, 
+                    0.981943082886067, 
+                    0.981943082886067, 
+                    0.8834962871041784, 
+                    0.8834962871041784, 
+                    0.8004950354317125, 
+                    0.8004950354317125, 
+                    0.7262993676283289, 
+                    0.7262993676283289, 
+                    0.6584608753145329, 
+                    0.6584608753145329, 
+                    0.5947885993552986, 
+                    0.5947885993552986, 
+                    0.5340003689792863, 
+                    0.5340003689792863, 
+                    0.47498680599911436, 
+                    0.47498680599911436, 
+                    0.41698059435531026, 
+                    0.41698059435531026, 
+                    0.3597351838343734, 
+                    0.3597351838343734, 
+                    0.3030273866737665, 
+                    0.3030273866737665, 
+                    0.24664914834792795, 
+                    0.24664914834792795, 
+                    0.19016082598679634, 
+                    0.19016082598679634, 
+                    0.11419325080959455, 
+                    0.11419325080959455
+                ], 
+                0.5014389157295227
+            ], 
+            [
+                0.9106889963150024, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985347337651116, 
+                    0.9985347337651116, 
+                    0.9984330117242167, 
+                    0.9984330117242167, 
+                    0.9981751072703622, 
+                    0.9981751072703622, 
+                    0.9814640781434066, 
+                    0.9814640781434066, 
+                    0.8830666761916711, 
+                    0.8830666761916711, 
+                    0.8000018943621894, 
+                    0.8000018943621894, 
+                    0.7257941244361169, 
+                    0.7257941244361169, 
+                    0.6580332249537652, 
+                    0.6580332249537652, 
+                    0.5944641055971541, 
+                    0.5944641055971541, 
+                    0.5337725728069811, 
+                    0.5337725728069811, 
+                    0.4748306965832603, 
+                    0.4748306965832603, 
+                    0.4168727644770784, 
+                    0.4168727644770784, 
+                    0.35965676287676357, 
+                    0.35965676287676357, 
+                    0.30296497705351233, 
+                    0.30296497705351233, 
+                    0.24659584117421368, 
+                    0.24659584117421368, 
+                    0.190116665713136, 
+                    0.190116665713136, 
+                    0.11413659039767995, 
+                    0.11413659039767995
+                ], 
+                0.500511646270752
+            ], 
+            [
+                0.925000011920929, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983048480744032, 
+                    0.9983048480744032, 
+                    0.9979779381452419, 
+                    0.9979779381452419, 
+                    0.9810513568283927, 
+                    0.9810513568283927, 
+                    0.8827122367799919, 
+                    0.8827122367799919, 
+                    0.7996112221447381, 
+                    0.7996112221447381, 
+                    0.7254239084799359, 
+                    0.7254239084799359, 
+                    0.6577540467141507, 
+                    0.6577540467141507, 
+                    0.5942841656360986, 
+                    0.5942841656360986, 
+                    0.5336711743050753, 
+                    0.5336711743050753, 
+                    0.474777877736785, 
+                    0.474777877736785, 
+                    0.41684773765891947, 
+                    0.41684773765891947, 
+                    0.3596431164625374, 
+                    0.3596431164625374, 
+                    0.30295238838451594, 
+                    0.30295238838451594, 
+                    0.2465801727435503, 
+                    0.2465801727435503, 
+                    0.19009901618417818, 
+                    0.19009901618417818, 
+                    0.11411104011513243, 
+                    0.11411104011513243
+                ], 
+                0.5007872581481934
+            ], 
+            [
+                0.939535915851593, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983540104711758, 
+                    0.9983540104711758, 
+                    0.9982359426813843, 
+                    0.9982359426813843, 
+                    0.9979524964868612, 
+                    0.9979524964868612, 
+                    0.9809812107084603, 
+                    0.9809812107084603, 
+                    0.8827048820465411, 
+                    0.8827048820465411, 
+                    0.7996631097487703, 
+                    0.7996631097487703, 
+                    0.7255924768978531, 
+                    0.7255924768978531, 
+                    0.6580321404185682, 
+                    0.6580321404185682, 
+                    0.5946252997883469, 
+                    0.5946252997883469, 
+                    0.5340152687956394, 
+                    0.5340152687956394, 
+                    0.47508608505234873, 
+                    0.47508608505234873, 
+                    0.4171121312013448, 
+                    0.4171121312013448, 
+                    0.3598577690615234, 
+                    0.3598577690615234, 
+                    0.3031178598819351, 
+                    0.3031178598819351, 
+                    0.2467011309503777, 
+                    0.2467011309503777, 
+                    0.1901791115873677, 
+                    0.1901791115873677, 
+                    0.11419983577367465, 
+                    0.11419983577367465
+                ], 
+                0.5006771683692932
+            ], 
+            [
+                0.9543002247810364, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982599154901193, 
+                    0.9982599154901193, 
+                    0.9981330203772583, 
+                    0.9981330203772583, 
+                    0.9978367078303724, 
+                    0.9978367078303724, 
+                    0.9807376858068116, 
+                    0.9807376858068116, 
+                    0.8825258636190553, 
+                    0.8825258636190553, 
+                    0.7994986284033763, 
+                    0.7994986284033763, 
+                    0.7254996492758198, 
+                    0.7254996492758198, 
+                    0.658038038486721, 
+                    0.658038038486721, 
+                    0.5947074477897052, 
+                    0.5947074477897052, 
+                    0.5341329755551291, 
+                    0.5341329755551291, 
+                    0.47520670626980044, 
+                    0.47520670626980044, 
+                    0.4172228084838924, 
+                    0.4172228084838924, 
+                    0.359948993776871, 
+                    0.359948993776871, 
+                    0.30318609094662613, 
+                    0.30318609094662613, 
+                    0.24674737137073718, 
+                    0.24674737137073718, 
+                    0.1902058881169405, 
+                    0.1902058881169405, 
+                    0.11422872532158557, 
+                    0.11422872532158557
+                ], 
+                0.500732958316803
+            ], 
+            [
+                0.9692966341972351, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9981635176329772, 
+                    0.9981635176329772, 
+                    0.9980273517792457, 
+                    0.9980273517792457, 
+                    0.9977181630625837, 
+                    0.9977181630625837, 
+                    0.9804927584064903, 
+                    0.9804927584064903, 
+                    0.8823475541405507, 
+                    0.8823475541405507, 
+                    0.7993365231053337, 
+                    0.7993365231053337, 
+                    0.7254105900920487, 
+                    0.7254105900920487, 
+                    0.6580462343489362, 
+                    0.6580462343489362, 
+                    0.5947886511873373, 
+                    0.5947886511873373, 
+                    0.5342466698292554, 
+                    0.5342466698292554, 
+                    0.4753215258933171, 
+                    0.4753215258933171, 
+                    0.4173268298490639, 
+                    0.4173268298490639, 
+                    0.36003370514698924, 
+                    0.36003370514698924, 
+                    0.3032486986735051, 
+                    0.3032486986735051, 
+                    0.24678923699657052, 
+                    0.24678923699657052, 
+                    0.19022956621367645, 
+                    0.19022956621367645, 
+                    0.11425577778766649, 
+                    0.11425577778766649
+                ], 
+                0.500767171382904
+            ], 
+            [
+                0.9845286011695862, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9980649689444645, 
+                    0.9980649689444645, 
+                    0.9979190853640731, 
+                    0.9979190853640731, 
+                    0.9975970520991139, 
+                    0.9975970520991139, 
+                    0.9802462005808754, 
+                    0.9802462005808754, 
+                    0.8821692585630387, 
+                    0.8821692585630387, 
+                    0.7991758044414304, 
+                    0.7991758044414304, 
+                    0.7253237947560539, 
+                    0.7253237947560539, 
+                    0.6580549663341067, 
+                    0.6580549663341067, 
+                    0.594867254764284, 
+                    0.594867254764284, 
+                    0.5343550632186885, 
+                    0.5343550632186885, 
+                    0.4754296650684569, 
+                    0.4754296650684569, 
+                    0.4174236546707487, 
+                    0.4174236546707487, 
+                    0.3601116040637855, 
+                    0.3601116040637855, 
+                    0.303305512517419, 
+                    0.303305512517419, 
+                    0.24682659025167694, 
+                    0.24682659025167694, 
+                    0.19024999168507092, 
+                    0.19024999168507092, 
+                    0.11428095719491149, 
+                    0.11428095719491149
+                ], 
+                0.5007765889167786
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9979644299026695, 
+                    0.9979644299026695, 
+                    0.99780837952474, 
+                    0.99780837952474, 
+                    0.9974735752831615, 
+                    0.9974735752831615, 
+                    0.9799975533642946, 
+                    0.9799975533642946, 
+                    0.881989996089057, 
+                    0.881989996089057, 
+                    0.7990151781748691, 
+                    0.7990151781748691, 
+                    0.7252374466900412, 
+                    0.7252374466900412, 
+                    0.6580622275776071, 
+                    0.6580622275776071, 
+                    0.5949414414748259, 
+                    0.5949414414748259, 
+                    0.5344567668628033, 
+                    0.5344567668628033, 
+                    0.4755301751615949, 
+                    0.4755301751615949, 
+                    0.4175126844969476, 
+                    0.4175126844969476, 
+                    0.36018233463411087, 
+                    0.36018233463411087, 
+                    0.30335630358899757, 
+                    0.30335630358899757, 
+                    0.24685923676923563, 
+                    0.24685923676923563, 
+                    0.1902669589474415, 
+                    0.1902669589474415, 
+                    0.11430420435451832, 
+                    0.11430420435451832
+                ], 
+                0.5007576942443848
+            ], 
+            [
+                1.0157145261764526, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.997862067977774, 
+                    0.997862067977774, 
+                    0.9976954011620108, 
+                    0.9976954011620108, 
+                    0.9973479417086867, 
+                    0.9973479417086867, 
+                    0.9797460714376326, 
+                    0.9797460714376326, 
+                    0.8818084429247033, 
+                    0.8818084429247033, 
+                    0.7988529921670094, 
+                    0.7988529921670094, 
+                    0.7251493704756705, 
+                    0.7251493704756705, 
+                    0.6580657311263733, 
+                    0.6580657311263733, 
+                    0.5950092059760975, 
+                    0.5950092059760975, 
+                    0.5345502695453892, 
+                    0.5345502695453892, 
+                    0.47562201886848793, 
+                    0.47562201886848793, 
+                    0.41759324665355674, 
+                    0.41759324665355674, 
+                    0.36024547023036646, 
+                    0.36024547023036646, 
+                    0.30340077301268337, 
+                    0.30340077301268337, 
+                    0.24688691550050762, 
+                    0.24688691550050762, 
+                    0.19028020229975634, 
+                    0.19028020229975634, 
+                    0.11432543335876277, 
+                    0.11432543335876277
+                ], 
+                0.5007063150405884
+            ], 
+            [
+                1.031675934791565, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9974703554552348, 
+                    0.9974703554552348, 
+                    0.9969416667567548, 
+                    0.9969416667567548, 
+                    0.9790054842519446, 
+                    0.9790054842519446, 
+                    0.8811688463686355, 
+                    0.8811688463686355, 
+                    0.7981387120785713, 
+                    0.7981387120785713, 
+                    0.7244393566222952, 
+                    0.7244393566222952, 
+                    0.6574689865135669, 
+                    0.6574689865135669, 
+                    0.5945439258743415, 
+                    0.5945439258743415, 
+                    0.5342020883640386, 
+                    0.5342020883640386, 
+                    0.4753607444851381, 
+                    0.4753607444851381, 
+                    0.4173918595204323, 
+                    0.4173918595204323, 
+                    0.36008468157720186, 
+                    0.36008468157720186, 
+                    0.30326791752631654, 
+                    0.30326791752631654, 
+                    0.24677581096378365, 
+                    0.24677581096378365, 
+                    0.19019180307578004, 
+                    0.19019180307578004, 
+                    0.11422886141851496, 
+                    0.11422886141851496
+                ], 
+                0.5009958148002625
+            ], 
+            [
+                1.0478882789611816, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985461127598465, 
+                    0.9985461127598465, 
+                    0.9973860019024673, 
+                    0.9973860019024673, 
+                    0.996890654450974, 
+                    0.996890654450974, 
+                    0.978888856712994, 
+                    0.978888856712994, 
+                    0.8812138623866865, 
+                    0.8812138623866865, 
+                    0.7982971982661192, 
+                    0.7982971982661192, 
+                    0.7247103608879686, 
+                    0.7247103608879686, 
+                    0.6578220031714628, 
+                    0.6578220031714628, 
+                    0.5949295288617659, 
+                    0.5949295288617659, 
+                    0.5345733749368254, 
+                    0.5345733749368254, 
+                    0.47569356588045647, 
+                    0.47569356588045647, 
+                    0.4176824267735429, 
+                    0.4176824267735429, 
+                    0.36032745843930264, 
+                    0.36032745843930264, 
+                    0.30346653683884106, 
+                    0.30346653683884106, 
+                    0.24693371811526812, 
+                    0.24693371811526812, 
+                    0.1903065030543561, 
+                    0.1903065030543561, 
+                    0.11438657778364436, 
+                    0.11438657778364436
+                ], 
+                0.5013286471366882
+            ], 
+            [
+                1.0643552541732788, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9975621654832014, 
+                    0.9975621654832014, 
+                    0.9974275365864397, 
+                    0.9974275365864397, 
+                    0.9971666550822764, 
+                    0.9971666550822764, 
+                    0.9793084778675765, 
+                    0.9793084778675765, 
+                    0.8815488103191721, 
+                    0.8815488103191721, 
+                    0.7987138505105557, 
+                    0.7987138505105557, 
+                    0.7252655684314283, 
+                    0.7252655684314283, 
+                    0.6584207169165529, 
+                    0.6584207169165529, 
+                    0.5954936410802966, 
+                    0.5954936410802966, 
+                    0.5350438286927791, 
+                    0.5350438286927791, 
+                    0.47605469736162326, 
+                    0.47605469736162326, 
+                    0.41795131624445037, 
+                    0.41795131624445037, 
+                    0.36052265565082176, 
+                    0.36052265565082176, 
+                    0.30360229112712117, 
+                    0.30360229112712117, 
+                    0.24702311258857493, 
+                    0.24702311258857493, 
+                    0.1903576728187747, 
+                    0.1903576728187747, 
+                    0.11445173963484168, 
+                    0.11445173963484168
+                ], 
+                0.5012306571006775
+            ], 
+            [
+                1.0810810327529907, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9974531029337308, 
+                    0.9974531029337308, 
+                    0.9973116140586598, 
+                    0.9973116140586598, 
+                    0.9970435355859764, 
+                    0.9970435355859764, 
+                    0.9790385284409635, 
+                    0.9790385284409635, 
+                    0.8813402602381776, 
+                    0.8813402602381776, 
+                    0.7985228595752267, 
+                    0.7985228595752267, 
+                    0.7251392665586469, 
+                    0.7251392665586469, 
+                    0.6583751135249198, 
+                    0.6583751135249198, 
+                    0.5955046404597851, 
+                    0.5955046404597851, 
+                    0.5350797502179504, 
+                    0.5350797502179504, 
+                    0.476093500723063, 
+                    0.476093500723063, 
+                    0.41798468423251456, 
+                    0.41798468423251456, 
+                    0.36054576867663574, 
+                    0.36054576867663574, 
+                    0.3036141475375886, 
+                    0.3036141475375886, 
+                    0.24702485929649, 
+                    0.24702485929649, 
+                    0.19035070921375483, 
+                    0.19035070921375483, 
+                    0.11446229742323316, 
+                    0.11446229742323316
+                ], 
+                0.500981867313385
+            ], 
+            [
+                1.0980697870254517, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9969515158883432, 
+                    0.9969515158883432, 
+                    0.996342201567788, 
+                    0.996342201567788, 
+                    0.9778172680883914, 
+                    0.9778172680883914, 
+                    0.8802693744407244, 
+                    0.8802693744407244, 
+                    0.7973178391914068, 
+                    0.7973178391914068, 
+                    0.7239152958196672, 
+                    0.7239152958196672, 
+                    0.6573122534571144, 
+                    0.6573122534571144, 
+                    0.5946423546913162, 
+                    0.5946423546913162, 
+                    0.5344085397655617, 
+                    0.5344085397655617, 
+                    0.47557387939685225, 
+                    0.47557387939685225, 
+                    0.4175750390488456, 
+                    0.4175750390488456, 
+                    0.3602165725729895, 
+                    0.3602165725729895, 
+                    0.30334474006875595, 
+                    0.30334474006875595, 
+                    0.24680377865239886, 
+                    0.24680377865239886, 
+                    0.19017825591178142, 
+                    0.19017825591178142, 
+                    0.11427932646986007, 
+                    0.11427932646986007
+                ], 
+                0.5008325576782227
+            ], 
+            [
+                1.1153253316879272, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9975312123935989, 
+                    0.9975312123935989, 
+                    0.9973094980790472, 
+                    0.9973094980790472, 
+                    0.996892285326914, 
+                    0.996892285326914, 
+                    0.9784176088435946, 
+                    0.9784176088435946, 
+                    0.8808346917775001, 
+                    0.8808346917775001, 
+                    0.7980435734485122, 
+                    0.7980435734485122, 
+                    0.7247775530567241, 
+                    0.7247775530567241, 
+                    0.6581764243644975, 
+                    0.6581764243644975, 
+                    0.5954281095606514, 
+                    0.5954281095606514, 
+                    0.5350669447014906, 
+                    0.5350669447014906, 
+                    0.4761009487872792, 
+                    0.4761009487872792, 
+                    0.4179932687101076, 
+                    0.4179932687101076, 
+                    0.36054425242042626, 
+                    0.36054425242042626, 
+                    0.3035988158451053, 
+                    0.3035988158451053, 
+                    0.24699637500070137, 
+                    0.24699637500070137, 
+                    0.19031098293574106, 
+                    0.19031098293574106, 
+                    0.11446670577692601, 
+                    0.11446670577692601
+                ], 
+                0.5007346272468567
+            ], 
+            [
+                1.1328520774841309, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9974599405284107, 
+                    0.9974599405284107, 
+                    0.9973038588710185, 
+                    0.9973038588710185, 
+                    0.997013265419782, 
+                    0.997013265419782, 
+                    0.9784668893121388, 
+                    0.9784668893121388, 
+                    0.8808898876146857, 
+                    0.8808898876146857, 
+                    0.7981681582351551, 
+                    0.7981681582351551, 
+                    0.7249825850407078, 
+                    0.7249825850407078, 
+                    0.6584250531995574, 
+                    0.6584250531995574, 
+                    0.5956810103506659, 
+                    0.5956810103506659, 
+                    0.5352914386114579, 
+                    0.5352914386114579, 
+                    0.4762843480370977, 
+                    0.4762843480370977, 
+                    0.4181385342290284, 
+                    0.4181385342290284, 
+                    0.36065494196147374, 
+                    0.36065494196147374, 
+                    0.3036798483775358, 
+                    0.3036798483775358, 
+                    0.24705190739823132, 
+                    0.24705190739823132, 
+                    0.19034151224747056, 
+                    0.19034151224747056, 
+                    0.1145386305439338, 
+                    0.1145386305439338
+                ], 
+                0.5011972784996033
+            ], 
+            [
+                1.1506543159484863, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9969314790468451, 
+                    0.9969314790468451, 
+                    0.9962985760786391, 
+                    0.9962985760786391, 
+                    0.9771858170685331, 
+                    0.9771858170685331, 
+                    0.8797605914759992, 
+                    0.8797605914759992, 
+                    0.7969207221779643, 
+                    0.7969207221779643, 
+                    0.7237370317486425, 
+                    0.7237370317486425, 
+                    0.6573597357164483, 
+                    0.6573597357164483, 
+                    0.5948259433942988, 
+                    0.5948259433942988, 
+                    0.5346285131732185, 
+                    0.5346285131732185, 
+                    0.47577010491421423, 
+                    0.47577010491421423, 
+                    0.4177309059396185, 
+                    0.4177309059396185, 
+                    0.3603245842030562, 
+                    0.3603245842030562, 
+                    0.30340660219979626, 
+                    0.30340660219979626, 
+                    0.24682460883784588, 
+                    0.24682460883784588, 
+                    0.1901601579570451, 
+                    0.1901601579570451, 
+                    0.11436313485488579, 
+                    0.11436313485488579
+                ], 
+                0.5010142922401428
+            ], 
+            [
+                1.1687363386154175, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9973081815152075, 
+                    0.9973081815152075, 
+                    0.9972113659973364, 
+                    0.9972113659973364, 
+                    0.9970482617106312, 
+                    0.9970482617106312, 
+                    0.9781101443803526, 
+                    0.9781101443803526, 
+                    0.880553614912035, 
+                    0.880553614912035, 
+                    0.7979052750599538, 
+                    0.7979052750599538, 
+                    0.7248333415242411, 
+                    0.7248333415242411, 
+                    0.6583981815115193, 
+                    0.6583981815115193, 
+                    0.5957328137170557, 
+                    0.5957328137170557, 
+                    0.5353700703673638, 
+                    0.5353700703673638, 
+                    0.47635686539221117, 
+                    0.47635686539221117, 
+                    0.41819418225230787, 
+                    0.41819418225230787, 
+                    0.360688372840031, 
+                    0.360688372840031, 
+                    0.3036905538248386, 
+                    0.3036905538248386, 
+                    0.24704101460293304, 
+                    0.24704101460293304, 
+                    0.19030823321905446, 
+                    0.19030823321905446, 
+                    0.11459296712613397, 
+                    0.11459296712613397
+                ], 
+                0.5008983612060547
+            ]
+        ]
+    }, 
+    {
+        "block_size": 38, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8590124845504761, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9982847606331781, 
+                    0.9982847606331781, 
+                    0.9982663204593514, 
+                    0.9982663204593514, 
+                    0.9982039292616696, 
+                    0.9982039292616696, 
+                    0.9980357940680986, 
+                    0.9980357940680986, 
+                    0.9143972072765751, 
+                    0.9143972072765751, 
+                    0.8295502476551961, 
+                    0.8295502476551961, 
+                    0.7548375558628969, 
+                    0.7548375558628969, 
+                    0.6850878319519271, 
+                    0.6850878319519271, 
+                    0.6199582259329263, 
+                    0.6199582259329263, 
+                    0.5592081101537405, 
+                    0.5592081101537405, 
+                    0.5027795235908411, 
+                    0.5027795235908411, 
+                    0.44922513799561814, 
+                    0.44922513799561814, 
+                    0.395916249600683, 
+                    0.395916249600683, 
+                    0.3432142545130392, 
+                    0.3432142545130392, 
+                    0.2908015960136541, 
+                    0.2908015960136541, 
+                    0.23822563483720136, 
+                    0.23822563483720136, 
+                    0.18511822198462, 
+                    0.18511822198462, 
+                    0.11163594173599091, 
+                    0.11163594173599091
+                ], 
+                0.5012383460998535
+            ], 
+            [
+                0.8721667528152466, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9981608901084936, 
+                    0.9981608901084936, 
+                    0.9981404331080476, 
+                    0.9981404331080476, 
+                    0.9980741755824263, 
+                    0.9980741755824263, 
+                    0.9978950899148546, 
+                    0.9978950899148546, 
+                    0.9141133053995332, 
+                    0.9141133053995332, 
+                    0.8291761330318529, 
+                    0.8291761330318529, 
+                    0.7544702951849994, 
+                    0.7544702951849994, 
+                    0.6847929667175437, 
+                    0.6847929667175437, 
+                    0.6198320449362272, 
+                    0.6198320449362272, 
+                    0.5592835371521686, 
+                    0.5592835371521686, 
+                    0.5029944502707574, 
+                    0.5029944502707574, 
+                    0.44946703839492846, 
+                    0.44946703839492846, 
+                    0.3961620863790802, 
+                    0.3961620863790802, 
+                    0.3434309495311888, 
+                    0.3434309495311888, 
+                    0.2909619098716483, 
+                    0.2909619098716483, 
+                    0.23833460536390294, 
+                    0.23833460536390294, 
+                    0.185183021037701, 
+                    0.185183021037701, 
+                    0.11169355215159918, 
+                    0.11169355215159918
+                ], 
+                0.5012952089309692
+            ], 
+            [
+                0.8855224847793579, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9980311758882707, 
+                    0.9980311758882707, 
+                    0.9980085087389022, 
+                    0.9980085087389022, 
+                    0.9979367249848424, 
+                    0.9979367249848424, 
+                    0.9977472834826749, 
+                    0.9977472834826749, 
+                    0.9138213556283619, 
+                    0.9138213556283619, 
+                    0.8287971003970568, 
+                    0.8287971003970568, 
+                    0.7541054539562397, 
+                    0.7541054539562397, 
+                    0.6845091639170425, 
+                    0.6845091639170425, 
+                    0.6197221338045821, 
+                    0.6197221338045821, 
+                    0.5593734199419506, 
+                    0.5593734199419506, 
+                    0.5032164843781273, 
+                    0.5032164843781273, 
+                    0.44970942033184463, 
+                    0.44970942033184463, 
+                    0.3964036267211546, 
+                    0.3964036267211546, 
+                    0.34364061152898123, 
+                    0.34364061152898123, 
+                    0.29111560713006557, 
+                    0.29111560713006557, 
+                    0.23843847235241322, 
+                    0.23843847235241322, 
+                    0.18524451807016443, 
+                    0.18524451807016443, 
+                    0.11174909283638954, 
+                    0.11174909283638954
+                ], 
+                0.5013334155082703
+            ], 
+            [
+                0.8990826606750488, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9978956508360802, 
+                    0.9978956508360802, 
+                    0.9978705646411546, 
+                    0.9978705646411546, 
+                    0.9977929162766173, 
+                    0.9977929162766173, 
+                    0.9975928674707628, 
+                    0.9975928674707628, 
+                    0.91352171359656, 
+                    0.91352171359656, 
+                    0.8284137716351655, 
+                    0.8284137716351655, 
+                    0.7537436747819851, 
+                    0.7537436747819851, 
+                    0.6842367337679224, 
+                    0.6842367337679224, 
+                    0.6196280871258054, 
+                    0.6196280871258054, 
+                    0.5594766827202189, 
+                    0.5594766827202189, 
+                    0.5034444062852872, 
+                    0.5034444062852872, 
+                    0.44995140126459476, 
+                    0.44995140126459476, 
+                    0.39664034230212175, 
+                    0.39664034230212175, 
+                    0.34384307988036467, 
+                    0.34384307988036467, 
+                    0.2912627218440475, 
+                    0.2912627218440475, 
+                    0.23853731384736643, 
+                    0.23853731384736643, 
+                    0.18530275628845186, 
+                    0.18530275628845186, 
+                    0.11180264210826674, 
+                    0.11180264210826674
+                ], 
+                0.501350462436676
+            ], 
+            [
+                0.912850558757782, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9977543837431608, 
+                    0.9977543837431608, 
+                    0.9977266536781831, 
+                    0.9977266536781831, 
+                    0.9976427958114513, 
+                    0.9976427958114513, 
+                    0.9974319131583329, 
+                    0.9974319131583329, 
+                    0.9132147676069468, 
+                    0.9132147676069468, 
+                    0.828026765728863, 
+                    0.828026765728863, 
+                    0.7533855405001756, 
+                    0.7533855405001756, 
+                    0.6839758637006271, 
+                    0.6839758637006271, 
+                    0.6195493529964049, 
+                    0.6195493529964049, 
+                    0.559592140927895, 
+                    0.559592140927895, 
+                    0.5036769544433706, 
+                    0.5036769544433706, 
+                    0.4501920936546079, 
+                    0.4501920936546079, 
+                    0.3968717124995663, 
+                    0.3968717124995663, 
+                    0.34403819592240903, 
+                    0.34403819592240903, 
+                    0.2914032773308545, 
+                    0.2914032773308545, 
+                    0.238631190499391, 
+                    0.238631190499391, 
+                    0.18535776052301728, 
+                    0.18535776052301728, 
+                    0.1118542729685855, 
+                    0.1118542729685855
+                ], 
+                0.5013437867164612
+            ], 
+            [
+                0.9268292784690857, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9976074802053603, 
+                    0.9976074802053603, 
+                    0.9975768648374048, 
+                    0.9975768648374048, 
+                    0.9974864478427009, 
+                    0.9974864478427009, 
+                    0.9972645323541925, 
+                    0.9972645323541925, 
+                    0.9129009184306297, 
+                    0.9129009184306297, 
+                    0.8276366631393067, 
+                    0.8276366631393067, 
+                    0.753031528754022, 
+                    0.753031528754022, 
+                    0.6837265653535278, 
+                    0.6837265653535278, 
+                    0.6194851809325254, 
+                    0.6194851809325254, 
+                    0.5597184553427473, 
+                    0.5597184553427473, 
+                    0.5039127865925778, 
+                    0.5039127865925778, 
+                    0.4504305727801543, 
+                    0.4504305727801543, 
+                    0.3970971968049661, 
+                    0.3970971968049661, 
+                    0.34422578019651695, 
+                    0.34422578019651695, 
+                    0.2915372687794756, 
+                    0.2915372687794756, 
+                    0.23872013256181482, 
+                    0.23872013256181482, 
+                    0.18540952789191273, 
+                    0.18540952789191273, 
+                    0.11190404472955892, 
+                    0.11190404472955892
+                ], 
+                0.501310408115387
+            ], 
+            [
+                0.9410220384597778, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9974550840537687, 
+                    0.9974550840537687, 
+                    0.9974213247129257, 
+                    0.9974213247129257, 
+                    0.9973239962653354, 
+                    0.9973239962653354, 
+                    0.997090879020419, 
+                    0.997090879020419, 
+                    0.912580564693484, 
+                    0.912580564693484, 
+                    0.8272439802126715, 
+                    0.8272439802126715, 
+                    0.7526819817780738, 
+                    0.7526819817780738, 
+                    0.6834886438305696, 
+                    0.6834886438305696, 
+                    0.619434598248718, 
+                    0.619434598248718, 
+                    0.559854117643618, 
+                    0.559854117643618, 
+                    0.5041504702002026, 
+                    0.5041504702002026, 
+                    0.4506658680617453, 
+                    0.4506658680617453, 
+                    0.39731622655691645, 
+                    0.39731622655691645, 
+                    0.34440562492110444, 
+                    0.34440562492110444, 
+                    0.29166465724757207, 
+                    0.29166465724757207, 
+                    0.2388041352109643, 
+                    0.2388041352109643, 
+                    0.18545802404868342, 
+                    0.18545802404868342, 
+                    0.11195200144354135, 
+                    0.11195200144354135
+                ], 
+                0.5012472867965698
+            ], 
+            [
+                0.955432116985321, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9972973783534537, 
+                    0.9972973783534537, 
+                    0.9972601985684997, 
+                    0.9972601985684997, 
+                    0.997155605942922, 
+                    0.997155605942922, 
+                    0.9969111504347961, 
+                    0.9969111504347961, 
+                    0.9122540843740397, 
+                    0.9122540843740397, 
+                    0.8268491384377269, 
+                    0.8268491384377269, 
+                    0.7523370712859994, 
+                    0.7523370712859994, 
+                    0.683261662741698, 
+                    0.683261662741698, 
+                    0.6193963833831636, 
+                    0.6193963833831636, 
+                    0.5599974337145709, 
+                    0.5599974337145709, 
+                    0.5043884710194827, 
+                    0.5043884710194827, 
+                    0.450896952881871, 
+                    0.450896952881871, 
+                    0.39752819554335816, 
+                    0.39752819554335816, 
+                    0.3445774856476897, 
+                    0.3445774856476897, 
+                    0.2917853629856979, 
+                    0.2917853629856979, 
+                    0.23888315323124368, 
+                    0.23888315323124368, 
+                    0.1855031788218386, 
+                    0.1855031788218386, 
+                    0.111998170095063, 
+                    0.111998170095063
+                ], 
+                0.5011509656906128
+            ], 
+            [
+                0.9700629115104675, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9971345859010956, 
+                    0.9971345859010956, 
+                    0.9970936909119412, 
+                    0.9970936909119412, 
+                    0.9969814835472302, 
+                    0.9969814835472302, 
+                    0.9967255878199018, 
+                    0.9967255878199018, 
+                    0.9119218117222234, 
+                    0.9119218117222234, 
+                    0.8264524276512092, 
+                    0.8264524276512092, 
+                    0.75199675769225, 
+                    0.75199675769225, 
+                    0.6830449043734684, 
+                    0.6830449043734684, 
+                    0.6193690356505904, 
+                    0.6193690356505904, 
+                    0.5601465043013056, 
+                    0.5601465043013056, 
+                    0.504625139456639, 
+                    0.504625139456639, 
+                    0.45112273269228836, 
+                    0.45112273269228836, 
+                    0.397732449300875, 
+                    0.397732449300875, 
+                    0.34474107193388975, 
+                    0.34474107193388975, 
+                    0.29189925792672444, 
+                    0.29189925792672444, 
+                    0.23895709493386774, 
+                    0.23895709493386774, 
+                    0.18554488112362336, 
+                    0.18554488112362336, 
+                    0.11204255851818087, 
+                    0.11204255851818087
+                ], 
+                0.501017689704895
+            ], 
+            [
+                0.9849177002906799, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9969669691688012, 
+                    0.9969669691688012, 
+                    0.9969220455270947, 
+                    0.9969220455270947, 
+                    0.9968018778525942, 
+                    0.9968018778525942, 
+                    0.9965344763796401, 
+                    0.9965344763796401, 
+                    0.911584008751004, 
+                    0.911584008751004, 
+                    0.8260539621899282, 
+                    0.8260539621899282, 
+                    0.7516607427240698, 
+                    0.7516607427240698, 
+                    0.6828373241931279, 
+                    0.6828373241931279, 
+                    0.6193507408289073, 
+                    0.6193507408289073, 
+                    0.5602992025499782, 
+                    0.5602992025499782, 
+                    0.5048586943932499, 
+                    0.5048586943932499, 
+                    0.4513420311216684, 
+                    0.4513420311216684, 
+                    0.3979282728970998, 
+                    0.3979282728970998, 
+                    0.3448960368427897, 
+                    0.3448960368427897, 
+                    0.2920061571808604, 
+                    0.2920061571808604, 
+                    0.23902581515526183, 
+                    0.23902581515526183, 
+                    0.18558297302631954, 
+                    0.18558297302631954, 
+                    0.11208515298815774, 
+                    0.11208515298815774
+                ], 
+                0.5008432269096375
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9966803915387346, 
+                    0.9966803915387346, 
+                    0.9964259515320013, 
+                    0.9964259515320013, 
+                    0.9958766379302589, 
+                    0.9958766379302589, 
+                    0.9106564412138937, 
+                    0.9106564412138937, 
+                    0.8247918001108466, 
+                    0.8247918001108466, 
+                    0.7502853993279915, 
+                    0.7502853993279915, 
+                    0.6813916711086649, 
+                    0.6813916711086649, 
+                    0.6180011315819186, 
+                    0.6180011315819186, 
+                    0.5591622143454559, 
+                    0.5591622143454559, 
+                    0.5039930702924711, 
+                    0.5039930702924711, 
+                    0.4507125624789691, 
+                    0.4507125624789691, 
+                    0.3974519509741991, 
+                    0.3974519509741991, 
+                    0.34453048047569346, 
+                    0.34453048047569346, 
+                    0.2917159301103515, 
+                    0.2917159301103515, 
+                    0.23879277723936296, 
+                    0.23879277723936296, 
+                    0.1854068077415626, 
+                    0.1854068077415626, 
+                    0.11187478068218558, 
+                    0.11187478068218558
+                ], 
+                0.5011990070343018
+            ], 
+            [
+                1.0153132677078247, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9966290153648464, 
+                    0.9966290153648464, 
+                    0.9965947860254121, 
+                    0.9965947860254121, 
+                    0.9964967733453131, 
+                    0.9964967733453131, 
+                    0.9962974486180285, 
+                    0.9962974486180285, 
+                    0.9110927601736852, 
+                    0.9110927601736852, 
+                    0.825544148847899, 
+                    0.825544148847899, 
+                    0.7513500469829919, 
+                    0.7513500469829919, 
+                    0.6828585947292072, 
+                    0.6828585947292072, 
+                    0.6197730074577262, 
+                    0.6197730074577262, 
+                    0.5610263524278489, 
+                    0.5610263524278489, 
+                    0.5056624151688007, 
+                    0.5056624151688007, 
+                    0.4520273035087163, 
+                    0.4520273035087163, 
+                    0.3985048172801195, 
+                    0.3985048172801195, 
+                    0.3453430391786532, 
+                    0.3453430391786532, 
+                    0.2923237384725974, 
+                    0.2923237384725974, 
+                    0.23924263806735496, 
+                    0.23924263806735496, 
+                    0.1857157836908408, 
+                    0.1857157836908408, 
+                    0.11224650462451047, 
+                    0.11224650462451047
+                ], 
+                0.5014232397079468
+            ], 
+            [
+                1.0308610200881958, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9964472258521889, 
+                    0.9964472258521889, 
+                    0.9964103705835262, 
+                    0.9964103705835262, 
+                    0.9963067155883806, 
+                    0.9963067155883806, 
+                    0.996100223915852, 
+                    0.996100223915852, 
+                    0.9107462033853493, 
+                    0.9107462033853493, 
+                    0.8251468764413915, 
+                    0.8251468764413915, 
+                    0.7510281760162568, 
+                    0.7510281760162568, 
+                    0.6826714392641314, 
+                    0.6826714392641314, 
+                    0.6197659179582354, 
+                    0.6197659179582354, 
+                    0.5611690606609643, 
+                    0.5611690606609643, 
+                    0.5058672449332624, 
+                    0.5058672449332624, 
+                    0.45221289833705797, 
+                    0.45221289833705797, 
+                    0.39866502890658984, 
+                    0.39866502890658984, 
+                    0.3454653164442679, 
+                    0.3454653164442679, 
+                    0.2924050860471633, 
+                    0.2924050860471633, 
+                    0.23929235479317762, 
+                    0.23929235479317762, 
+                    0.18574044140150825, 
+                    0.18574044140150825, 
+                    0.11228231320366845, 
+                    0.11228231320366845
+                ], 
+                0.5010838508605957
+            ], 
+            [
+                1.0466468334197998, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999964610520138, 
+                    0.9999964610520138, 
+                    0.9960774137395307, 
+                    0.9960774137395307, 
+                    0.9957423140182576, 
+                    0.9957423140182576, 
+                    0.995058325633402, 
+                    0.995058325633402, 
+                    0.9093724240474982, 
+                    0.9093724240474982, 
+                    0.8232784975268137, 
+                    0.8232784975268137, 
+                    0.7489814952596815, 
+                    0.7489814952596815, 
+                    0.680489518554329, 
+                    0.680489518554329, 
+                    0.6176817302458881, 
+                    0.6176817302458881, 
+                    0.559361964016315, 
+                    0.559361964016315, 
+                    0.5044497709696127, 
+                    0.5044497709696127, 
+                    0.45115809234707177, 
+                    0.45115809234707177, 
+                    0.3978505045720317, 
+                    0.3978505045720317, 
+                    0.34483376671670996, 
+                    0.34483376671670996, 
+                    0.291907168733635, 
+                    0.291907168733635, 
+                    0.23889784564623662, 
+                    0.23889784564623662, 
+                    0.18544643705377006, 
+                    0.18544643705377006, 
+                    0.11193846718001241, 
+                    0.11193846718001241
+                ], 
+                0.5008886456489563
+            ], 
+            [
+                1.0626744031906128, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9961288935804896, 
+                    0.9961288935804896, 
+                    0.9957435178702669, 
+                    0.9957435178702669, 
+                    0.9949638134119866, 
+                    0.9949638134119866, 
+                    0.9090251169016368, 
+                    0.9090251169016368, 
+                    0.82290042464006, 
+                    0.82290042464006, 
+                    0.7487060316308413, 
+                    0.7487060316308413, 
+                    0.680377824892182, 
+                    0.680377824892182, 
+                    0.6177677922620792, 
+                    0.6177677922620792, 
+                    0.559598315179698, 
+                    0.559598315179698, 
+                    0.5047320027048035, 
+                    0.5047320027048035, 
+                    0.4513994062028842, 
+                    0.4513994062028842, 
+                    0.3980509565006004, 
+                    0.3980509565006004, 
+                    0.3449840717308173, 
+                    0.3449840717308173, 
+                    0.2920082046131912, 
+                    0.2920082046131912, 
+                    0.23896137922511995, 
+                    0.23896137922511995, 
+                    0.1854796007328832, 
+                    0.1854796007328832, 
+                    0.11199130942277269, 
+                    0.11199130942277269
+                ], 
+                0.5012063980102539
+            ], 
+            [
+                1.0789474248886108, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.996163042844052, 
+                    0.996163042844052, 
+                    0.9961162092275151, 
+                    0.9961162092275151, 
+                    0.9960077835549335, 
+                    0.9960077835549335, 
+                    0.9957842162689977, 
+                    0.9957842162689977, 
+                    0.9098756731683812, 
+                    0.9098756731683812, 
+                    0.8242171264679301, 
+                    0.8242171264679301, 
+                    0.7503863186295477, 
+                    0.7503863186295477, 
+                    0.6824810208365879, 
+                    0.6824810208365879, 
+                    0.6201026942625303, 
+                    0.6201026942625303, 
+                    0.5618915619638422, 
+                    0.5618915619638422, 
+                    0.506691123019545, 
+                    0.506691123019545, 
+                    0.45291156387992926, 
+                    0.45291156387992926, 
+                    0.39924273166416513, 
+                    0.39924273166416513, 
+                    0.3458996437109591, 
+                    0.3458996437109591, 
+                    0.29270043098279286, 
+                    0.29270043098279286, 
+                    0.23948108576418728, 
+                    0.23948108576418728, 
+                    0.18584149844500356, 
+                    0.18584149844500356, 
+                    0.1124462106565474, 
+                    0.1124462106565474
+                ], 
+                0.5013860464096069
+            ], 
+            [
+                1.09546959400177, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9957259852311031, 
+                    0.9957259852311031, 
+                    0.995301854496803, 
+                    0.995301854496803, 
+                    0.9944664883380643, 
+                    0.9944664883380643, 
+                    0.9081952904674824, 
+                    0.9081952904674824, 
+                    0.8219595370487685, 
+                    0.8219595370487685, 
+                    0.7479493256946013, 
+                    0.7479493256946013, 
+                    0.6799197488591311, 
+                    0.6799197488591311, 
+                    0.6176884214053603, 
+                    0.6176884214053603, 
+                    0.5598205205131584, 
+                    0.5598205205131584, 
+                    0.5050730076255833, 
+                    0.5050730076255833, 
+                    0.4517018239255431, 
+                    0.4517018239255431, 
+                    0.39830377850736437, 
+                    0.39830377850736437, 
+                    0.3451665573955426, 
+                    0.3451665573955426, 
+                    0.29211876253781316, 
+                    0.29211876253781316, 
+                    0.23901777396895263, 
+                    0.23901777396895263, 
+                    0.1854936816051935, 
+                    0.1854936816051935, 
+                    0.11204993984056708, 
+                    0.11204993984056708
+                ], 
+                0.5011343955993652
+            ], 
+            [
+                1.112244725227356, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9958356601457842, 
+                    0.9958356601457842, 
+                    0.9958073209941221, 
+                    0.9958073209941221, 
+                    0.9957345662651855, 
+                    0.9957345662651855, 
+                    0.9956041932312182, 
+                    0.9956041932312182, 
+                    0.9093613539974216, 
+                    0.9093613539974216, 
+                    0.8236913044629731, 
+                    0.8236913044629731, 
+                    0.7500661755032441, 
+                    0.7500661755032441, 
+                    0.6824590124479729, 
+                    0.6824590124479729, 
+                    0.6204008430181871, 
+                    0.6204008430181871, 
+                    0.5624023102519414, 
+                    0.5624023102519414, 
+                    0.5072343018667205, 
+                    0.5072343018667205, 
+                    0.45335846691262593, 
+                    0.45335846691262593, 
+                    0.3996028051694709, 
+                    0.3996028051694709, 
+                    0.34616513303453805, 
+                    0.34616513303453805, 
+                    0.2928789393026996, 
+                    0.2928789393026996, 
+                    0.23959277777975221, 
+                    0.23959277777975221, 
+                    0.18589660612693465, 
+                    0.18589660612693465, 
+                    0.11256756876705253, 
+                    0.11256756876705253
+                ], 
+                0.5012099146842957
+            ], 
+            [
+                1.1292768716812134, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9966386240799749, 
+                    0.9966386240799749, 
+                    0.9957173969052608, 
+                    0.9957173969052608, 
+                    0.9953971787533549, 
+                    0.9953971787533549, 
+                    0.994872756018181, 
+                    0.994872756018181, 
+                    0.9083764731033503, 
+                    0.9083764731033503, 
+                    0.8224602842754581, 
+                    0.8224602842754581, 
+                    0.7488329794883574, 
+                    0.7488329794883574, 
+                    0.6812601486876027, 
+                    0.6812601486876027, 
+                    0.6193649253506203, 
+                    0.6193649253506203, 
+                    0.5615893996140169, 
+                    0.5615893996140169, 
+                    0.5066449985490565, 
+                    0.5066449985490565, 
+                    0.4529360342710431, 
+                    0.4529360342710431, 
+                    0.39928441000166937, 
+                    0.39928441000166937, 
+                    0.3459178011324828, 
+                    0.3459178011324828, 
+                    0.2926786017412212, 
+                    0.2926786017412212, 
+                    0.23942777291101738, 
+                    0.23942777291101738, 
+                    0.1857655202362101, 
+                    0.1857655202362101, 
+                    0.11245148206352513, 
+                    0.11245148206352513
+                ], 
+                0.5011119842529297
+            ], 
+            [
+                1.1465697288513184, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9966484073606956, 
+                    0.9966484073606956, 
+                    0.9956748328918882, 
+                    0.9956748328918882, 
+                    0.9952352668782485, 
+                    0.9952352668782485, 
+                    0.9948094165913473, 
+                    0.9948094165913473, 
+                    0.9080316805391263, 
+                    0.9080316805391263, 
+                    0.8220789944074908, 
+                    0.8220789944074908, 
+                    0.7485453077613136, 
+                    0.7485453077613136, 
+                    0.6811074129631307, 
+                    0.6811074129631307, 
+                    0.619367396382516, 
+                    0.619367396382516, 
+                    0.5617047629755979, 
+                    0.5617047629755979, 
+                    0.5067962285895568, 
+                    0.5067962285895568, 
+                    0.4530641959589125, 
+                    0.4530641959589125, 
+                    0.3993866480588014, 
+                    0.3993866480588014, 
+                    0.3459883177851012, 
+                    0.3459883177851012, 
+                    0.2927187538513264, 
+                    0.2927187538513264, 
+                    0.2394443467851845, 
+                    0.2394443467851845, 
+                    0.18576205842138555, 
+                    0.18576205842138555, 
+                    0.11249287605571408, 
+                    0.11249287605571408
+                ], 
+                0.5011603236198425
+            ], 
+            [
+                1.1641274690628052, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9947219875324638, 
+                    0.9947219875324638, 
+                    0.9941431008858703, 
+                    0.9941431008858703, 
+                    0.9935517394394789, 
+                    0.9935517394394789, 
+                    0.9066316941490238, 
+                    0.9066316941490238, 
+                    0.8202132303032822, 
+                    0.8202132303032822, 
+                    0.7466044942263301, 
+                    0.7466044942263301, 
+                    0.6791699707739692, 
+                    0.6791699707739692, 
+                    0.6176403245737558, 
+                    0.6176403245737558, 
+                    0.5602937727965943, 
+                    0.5602937727965943, 
+                    0.5057199830708101, 
+                    0.5057199830708101, 
+                    0.45225127880483207, 
+                    0.45225127880483207, 
+                    0.39874403396319463, 
+                    0.39874403396319463, 
+                    0.3454698559686633, 
+                    0.3454698559686633, 
+                    0.2922900754581414, 
+                    0.2922900754581414, 
+                    0.23908841944188874, 
+                    0.23908841944188874, 
+                    0.18548133240536882, 
+                    0.18548133240536882, 
+                    0.11220198552337421, 
+                    0.11220198552337421
+                ], 
+                0.5010026097297668
+            ]
+        ]
+    }, 
+    {
+        "block_size": 39, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8622449040412903, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9971176908367786, 
+                    0.9971176908367786, 
+                    0.997072225919697, 
+                    0.997072225919697, 
+                    0.9969726291258819, 
+                    0.9969726291258819, 
+                    0.9967034171117873, 
+                    0.9967034171117873, 
+                    0.9119586747405466, 
+                    0.9119586747405466, 
+                    0.8256450809496063, 
+                    0.8256450809496063, 
+                    0.7499491656394414, 
+                    0.7499491656394414, 
+                    0.6828069593842635, 
+                    0.6828069593842635, 
+                    0.6207445949200447, 
+                    0.6207445949200447, 
+                    0.5616127945706347, 
+                    0.5616127945706347, 
+                    0.5051377623868327, 
+                    0.5051377623868327, 
+                    0.4510830964599257, 
+                    0.4510830964599257, 
+                    0.39769954565686566, 
+                    0.39769954565686566, 
+                    0.3447569513539089, 
+                    0.3447569513539089, 
+                    0.291869606854322, 
+                    0.291869606854322, 
+                    0.2389320821545588, 
+                    0.2389320821545588, 
+                    0.18553938726512298, 
+                    0.18553938726512298, 
+                    0.11202851493767171, 
+                    0.11202851493767171
+                ], 
+                0.5013208985328674
+            ], 
+            [
+                0.8751199245452881, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9969587686301773, 
+                    0.9969587686301773, 
+                    0.9969089599388206, 
+                    0.9969089599388206, 
+                    0.9968028278245427, 
+                    0.9968028278245427, 
+                    0.9965219950977022, 
+                    0.9965219950977022, 
+                    0.9116492596109383, 
+                    0.9116492596109383, 
+                    0.8252646528533315, 
+                    0.8252646528533315, 
+                    0.7496341213720785, 
+                    0.7496341213720785, 
+                    0.6826470410516204, 
+                    0.6826470410516204, 
+                    0.6207404805917759, 
+                    0.6207404805917759, 
+                    0.561755969626771, 
+                    0.561755969626771, 
+                    0.5053876048360064, 
+                    0.5053876048360064, 
+                    0.4513428515773342, 
+                    0.4513428515773342, 
+                    0.3979283820181538, 
+                    0.3979283820181538, 
+                    0.34493203899259167, 
+                    0.34493203899259167, 
+                    0.29199516943140963, 
+                    0.29199516943140963, 
+                    0.23901659037597195, 
+                    0.23901659037597195, 
+                    0.18558882021049763, 
+                    0.18558882021049763, 
+                    0.11207911899908547, 
+                    0.11207911899908547
+                ], 
+                0.5012408494949341
+            ], 
+            [
+                0.8881871700286865, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9967960942315106, 
+                    0.9967960942315106, 
+                    0.9967415939045394, 
+                    0.9967415939045394, 
+                    0.9966286939057858, 
+                    0.9966286939057858, 
+                    0.9963362324987811, 
+                    0.9963362324987811, 
+                    0.9113369834617233, 
+                    0.9113369834617233, 
+                    0.8248860268685058, 
+                    0.8248860268685058, 
+                    0.7493278201000019, 
+                    0.7493278201000019, 
+                    0.6824981469905558, 
+                    0.6824981469905558, 
+                    0.6207452845723349, 
+                    0.6207452845723349, 
+                    0.5619028335642025, 
+                    0.5619028335642025, 
+                    0.5056338882283523, 
+                    0.5056338882283523, 
+                    0.4515944084781666, 
+                    0.4515944084781666, 
+                    0.3981473888607829, 
+                    0.3981473888607829, 
+                    0.3450981545385167, 
+                    0.3450981545385167, 
+                    0.29211339749608156, 
+                    0.29211339749608156, 
+                    0.23909551999972448, 
+                    0.23909551999972448, 
+                    0.1856344866597981, 
+                    0.1856344866597981, 
+                    0.11212757485336868, 
+                    0.11212757485336868
+                ], 
+                0.5011230111122131
+            ], 
+            [
+                0.9014495611190796, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.996629128872683, 
+                    0.996629128872683, 
+                    0.9965703884578773, 
+                    0.9965703884578773, 
+                    0.996450442130502, 
+                    0.996450442130502, 
+                    0.9961464384090023, 
+                    0.9961464384090023, 
+                    0.9110219757073662, 
+                    0.9110219757073662, 
+                    0.8245089918518793, 
+                    0.8245089918518793, 
+                    0.7490293520894641, 
+                    0.7490293520894641, 
+                    0.6823587083111187, 
+                    0.6823587083111187, 
+                    0.6207570784922238, 
+                    0.6207570784922238, 
+                    0.5620513386278237, 
+                    0.5620513386278237, 
+                    0.5058748568450268, 
+                    0.5058748568450268, 
+                    0.45183662960863796, 
+                    0.45183662960863796, 
+                    0.39835592507886, 
+                    0.39835592507886, 
+                    0.3452549651122684, 
+                    0.3452549651122684, 
+                    0.29222410732253606, 
+                    0.29222410732253606, 
+                    0.239168742439653, 
+                    0.239168742439653, 
+                    0.18567624233828245, 
+                    0.18567624233828245, 
+                    0.11217385818763566, 
+                    0.11217385818763566
+                ], 
+                0.5009616017341614
+            ], 
+            [
+                0.9149100184440613, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999975202075562, 
+                    0.9999975202075562, 
+                    0.9962824268228547, 
+                    0.9962824268228547, 
+                    0.9959658014368794, 
+                    0.9959658014368794, 
+                    0.9951921147898212, 
+                    0.9951921147898212, 
+                    0.9097787259432519, 
+                    0.9097787259432519, 
+                    0.8226862059836082, 
+                    0.8226862059836082, 
+                    0.7468977108924998, 
+                    0.7468977108924998, 
+                    0.6803053356006351, 
+                    0.6803053356006351, 
+                    0.6189229136662254, 
+                    0.6189229136662254, 
+                    0.5604615421186615, 
+                    0.5604615421186615, 
+                    0.5045760454516639, 
+                    0.5045760454516639, 
+                    0.45085138857733553, 
+                    0.45085138857733553, 
+                    0.3976004768550238, 
+                    0.3976004768550238, 
+                    0.3446713956050218, 
+                    0.3446713956050218, 
+                    0.29176361725498967, 
+                    0.29176361725498967, 
+                    0.23880549744230772, 
+                    0.23880549744230772, 
+                    0.18540726667120871, 
+                    0.18540726667120871, 
+                    0.1118508796127153, 
+                    0.1118508796127153
+                ], 
+                0.5006347894668579
+            ], 
+            [
+                0.9285714030265808, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9972877513168729, 
+                    0.9972877513168729, 
+                    0.9961916455916238, 
+                    0.9961916455916238, 
+                    0.9959103797536049, 
+                    0.9959103797536049, 
+                    0.9953291936347369, 
+                    0.9953291936347369, 
+                    0.9099039714916117, 
+                    0.9099039714916117, 
+                    0.823050022226479, 
+                    0.823050022226479, 
+                    0.7475579807988937, 
+                    0.7475579807988937, 
+                    0.6811768393907462, 
+                    0.6811768393907462, 
+                    0.619912325536837, 
+                    0.619912325536837, 
+                    0.5615273165765181, 
+                    0.5615273165765181, 
+                    0.5056251532503657, 
+                    0.5056251532503657, 
+                    0.4517406997034779, 
+                    0.4517406997034779, 
+                    0.3983240025813617, 
+                    0.3983240025813617, 
+                    0.345234550896487, 
+                    0.345234550896487, 
+                    0.29219949066781126, 
+                    0.29219949066781126, 
+                    0.23913516925375086, 
+                    0.23913516925375086, 
+                    0.18563647998464053, 
+                    0.18563647998464053, 
+                    0.11213549312682888, 
+                    0.11213549312682888
+                ], 
+                0.5007484555244446
+            ], 
+            [
+                0.9424368143081665, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9961199670184617, 
+                    0.9961199670184617, 
+                    0.996072885457251, 
+                    0.996072885457251, 
+                    0.9959719805857962, 
+                    0.9959719805857962, 
+                    0.9957407448762745, 
+                    0.9957407448762745, 
+                    0.9102779760366217, 
+                    0.9102779760366217, 
+                    0.823716558757617, 
+                    0.823716558757617, 
+                    0.7485842614038449, 
+                    0.7485842614038449, 
+                    0.6824045307816401, 
+                    0.6824045307816401, 
+                    0.6212164365729483, 
+                    0.6212164365729483, 
+                    0.5628572446235242, 
+                    0.5628572446235242, 
+                    0.5068710401831595, 
+                    0.5068710401831595, 
+                    0.452750492101257, 
+                    0.452750492101257, 
+                    0.3991110697013192, 
+                    0.3991110697013192, 
+                    0.3458188829835668, 
+                    0.3458188829835668, 
+                    0.29262734004731195, 
+                    0.29262734004731195, 
+                    0.23944341434782593, 
+                    0.23944341434782593, 
+                    0.18584135832264928, 
+                    0.18584135832264928, 
+                    0.11237781935435574, 
+                    0.11237781935435574
+                ], 
+                0.501224935054779
+            ], 
+            [
+                0.9565092921257019, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999967272506269, 
+                    0.9999967272506269, 
+                    0.995694991683082, 
+                    0.995694991683082, 
+                    0.995340888466583, 
+                    0.995340888466583, 
+                    0.9945023985495414, 
+                    0.9945023985495414, 
+                    0.9087363964556916, 
+                    0.9087363964556916, 
+                    0.8214856645987898, 
+                    0.8214856645987898, 
+                    0.7460098845287436, 
+                    0.7460098845287436, 
+                    0.6799502887214843, 
+                    0.6799502887214843, 
+                    0.6190418418688448, 
+                    0.6190418418688448, 
+                    0.5609837107520235, 
+                    0.5609837107520235, 
+                    0.5053436416680687, 
+                    0.5053436416680687, 
+                    0.4515860186533389, 
+                    0.4515860186533389, 
+                    0.3982117281985694, 
+                    0.3982117281985694, 
+                    0.34511918364981986, 
+                    0.34511918364981986, 
+                    0.29207248270624836, 
+                    0.29207248270624836, 
+                    0.2390041912927257, 
+                    0.2390041912927257, 
+                    0.18551486723902247, 
+                    0.18551486723902247, 
+                    0.11199282810150976, 
+                    0.11199282810150976
+                ], 
+                0.5013433694839478
+            ], 
+            [
+                0.9707918763160706, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9957198375749432, 
+                    0.9957198375749432, 
+                    0.9952742586647788, 
+                    0.9952742586647788, 
+                    0.9942221275288398, 
+                    0.9942221275288398, 
+                    0.9081934161207502, 
+                    0.9081934161207502, 
+                    0.8207969189595842, 
+                    0.8207969189595842, 
+                    0.7453671397320494, 
+                    0.7453671397320494, 
+                    0.6794809537356692, 
+                    0.6794809537356692, 
+                    0.6187477222283859, 
+                    0.6187477222283859, 
+                    0.5608431739153649, 
+                    0.5608431739153649, 
+                    0.5053166482218235, 
+                    0.5053166482218235, 
+                    0.45160071274265545, 
+                    0.45160071274265545, 
+                    0.3982311882028221, 
+                    0.3982311882028221, 
+                    0.3451248847382599, 
+                    0.3451248847382599, 
+                    0.2920635285178947, 
+                    0.2920635285178947, 
+                    0.23898407573208574, 
+                    0.23898407573208574, 
+                    0.18548831850785957, 
+                    0.18548831850785957, 
+                    0.11197215646463328, 
+                    0.11197215646463328
+                ], 
+                0.5006932616233826
+            ], 
+            [
+                0.9852877259254456, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999996073100593, 
+                    0.999996073100593, 
+                    0.9955587893046954, 
+                    0.9955587893046954, 
+                    0.9950845884307602, 
+                    0.9950845884307602, 
+                    0.9940100752805353, 
+                    0.9940100752805353, 
+                    0.9078552496788874, 
+                    0.9078552496788874, 
+                    0.8204222835201042, 
+                    0.8204222835201042, 
+                    0.7451123001748293, 
+                    0.7451123001748293, 
+                    0.6794025938469245, 
+                    0.6794025938469245, 
+                    0.6188158863848838, 
+                    0.6188158863848838, 
+                    0.5610270770165247, 
+                    0.5610270770165247, 
+                    0.5055618613686897, 
+                    0.5055618613686897, 
+                    0.4518251691315236, 
+                    0.4518251691315236, 
+                    0.398412240783616, 
+                    0.398412240783616, 
+                    0.34525452179009203, 
+                    0.34525452179009203, 
+                    0.29215079654634163, 
+                    0.29215079654634163, 
+                    0.2390381244369151, 
+                    0.2390381244369151, 
+                    0.18551487679678538, 
+                    0.18551487679678538, 
+                    0.11201985453845628, 
+                    0.11201985453845628
+                ], 
+                0.5009267330169678
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9957073139203766, 
+                    0.9957073139203766, 
+                    0.9956421421769456, 
+                    0.9956421421769456, 
+                    0.9955341803327122, 
+                    0.9955341803327122, 
+                    0.9952802092542802, 
+                    0.9952802092542802, 
+                    0.9091718812323898, 
+                    0.9091718812323898, 
+                    0.822508207681263, 
+                    0.822508207681263, 
+                    0.7478087791588187, 
+                    0.7478087791588187, 
+                    0.6822388323501781, 
+                    0.6822388323501781, 
+                    0.6215480992708651, 
+                    0.6215480992708651, 
+                    0.5635806494209427, 
+                    0.5635806494209427, 
+                    0.5077964696694552, 
+                    0.5077964696694552, 
+                    0.4535926481689998, 
+                    0.4535926481689998, 
+                    0.39979282545907846, 
+                    0.39979282545907846, 
+                    0.34631219221241727, 
+                    0.34631219221241727, 
+                    0.29296431838453313, 
+                    0.29296431838453313, 
+                    0.23965663242980473, 
+                    0.23965663242980473, 
+                    0.18595057494419162, 
+                    0.18595057494419162, 
+                    0.11256994012592082, 
+                    0.11256994012592082
+                ], 
+                0.5011125206947327
+            ], 
+            [
+                1.0149320363998413, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9965359665767134, 
+                    0.9965359665767134, 
+                    0.9954552328192421, 
+                    0.9954552328192421, 
+                    0.9951081938554694, 
+                    0.9951081938554694, 
+                    0.9945401998118891, 
+                    0.9945401998118891, 
+                    0.9082360390523301, 
+                    0.9082360390523301, 
+                    0.8212758102417816, 
+                    0.8212758102417816, 
+                    0.7465236851008591, 
+                    0.7465236851008591, 
+                    0.6811270810526681, 
+                    0.6811270810526681, 
+                    0.6206519405856041, 
+                    0.6206519405856041, 
+                    0.5628842952168251, 
+                    0.5628842952168251, 
+                    0.5072850466025783, 
+                    0.5072850466025783, 
+                    0.4532277554058563, 
+                    0.4532277554058563, 
+                    0.3995201178578691, 
+                    0.3995201178578691, 
+                    0.3460994158504883, 
+                    0.3460994158504883, 
+                    0.2927917700243855, 
+                    0.2927917700243855, 
+                    0.23951483855176164, 
+                    0.23951483855176164, 
+                    0.18583831720362456, 
+                    0.18583831720362456, 
+                    0.11246738486532015, 
+                    0.11246738486532015
+                ], 
+                0.5013397932052612
+            ], 
+            [
+                1.030086874961853, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999949118474797, 
+                    0.9999949118474797, 
+                    0.9948515657116355, 
+                    0.9948515657116355, 
+                    0.9944005532113223, 
+                    0.9944005532113223, 
+                    0.9933151951578946, 
+                    0.9933151951578946, 
+                    0.9067179359488823, 
+                    0.9067179359488823, 
+                    0.819114913422646, 
+                    0.819114913422646, 
+                    0.7441315012225864, 
+                    0.7441315012225864, 
+                    0.6789434853747053, 
+                    0.6789434853747053, 
+                    0.6187939263759614, 
+                    0.6187939263759614, 
+                    0.5613446744984115, 
+                    0.5613446744984115, 
+                    0.5060646407081602, 
+                    0.5060646407081602, 
+                    0.4522945270499148, 
+                    0.4522945270499148, 
+                    0.3987850182080066, 
+                    0.3987850182080066, 
+                    0.3455083529425045, 
+                    0.3455083529425045, 
+                    0.29230637844062535, 
+                    0.29230637844062535, 
+                    0.23911690526494875, 
+                    0.23911690526494875, 
+                    0.18553070539511518, 
+                    0.18553070539511518, 
+                    0.1121218867794966, 
+                    0.1121218867794966
+                ], 
+                0.5009018182754517
+            ], 
+            [
+                1.0454682111740112, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999944556983985, 
+                    0.9999944556983985, 
+                    0.9949030729007765, 
+                    0.9949030729007765, 
+                    0.9943385213193485, 
+                    0.9943385213193485, 
+                    0.9931588340476852, 
+                    0.9931588340476852, 
+                    0.9063064474883284, 
+                    0.9063064474883284, 
+                    0.8186285948606854, 
+                    0.8186285948606854, 
+                    0.7437428512186123, 
+                    0.7437428512186123, 
+                    0.6787256297531391, 
+                    0.6787256297531391, 
+                    0.6187214063928654, 
+                    0.6187214063928654, 
+                    0.5613829319553336, 
+                    0.5613829319553336, 
+                    0.5061654130883614, 
+                    0.5061654130883614, 
+                    0.4523936323087135, 
+                    0.4523936323087135, 
+                    0.3988617753711226, 
+                    0.3988617753711226, 
+                    0.34555536626795025, 
+                    0.34555536626795025, 
+                    0.2923283895147147, 
+                    0.2923283895147147, 
+                    0.23911921353998117, 
+                    0.23911921353998117, 
+                    0.1855168746973222, 
+                    0.1855168746973222, 
+                    0.11214662060575918, 
+                    0.11214662060575918
+                ], 
+                0.5007258057594299
+            ], 
+            [
+                1.0610790252685547, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9953423277425497, 
+                    0.9953423277425497, 
+                    0.9953248618615379, 
+                    0.9953248618615379, 
+                    0.9952934283781069, 
+                    0.9952934283781069, 
+                    0.9952309732688684, 
+                    0.9952309732688684, 
+                    0.9082778633190404, 
+                    0.9082778633190404, 
+                    0.8215785511298274, 
+                    0.8215785511298274, 
+                    0.7473187677339411, 
+                    0.7473187677339411, 
+                    0.6822861915049909, 
+                    0.6822861915049909, 
+                    0.6219977306232302, 
+                    0.6219977306232302, 
+                    0.5643132662057517, 
+                    0.5643132662057517, 
+                    0.5086376627413843, 
+                    0.5086376627413843, 
+                    0.4543204104486318, 
+                    0.4543204104486318, 
+                    0.40036207451150646, 
+                    0.40036207451150646, 
+                    0.3467139526012425, 
+                    0.3467139526012425, 
+                    0.2932297273485377, 
+                    0.2932297273485377, 
+                    0.23981228783204725, 
+                    0.23981228783204725, 
+                    0.18600895194699812, 
+                    0.18600895194699812, 
+                    0.11279735280543199, 
+                    0.11279735280543199
+                ], 
+                0.5010987520217896
+            ], 
+            [
+                1.076923131942749, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9953943441908425, 
+                    0.9953943441908425, 
+                    0.9953943441908425, 
+                    0.9953943441908425, 
+                    0.9953943441908425, 
+                    0.9953943441908425, 
+                    0.9953943441908425, 
+                    0.9953943441908425, 
+                    0.9080950821247282, 
+                    0.9080950821247282, 
+                    0.8213875240667635, 
+                    0.8213875240667635, 
+                    0.7472256505275806, 
+                    0.7472256505275806, 
+                    0.6823107655713004, 
+                    0.6823107655713004, 
+                    0.6221080731048791, 
+                    0.6221080731048791, 
+                    0.5644795865054082, 
+                    0.5644795865054082, 
+                    0.508821320456755, 
+                    0.508821320456755, 
+                    0.4544761689033939, 
+                    0.4544761689033939, 
+                    0.400481711423831, 
+                    0.400481711423831, 
+                    0.3467966431647204, 
+                    0.3467966431647204, 
+                    0.29328202985071694, 
+                    0.29328202985071694, 
+                    0.23983925623482513, 
+                    0.23983925623482513, 
+                    0.18601205399195608, 
+                    0.18601205399195608, 
+                    0.11286270175631581, 
+                    0.11286270175631581
+                ], 
+                0.5015503168106079
+            ], 
+            [
+                1.0930036306381226, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9961219544247688, 
+                    0.9961219544247688, 
+                    0.9949813473708888, 
+                    0.9949813473708888, 
+                    0.994892857388742, 
+                    0.994892857388742, 
+                    0.9947305690316023, 
+                    0.9947305690316023, 
+                    0.9070030312492651, 
+                    0.9070030312492651, 
+                    0.8199175809347736, 
+                    0.8199175809347736, 
+                    0.7456856824355711, 
+                    0.7456856824355711, 
+                    0.6809781126748895, 
+                    0.6809781126748895, 
+                    0.6210306870186755, 
+                    0.6210306870186755, 
+                    0.5636305731037067, 
+                    0.5636305731037067, 
+                    0.5081798111683483, 
+                    0.5081798111683483, 
+                    0.45400091229388545, 
+                    0.45400091229388545, 
+                    0.400113555510359, 
+                    0.400113555510359, 
+                    0.34650136080356836, 
+                    0.34650136080356836, 
+                    0.29303724861944025, 
+                    0.29303724861944025, 
+                    0.23963349733395478, 
+                    0.23963349733395478, 
+                    0.1858435407436435, 
+                    0.1858435407436435, 
+                    0.11273364119238892, 
+                    0.11273364119238892
+                ], 
+                0.5011522173881531
+            ], 
+            [
+                1.109324336051941, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999841762122532, 
+                    0.9999841762122532, 
+                    0.9941266865527131, 
+                    0.9941266865527131, 
+                    0.9929735766134978, 
+                    0.9929735766134978, 
+                    0.9908355535740923, 
+                    0.9908355535740923, 
+                    0.9050699046315964, 
+                    0.9050699046315964, 
+                    0.817178907998243, 
+                    0.817178907998243, 
+                    0.7426294766663795, 
+                    0.7426294766663795, 
+                    0.6782007084407892, 
+                    0.6782007084407892, 
+                    0.6186992789113818, 
+                    0.6186992789113818, 
+                    0.5617120164619828, 
+                    0.5617120164619828, 
+                    0.5066713766532356, 
+                    0.5066713766532356, 
+                    0.4528638249210449, 
+                    0.4528638249210449, 
+                    0.3992222662671259, 
+                    0.3992222662671259, 
+                    0.3457864508277353, 
+                    0.3457864508277353, 
+                    0.2924486216723411, 
+                    0.2924486216723411, 
+                    0.2391474395478359, 
+                    0.2391474395478359, 
+                    0.18546322972401041, 
+                    0.18546322972401041, 
+                    0.11233296193769647, 
+                    0.11233296193769647
+                ], 
+                0.5005549192428589
+            ], 
+            [
+                1.1258888244628906, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999916957222146, 
+                    0.9999916957222146, 
+                    0.9939953433127318, 
+                    0.9939953433127318, 
+                    0.9929019051859043, 
+                    0.9929019051859043, 
+                    0.9909086232151338, 
+                    0.9909086232151338, 
+                    0.9048126619754537, 
+                    0.9048126619754537, 
+                    0.8168605245535536, 
+                    0.8168605245535536, 
+                    0.7423995757254371, 
+                    0.7423995757254371, 
+                    0.6781155918979872, 
+                    0.6781155918979872, 
+                    0.6187265076583487, 
+                    0.6187265076583487, 
+                    0.561812854482675, 
+                    0.561812854482675, 
+                    0.5068017886955368, 
+                    0.5068017886955368, 
+                    0.4529742092646761, 
+                    0.4529742092646761, 
+                    0.39930279414779857, 
+                    0.39930279414779857, 
+                    0.3458351682532694, 
+                    0.3458351682532694, 
+                    0.2924704904368182, 
+                    0.2924704904368182, 
+                    0.23914571457068134, 
+                    0.23914571457068134, 
+                    0.18543748442901223, 
+                    0.18543748442901223, 
+                    0.11240641567387963, 
+                    0.11240641567387963
+                ], 
+                0.5005759596824646
+            ], 
+            [
+                1.1427005529403687, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9952972626307394, 
+                    0.9952972626307394, 
+                    0.9950851381226508, 
+                    0.9950851381226508, 
+                    0.9947297978412564, 
+                    0.9947297978412564, 
+                    0.9940851297201887, 
+                    0.9940851297201887, 
+                    0.9072800644760809, 
+                    0.9072800644760809, 
+                    0.8203133437533422, 
+                    0.8203133437533422, 
+                    0.7463129506925804, 
+                    0.7463129506925804, 
+                    0.6818114337637238, 
+                    0.6818114337637238, 
+                    0.6219850051954136, 
+                    0.6219850051954136, 
+                    0.5646126413702193, 
+                    0.5646126413702193, 
+                    0.5090924727543248, 
+                    0.5090924727543248, 
+                    0.45474459884768864, 
+                    0.45474459884768864, 
+                    0.4006841844961476, 
+                    0.4006841844961476, 
+                    0.3469133884003484, 
+                    0.3469133884003484, 
+                    0.2933181972846649, 
+                    0.2933181972846649, 
+                    0.2398010264675175, 
+                    0.2398010264675175, 
+                    0.18589857931571482, 
+                    0.18589857931571482, 
+                    0.11308903676847597, 
+                    0.11308903676847597
+                ], 
+                0.5009824633598328
+            ], 
+            [
+                1.1597633361816406, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9952192308061605, 
+                    0.9952192308061605, 
+                    0.9951147787671815, 
+                    0.9951147787671815, 
+                    0.9949514352005725, 
+                    0.9949514352005725, 
+                    0.9946625370018861, 
+                    0.9946625370018861, 
+                    0.9072555225397487, 
+                    0.9072555225397487, 
+                    0.8202615322595966, 
+                    0.8202615322595966, 
+                    0.74630722928242, 
+                    0.74630722928242, 
+                    0.6818847655161416, 
+                    0.6818847655161416, 
+                    0.6221147987409009, 
+                    0.6221147987409009, 
+                    0.5647713958323162, 
+                    0.5647713958323162, 
+                    0.5092524196626843, 
+                    0.5092524196626843, 
+                    0.4548757339765948, 
+                    0.4548757339765948, 
+                    0.4007827174700849, 
+                    0.4007827174700849, 
+                    0.3469795761705149, 
+                    0.3469795761705149, 
+                    0.29335565160020644, 
+                    0.29335565160020644, 
+                    0.2398108521100672, 
+                    0.2398108521100672, 
+                    0.1858771649548994, 
+                    0.1858771649548994, 
+                    0.11320562137416605, 
+                    0.11320562137416605
+                ], 
+                0.5010544657707214
+            ]
+        ]
+    }, 
+    {
+        "block_size": 40, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8653326034545898, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999909401709652, 
+                    0.9999909401709652, 
+                    0.9999909401709652, 
+                    0.9999909401709652, 
+                    0.9999909401709652, 
+                    0.9999909401709652, 
+                    0.9903705626309885, 
+                    0.9903705626309885, 
+                    0.9040289170397521, 
+                    0.9040289170397521, 
+                    0.8317422239944342, 
+                    0.8317422239944342, 
+                    0.7669185092343572, 
+                    0.7669185092343572, 
+                    0.7064771335953483, 
+                    0.7064771335953483, 
+                    0.64882244141878, 
+                    0.64882244141878, 
+                    0.593017854830361, 
+                    0.593017854830361, 
+                    0.5386533398204582, 
+                    0.5386533398204582, 
+                    0.48533288088497606, 
+                    0.48533288088497606, 
+                    0.4327760994939424, 
+                    0.4327760994939424, 
+                    0.380753360204806, 
+                    0.380753360204806, 
+                    0.32915990215400276, 
+                    0.32915990215400276, 
+                    0.2778347061059686, 
+                    0.2778347061059686, 
+                    0.22658731325098982, 
+                    0.22658731325098982, 
+                    0.1749225451084007, 
+                    0.1749225451084007, 
+                    0.11036615360921559, 
+                    0.11036615360921559
+                ], 
+                0.501427412033081
+            ], 
+            [
+                0.8779398798942566, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999900208723147, 
+                    0.9999900208723147, 
+                    0.9999900208723147, 
+                    0.9999900208723147, 
+                    0.9999900208723147, 
+                    0.9999900208723147, 
+                    0.9903707197392672, 
+                    0.9903707197392672, 
+                    0.9040243855098583, 
+                    0.9040243855098583, 
+                    0.8317319243613813, 
+                    0.8317319243613813, 
+                    0.7669009338428018, 
+                    0.7669009338428018, 
+                    0.7064526933872151, 
+                    0.7064526933872151, 
+                    0.6487937182535384, 
+                    0.6487937182535384, 
+                    0.5929868541029047, 
+                    0.5929868541029047, 
+                    0.5386275134381601, 
+                    0.5386275134381601, 
+                    0.4853138986766156, 
+                    0.4853138986766156, 
+                    0.43276284058526127, 
+                    0.43276284058526127, 
+                    0.38074405997331606, 
+                    0.38074405997331606, 
+                    0.3291530103838372, 
+                    0.3291530103838372, 
+                    0.2778291325684814, 
+                    0.2778291325684814, 
+                    0.2265825596414267, 
+                    0.2265825596414267, 
+                    0.17491832812722852, 
+                    0.17491832812722852, 
+                    0.1103651478491739, 
+                    0.1103651478491739
+                ], 
+                0.5013681054115295
+            ], 
+            [
+                0.8907307982444763, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999890229589121, 
+                    0.9999890229589121, 
+                    0.9999890229589121, 
+                    0.9999890229589121, 
+                    0.9999890229589121, 
+                    0.9999890229589121, 
+                    0.99037117653727, 
+                    0.99037117653727, 
+                    0.9040194431499841, 
+                    0.9040194431499841, 
+                    0.8317204640766193, 
+                    0.8317204640766193, 
+                    0.766881281006839, 
+                    0.766881281006839, 
+                    0.7064253088063657, 
+                    0.7064253088063657, 
+                    0.64876144445773, 
+                    0.64876144445773, 
+                    0.592951792618662, 
+                    0.592951792618662, 
+                    0.5385979433939453, 
+                    0.5385979433939453, 
+                    0.48529176938675955, 
+                    0.48529176938675955, 
+                    0.43274707741427004, 
+                    0.43274707741427004, 
+                    0.38073273472228664, 
+                    0.38073273472228664, 
+                    0.32914455436146856, 
+                    0.32914455436146856, 
+                    0.2778223261423221, 
+                    0.2778223261423221, 
+                    0.2265768140312405, 
+                    0.2265768140312405, 
+                    0.17491331940529586, 
+                    0.17491331940529586, 
+                    0.11036383652730451, 
+                    0.11036383652730451
+                ], 
+                0.5012996196746826
+            ], 
+            [
+                0.9037080407142639, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999879415797326, 
+                    0.9999879415797326, 
+                    0.9999879415797326, 
+                    0.9999879415797326, 
+                    0.9999879415797326, 
+                    0.9999879415797326, 
+                    0.99037199072525, 
+                    0.99037199072525, 
+                    0.9040140071356064, 
+                    0.9040140071356064, 
+                    0.8317076232039284, 
+                    0.8317076232039284, 
+                    0.7668591617631236, 
+                    0.7668591617631236, 
+                    0.7063944357696001, 
+                    0.7063944357696001, 
+                    0.6487249782165011, 
+                    0.6487249782165011, 
+                    0.5929119629072088, 
+                    0.5929119629072088, 
+                    0.5385640131007013, 
+                    0.5385640131007013, 
+                    0.48526600837711703, 
+                    0.48526600837711703, 
+                    0.4327284484731246, 
+                    0.4327284484731246, 
+                    0.3807191130278766, 
+                    0.3807191130278766, 
+                    0.3291343312996424, 
+                    0.3291343312996424, 
+                    0.27781412790452564, 
+                    0.27781412790452564, 
+                    0.2265699473942253, 
+                    0.2265699473942253, 
+                    0.1749074120690104, 
+                    0.1749074120690104, 
+                    0.11036218042739919, 
+                    0.11036218042739919
+                ], 
+                0.5012206435203552
+            ], 
+            [
+                0.9168744087219238, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999867718190262, 
+                    0.9999867718190262, 
+                    0.9999867718190262, 
+                    0.9999867718190262, 
+                    0.9999867718190262, 
+                    0.9999867718190262, 
+                    0.9903732253036777, 
+                    0.9903732253036777, 
+                    0.9040079699950563, 
+                    0.9040079699950563, 
+                    0.8316931302631042, 
+                    0.8316931302631042, 
+                    0.7668341045090773, 
+                    0.7668341045090773, 
+                    0.7063594237724098, 
+                    0.7063594237724098, 
+                    0.6486835623081596, 
+                    0.6486835623081596, 
+                    0.5928665416152943, 
+                    0.5928665416152943, 
+                    0.5385250131470414, 
+                    0.5385250131470414, 
+                    0.4852360617056699, 
+                    0.4852360617056699, 
+                    0.4327065411970437, 
+                    0.4327065411970437, 
+                    0.38070288488229054, 
+                    0.38070288488229054, 
+                    0.3291221085502082, 
+                    0.3291221085502082, 
+                    0.27780435479101045, 
+                    0.27780435479101045, 
+                    0.22656181058592467, 
+                    0.22656181058592467, 
+                    0.17490048245139858, 
+                    0.17490048245139858, 
+                    0.11036013394872196, 
+                    0.11036013394872196
+                ], 
+                0.5011293888092041
+            ], 
+            [
+                0.930232584476471, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999855087269125, 
+                    0.9999855087269125, 
+                    0.9999855087269125, 
+                    0.9999855087269125, 
+                    0.9999855087269125, 
+                    0.9999855087269125, 
+                    0.9903749478378324, 
+                    0.9903749478378324, 
+                    0.9040011925579546, 
+                    0.9040011925579546, 
+                    0.831676650116616, 
+                    0.831676650116616, 
+                    0.7668055376418236, 
+                    0.7668055376418236, 
+                    0.7063194956008328, 
+                    0.7063194956008328, 
+                    0.648636303976011, 
+                    0.648636303976011, 
+                    0.5928145709275724, 
+                    0.5928145709275724, 
+                    0.5384801271912526, 
+                    0.5384801271912526, 
+                    0.48520129573918913, 
+                    0.48520129573918913, 
+                    0.43268088424508117, 
+                    0.43268088424508117, 
+                    0.38068369579298744, 
+                    0.38068369579298744, 
+                    0.32910761898189583, 
+                    0.32910761898189583, 
+                    0.2777927958334597, 
+                    0.2777927958334597, 
+                    0.2265522311863033, 
+                    0.2265522311863033, 
+                    0.17489238744170346, 
+                    0.17489238744170346, 
+                    0.11035764408622895, 
+                    0.11035764408622895
+                ], 
+                0.5010238885879517
+            ], 
+            [
+                0.9437853693962097, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999841473530691, 
+                    0.9999841473530691, 
+                    0.9999841473530691, 
+                    0.9999841473530691, 
+                    0.9999841473530691, 
+                    0.9999841473530691, 
+                    0.9903772291417885, 
+                    0.9903772291417885, 
+                    0.9039934950489447, 
+                    0.9039934950489447, 
+                    0.831657769103903, 
+                    0.831657769103903, 
+                    0.7667727686538812, 
+                    0.7667727686538812, 
+                    0.7062737232789427, 
+                    0.7062737232789427, 
+                    0.6485821513433058, 
+                    0.6485821513433058, 
+                    0.5927549370147023, 
+                    0.5927549370147023, 
+                    0.5384284156766194, 
+                    0.5384284156766194, 
+                    0.48516098517590406, 
+                    0.48516098517590406, 
+                    0.43265093860155435, 
+                    0.43265093860155435, 
+                    0.3806611399837186, 
+                    0.3806611399837186, 
+                    0.3290905556366812, 
+                    0.3290905556366812, 
+                    0.27777920779175375, 
+                    0.27777920779175375, 
+                    0.2265410098370787, 
+                    0.2265410098370787, 
+                    0.17488296139566148, 
+                    0.17488296139566148, 
+                    0.11035464925719207, 
+                    0.11035464925719207
+                ], 
+                0.5009018182754517
+            ], 
+            [
+                0.9575355648994446, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999826827833839, 
+                    0.9999826827833839, 
+                    0.9999826827833839, 
+                    0.9999826827833839, 
+                    0.9999826827833839, 
+                    0.9999826827833839, 
+                    0.9903801411891296, 
+                    0.9903801411891296, 
+                    0.903984645852424, 
+                    0.903984645852424, 
+                    0.8316359768170722, 
+                    0.8316359768170722, 
+                    0.7667349589730064, 
+                    0.7667349589730064, 
+                    0.7062209995341078, 
+                    0.7062209995341078, 
+                    0.6485198657845805, 
+                    0.6485198657845805, 
+                    0.5926863450465619, 
+                    0.5926863450465619, 
+                    0.538368797059521, 
+                    0.538368797059521, 
+                    0.485114299249607, 
+                    0.485114299249607, 
+                    0.43261608731516693, 
+                    0.43261608731516693, 
+                    0.3806347525471589, 
+                    0.3806347525471589, 
+                    0.32907056555325925, 
+                    0.32907056555325925, 
+                    0.2777633100946225, 
+                    0.2777633100946225, 
+                    0.22652791598541452, 
+                    0.22652791598541452, 
+                    0.17487201255217485, 
+                    0.17487201255217485, 
+                    0.11035107792874758, 
+                    0.11035107792874758
+                ], 
+                0.500760555267334
+            ], 
+            [
+                0.9714861512184143, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999811101789559, 
+                    0.9999811101789559, 
+                    0.9999811101789559, 
+                    0.9999811101789559, 
+                    0.9999811101789559, 
+                    0.9999811101789559, 
+                    0.9903837539561013, 
+                    0.9903837539561013, 
+                    0.9039743473847195, 
+                    0.9039743473847195, 
+                    0.8316106437890697, 
+                    0.8316106437890697, 
+                    0.7666910936996205, 
+                    0.7666910936996205, 
+                    0.7061600040082012, 
+                    0.7061600040082012, 
+                    0.6484479895896282, 
+                    0.6484479895896282, 
+                    0.5926072902448093, 
+                    0.5926072902448093, 
+                    0.5383000261535308, 
+                    0.5383000261535308, 
+                    0.4850602858459677, 
+                    0.4850602858459677, 
+                    0.4325756236794894, 
+                    0.4325756236794894, 
+                    0.38060400039695286, 
+                    0.38060400039695286, 
+                    0.3290472426273778, 
+                    0.3290472426273778, 
+                    0.27774477898510536, 
+                    0.27774477898510536, 
+                    0.2265126829467476, 
+                    0.2265126829467476, 
+                    0.17485931886156955, 
+                    0.17485931886156955, 
+                    0.11034684702219935, 
+                    0.11034684702219935
+                ], 
+                0.500596821308136
+            ], 
+            [
+                0.9856399893760681, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9904873068452631, 
+                    0.9904873068452631, 
+                    0.9040925605874749, 
+                    0.9040925605874749, 
+                    0.8317713898744463, 
+                    0.8317713898744463, 
+                    0.766911008017758, 
+                    0.766911008017758, 
+                    0.7064408151693203, 
+                    0.7064408151693203, 
+                    0.6487780777933249, 
+                    0.6487780777933249, 
+                    0.5929862630102, 
+                    0.5929862630102, 
+                    0.5386591034551694, 
+                    0.5386591034551694, 
+                    0.485367273107682, 
+                    0.485367273107682, 
+                    0.4328200993500217, 
+                    0.4328200993500217, 
+                    0.3807983055840029, 
+                    0.3807983055840029, 
+                    0.32919469426618186, 
+                    0.32919469426618186, 
+                    0.27785787024543107, 
+                    0.27785787024543107, 
+                    0.22659914227408331, 
+                    0.22659914227408331, 
+                    0.17492163432198765, 
+                    0.17492163432198765, 
+                    0.11042015040225833, 
+                    0.11042015040225833
+                ], 
+                0.5015101432800293
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.990499498587873, 
+                    0.990499498587873, 
+                    0.9040855792594624, 
+                    0.9040855792594624, 
+                    0.8317452940982015, 
+                    0.8317452940982015, 
+                    0.7668601329326156, 
+                    0.7668601329326156, 
+                    0.7063652903682741, 
+                    0.7063652903682741, 
+                    0.6486848069425947, 
+                    0.6486848069425947, 
+                    0.5928789997625193, 
+                    0.5928789997625193, 
+                    0.538561980697855, 
+                    0.538561980697855, 
+                    0.48528842230129887, 
+                    0.48528842230129887, 
+                    0.4327597638242563, 
+                    0.4327597638242563, 
+                    0.3807516829942254, 
+                    0.3807516829942254, 
+                    0.3291595142501509, 
+                    0.3291595142501509, 
+                    0.27783032910291217, 
+                    0.27783032910291217, 
+                    0.22657693573166698, 
+                    0.22657693573166698, 
+                    0.17490357951475577, 
+                    0.17490357951475577, 
+                    0.11041343114845957, 
+                    0.11041343114845957
+                ], 
+                0.5012860894203186
+            ], 
+            [
+                1.0145692825317383, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9905128563670078, 
+                    0.9905128563670078, 
+                    0.9040758704841254, 
+                    0.9040758704841254, 
+                    0.8317128706266639, 
+                    0.8317128706266639, 
+                    0.7667986208921166, 
+                    0.7667986208921166, 
+                    0.7062755100834427, 
+                    0.7062755100834427, 
+                    0.6485754069302692, 
+                    0.6485754069302692, 
+                    0.5927546929498766, 
+                    0.5927546929498766, 
+                    0.5384504571621392, 
+                    0.5384504571621392, 
+                    0.4851983807123977, 
+                    0.4851983807123977, 
+                    0.4326910313845712, 
+                    0.4326910313845712, 
+                    0.3806986566678393, 
+                    0.3806986566678393, 
+                    0.32911945147624977, 
+                    0.32911945147624977, 
+                    0.27779890858293504, 
+                    0.27779890858293504, 
+                    0.22655155091906867, 
+                    0.22655155091906867, 
+                    0.17488290091996217, 
+                    0.17488290091996217, 
+                    0.11040572437158724, 
+                    0.11040572437158724
+                ], 
+                0.5010262727737427
+            ], 
+            [
+                1.029350757598877, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9905273719828674, 
+                    0.9905273719828674, 
+                    0.9040626297107514, 
+                    0.9040626297107514, 
+                    0.8316726491575923, 
+                    0.8316726491575923, 
+                    0.7667242768594111, 
+                    0.7667242768594111, 
+                    0.7061687960644678, 
+                    0.7061687960644678, 
+                    0.6484470867531267, 
+                    0.6484470867531267, 
+                    0.5926106166801887, 
+                    0.5926106166801887, 
+                    0.5383223609590791, 
+                    0.5383223609590791, 
+                    0.4850955118537624, 
+                    0.4850955118537624, 
+                    0.432612684359286, 
+                    0.432612684359286, 
+                    0.3806383001530435, 
+                    0.3806383001530435, 
+                    0.3290737889858249, 
+                    0.3290737889858249, 
+                    0.27776303021579535, 
+                    0.27776303021579535, 
+                    0.2265225070533211, 
+                    0.2265225070533211, 
+                    0.1748591969692299, 
+                    0.1748591969692299, 
+                    0.11039687766319389, 
+                    0.11039687766319389
+                ], 
+                0.500724732875824
+            ], 
+            [
+                1.0443476438522339, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999697394011651, 
+                    0.9999697394011651, 
+                    0.9999697394011651, 
+                    0.9999697394011651, 
+                    0.9999697394011651, 
+                    0.9999697394011651, 
+                    0.9904082935923375, 
+                    0.9904082935923375, 
+                    0.9040475367586696, 
+                    0.9040475367586696, 
+                    0.8317274548732864, 
+                    0.8317274548732864, 
+                    0.7667192378805214, 
+                    0.7667192378805214, 
+                    0.7060575425858653, 
+                    0.7060575425858653, 
+                    0.6482445965368533, 
+                    0.6482445965368533, 
+                    0.5923256327253781, 
+                    0.5923256327253781, 
+                    0.5380742519412657, 
+                    0.5380742519412657, 
+                    0.4849237247137537, 
+                    0.4849237247137537, 
+                    0.43252078794329013, 
+                    0.43252078794329013, 
+                    0.38060351870550374, 
+                    0.38060351870550374, 
+                    0.32908551068972774, 
+                    0.32908551068972774, 
+                    0.2778015212091789, 
+                    0.2778015212091789, 
+                    0.22657385149554166, 
+                    0.22657385149554166, 
+                    0.17491113234937192, 
+                    0.17491113234937192, 
+                    0.11048739945058414, 
+                    0.11048739945058414
+                ], 
+                0.5005276799201965
+            ], 
+            [
+                1.0595629215240479, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999982864236178, 
+                    0.9999982864236178, 
+                    0.9999982864236178, 
+                    0.9999982864236178, 
+                    0.9905522749807999, 
+                    0.9905522749807999, 
+                    0.9041846622314542, 
+                    0.9041846622314542, 
+                    0.8318921557705671, 
+                    0.8318921557705671, 
+                    0.7669175148410653, 
+                    0.7669175148410653, 
+                    0.7062847173493327, 
+                    0.7062847173493327, 
+                    0.6484914127174535, 
+                    0.6484914127174535, 
+                    0.5925922963928184, 
+                    0.5925922963928184, 
+                    0.5383195818716344, 
+                    0.5383195818716344, 
+                    0.4851310450672521, 
+                    0.4851310450672521, 
+                    0.43268589412756503, 
+                    0.43268589412756503, 
+                    0.3807349616164022, 
+                    0.3807349616164022, 
+                    0.3291864981114432, 
+                    0.3291864981114432, 
+                    0.27787972893964463, 
+                    0.27787972893964463, 
+                    0.2266336723549908, 
+                    0.2266336723549908, 
+                    0.17495328084219347, 
+                    0.17495328084219347, 
+                    0.11055101644407628, 
+                    0.11055101644407628
+                ], 
+                0.5012073516845703
+            ], 
+            [
+                1.0750000476837158, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999978173102028, 
+                    0.9999978173102028, 
+                    0.9999978173102028, 
+                    0.9999978173102028, 
+                    0.9905676336578411, 
+                    0.9905676336578411, 
+                    0.9041526476935587, 
+                    0.9041526476935587, 
+                    0.831815844965469, 
+                    0.831815844965469, 
+                    0.7667865224828596, 
+                    0.7667865224828596, 
+                    0.7061055214181341, 
+                    0.7061055214181341, 
+                    0.648284048037815, 
+                    0.648284048037815, 
+                    0.5923674593951043, 
+                    0.5923674593951043, 
+                    0.5381248527033562, 
+                    0.5381248527033562, 
+                    0.4849771210750497, 
+                    0.4849771210750497, 
+                    0.4325695551986311, 
+                    0.4325695551986311, 
+                    0.3806458863387349, 
+                    0.3806458863387349, 
+                    0.32911904315089785, 
+                    0.32911904315089785, 
+                    0.27782662822904824, 
+                    0.27782662822904824, 
+                    0.22659058482056765, 
+                    0.22659058482056765, 
+                    0.17491801282069616, 
+                    0.17491801282069616, 
+                    0.11053828377706731, 
+                    0.11053828377706731
+                ], 
+                0.5007349252700806
+            ], 
+            [
+                1.090661883354187, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999548637611867, 
+                    0.9999548637611867, 
+                    0.9999548637611867, 
+                    0.9999548637611867, 
+                    0.9999548637611867, 
+                    0.9999548637611867, 
+                    0.9904120015207857, 
+                    0.9904120015207857, 
+                    0.9041524237754028, 
+                    0.9041524237754028, 
+                    0.8319350302988877, 
+                    0.8319350302988877, 
+                    0.7668500466095053, 
+                    0.7668500466095053, 
+                    0.7060546855652712, 
+                    0.7060546855652712, 
+                    0.648138494937038, 
+                    0.648138494937038, 
+                    0.5921406089231698, 
+                    0.5921406089231698, 
+                    0.5379486784380297, 
+                    0.5379486784380297, 
+                    0.4848865831995517, 
+                    0.4848865831995517, 
+                    0.4325620925614591, 
+                    0.4325620925614591, 
+                    0.38069501527138483, 
+                    0.38069501527138483, 
+                    0.32921076894930273, 
+                    0.32921076894930273, 
+                    0.2779394099434659, 
+                    0.2779394099434659, 
+                    0.22670859921077421, 
+                    0.22670859921077421, 
+                    0.17502512721747054, 
+                    0.17502512721747054, 
+                    0.11070276133646123, 
+                    0.11070276133646123
+                ], 
+                0.5008718967437744
+            ], 
+            [
+                1.106552004814148, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999914413982596, 
+                    0.9999914413982596, 
+                    0.9999914413982596, 
+                    0.9999914413982596, 
+                    0.9905763764989132, 
+                    0.9905763764989132, 
+                    0.9042826818447006, 
+                    0.9042826818447006, 
+                    0.8320721582046248, 
+                    0.8320721582046248, 
+                    0.7669908198761366, 
+                    0.7669908198761366, 
+                    0.7061953830978415, 
+                    0.7061953830978415, 
+                    0.6482793499391308, 
+                    0.6482793499391308, 
+                    0.592286896377687, 
+                    0.592286896377687, 
+                    0.5380855617124793, 
+                    0.5380855617124793, 
+                    0.4850056579153027, 
+                    0.4850056579153027, 
+                    0.4326597289707415, 
+                    0.4326597289707415, 
+                    0.380774774201413, 
+                    0.380774774201413, 
+                    0.32927354623465965, 
+                    0.32927354623465965, 
+                    0.2779886021056318, 
+                    0.2779886021056318, 
+                    0.2267458461621824, 
+                    0.2267458461621824, 
+                    0.17504968420392725, 
+                    0.17504968420392725, 
+                    0.11075936488089633, 
+                    0.11075936488089633
+                ], 
+                0.5013036727905273
+            ], 
+            [
+                1.1226736307144165, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999890846538372, 
+                    0.9999890846538372, 
+                    0.9999890846538372, 
+                    0.9999890846538372, 
+                    0.9905834141018236, 
+                    0.9905834141018236, 
+                    0.9042100351447796, 
+                    0.9042100351447796, 
+                    0.8319280293109533, 
+                    0.8319280293109533, 
+                    0.766760314885479, 
+                    0.766760314885479, 
+                    0.705894756491835, 
+                    0.705894756491835, 
+                    0.6479443718928882, 
+                    0.6479443718928882, 
+                    0.5919359323988317, 
+                    0.5919359323988317, 
+                    0.537789109168429, 
+                    0.537789109168429, 
+                    0.48477484237179386, 
+                    0.48477484237179386, 
+                    0.4324866417178518, 
+                    0.4324866417178518, 
+                    0.3806431604785834, 
+                    0.3806431604785834, 
+                    0.3291739600298431, 
+                    0.3291739600298431, 
+                    0.2779102316273872, 
+                    0.2779102316273872, 
+                    0.2266822373675223, 
+                    0.2266822373675223, 
+                    0.17499754643312926, 
+                    0.17499754643312926, 
+                    0.11074173721703648, 
+                    0.11074173721703648
+                ], 
+                0.500560462474823
+            ], 
+            [
+                1.1390302181243896, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999481700861214, 
+                    0.9999481700861214, 
+                    0.9999177019969959, 
+                    0.9999177019969959, 
+                    0.9999177019969959, 
+                    0.9999177019969959, 
+                    0.9903570344961651, 
+                    0.9903570344961651, 
+                    0.9042149022378325, 
+                    0.9042149022378325, 
+                    0.8321265261239363, 
+                    0.8321265261239363, 
+                    0.7669087373858361, 
+                    0.7669087373858361, 
+                    0.705916200446759, 
+                    0.705916200446759, 
+                    0.6478646606556893, 
+                    0.6478646606556893, 
+                    0.5917743934555267, 
+                    0.5917743934555267, 
+                    0.5376981536077123, 
+                    0.5376981536077123, 
+                    0.4847853712722885, 
+                    0.4847853712722885, 
+                    0.432588791768349, 
+                    0.432588791768349, 
+                    0.38080462789288866, 
+                    0.38080462789288866, 
+                    0.3293759351772389, 
+                    0.3293759351772389, 
+                    0.27812758513842645, 
+                    0.27812758513842645, 
+                    0.22689556558798143, 
+                    0.22689556558798143, 
+                    0.17518449629921404, 
+                    0.17518449629921404, 
+                    0.11101478259030259, 
+                    0.11101478259030259
+                ], 
+                0.5011385679244995
+            ], 
+            [
+                1.1556249856948853, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999674707868562, 
+                    0.9999674707868562, 
+                    0.9999674707868562, 
+                    0.9999674707868562, 
+                    0.9905222709797856, 
+                    0.9905222709797856, 
+                    0.9043018627467481, 
+                    0.9043018627467481, 
+                    0.8321865592236456, 
+                    0.8321865592236456, 
+                    0.7669268455506294, 
+                    0.7669268455506294, 
+                    0.7058974855098842, 
+                    0.7058974855098842, 
+                    0.6478287340874188, 
+                    0.6478287340874188, 
+                    0.5917363583292723, 
+                    0.5917363583292723, 
+                    0.5376789435977085, 
+                    0.5376789435977085, 
+                    0.4847825209889338, 
+                    0.4847825209889338, 
+                    0.4325954350865793, 
+                    0.4325954350865793, 
+                    0.38081616218637515, 
+                    0.38081616218637515, 
+                    0.32938847663119275, 
+                    0.32938847663119275, 
+                    0.2781386214194395, 
+                    0.2781386214194395, 
+                    0.2269030174555003, 
+                    0.2269030174555003, 
+                    0.17518558904104725, 
+                    0.17518558904104725, 
+                    0.11106425347098173, 
+                    0.11106425347098173
+                ], 
+                0.5011842846870422
+            ]
+        ]
+    }, 
+    {
+        "block_size": 41, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8682851195335388, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999813458288918, 
+                    0.9999813458288918, 
+                    0.9999813458288918, 
+                    0.9999813458288918, 
+                    0.9999813458288918, 
+                    0.9999813458288918, 
+                    0.9903230344352305, 
+                    0.9903230344352305, 
+                    0.9039432186672044, 
+                    0.9039432186672044, 
+                    0.8315880382021587, 
+                    0.8315880382021587, 
+                    0.7667442362234944, 
+                    0.7667442362234944, 
+                    0.7062538855261355, 
+                    0.7062538855261355, 
+                    0.648623409704659, 
+                    0.648623409704659, 
+                    0.5929802588431146, 
+                    0.5929802588431146, 
+                    0.5386721519698067, 
+                    0.5386721519698067, 
+                    0.48536941741870976, 
+                    0.48536941741870976, 
+                    0.4327974191836627, 
+                    0.4327974191836627, 
+                    0.3807833984917899, 
+                    0.3807833984917899, 
+                    0.3291738552731671, 
+                    0.3291738552731671, 
+                    0.2778420937220866, 
+                    0.2778420937220866, 
+                    0.22658975471570147, 
+                    0.22658975471570147, 
+                    0.17492055689543623, 
+                    0.17492055689543623, 
+                    0.1103697410794881, 
+                    0.1103697410794881
+                ], 
+                0.5012595057487488
+            ], 
+            [
+                0.8806353807449341, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999798284525765, 
+                    0.9999798284525765, 
+                    0.9999798284525765, 
+                    0.9999798284525765, 
+                    0.9999798284525765, 
+                    0.9999798284525765, 
+                    0.990321120554354, 
+                    0.990321120554354, 
+                    0.9039320239663795, 
+                    0.9039320239663795, 
+                    0.8315649003141414, 
+                    0.8315649003141414, 
+                    0.7667125412734157, 
+                    0.7667125412734157, 
+                    0.7062119264481962, 
+                    0.7062119264481962, 
+                    0.6485792629478331, 
+                    0.6485792629478331, 
+                    0.5929419992855438, 
+                    0.5929419992855438, 
+                    0.5386404122305445, 
+                    0.5386404122305445, 
+                    0.48534527900379965, 
+                    0.48534527900379965, 
+                    0.4327795832528719, 
+                    0.4327795832528719, 
+                    0.38077024655428193, 
+                    0.38077024655428193, 
+                    0.3291636869394951, 
+                    0.3291636869394951, 
+                    0.2778337790982004, 
+                    0.2778337790982004, 
+                    0.22658267931669418, 
+                    0.22658267931669418, 
+                    0.17491443706643628, 
+                    0.17491443706643628, 
+                    0.11036805775734701, 
+                    0.11036805775734701
+                ], 
+                0.5011720657348633
+            ], 
+            [
+                0.8931612968444824, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999782196256152, 
+                    0.9999782196256152, 
+                    0.9999782196256152, 
+                    0.9999782196256152, 
+                    0.9999782196256152, 
+                    0.9999782196256152, 
+                    0.9903194097209383, 
+                    0.9903194097209383, 
+                    0.903919381694563, 
+                    0.903919381694563, 
+                    0.8315384927412439, 
+                    0.8315384927412439, 
+                    0.7666762548500012, 
+                    0.7666762548500012, 
+                    0.7061637609967115, 
+                    0.7061637609967115, 
+                    0.6485284330937413, 
+                    0.6485284330937413, 
+                    0.5928977438786369, 
+                    0.5928977438786369, 
+                    0.53860341305975, 
+                    0.53860341305975, 
+                    0.48531683423601574, 
+                    0.48531683423601574, 
+                    0.43275829839661395, 
+                    0.43275829839661395, 
+                    0.38075440729180765, 
+                    0.38075440729180765, 
+                    0.32915140663906683, 
+                    0.32915140663906683, 
+                    0.2778237885226447, 
+                    0.2778237885226447, 
+                    0.22657424236154514, 
+                    0.22657424236154514, 
+                    0.17490720979071495, 
+                    0.17490720979071495, 
+                    0.11036594513517986, 
+                    0.11036594513517986
+                ], 
+                0.5010700225830078
+            ], 
+            [
+                0.9058653712272644, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999765168562934, 
+                    0.9999765168562934, 
+                    0.9999765168562934, 
+                    0.9999765168562934, 
+                    0.9999765168562934, 
+                    0.9999765168562934, 
+                    0.9903179047872561, 
+                    0.9903179047872561, 
+                    0.9039049467056364, 
+                    0.9039049467056364, 
+                    0.8315081169167334, 
+                    0.8315081169167334, 
+                    0.7666344440693152, 
+                    0.7666344440693152, 
+                    0.7061081887237295, 
+                    0.7061081887237295, 
+                    0.6484696963583325, 
+                    0.6484696963583325, 
+                    0.592846453375391, 
+                    0.592846453375391, 
+                    0.5385602972942025, 
+                    0.5385602972942025, 
+                    0.4852834260062138, 
+                    0.4852834260062138, 
+                    0.43273307072798517, 
+                    0.43273307072798517, 
+                    0.3807355112063603, 
+                    0.3807355112063603, 
+                    0.3291367284807721, 
+                    0.3291367284807721, 
+                    0.2778118918765707, 
+                    0.2778118918765707, 
+                    0.22656425249874457, 
+                    0.22656425249874457, 
+                    0.17489871455466688, 
+                    0.17489871455466688, 
+                    0.1103633428071071, 
+                    0.1103633428071071
+                ], 
+                0.5009509325027466
+            ], 
+            [
+                0.9187501072883606, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999747178368497, 
+                    0.9999747178368497, 
+                    0.9999747178368497, 
+                    0.9999747178368497, 
+                    0.9999747178368497, 
+                    0.9999747178368497, 
+                    0.9903165902225587, 
+                    0.9903165902225587, 
+                    0.9038882831659063, 
+                    0.9038882831659063, 
+                    0.831472916802502, 
+                    0.831472916802502, 
+                    0.7665859841982382, 
+                    0.7665859841982382, 
+                    0.7060437831941472, 
+                    0.7060437831941472, 
+                    0.6484016175277554, 
+                    0.6484016175277554, 
+                    0.5927869207165581, 
+                    0.5927869207165581, 
+                    0.5385100768870594, 
+                    0.5385100768870594, 
+                    0.4852443001532273, 
+                    0.4852443001532273, 
+                    0.4327033338354393, 
+                    0.4327033338354393, 
+                    0.3807131333066802, 
+                    0.3807131333066802, 
+                    0.32911932233864516, 
+                    0.32911932233864516, 
+                    0.27779782255121316, 
+                    0.27779782255121316, 
+                    0.2265524875196837, 
+                    0.2265524875196837, 
+                    0.1748887647773318, 
+                    0.1748887647773318, 
+                    0.11036018038473136, 
+                    0.11036018038473136
+                ], 
+                0.5008118748664856
+            ], 
+            [
+                0.9318181872367859, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999972820459198, 
+                    0.999972820459198, 
+                    0.999972820459198, 
+                    0.999972820459198, 
+                    0.999972820459198, 
+                    0.999972820459198, 
+                    0.9903154239630589, 
+                    0.9903154239630589, 
+                    0.9038688420221087, 
+                    0.9038688420221087, 
+                    0.8314318445584862, 
+                    0.8314318445584862, 
+                    0.7665295204608855, 
+                    0.7665295204608855, 
+                    0.705968850696869, 
+                    0.705968850696869, 
+                    0.6483225141140873, 
+                    0.6483225141140873, 
+                    0.5927177438293729, 
+                    0.5927177438293729, 
+                    0.5384516122625631, 
+                    0.5384516122625631, 
+                    0.4851985902281074, 
+                    0.4851985902281074, 
+                    0.4326684373090647, 
+                    0.4326684373090647, 
+                    0.3806867842122413, 
+                    0.3806867842122413, 
+                    0.32909880669265235, 
+                    0.32909880669265235, 
+                    0.27778127150319076, 
+                    0.27778127150319076, 
+                    0.2265386893026037, 
+                    0.2265386893026037, 
+                    0.1748771435172478, 
+                    0.1748771435172478, 
+                    0.11035637585522882, 
+                    0.11035637585522882
+                ], 
+                0.5006495714187622
+            ], 
+            [
+                0.9450721144676208, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.990466545124356, 
+                    0.990466545124356, 
+                    0.9040355913860942, 
+                    0.9040355913860942, 
+                    0.8316625295225195, 
+                    0.8316625295225195, 
+                    0.766802908175249, 
+                    0.766802908175249, 
+                    0.7063052462613368, 
+                    0.7063052462613368, 
+                    0.6486804372658189, 
+                    0.6486804372658189, 
+                    0.5930492952946537, 
+                    0.5930492952946537, 
+                    0.538751466611472, 
+                    0.538751466611472, 
+                    0.48545179045654646, 
+                    0.48545179045654646, 
+                    0.43287527504214024, 
+                    0.43287527504214024, 
+                    0.3808495633752269, 
+                    0.3808495633752269, 
+                    0.32922641313795653, 
+                    0.32922641313795653, 
+                    0.2778808484085504, 
+                    0.2778808484085504, 
+                    0.22661606139437393, 
+                    0.22661606139437393, 
+                    0.17493382504230173, 
+                    0.17493382504230173, 
+                    0.11042431472253303, 
+                    0.11042431472253303
+                ], 
+                0.5015281438827515
+            ], 
+            [
+                0.9585145711898804, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9904738404383555, 
+                    0.9904738404383555, 
+                    0.904016381716857, 
+                    0.904016381716857, 
+                    0.8316145340360794, 
+                    0.8316145340360794, 
+                    0.7667323003678629, 
+                    0.7667323003678629, 
+                    0.7062066727275484, 
+                    0.7062066727275484, 
+                    0.6485722570546155, 
+                    0.6485722570546155, 
+                    0.5929516781633729, 
+                    0.5929516781633729, 
+                    0.5386662747567201, 
+                    0.5386662747567201, 
+                    0.48538316167207274, 
+                    0.48538316167207274, 
+                    0.4328216017601088, 
+                    0.4328216017601088, 
+                    0.3808086518977208, 
+                    0.3808086518977208, 
+                    0.3291946979331627, 
+                    0.3291946979331627, 
+                    0.2778557079787858, 
+                    0.2778557079787858, 
+                    0.22659554814435237, 
+                    0.22659554814435237, 
+                    0.1749169752660815, 
+                    0.1749169752660815, 
+                    0.11041799750816304, 
+                    0.11041799750816304
+                ], 
+                0.5012997984886169
+            ], 
+            [
+                0.9721481800079346, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9904810984374051, 
+                    0.9904810984374051, 
+                    0.9039917985864336, 
+                    0.9039917985864336, 
+                    0.8315558016553279, 
+                    0.8315558016553279, 
+                    0.7666474579725961, 
+                    0.7666474579725961, 
+                    0.7060899159062853, 
+                    0.7060899159062853, 
+                    0.6484456462277585, 
+                    0.6484456462277585, 
+                    0.5928384288040988, 
+                    0.5928384288040988, 
+                    0.5385681516051728, 
+                    0.5385681516051728, 
+                    0.48530452890724657, 
+                    0.48530452890724657, 
+                    0.43276029819930245, 
+                    0.43276029819930245, 
+                    0.38076194490283055, 
+                    0.38076194490283055, 
+                    0.3291584515419675, 
+                    0.3291584515419675, 
+                    0.2778269148898719, 
+                    0.2778269148898719, 
+                    0.22657200499807226, 
+                    0.22657200499807226, 
+                    0.17489760028936285, 
+                    0.17489760028936285, 
+                    0.11041072323401309, 
+                    0.11041072323401309
+                ], 
+                0.5010338425636292
+            ], 
+            [
+                0.9859757423400879, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9904880125930635, 
+                    0.9904880125930635, 
+                    0.9039604654468093, 
+                    0.9039604654468093, 
+                    0.8314839781730569, 
+                    0.8314839781730569, 
+                    0.7665455338839002, 
+                    0.7665455338839002, 
+                    0.7059516289850077, 
+                    0.7059516289850077, 
+                    0.6482974547594244, 
+                    0.6482974547594244, 
+                    0.5927070149942439, 
+                    0.5927070149942439, 
+                    0.5384550910420237, 
+                    0.5384550910420237, 
+                    0.4852143822393988, 
+                    0.4852143822393988, 
+                    0.43269022632832543, 
+                    0.43269022632832543, 
+                    0.38070857309136935, 
+                    0.38070857309136935, 
+                    0.32911698574137765, 
+                    0.32911698574137765, 
+                    0.2777939056489295, 
+                    0.2777939056489295, 
+                    0.22654495820809573, 
+                    0.22654495820809573, 
+                    0.174875301120129, 
+                    0.174875301120129, 
+                    0.11040233955337718, 
+                    0.11040233955337718
+                ], 
+                0.5007238388061523
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999589077077711, 
+                    0.9999589077077711, 
+                    0.9999589077077711, 
+                    0.9999589077077711, 
+                    0.9999589077077711, 
+                    0.9999589077077711, 
+                    0.9902971611589511, 
+                    0.9902971611589511, 
+                    0.9038597661398152, 
+                    0.9038597661398152, 
+                    0.8314102816476925, 
+                    0.8314102816476925, 
+                    0.7664466296926555, 
+                    0.7664466296926555, 
+                    0.7057433692360751, 
+                    0.7057433692360751, 
+                    0.6480507448730505, 
+                    0.6480507448730505, 
+                    0.5925033841552897, 
+                    0.5925033841552897, 
+                    0.5382970933486009, 
+                    0.5382970933486009, 
+                    0.4851200879679711, 
+                    0.4851200879679711, 
+                    0.43265226110742266, 
+                    0.43265226110742266, 
+                    0.38071746558035136, 
+                    0.38071746558035136, 
+                    0.3291566637437775, 
+                    0.3291566637437775, 
+                    0.27785177463802707, 
+                    0.27785177463802707, 
+                    0.22660977992213993, 
+                    0.22660977992213993, 
+                    0.17493625574704758, 
+                    0.17493625574704758, 
+                    0.11050012132509, 
+                    0.11050012132509
+                ], 
+                0.5005645155906677
+            ], 
+            [
+                1.0142236948013306, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999973512840052, 
+                    0.9999973512840052, 
+                    0.9999973512840052, 
+                    0.9999973512840052, 
+                    0.9904864817591548, 
+                    0.9904864817591548, 
+                    0.9040300441705286, 
+                    0.9040300441705286, 
+                    0.8316164719613887, 
+                    0.8316164719613887, 
+                    0.7666654280738441, 
+                    0.7666654280738441, 
+                    0.7059856650081593, 
+                    0.7059856650081593, 
+                    0.6482919310789924, 
+                    0.6482919310789924, 
+                    0.5927205830589112, 
+                    0.5927205830589112, 
+                    0.5384897346804519, 
+                    0.5384897346804519, 
+                    0.4852818573115068, 
+                    0.4852818573115068, 
+                    0.43278479784813917, 
+                    0.43278479784813917, 
+                    0.380823164847371, 
+                    0.380823164847371, 
+                    0.32924082001287847, 
+                    0.32924082001287847, 
+                    0.2779183726860979, 
+                    0.2779183726860979, 
+                    0.22666165337620478, 
+                    0.22666165337620478, 
+                    0.17497333068034637, 
+                    0.17497333068034637, 
+                    0.11055844384702306, 
+                    0.11055844384702306
+                ], 
+                0.5011834502220154
+            ], 
+            [
+                1.0286498069763184, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999966432615465, 
+                    0.9999966432615465, 
+                    0.9999966432615465, 
+                    0.9999966432615465, 
+                    0.9904858838601414, 
+                    0.9904858838601414, 
+                    0.9039646882991424, 
+                    0.9039646882991424, 
+                    0.8314847545953453, 
+                    0.8314847545953453, 
+                    0.7664885345749884, 
+                    0.7664885345749884, 
+                    0.7057556095224277, 
+                    0.7057556095224277, 
+                    0.648053913045375, 
+                    0.648053913045375, 
+                    0.592514781569576, 
+                    0.592514781569576, 
+                    0.5383163822127082, 
+                    0.5383163822127082, 
+                    0.48514579510747247, 
+                    0.48514579510747247, 
+                    0.43268013375831343, 
+                    0.43268013375831343, 
+                    0.38074373911660414, 
+                    0.38074373911660414, 
+                    0.32917913790857806, 
+                    0.32917913790857806, 
+                    0.27786917423601504, 
+                    0.27786917423601504, 
+                    0.22662125318047535, 
+                    0.22662125318047535, 
+                    0.17493993012661796, 
+                    0.17493993012661796, 
+                    0.11054644610282353, 
+                    0.11054644610282353
+                ], 
+                0.5006920695304871
+            ], 
+            [
+                1.0432809591293335, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999414180903087, 
+                    0.9999414180903087, 
+                    0.9999386994121863, 
+                    0.9999386994121863, 
+                    0.9999386994121863, 
+                    0.9999386994121863, 
+                    0.9902385583024085, 
+                    0.9902385583024085, 
+                    0.9038565486858189, 
+                    0.9038565486858189, 
+                    0.8314457229995664, 
+                    0.8314457229995664, 
+                    0.7664426820486252, 
+                    0.7664426820486252, 
+                    0.7055943916775609, 
+                    0.7055943916775609, 
+                    0.6478623036664317, 
+                    0.6478623036664317, 
+                    0.5923812575458101, 
+                    0.5923812575458101, 
+                    0.5382383751878198, 
+                    0.5382383751878198, 
+                    0.48513828337315407, 
+                    0.48513828337315407, 
+                    0.43273086492969487, 
+                    0.43273086492969487, 
+                    0.38083934160819805, 
+                    0.38083934160819805, 
+                    0.32930112287877794, 
+                    0.32930112287877794, 
+                    0.27800323021986406, 
+                    0.27800323021986406, 
+                    0.22675435917339967, 
+                    0.22675435917339967, 
+                    0.17505742371882327, 
+                    0.17505742371882327, 
+                    0.11071960995114369, 
+                    0.11071960995114369
+                ], 
+                0.5008641481399536
+            ], 
+            [
+                1.0581203699111938, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999869657800745, 
+                    0.9999869657800745, 
+                    0.9999869657800745, 
+                    0.9999869657800745, 
+                    0.9904360880877907, 
+                    0.9904360880877907, 
+                    0.9039954779550158, 
+                    0.9039954779550158, 
+                    0.8315862487588452, 
+                    0.8315862487588452, 
+                    0.7665694506267888, 
+                    0.7665694506267888, 
+                    0.705712640094102, 
+                    0.705712640094102, 
+                    0.6479721106647943, 
+                    0.6479721106647943, 
+                    0.5924825180325405, 
+                    0.5924825180325405, 
+                    0.5383314227838819, 
+                    0.5383314227838819, 
+                    0.48522065914791346, 
+                    0.48522065914791346, 
+                    0.432801930798652, 
+                    0.432801930798652, 
+                    0.38089882595541563, 
+                    0.38089882595541563, 
+                    0.32935023313179024, 
+                    0.32935023313179024, 
+                    0.2780428746135698, 
+                    0.2780428746135698, 
+                    0.22678498205350694, 
+                    0.22678498205350694, 
+                    0.17507769596282866, 
+                    0.17507769596282866, 
+                    0.11077147737827314, 
+                    0.11077147737827314
+                ], 
+                0.5012126564979553
+            ], 
+            [
+                1.073170781135559, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999834534385518, 
+                    0.9999834534385518, 
+                    0.9999834534385518, 
+                    0.9999834534385518, 
+                    0.9904088958493004, 
+                    0.9904088958493004, 
+                    0.9038608809674992, 
+                    0.9038608809674992, 
+                    0.831344688990868, 
+                    0.831344688990868, 
+                    0.7662624328572627, 
+                    0.7662624328572627, 
+                    0.7053300100306105, 
+                    0.7053300100306105, 
+                    0.6475897488104594, 
+                    0.6475897488104594, 
+                    0.5921598856552156, 
+                    0.5921598856552156, 
+                    0.5380652222008248, 
+                    0.5380652222008248, 
+                    0.4850149455886334, 
+                    0.4850149455886334, 
+                    0.43264541076850355, 
+                    0.43264541076850355, 
+                    0.38078066455917353, 
+                    0.38078066455917353, 
+                    0.3292587173846179, 
+                    0.3292587173846179, 
+                    0.2779699407830543, 
+                    0.2779699407830543, 
+                    0.2267251102538065, 
+                    0.2267251102538065, 
+                    0.17502813857063731, 
+                    0.17502813857063731, 
+                    0.11075519878212174, 
+                    0.11075519878212174
+                ], 
+                0.5004307627677917
+            ], 
+            [
+                1.088435173034668, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999460696444183, 
+                    0.9999460696444183, 
+                    0.9998840933596984, 
+                    0.9998840933596984, 
+                    0.9998840933596984, 
+                    0.9998840933596984, 
+                    0.9900479562511856, 
+                    0.9900479562511856, 
+                    0.9037135887040616, 
+                    0.9037135887040616, 
+                    0.8313291850091803, 
+                    0.8313291850091803, 
+                    0.7662690908045634, 
+                    0.7662690908045634, 
+                    0.7052114396709278, 
+                    0.7052114396709278, 
+                    0.6474533437738297, 
+                    0.6474533437738297, 
+                    0.5921060080087946, 
+                    0.5921060080087946, 
+                    0.5380840850662462, 
+                    0.5380840850662462, 
+                    0.48511797652565347, 
+                    0.48511797652565347, 
+                    0.4328134237933743, 
+                    0.4328134237933743, 
+                    0.380994604417053, 
+                    0.380994604417053, 
+                    0.32949583895702034, 
+                    0.32949583895702034, 
+                    0.2782126780896245, 
+                    0.2782126780896245, 
+                    0.22695703618755245, 
+                    0.22695703618755245, 
+                    0.17522835076454765, 
+                    0.17522835076454765, 
+                    0.1110402195995486, 
+                    0.1110402195995486
+                ], 
+                0.5010326504707336
+            ], 
+            [
+                1.1039167642593384, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999511412569265, 
+                    0.9999511412569265, 
+                    0.9999511412569265, 
+                    0.9999511412569265, 
+                    0.9902144073977714, 
+                    0.9902144073977714, 
+                    0.9037617209507901, 
+                    0.9037617209507901, 
+                    0.8313252676130539, 
+                    0.8313252676130539, 
+                    0.7662198695731168, 
+                    0.7662198695731168, 
+                    0.7051162498586914, 
+                    0.7051162498586914, 
+                    0.647354187220426, 
+                    0.647354187220426, 
+                    0.5920326582444285, 
+                    0.5920326582444285, 
+                    0.5380343189041953, 
+                    0.5380343189041953, 
+                    0.48509089607687467, 
+                    0.48509089607687467, 
+                    0.4328022684783265, 
+                    0.4328022684783265, 
+                    0.3809932960329434, 
+                    0.3809932960329434, 
+                    0.32949925664212293, 
+                    0.32949925664212293, 
+                    0.2782172347375163, 
+                    0.2782172347375163, 
+                    0.22695994797502522, 
+                    0.22695994797502522, 
+                    0.17522651341376713, 
+                    0.17522651341376713, 
+                    0.11108629844511991, 
+                    0.11108629844511991
+                ], 
+                0.5009594559669495
+            ], 
+            [
+                1.1196186542510986, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999559881709263, 
+                    0.9999559881709263, 
+                    0.9996604197564823, 
+                    0.9996604197564823, 
+                    0.9995879009997245, 
+                    0.9995879009997245, 
+                    0.9893062653599489, 
+                    0.9893062653599489, 
+                    0.9031774671662696, 
+                    0.9031774671662696, 
+                    0.8308659575041613, 
+                    0.8308659575041613, 
+                    0.7657972124749228, 
+                    0.7657972124749228, 
+                    0.7045078361993056, 
+                    0.7045078361993056, 
+                    0.6467711481662818, 
+                    0.6467711481662818, 
+                    0.591644818819085, 
+                    0.591644818819085, 
+                    0.5378149273109899, 
+                    0.5378149273109899, 
+                    0.4850503770032748, 
+                    0.4850503770032748, 
+                    0.43289952764074363, 
+                    0.43289952764074363, 
+                    0.38118986492568363, 
+                    0.38118986492568363, 
+                    0.3297531952979101, 
+                    0.3297531952979101, 
+                    0.27849735755073207, 
+                    0.27849735755073207, 
+                    0.22723914914023835, 
+                    0.22723914914023835, 
+                    0.17547387699551628, 
+                    0.17547387699551628, 
+                    0.11145128429873356, 
+                    0.11145128429873356
+                ], 
+                0.5009328126907349
+            ], 
+            [
+                1.135543704032898, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999946965987049, 
+                    0.9999946965987049, 
+                    0.9997622527808065, 
+                    0.9997622527808065, 
+                    0.9997204991495403, 
+                    0.9997204991495403, 
+                    0.9894816564816664, 
+                    0.9894816564816664, 
+                    0.9032037429397423, 
+                    0.9032037429397423, 
+                    0.8308333384279898, 
+                    0.8308333384279898, 
+                    0.7657153436511215, 
+                    0.7657153436511215, 
+                    0.7043751667642909, 
+                    0.7043751667642909, 
+                    0.6466435560331691, 
+                    0.6466435560331691, 
+                    0.5915568086300387, 
+                    0.5915568086300387, 
+                    0.5377616989298202, 
+                    0.5377616989298202, 
+                    0.48502841603595964, 
+                    0.48502841603595964, 
+                    0.43289891213504383, 
+                    0.43289891213504383, 
+                    0.38120191629168343, 
+                    0.38120191629168343, 
+                    0.3297710407761744, 
+                    0.3297710407761744, 
+                    0.27851608466637895, 
+                    0.27851608466637895, 
+                    0.22725481818006507, 
+                    0.22725481818006507, 
+                    0.17548179877368233, 
+                    0.17548179877368233, 
+                    0.111524421865554, 
+                    0.111524421865554
+                ], 
+                0.5008653402328491
+            ], 
+            [
+                1.1516953706741333, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999942401756636, 
+                    0.9999942401756636, 
+                    0.9996885285350343, 
+                    0.9996885285350343, 
+                    0.9996233482585754, 
+                    0.9996233482585754, 
+                    0.9891285352661564, 
+                    0.9891285352661564, 
+                    0.9028516998344673, 
+                    0.9028516998344673, 
+                    0.8304456386130626, 
+                    0.8304456386130626, 
+                    0.7653021877976973, 
+                    0.7653021877976973, 
+                    0.7038545616892093, 
+                    0.7038545616892093, 
+                    0.6461630143633253, 
+                    0.6461630143633253, 
+                    0.59121582367028, 
+                    0.59121582367028, 
+                    0.5375398367827918, 
+                    0.5375398367827918, 
+                    0.4849228727932662, 
+                    0.4849228727932662, 
+                    0.432880214541818, 
+                    0.432880214541818, 
+                    0.3812438426585679, 
+                    0.3812438426585679, 
+                    0.3298485068898331, 
+                    0.3298485068898331, 
+                    0.27861096652716383, 
+                    0.27861096652716383, 
+                    0.22735235261423353, 
+                    0.22735235261423353, 
+                    0.17556655814123226, 
+                    0.17556655814123226, 
+                    0.11170431996628487, 
+                    0.11170431996628487
+                ], 
+                0.500436007976532
+            ]
+        ]
+    }, 
+    {
+        "block_size": 42, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8711110949516296, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996403781875912, 
+                    0.9996403781875912, 
+                    0.9996367712215457, 
+                    0.9996367712215457, 
+                    0.9996187386650637, 
+                    0.9996187386650637, 
+                    0.9995458100442381, 
+                    0.9995458100442381, 
+                    0.923726524192882, 
+                    0.923726524192882, 
+                    0.85168989892514, 
+                    0.85168989892514, 
+                    0.7866826078365028, 
+                    0.7866826078365028, 
+                    0.7260927958653767, 
+                    0.7260927958653767, 
+                    0.6692973918407606, 
+                    0.6692973918407606, 
+                    0.6139790277242497, 
+                    0.6139790277242497, 
+                    0.5619343770254881, 
+                    0.5619343770254881, 
+                    0.5116960428465207, 
+                    0.5116960428465207, 
+                    0.46240111125077304, 
+                    0.46240111125077304, 
+                    0.41345834780489205, 
+                    0.41345834780489205, 
+                    0.36495159535376825, 
+                    0.36495159535376825, 
+                    0.3165556737928171, 
+                    0.3165556737928171, 
+                    0.2681901807897249, 
+                    0.2681901807897249, 
+                    0.21966694345161172, 
+                    0.21966694345161172, 
+                    0.17052394776190408, 
+                    0.17052394776190408, 
+                    0.10863909201834883, 
+                    0.10863909201834883
+                ], 
+                0.5008849501609802
+            ], 
+            [
+                0.88321453332901, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996120869301344, 
+                    0.9996120869301344, 
+                    0.9996080982395822, 
+                    0.9996080982395822, 
+                    0.9995884579572073, 
+                    0.9995884579572073, 
+                    0.9995103040274129, 
+                    0.9995103040274129, 
+                    0.9236605475011505, 
+                    0.9236605475011505, 
+                    0.8515745858584091, 
+                    0.8515745858584091, 
+                    0.7865020142898579, 
+                    0.7865020142898579, 
+                    0.7258786764420397, 
+                    0.7258786764420397, 
+                    0.669108744030455, 
+                    0.669108744030455, 
+                    0.6138279048922952, 
+                    0.6138279048922952, 
+                    0.5618576937955535, 
+                    0.5618576937955535, 
+                    0.511673255052126, 
+                    0.511673255052126, 
+                    0.4624076549224792, 
+                    0.4624076549224792, 
+                    0.4134817395184297, 
+                    0.4134817395184297, 
+                    0.36497487699106135, 
+                    0.36497487699106135, 
+                    0.31657236272949496, 
+                    0.31657236272949496, 
+                    0.26819801474709926, 
+                    0.26819801474709926, 
+                    0.21966787266289625, 
+                    0.21966787266289625, 
+                    0.17051999213219632, 
+                    0.17051999213219632, 
+                    0.10864496066335066, 
+                    0.10864496066335066
+                ], 
+                0.5006577372550964
+            ], 
+            [
+                0.8954861164093018, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996273420931293, 
+                    0.9996273420931293, 
+                    0.999623293085659, 
+                    0.999623293085659, 
+                    0.9996038920089138, 
+                    0.9996038920089138, 
+                    0.9995324884778156, 
+                    0.9995324884778156, 
+                    0.9236756541323877, 
+                    0.9236756541323877, 
+                    0.8515941836260834, 
+                    0.8515941836260834, 
+                    0.7865543757702671, 
+                    0.7865543757702671, 
+                    0.7260026149414625, 
+                    0.7260026149414625, 
+                    0.6693116823073804, 
+                    0.6693116823073804, 
+                    0.614148280358107, 
+                    0.614148280358107, 
+                    0.5622270321036029, 
+                    0.5622270321036029, 
+                    0.5120301008541128, 
+                    0.5120301008541128, 
+                    0.4627202466145352, 
+                    0.4627202466145352, 
+                    0.41375173607266363, 
+                    0.41375173607266363, 
+                    0.3651885369459256, 
+                    0.3651885369459256, 
+                    0.31673641651044115, 
+                    0.31673641651044115, 
+                    0.26832009598063855, 
+                    0.26832009598063855, 
+                    0.219757445729362, 
+                    0.219757445729362, 
+                    0.17058168331262097, 
+                    0.17058168331262097, 
+                    0.10871965376275027, 
+                    0.10871965376275027
+                ], 
+                0.501528799533844
+            ], 
+            [
+                0.9079281687736511, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995999978301624, 
+                    0.9995999978301624, 
+                    0.9995954754809467, 
+                    0.9995954754809467, 
+                    0.9995741584566084, 
+                    0.9995741584566084, 
+                    0.9994973586596336, 
+                    0.9994973586596336, 
+                    0.9236084808218843, 
+                    0.9236084808218843, 
+                    0.8514712457535886, 
+                    0.8514712457535886, 
+                    0.7863578774773612, 
+                    0.7863578774773612, 
+                    0.7257652834963996, 
+                    0.7257652834963996, 
+                    0.6690961524963638, 
+                    0.6690961524963638, 
+                    0.6139624738762243, 
+                    0.6139624738762243, 
+                    0.5621140614386234, 
+                    0.5621140614386234, 
+                    0.5119728182477485, 
+                    0.5119728182477485, 
+                    0.46269590617214507, 
+                    0.46269590617214507, 
+                    0.41374723624999055, 
+                    0.41374723624999055, 
+                    0.3651887289567632, 
+                    0.3651887289567632, 
+                    0.3167346622922881, 
+                    0.3167346622922881, 
+                    0.2683137487670134, 
+                    0.2683137487670134, 
+                    0.21974746497498313, 
+                    0.21974746497498313, 
+                    0.1705694454231538, 
+                    0.1705694454231538, 
+                    0.1087217178435785, 
+                    0.1087217178435785
+                ], 
+                0.5012052059173584
+            ], 
+            [
+                0.9205431342124939, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995711670331513, 
+                    0.9995711670331513, 
+                    0.9995661184221036, 
+                    0.9995661184221036, 
+                    0.9995427107086445, 
+                    0.9995427107086445, 
+                    0.9994601882207059, 
+                    0.9994601882207059, 
+                    0.9235379764000005, 
+                    0.9235379764000005, 
+                    0.8513396754719722, 
+                    0.8513396754719722, 
+                    0.7861458962101092, 
+                    0.7861458962101092, 
+                    0.7255073820437444, 
+                    0.7255073820437444, 
+                    0.6688591614806667, 
+                    0.6688591614806667, 
+                    0.613752582977863, 
+                    0.613752582977863, 
+                    0.561979231328479, 
+                    0.561979231328479, 
+                    0.5118968816173218, 
+                    0.5118968816173218, 
+                    0.46265603768218777, 
+                    0.46265603768218777, 
+                    0.41372950972661227, 
+                    0.41372950972661227, 
+                    0.3651781931076994, 
+                    0.3651781931076994, 
+                    0.3167242999297324, 
+                    0.3167242999297324, 
+                    0.26830059273020496, 
+                    0.26830059273020496, 
+                    0.21973204346960754, 
+                    0.21973204346960754, 
+                    0.1705528893561651, 
+                    0.1705528893561651, 
+                    0.10872207155341847, 
+                    0.10872207155341847
+                ], 
+                0.5008220672607422
+            ], 
+            [
+                0.9333333373069763, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995617566849969, 
+                    0.9995617566849969, 
+                    0.9995585305318255, 
+                    0.9995585305318255, 
+                    0.9995435896657331, 
+                    0.9995435896657331, 
+                    0.9994879014837765, 
+                    0.9994879014837765, 
+                    0.9235639357603072, 
+                    0.9235639357603072, 
+                    0.8513606063813871, 
+                    0.8513606063813871, 
+                    0.786185047840144, 
+                    0.786185047840144, 
+                    0.7255988535331581, 
+                    0.7255988535331581, 
+                    0.6690143184382417, 
+                    0.6690143184382417, 
+                    0.614002634600854, 
+                    0.614002634600854, 
+                    0.5622700249278638, 
+                    0.5622700249278638, 
+                    0.5121771601145685, 
+                    0.5121771601145685, 
+                    0.46289987696626855, 
+                    0.46289987696626855, 
+                    0.4139384434829325, 
+                    0.4139384434829325, 
+                    0.3653422626873747, 
+                    0.3653422626873747, 
+                    0.3168495071965263, 
+                    0.3168495071965263, 
+                    0.26839324411669285, 
+                    0.26839324411669285, 
+                    0.21979927757402684, 
+                    0.21979927757402684, 
+                    0.17059781922052059, 
+                    0.17059781922052059, 
+                    0.10878877356401878, 
+                    0.10878877356401878
+                ], 
+                0.5014945268630981
+            ], 
+            [
+                0.946301281452179, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995299837118257, 
+                    0.9995299837118257, 
+                    0.9995264355990157, 
+                    0.9995264355990157, 
+                    0.9995102564500538, 
+                    0.9995102564500538, 
+                    0.999450941732738, 
+                    0.999450941732738, 
+                    0.9234909530990622, 
+                    0.9234909530990622, 
+                    0.8512141959565998, 
+                    0.8512141959565998, 
+                    0.7859411517579068, 
+                    0.7859411517579068, 
+                    0.7252935386778133, 
+                    0.7252935386778133, 
+                    0.6687237720188288, 
+                    0.6687237720188288, 
+                    0.6137284033397254, 
+                    0.6137284033397254, 
+                    0.5620741618942436, 
+                    0.5620741618942436, 
+                    0.5120482004400918, 
+                    0.5120482004400918, 
+                    0.46281590851471516, 
+                    0.46281590851471516, 
+                    0.41388359377368655, 
+                    0.41388359377368655, 
+                    0.36530218287036814, 
+                    0.36530218287036814, 
+                    0.3168158547494395, 
+                    0.3168158547494395, 
+                    0.2683619037115824, 
+                    0.2683619037115824, 
+                    0.21976947156547366, 
+                    0.21976947156547366, 
+                    0.17056995611556575, 
+                    0.17056995611556575, 
+                    0.10878432662858877, 
+                    0.10878432662858877
+                ], 
+                0.5009573101997375
+            ], 
+            [
+                0.9594493508338928, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995265996147211, 
+                    0.9995265996147211, 
+                    0.999522753774191, 
+                    0.999522753774191, 
+                    0.9995057233381843, 
+                    0.9995057233381843, 
+                    0.9994482677618596, 
+                    0.9994482677618596, 
+                    0.9234589384748586, 
+                    0.9234589384748586, 
+                    0.8511267238540997, 
+                    0.8511267238540997, 
+                    0.785789239872576, 
+                    0.785789239872576, 
+                    0.725112699505207, 
+                    0.725112699505207, 
+                    0.6685710151824386, 
+                    0.6685710151824386, 
+                    0.6136130083719893, 
+                    0.6136130083719893, 
+                    0.5620237636059623, 
+                    0.5620237636059623, 
+                    0.5120402035046608, 
+                    0.5120402035046608, 
+                    0.46282784448006964, 
+                    0.46282784448006964, 
+                    0.41390484970807057, 
+                    0.41390484970807057, 
+                    0.3653206507266615, 
+                    0.3653206507266615, 
+                    0.316827690185501, 
+                    0.316827690185501, 
+                    0.26836612951453115, 
+                    0.26836612951453115, 
+                    0.21976738789292616, 
+                    0.21976738789292616, 
+                    0.17056246935848243, 
+                    0.17056246935848243, 
+                    0.10880490490778033, 
+                    0.10880490490778033
+                ], 
+                0.5007944703102112
+            ], 
+            [
+                0.972780168056488, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999532359399817, 
+                    0.999532359399817, 
+                    0.9995305872198801, 
+                    0.9995305872198801, 
+                    0.9995227551814703, 
+                    0.9995227551814703, 
+                    0.9994949828266777, 
+                    0.9994949828266777, 
+                    0.923494903442528, 
+                    0.923494903442528, 
+                    0.8511365508099117, 
+                    0.8511365508099117, 
+                    0.7857852788464074, 
+                    0.7857852788464074, 
+                    0.7251252661465397, 
+                    0.7251252661465397, 
+                    0.6686262509114036, 
+                    0.6686262509114036, 
+                    0.6137323173235637, 
+                    0.6137323173235637, 
+                    0.5621840041178584, 
+                    0.5621840041178584, 
+                    0.5122045933958035, 
+                    0.5122045933958035, 
+                    0.4629750261728449, 
+                    0.4629750261728449, 
+                    0.4140329046779502, 
+                    0.4140329046779502, 
+                    0.3654213083858094, 
+                    0.3654213083858094, 
+                    0.3169037011881466, 
+                    0.3169037011881466, 
+                    0.26842092531093326, 
+                    0.26842092531093326, 
+                    0.21980507985842757, 
+                    0.21980507985842757, 
+                    0.1705845247539739, 
+                    0.1705845247539739, 
+                    0.10886091210483816, 
+                    0.10886091210483816
+                ], 
+                0.5011698603630066
+            ], 
+            [
+                0.9862961769104004, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995543008767875, 
+                    0.9995543008767875, 
+                    0.9995543008767875, 
+                    0.9995543008767875, 
+                    0.9995543008767875, 
+                    0.9995543008767875, 
+                    0.9995543008767875, 
+                    0.9995543008767875, 
+                    0.9235356848556753, 
+                    0.9235356848556753, 
+                    0.851140626321125, 
+                    0.851140626321125, 
+                    0.785759270413461, 
+                    0.785759270413461, 
+                    0.7250978216510445, 
+                    0.7250978216510445, 
+                    0.6686318287341559, 
+                    0.6686318287341559, 
+                    0.6137886368035786, 
+                    0.6137886368035786, 
+                    0.5622834357987327, 
+                    0.5622834357987327, 
+                    0.5123165322856844, 
+                    0.5123165322856844, 
+                    0.46307947758516554, 
+                    0.46307947758516554, 
+                    0.41412604751939924, 
+                    0.41412604751939924, 
+                    0.3654949442196836, 
+                    0.3654949442196836, 
+                    0.3169588269231184, 
+                    0.3169588269231184, 
+                    0.26845955362787255, 
+                    0.26845955362787255, 
+                    0.21983003843689644, 
+                    0.21983003843689644, 
+                    0.17059662566472147, 
+                    0.17059662566472147, 
+                    0.10891222640461692, 
+                    0.10891222640461692
+                ], 
+                0.5014123320579529
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998050294357529, 
+                    0.9998050294357529, 
+                    0.9998038625489032, 
+                    0.9998038625489032, 
+                    0.999800856293014, 
+                    0.999800856293014, 
+                    0.923510763395333, 
+                    0.923510763395333, 
+                    0.8511240891047408, 
+                    0.8511240891047408, 
+                    0.7856485601516294, 
+                    0.7856485601516294, 
+                    0.7248905300037748, 
+                    0.7248905300037748, 
+                    0.6684126872820065, 
+                    0.6684126872820065, 
+                    0.6135466057088583, 
+                    0.6135466057088583, 
+                    0.5621200343795544, 
+                    0.5621200343795544, 
+                    0.5122336198304637, 
+                    0.5122336198304637, 
+                    0.46305713320394065, 
+                    0.46305713320394065, 
+                    0.41414368591165723, 
+                    0.41414368591165723, 
+                    0.36553728983384554, 
+                    0.36553728983384554, 
+                    0.31701276019439234, 
+                    0.31701276019439234, 
+                    0.2685163740269449, 
+                    0.2685163740269449, 
+                    0.21988350267543244, 
+                    0.21988350267543244, 
+                    0.17063970260414432, 
+                    0.17063970260414432, 
+                    0.10901426486075784, 
+                    0.10901426486075784
+                ], 
+                0.5013617277145386
+            ], 
+            [
+                1.0138942003250122, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995243396415054, 
+                    0.9995243396415054, 
+                    0.9995187642816381, 
+                    0.9995187642816381, 
+                    0.9994951992953299, 
+                    0.9994951992953299, 
+                    0.9994157932458355, 
+                    0.9994157932458355, 
+                    0.9235720405003726, 
+                    0.9235720405003726, 
+                    0.8510352965190955, 
+                    0.8510352965190955, 
+                    0.7854890438315879, 
+                    0.7854890438315879, 
+                    0.7247240765396518, 
+                    0.7247240765396518, 
+                    0.6682830659004606, 
+                    0.6682830659004606, 
+                    0.6134707651651794, 
+                    0.6134707651651794, 
+                    0.5620894888585558, 
+                    0.5620894888585558, 
+                    0.5122187991159829, 
+                    0.5122187991159829, 
+                    0.4630366967834011, 
+                    0.4630366967834011, 
+                    0.4141121974391506, 
+                    0.4141121974391506, 
+                    0.36548890557368696, 
+                    0.36548890557368696, 
+                    0.31694987962403115, 
+                    0.31694987962403115, 
+                    0.26844301991314623, 
+                    0.26844301991314623, 
+                    0.21980511454140647, 
+                    0.21980511454140647, 
+                    0.1705626489485138, 
+                    0.1705626489485138, 
+                    0.108972944319656, 
+                    0.108972944319656
+                ], 
+                0.5009344220161438
+            ], 
+            [
+                1.0279815196990967, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995859200928613, 
+                    0.9995859200928613, 
+                    0.9995833940444936, 
+                    0.9995833940444936, 
+                    0.999572890043254, 
+                    0.999572890043254, 
+                    0.9995380989784265, 
+                    0.9995380989784265, 
+                    0.9236748973688588, 
+                    0.9236748973688588, 
+                    0.8510802074780129, 
+                    0.8510802074780129, 
+                    0.7854756741858882, 
+                    0.7854756741858882, 
+                    0.7246742307412637, 
+                    0.7246742307412637, 
+                    0.6682462142206242, 
+                    0.6682462142206242, 
+                    0.6134633944166945, 
+                    0.6134633944166945, 
+                    0.5621259866290488, 
+                    0.5621259866290488, 
+                    0.5122760469197818, 
+                    0.5122760469197818, 
+                    0.46309648607268256, 
+                    0.46309648607268256, 
+                    0.4141689534586465, 
+                    0.4141689534586465, 
+                    0.3655348960433575, 
+                    0.3655348960433575, 
+                    0.3169840731479871, 
+                    0.3169840731479871, 
+                    0.26846553494241615, 
+                    0.26846553494241615, 
+                    0.21981680511426205, 
+                    0.21981680511426205, 
+                    0.17056285535128343, 
+                    0.17056285535128343, 
+                    0.10903401044574246, 
+                    0.10903401044574246
+                ], 
+                0.5010831952095032
+            ], 
+            [
+                1.042264461517334, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996294983092208, 
+                    0.9996294983092208, 
+                    0.9996294983092208, 
+                    0.9996294983092208, 
+                    0.9996294983092208, 
+                    0.9996294983092208, 
+                    0.9996294983092208, 
+                    0.9996294983092208, 
+                    0.9237176179725826, 
+                    0.9237176179725826, 
+                    0.8510101278731939, 
+                    0.8510101278731939, 
+                    0.7852640930156146, 
+                    0.7852640930156146, 
+                    0.7243549114613174, 
+                    0.7243549114613174, 
+                    0.667922720164273, 
+                    0.667922720164273, 
+                    0.6131401945102734, 
+                    0.6131401945102734, 
+                    0.5618866744172955, 
+                    0.5618866744172955, 
+                    0.512110447184908, 
+                    0.512110447184908, 
+                    0.46298206214463283, 
+                    0.46298206214463283, 
+                    0.41408850406891895, 
+                    0.41408850406891895, 
+                    0.36547496586656986, 
+                    0.36547496586656986, 
+                    0.3169351275497467, 
+                    0.3169351275497467, 
+                    0.26842188128585565, 
+                    0.26842188128585565, 
+                    0.21977537973160452, 
+                    0.21977537973160452, 
+                    0.17052172200178048, 
+                    0.17052172200178048, 
+                    0.10906202253929326, 
+                    0.10906202253929326
+                ], 
+                0.5005238056182861
+            ], 
+            [
+                1.0567458868026733, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996848331581135, 
+                    0.9996848331581135, 
+                    0.999681834824128, 
+                    0.999681834824128, 
+                    0.9996697468010554, 
+                    0.9996697468010554, 
+                    0.9996310946632566, 
+                    0.9996310946632566, 
+                    0.9238841370298889, 
+                    0.9238841370298889, 
+                    0.8510965130245012, 
+                    0.8510965130245012, 
+                    0.7852634050026197, 
+                    0.7852634050026197, 
+                    0.7242834294715059, 
+                    0.7242834294715059, 
+                    0.6678467513550457, 
+                    0.6678467513550457, 
+                    0.6130747477158359, 
+                    0.6130747477158359, 
+                    0.5618689229659073, 
+                    0.5618689229659073, 
+                    0.5121237679611794, 
+                    0.5121237679611794, 
+                    0.46300838893837293, 
+                    0.46300838893837293, 
+                    0.41411940980036416, 
+                    0.41411940980036416, 
+                    0.36550221658292464, 
+                    0.36550221658292464, 
+                    0.31695541828651436, 
+                    0.31695541828651436, 
+                    0.2684335686822914, 
+                    0.2684335686822914, 
+                    0.21977775024253776, 
+                    0.21977775024253776, 
+                    0.17051302029901902, 
+                    0.17051302029901902, 
+                    0.10913385966264756, 
+                    0.10913385966264756
+                ], 
+                0.5005819201469421
+            ], 
+            [
+                1.0714285373687744, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9997805748620966, 
+                    0.9997805748620966, 
+                    0.9997773142892555, 
+                    0.9997773142892555, 
+                    0.9997643701041132, 
+                    0.9997643701041132, 
+                    0.9997237191887949, 
+                    0.9997237191887949, 
+                    0.9240758750271044, 
+                    0.9240758750271044, 
+                    0.8511834441373137, 
+                    0.8511834441373137, 
+                    0.785229197265339, 
+                    0.785229197265339, 
+                    0.7241458535885609, 
+                    0.7241458535885609, 
+                    0.6676951442497172, 
+                    0.6676951442497172, 
+                    0.6129270267193364, 
+                    0.6129270267193364, 
+                    0.5617797016662053, 
+                    0.5617797016662053, 
+                    0.5120781239146273, 
+                    0.5120781239146273, 
+                    0.46298785278093435, 
+                    0.46298785278093435, 
+                    0.41411371492878607, 
+                    0.41411371492878607, 
+                    0.36550143137954333, 
+                    0.36550143137954333, 
+                    0.3169539885158406, 
+                    0.3169539885158406, 
+                    0.2684280252017353, 
+                    0.2684280252017353, 
+                    0.2197659688614277, 
+                    0.2197659688614277, 
+                    0.17049236328208403, 
+                    0.17049236328208403, 
+                    0.1092064473926875, 
+                    0.1092064473926875
+                ], 
+                0.5004794597625732
+            ], 
+            [
+                1.0863152742385864, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999386241633964, 
+                    0.9999386241633964, 
+                    0.9999386241633964, 
+                    0.9999386241633964, 
+                    0.9999386241633964, 
+                    0.9999386241633964, 
+                    0.9999386241633964, 
+                    0.9999386241633964, 
+                    0.924330022691199, 
+                    0.924330022691199, 
+                    0.8513190989118106, 
+                    0.8513190989118106, 
+                    0.7852279522535058, 
+                    0.7852279522535058, 
+                    0.7240220662247241, 
+                    0.7240220662247241, 
+                    0.6675486234350717, 
+                    0.6675486234350717, 
+                    0.6127822415977451, 
+                    0.6127822415977451, 
+                    0.5616917472562976, 
+                    0.5616917472562976, 
+                    0.512031934486078, 
+                    0.512031934486078, 
+                    0.46296639885421137, 
+                    0.46296639885421137, 
+                    0.4141078325038887, 
+                    0.4141078325038887, 
+                    0.36550114386674204, 
+                    0.36550114386674204, 
+                    0.3169535156618651, 
+                    0.3169535156618651, 
+                    0.26842341324034447, 
+                    0.26842341324034447, 
+                    0.2197545103441536, 
+                    0.2197545103441536, 
+                    0.17047068776437435, 
+                    0.17047068776437435, 
+                    0.10929257859422517, 
+                    0.10929257859422517
+                ], 
+                0.5004071593284607
+            ], 
+            [
+                1.1014087200164795, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999696802553817, 
+                    0.9999696802553817, 
+                    0.9998260752506436, 
+                    0.9998260752506436, 
+                    0.9998176873044842, 
+                    0.9998176873044842, 
+                    0.9997939822642388, 
+                    0.9997939822642388, 
+                    0.9242308179254788, 
+                    0.9242308179254788, 
+                    0.8513884544655344, 
+                    0.8513884544655344, 
+                    0.7850612086042981, 
+                    0.7850612086042981, 
+                    0.7235611194326964, 
+                    0.7235611194326964, 
+                    0.667025673442553, 
+                    0.667025673442553, 
+                    0.6121455905306022, 
+                    0.6121455905306022, 
+                    0.5612582158833461, 
+                    0.5612582158833461, 
+                    0.5118325306998698, 
+                    0.5118325306998698, 
+                    0.462960849237203, 
+                    0.462960849237203, 
+                    0.41423707635337836, 
+                    0.41423707635337836, 
+                    0.36572463871786914, 
+                    0.36572463871786914, 
+                    0.31722780541182394, 
+                    0.31722780541182394, 
+                    0.26871624990752707, 
+                    0.26871624990752707, 
+                    0.2200385561470597, 
+                    0.2200385561470597, 
+                    0.17071436032155515, 
+                    0.17071436032155515, 
+                    0.10971623601592419, 
+                    0.10971623601592419
+                ], 
+                0.5005021691322327
+            ], 
+            [
+                1.116711974143982, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998098109830896, 
+                    0.9998098109830896, 
+                    0.9998098109830896, 
+                    0.9998098109830896, 
+                    0.9998098109830896, 
+                    0.9998098109830896, 
+                    0.9241676478865231, 
+                    0.9241676478865231, 
+                    0.8514484745440098, 
+                    0.8514484745440098, 
+                    0.784890518923975, 
+                    0.784890518923975, 
+                    0.7231263660576472, 
+                    0.7231263660576472, 
+                    0.6665398981956108, 
+                    0.6665398981956108, 
+                    0.6115842085600146, 
+                    0.6115842085600146, 
+                    0.5608838775385242, 
+                    0.5608838775385242, 
+                    0.5116681689796855, 
+                    0.5116681689796855, 
+                    0.46296937798384186, 
+                    0.46296937798384186, 
+                    0.4143669520804574, 
+                    0.4143669520804574, 
+                    0.3659373115043596, 
+                    0.3659373115043596, 
+                    0.3174843823466778, 
+                    0.3174843823466778, 
+                    0.2689874584224966, 
+                    0.2689874584224966, 
+                    0.22029943755372045, 
+                    0.22029943755372045, 
+                    0.1709354516841989, 
+                    0.1709354516841989, 
+                    0.11012911413996228, 
+                    0.11012911413996228
+                ], 
+                0.5006169080734253
+            ], 
+            [
+                1.1322277784347534, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996027906768153, 
+                    0.9996027906768153, 
+                    0.9996027906768153, 
+                    0.9996027906768153, 
+                    0.9996027906768153, 
+                    0.9996027906768153, 
+                    0.9237529540993652, 
+                    0.9237529540993652, 
+                    0.8512376289991176, 
+                    0.8512376289991176, 
+                    0.7843597073780285, 
+                    0.7843597073780285, 
+                    0.7222599200408106, 
+                    0.7222599200408106, 
+                    0.6656249654325005, 
+                    0.6656249654325005, 
+                    0.6105728035076283, 
+                    0.6105728035076283, 
+                    0.5601647375853581, 
+                    0.5601647375853581, 
+                    0.5112876365645245, 
+                    0.5112876365645245, 
+                    0.4628727211594823, 
+                    0.4628727211594823, 
+                    0.4144718579309758, 
+                    0.4144718579309758, 
+                    0.3661841717711627, 
+                    0.3661841717711627, 
+                    0.3178121106692201, 
+                    0.3178121106692201, 
+                    0.2693505900554651, 
+                    0.2693505900554651, 
+                    0.22065989494911428, 
+                    0.22065989494911428, 
+                    0.17125022235825715, 
+                    0.17125022235825715, 
+                    0.110679931172574, 
+                    0.110679931172574
+                ], 
+                0.500211238861084
+            ], 
+            [
+                1.1479592323303223, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999395647309144, 
+                    0.9999395647309144, 
+                    0.9992160722533032, 
+                    0.9992160722533032, 
+                    0.9992160722533032, 
+                    0.9992160722533032, 
+                    0.9992160722533032, 
+                    0.9992160722533032, 
+                    0.92303331585379, 
+                    0.92303331585379, 
+                    0.8509834259516232, 
+                    0.8509834259516232, 
+                    0.7838630337797757, 
+                    0.7838630337797757, 
+                    0.7214747368256116, 
+                    0.7214747368256116, 
+                    0.6647853402976928, 
+                    0.6647853402976928, 
+                    0.6096392946332666, 
+                    0.6096392946332666, 
+                    0.5595465490776227, 
+                    0.5595465490776227, 
+                    0.5110636121031475, 
+                    0.5110636121031475, 
+                    0.4629866375437864, 
+                    0.4629866375437864, 
+                    0.41482661811492333, 
+                    0.41482661811492333, 
+                    0.3667057452798646, 
+                    0.3667057452798646, 
+                    0.3184250010534135, 
+                    0.3184250010534135, 
+                    0.26999677617007367, 
+                    0.26999677617007367, 
+                    0.2212884943936719, 
+                    0.2212884943936719, 
+                    0.17179907640943334, 
+                    0.17179907640943334, 
+                    0.11152479255972612, 
+                    0.11152479255972612
+                ], 
+                0.5006951093673706
+            ]
+        ]
+    }, 
+    {
+        "block_size": 43, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8738185167312622, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990835685646787, 
+                    0.9990835685646787, 
+                    0.9990727354160753, 
+                    0.9990727354160753, 
+                    0.9990243149207613, 
+                    0.9990243149207613, 
+                    0.9988471653049764, 
+                    0.9988471653049764, 
+                    0.9220841238856683, 
+                    0.9220841238856683, 
+                    0.8495392719190659, 
+                    0.8495392719190659, 
+                    0.7842815633282246, 
+                    0.7842815633282246, 
+                    0.7246456862679069, 
+                    0.7246456862679069, 
+                    0.6686230792639138, 
+                    0.6686230792639138, 
+                    0.6150040228525019, 
+                    0.6150040228525019, 
+                    0.5628452369151207, 
+                    0.5628452369151207, 
+                    0.5125849434412987, 
+                    0.5125849434412987, 
+                    0.4629811912570016, 
+                    0.4629811912570016, 
+                    0.4141269210072212, 
+                    0.4141269210072212, 
+                    0.3654376494613751, 
+                    0.3654376494613751, 
+                    0.3169178215318376, 
+                    0.3169178215318376, 
+                    0.26842369634359636, 
+                    0.26842369634359636, 
+                    0.21981786572592238, 
+                    0.21981786572592238, 
+                    0.17061342739558186, 
+                    0.17061342739558186, 
+                    0.10872036625565874, 
+                    0.10872036625565874
+                ], 
+                0.5007581114768982
+            ], 
+            [
+                0.8856846690177917, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990284432663321, 
+                    0.9990284432663321, 
+                    0.9990166813436365, 
+                    0.9990166813436365, 
+                    0.998964911901003, 
+                    0.998964911901003, 
+                    0.998778502413753, 
+                    0.998778502413753, 
+                    0.9219462633596526, 
+                    0.9219462633596526, 
+                    0.8493467480035305, 
+                    0.8493467480035305, 
+                    0.7840418765756608, 
+                    0.7840418765756608, 
+                    0.7244257389100518, 
+                    0.7244257389100518, 
+                    0.6684513195133229, 
+                    0.6684513195133229, 
+                    0.6148904130849663, 
+                    0.6148904130849663, 
+                    0.5627907363465907, 
+                    0.5627907363465907, 
+                    0.5125747588709357, 
+                    0.5125747588709357, 
+                    0.462996359010545, 
+                    0.462996359010545, 
+                    0.41414521563707213, 
+                    0.41414521563707213, 
+                    0.36545275161023977, 
+                    0.36545275161023977, 
+                    0.31692550855142787, 
+                    0.31692550855142787, 
+                    0.26842524085935354, 
+                    0.26842524085935354, 
+                    0.2198142331084034, 
+                    0.2198142331084034, 
+                    0.1706062444643822, 
+                    0.1706062444643822, 
+                    0.1087259457673474, 
+                    0.1087259457673474
+                ], 
+                0.5004766583442688
+            ], 
+            [
+                0.8977119326591492, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991169035534087, 
+                    0.9991169035534087, 
+                    0.9991059124121237, 
+                    0.9991059124121237, 
+                    0.9990525892182294, 
+                    0.9990525892182294, 
+                    0.9988641893660118, 
+                    0.9988641893660118, 
+                    0.9219866133845537, 
+                    0.9219866133845537, 
+                    0.8494056359149728, 
+                    0.8494056359149728, 
+                    0.7841523889173574, 
+                    0.7841523889173574, 
+                    0.7245980350884702, 
+                    0.7245980350884702, 
+                    0.6686786694967984, 
+                    0.6686786694967984, 
+                    0.6151609705783517, 
+                    0.6151609705783517, 
+                    0.5631017490871292, 
+                    0.5631017490871292, 
+                    0.5128698542523248, 
+                    0.5128698542523248, 
+                    0.46326439956425053, 
+                    0.46326439956425053, 
+                    0.4143592770539824, 
+                    0.4143592770539824, 
+                    0.3656215812067876, 
+                    0.3656215812067876, 
+                    0.3170537453731235, 
+                    0.3170537453731235, 
+                    0.26852272097190727, 
+                    0.26852272097190727, 
+                    0.21988659847612343, 
+                    0.21988659847612343, 
+                    0.1706563727076111, 
+                    0.1706563727076111, 
+                    0.10879346606281777, 
+                    0.10879346606281777
+                ], 
+                0.5013171434402466
+            ], 
+            [
+                0.9099025130271912, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990666693388246, 
+                    0.9990666693388246, 
+                    0.9990546777776671, 
+                    0.9990546777776671, 
+                    0.999000456660894, 
+                    0.999000456660894, 
+                    0.9988007009853864, 
+                    0.9988007009853864, 
+                    0.9218405937531797, 
+                    0.9218405937531797, 
+                    0.8491923161275061, 
+                    0.8491923161275061, 
+                    0.7838773856759291, 
+                    0.7838773856759291, 
+                    0.7243354573905135, 
+                    0.7243354573905135, 
+                    0.6684611352275238, 
+                    0.6684611352275238, 
+                    0.6150002534803105, 
+                    0.6150002534803105, 
+                    0.5629976797483378, 
+                    0.5629976797483378, 
+                    0.5128147259541076, 
+                    0.5128147259541076, 
+                    0.4632391097810307, 
+                    0.4632391097810307, 
+                    0.4143450880991815, 
+                    0.4143450880991815, 
+                    0.36561068444435013, 
+                    0.36561068444435013, 
+                    0.317041309116888, 
+                    0.317041309116888, 
+                    0.2685084728813977, 
+                    0.2685084728813977, 
+                    0.2198705823820862, 
+                    0.2198705823820862, 
+                    0.17063955735204453, 
+                    0.17063955735204453, 
+                    0.10879465929938843, 
+                    0.10879465929938843
+                ], 
+                0.5009090304374695
+            ], 
+            [
+                0.9222586750984192, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990318823880017, 
+                    0.9990318823880017, 
+                    0.9990237160268859, 
+                    0.9990237160268859, 
+                    0.9989894125678175, 
+                    0.9989894125678175, 
+                    0.9988716890939816, 
+                    0.9988716890939816, 
+                    0.9218890159386953, 
+                    0.9218890159386953, 
+                    0.8492450333883071, 
+                    0.8492450333883071, 
+                    0.7839637142260275, 
+                    0.7839637142260275, 
+                    0.7244698125349057, 
+                    0.7244698125349057, 
+                    0.6686412554451955, 
+                    0.6686412554451955, 
+                    0.6152170581249536, 
+                    0.6152170581249536, 
+                    0.5632484093036824, 
+                    0.5632484093036824, 
+                    0.5130528762818297, 
+                    0.5130528762818297, 
+                    0.4634551568331714, 
+                    0.4634551568331714, 
+                    0.4145173213100022, 
+                    0.4145173213100022, 
+                    0.365746375988974, 
+                    0.365746375988974, 
+                    0.3171443058814686, 
+                    0.3171443058814686, 
+                    0.26858653470685273, 
+                    0.26858653470685273, 
+                    0.21992802854261073, 
+                    0.21992802854261073, 
+                    0.17067827088437598, 
+                    0.17067827088437598, 
+                    0.10885725742561732, 
+                    0.10885725742561732
+                ], 
+                0.5015048980712891
+            ], 
+            [
+                0.9347826242446899, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989792907386499, 
+                    0.9989792907386499, 
+                    0.9989704713444394, 
+                    0.9989704713444394, 
+                    0.9989340061438096, 
+                    0.9989340061438096, 
+                    0.9988108632122122, 
+                    0.9988108632122122, 
+                    0.9217283865420848, 
+                    0.9217283865420848, 
+                    0.8489970305623787, 
+                    0.8489970305623787, 
+                    0.7836313499002708, 
+                    0.7836313499002708, 
+                    0.7241399821149123, 
+                    0.7241399821149123, 
+                    0.6683543374923899, 
+                    0.6683543374923899, 
+                    0.614988486433827, 
+                    0.614988486433827, 
+                    0.5630773857210478, 
+                    0.5630773857210478, 
+                    0.5129403193051102, 
+                    0.5129403193051102, 
+                    0.46338060232165995, 
+                    0.46338060232165995, 
+                    0.4144645487267071, 
+                    0.4144645487267071, 
+                    0.3657050138779041, 
+                    0.3657050138779041, 
+                    0.3171082020406592, 
+                    0.3171082020406592, 
+                    0.2685535164483772, 
+                    0.2685535164483772, 
+                    0.21989700433001805, 
+                    0.21989700433001805, 
+                    0.17064951685680863, 
+                    0.17064951685680863, 
+                    0.1088533517951603, 
+                    0.1088533517951603
+                ], 
+                0.5009127259254456
+            ], 
+            [
+                0.9474766254425049, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99901418570687, 
+                    0.99901418570687, 
+                    0.9990030415710657, 
+                    0.9990030415710657, 
+                    0.9989589494879436, 
+                    0.9989589494879436, 
+                    0.9988307334471609, 
+                    0.9988307334471609, 
+                    0.9216401718287297, 
+                    0.9216401718287297, 
+                    0.8488400626282904, 
+                    0.8488400626282904, 
+                    0.7834162343463972, 
+                    0.7834162343463972, 
+                    0.7239356049536108, 
+                    0.7239356049536108, 
+                    0.6681913812297103, 
+                    0.6681913812297103, 
+                    0.6148763325209964, 
+                    0.6148763325209964, 
+                    0.5630141952256265, 
+                    0.5630141952256265, 
+                    0.512916470863754, 
+                    0.512916470863754, 
+                    0.4633786129723329, 
+                    0.4633786129723329, 
+                    0.41446802407296185, 
+                    0.41446802407296185, 
+                    0.36570804911871685, 
+                    0.36570804911871685, 
+                    0.3171072901035033, 
+                    0.3171072901035033, 
+                    0.2685487303473092, 
+                    0.2685487303473092, 
+                    0.2198883998016199, 
+                    0.2198883998016199, 
+                    0.17063744131554653, 
+                    0.17063744131554653, 
+                    0.10887132984223614, 
+                    0.10887132984223614
+                ], 
+                0.5007046461105347
+            ], 
+            [
+                0.9603430032730103, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990195828563855, 
+                    0.9990195828563855, 
+                    0.999015337707855, 
+                    0.999015337707855, 
+                    0.9989983408294104, 
+                    0.9989983408294104, 
+                    0.9989427673858543, 
+                    0.9989427673858543, 
+                    0.9216748760902663, 
+                    0.9216748760902663, 
+                    0.8488370382683721, 
+                    0.8488370382683721, 
+                    0.7833965353921484, 
+                    0.7833965353921484, 
+                    0.7239361445851602, 
+                    0.7239361445851602, 
+                    0.6682267804347497, 
+                    0.6682267804347497, 
+                    0.614946869338948, 
+                    0.614946869338948, 
+                    0.5631175647473539, 
+                    0.5631175647473539, 
+                    0.5130276063276045, 
+                    0.5130276063276045, 
+                    0.4634861988091632, 
+                    0.4634861988091632, 
+                    0.4145562206896247, 
+                    0.4145562206896247, 
+                    0.36577813764430234, 
+                    0.36577813764430234, 
+                    0.31715984324168006, 
+                    0.31715984324168006, 
+                    0.2685871683654365, 
+                    0.2685871683654365, 
+                    0.21991444185049636, 
+                    0.21991444185049636, 
+                    0.170651459231637, 
+                    0.170651459231637, 
+                    0.10892202796003357, 
+                    0.10892202796003357
+                ], 
+                0.5009600520133972
+            ], 
+            [
+                0.9733840823173523, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990821366131718, 
+                    0.9990821366131718, 
+                    0.9990821366131718, 
+                    0.9990821366131718, 
+                    0.9990821366131718, 
+                    0.9990821366131718, 
+                    0.9990821366131718, 
+                    0.9990821366131718, 
+                    0.9216982490069124, 
+                    0.9216982490069124, 
+                    0.8488007954793352, 
+                    0.8488007954793352, 
+                    0.7833179573085856, 
+                    0.7833179573085856, 
+                    0.72386530042829, 
+                    0.72386530042829, 
+                    0.6681875688592375, 
+                    0.6681875688592375, 
+                    0.614944557620305, 
+                    0.614944557620305, 
+                    0.5631504234648834, 
+                    0.5631504234648834, 
+                    0.5130797896850314, 
+                    0.5130797896850314, 
+                    0.46354476652766713, 
+                    0.46354476652766713, 
+                    0.41460684477280507, 
+                    0.41460684477280507, 
+                    0.3658190339028953, 
+                    0.3658190339028953, 
+                    0.3171898245736038, 
+                    0.3171898245736038, 
+                    0.2686077308486193, 
+                    0.2686077308486193, 
+                    0.21992616066139825, 
+                    0.21992616066139825, 
+                    0.17065411820914483, 
+                    0.17065411820914483, 
+                    0.10896692941989287, 
+                    0.10896692941989287
+                ], 
+                0.5010792016983032
+            ], 
+            [
+                0.9866023063659668, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998355756019071, 
+                    0.9998355756019071, 
+                    0.999407227010601, 
+                    0.999407227010601, 
+                    0.9994053413914451, 
+                    0.9994053413914451, 
+                    0.9994004570791324, 
+                    0.9994004570791324, 
+                    0.9214961594269458, 
+                    0.9214961594269458, 
+                    0.8485157094851501, 
+                    0.8485157094851501, 
+                    0.782908929150956, 
+                    0.782908929150956, 
+                    0.7234420999447251, 
+                    0.7234420999447251, 
+                    0.667806673286581, 
+                    0.667806673286581, 
+                    0.6146302231394923, 
+                    0.6146302231394923, 
+                    0.5629014984518803, 
+                    0.5629014984518803, 
+                    0.5129182534657297, 
+                    0.5129182534657297, 
+                    0.46344381009943897, 
+                    0.46344381009943897, 
+                    0.4145520850978203, 
+                    0.4145520850978203, 
+                    0.3657918102172656, 
+                    0.3657918102172656, 
+                    0.31717885467340334, 
+                    0.31717885467340334, 
+                    0.26860521108166646, 
+                    0.26860521108166646, 
+                    0.2199265778463187, 
+                    0.2199265778463187, 
+                    0.1706526795887479, 
+                    0.1706526795887479, 
+                    0.10902096004853926, 
+                    0.10902096004853926
+                ], 
+                0.5008121132850647
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991722660374205, 
+                    0.9991722660374205, 
+                    0.9991564204277762, 
+                    0.9991564204277762, 
+                    0.9990979435424807, 
+                    0.9990979435424807, 
+                    0.9989436608589596, 
+                    0.9989436608589596, 
+                    0.9217128360591068, 
+                    0.9217128360591068, 
+                    0.8486206216377513, 
+                    0.8486206216377513, 
+                    0.7829666661302135, 
+                    0.7829666661302135, 
+                    0.7234870796015934, 
+                    0.7234870796015934, 
+                    0.6678646468092648, 
+                    0.6678646468092648, 
+                    0.614705422727758, 
+                    0.614705422727758, 
+                    0.5629916140762128, 
+                    0.5629916140762128, 
+                    0.513003153358441, 
+                    0.513003153358441, 
+                    0.46351468183704764, 
+                    0.46351468183704764, 
+                    0.414597983050959, 
+                    0.414597983050959, 
+                    0.3658160422370479, 
+                    0.3658160422370479, 
+                    0.317184264660862, 
+                    0.317184264660862, 
+                    0.2685965275912431, 
+                    0.2685965275912431, 
+                    0.2199070430275774, 
+                    0.2199070430275774, 
+                    0.17062513461081835, 
+                    0.17062513461081835, 
+                    0.10904132035869574, 
+                    0.10904132035869574
+                ], 
+                0.5007134079933167
+            ], 
+            [
+                1.0135796070098877, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993199976342263, 
+                    0.9993199976342263, 
+                    0.9993199976342263, 
+                    0.9993199976342263, 
+                    0.9993199976342263, 
+                    0.9993199976342263, 
+                    0.9993199976342263, 
+                    0.9993199976342263, 
+                    0.9219261551351801, 
+                    0.9219261551351801, 
+                    0.8487588908866399, 
+                    0.8487588908866399, 
+                    0.7830541682879095, 
+                    0.7830541682879095, 
+                    0.7235585225123616, 
+                    0.7235585225123616, 
+                    0.6679459516836629, 
+                    0.6679459516836629, 
+                    0.6148025608984626, 
+                    0.6148025608984626, 
+                    0.5631056711157844, 
+                    0.5631056711157844, 
+                    0.51311825400775, 
+                    0.51311825400775, 
+                    0.463623354711558, 
+                    0.463623354711558, 
+                    0.41468945710813615, 
+                    0.41468945710813615, 
+                    0.36589150291904565, 
+                    0.36589150291904565, 
+                    0.31724393161799114, 
+                    0.31724393161799114, 
+                    0.2686421839775382, 
+                    0.2686421839775382, 
+                    0.2199388896240175, 
+                    0.2199388896240175, 
+                    0.17064150145230342, 
+                    0.17064150145230342, 
+                    0.10912517819082951, 
+                    0.10912517819082951
+                ], 
+                0.5011956691741943
+            ], 
+            [
+                1.0273436307907104, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994312254073087, 
+                    0.9994312254073087, 
+                    0.9994252120534896, 
+                    0.9994252120534896, 
+                    0.99940294640021, 
+                    0.99940294640021, 
+                    0.9993361033240448, 
+                    0.9993361033240448, 
+                    0.9220801691921947, 
+                    0.9220801691921947, 
+                    0.8487830238149544, 
+                    0.8487830238149544, 
+                    0.7829661183854637, 
+                    0.7829661183854637, 
+                    0.7234320971694541, 
+                    0.7234320971694541, 
+                    0.6678317981954568, 
+                    0.6678317981954568, 
+                    0.6147187953777725, 
+                    0.6147187953777725, 
+                    0.5630537595892198, 
+                    0.5630537595892198, 
+                    0.5131011321749207, 
+                    0.5131011321749207, 
+                    0.4636258859279023, 
+                    0.4636258859279023, 
+                    0.4147006987440749, 
+                    0.4147006987440749, 
+                    0.3659045916099193, 
+                    0.3659045916099193, 
+                    0.31725462811887445, 
+                    0.31725462811887445, 
+                    0.26864834157756506, 
+                    0.26864834157756506, 
+                    0.21993852803741934, 
+                    0.21993852803741934, 
+                    0.17063222191323127, 
+                    0.17063222191323127, 
+                    0.10919222273134825, 
+                    0.10919222273134825
+                ], 
+                0.5011898279190063
+            ], 
+            [
+                1.0412945747375488, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998219378066419, 
+                    0.9998219378066419, 
+                    0.9998145980219405, 
+                    0.9998145980219405, 
+                    0.9997938791247966, 
+                    0.9997938791247966, 
+                    0.9219548718885365, 
+                    0.9219548718885365, 
+                    0.8485542671033443, 
+                    0.8485542671033443, 
+                    0.7825687178771785, 
+                    0.7825687178771785, 
+                    0.7230020263018954, 
+                    0.7230020263018954, 
+                    0.6674441206540961, 
+                    0.6674441206540961, 
+                    0.6144048010196912, 
+                    0.6144048010196912, 
+                    0.5628140423284436, 
+                    0.5628140423284436, 
+                    0.512965514483552, 
+                    0.512965514483552, 
+                    0.4635631701408877, 
+                    0.4635631701408877, 
+                    0.41469479790848185, 
+                    0.41469479790848185, 
+                    0.3659321244084536, 
+                    0.3659321244084536, 
+                    0.31730056111137517, 
+                    0.31730056111137517, 
+                    0.2687010707952633, 
+                    0.2687010707952633, 
+                    0.21998888292915073, 
+                    0.21998888292915073, 
+                    0.17067027730927314, 
+                    0.17067027730927314, 
+                    0.10933303309685147, 
+                    0.10933303309685147
+                ], 
+                0.5009089112281799
+            ], 
+            [
+                1.055435061454773, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998929089190106, 
+                    0.9998929089190106, 
+                    0.9998929089190106, 
+                    0.9998929089190106, 
+                    0.9998929089190106, 
+                    0.9998929089190106, 
+                    0.9998929089190106, 
+                    0.9998929089190106, 
+                    0.9224200879874351, 
+                    0.9224200879874351, 
+                    0.8487441544507012, 
+                    0.8487441544507012, 
+                    0.7825910851419502, 
+                    0.7825910851419502, 
+                    0.7229426640634149, 
+                    0.7229426640634149, 
+                    0.6673700734316551, 
+                    0.6673700734316551, 
+                    0.6143375552375094, 
+                    0.6143375552375094, 
+                    0.5627613603776873, 
+                    0.5627613603776873, 
+                    0.5129159146323939, 
+                    0.5129159146323939, 
+                    0.46351196424494884, 
+                    0.46351196424494884, 
+                    0.41463358172383225, 
+                    0.41463358172383225, 
+                    0.3658627759890129, 
+                    0.3658627759890129, 
+                    0.3172237469079166, 
+                    0.3172237469079166, 
+                    0.2686189318317606, 
+                    0.2686189318317606, 
+                    0.21990307320180072, 
+                    0.21990307320180072, 
+                    0.17058353207040663, 
+                    0.17058353207040663, 
+                    0.10933478235430101, 
+                    0.10933478235430101
+                ], 
+                0.5007031559944153
+            ], 
+            [
+                1.0697674751281738, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999458893713132, 
+                    0.9999458893713132, 
+                    0.9996596780945899, 
+                    0.9996596780945899, 
+                    0.9996337020840843, 
+                    0.9996337020840843, 
+                    0.9995594773756036, 
+                    0.9995594773756036, 
+                    0.9217420332651856, 
+                    0.9217420332651856, 
+                    0.8481861874082772, 
+                    0.8481861874082772, 
+                    0.7818745151343126, 
+                    0.7818745151343126, 
+                    0.7222600961169242, 
+                    0.7222600961169242, 
+                    0.6668011207798983, 
+                    0.6668011207798983, 
+                    0.6139199347464626, 
+                    0.6139199347464626, 
+                    0.5624888321456051, 
+                    0.5624888321456051, 
+                    0.5128561954582251, 
+                    0.5128561954582251, 
+                    0.4636040180597638, 
+                    0.4636040180597638, 
+                    0.41484888333587616, 
+                    0.41484888333587616, 
+                    0.36614945190858755, 
+                    0.36614945190858755, 
+                    0.3175474810149734, 
+                    0.3175474810149734, 
+                    0.26895089374708403, 
+                    0.26895089374708403, 
+                    0.22021873842012457, 
+                    0.22021873842012457, 
+                    0.17085208788828485, 
+                    0.17085208788828485, 
+                    0.1097785642223955, 
+                    0.1097785642223955
+                ], 
+                0.5007578134536743
+            ], 
+            [
+                1.0842944383621216, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998004641452632, 
+                    0.9998004641452632, 
+                    0.99958906808404, 
+                    0.99958906808404, 
+                    0.99958906808404, 
+                    0.99958906808404, 
+                    0.99958906808404, 
+                    0.99958906808404, 
+                    0.9210712847222752, 
+                    0.9210712847222752, 
+                    0.8475846245815961, 
+                    0.8475846245815961, 
+                    0.7811115933887999, 
+                    0.7811115933887999, 
+                    0.7215356093121443, 
+                    0.7215356093121443, 
+                    0.6661958933918808, 
+                    0.6661958933918808, 
+                    0.6134711326222345, 
+                    0.6134711326222345, 
+                    0.56219339574024, 
+                    0.56219339574024, 
+                    0.512767119050779, 
+                    0.512767119050779, 
+                    0.4636640796941912, 
+                    0.4636640796941912, 
+                    0.41502690303782974, 
+                    0.41502690303782974, 
+                    0.3663969688551381, 
+                    0.3663969688551381, 
+                    0.31783144261928464, 
+                    0.31783144261928464, 
+                    0.269244022849473, 
+                    0.269244022849473, 
+                    0.22049768412518667, 
+                    0.22049768412518667, 
+                    0.17108783636932212, 
+                    0.17108783636932212, 
+                    0.1102011797696506, 
+                    0.1102011797696506
+                ], 
+                0.5006120800971985
+            ], 
+            [
+                1.0990188121795654, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990596873975773, 
+                    0.9990596873975773, 
+                    0.9990405738315569, 
+                    0.9990405738315569, 
+                    0.9989955081131635, 
+                    0.9989955081131635, 
+                    0.919602285347926, 
+                    0.919602285347926, 
+                    0.8464418499383833, 
+                    0.8464418499383833, 
+                    0.7798822213051386, 
+                    0.7798822213051386, 
+                    0.7204506336370428, 
+                    0.7204506336370428, 
+                    0.6653231833780036, 
+                    0.6653231833780036, 
+                    0.6128495183820725, 
+                    0.6128495183820725, 
+                    0.5618133781036567, 
+                    0.5618133781036567, 
+                    0.5127042678181167, 
+                    0.5127042678181167, 
+                    0.46383307350329367, 
+                    0.46383307350329367, 
+                    0.4153801052537126, 
+                    0.4153801052537126, 
+                    0.3668594313177887, 
+                    0.3668594313177887, 
+                    0.31835161435038056, 
+                    0.31835161435038056, 
+                    0.26977884643457106, 
+                    0.26977884643457106, 
+                    0.221009769972085, 
+                    0.221009769972085, 
+                    0.1715295885363353, 
+                    0.1715295885363353, 
+                    0.1108861116850718, 
+                    0.1108861116850718
+                ], 
+                0.5006201267242432
+            ], 
+            [
+                1.113943099975586, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982416076368723, 
+                    0.9982416076368723, 
+                    0.9982095904955642, 
+                    0.9982095904955642, 
+                    0.9981445226330096, 
+                    0.9981445226330096, 
+                    0.9174573079930902, 
+                    0.9174573079930902, 
+                    0.8448233935096524, 
+                    0.8448233935096524, 
+                    0.7782884503359164, 
+                    0.7782884503359164, 
+                    0.7190910899437438, 
+                    0.7190910899437438, 
+                    0.6642400423457986, 
+                    0.6642400423457986, 
+                    0.6120823214494999, 
+                    0.6120823214494999, 
+                    0.5613544606895442, 
+                    0.5613544606895442, 
+                    0.512632497469994, 
+                    0.512632497469994, 
+                    0.4640497894021511, 
+                    0.4640497894021511, 
+                    0.4158242610458328, 
+                    0.4158242610458328, 
+                    0.3674406559114503, 
+                    0.3674406559114503, 
+                    0.3190064565622392, 
+                    0.3190064565622392, 
+                    0.27045442604280046, 
+                    0.27045442604280046, 
+                    0.22165964780828876, 
+                    0.22165964780828876, 
+                    0.1720940487432447, 
+                    0.1720940487432447, 
+                    0.11173881902382593, 
+                    0.11173881902382593
+                ], 
+                0.5004948377609253
+            ], 
+            [
+                1.1290700435638428, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9969396546182527, 
+                    0.9969396546182527, 
+                    0.9969182835765712, 
+                    0.9969182835765712, 
+                    0.9968801858071205, 
+                    0.9968801858071205, 
+                    0.9143189060344891, 
+                    0.9143189060344891, 
+                    0.8425898247946493, 
+                    0.8425898247946493, 
+                    0.7763221983424393, 
+                    0.7763221983424393, 
+                    0.7174881241845262, 
+                    0.7174881241845262, 
+                    0.6629800599063845, 
+                    0.6629800599063845, 
+                    0.611205752180873, 
+                    0.611205752180873, 
+                    0.5608629448162892, 
+                    0.5608629448162892, 
+                    0.5126099189641687, 
+                    0.5126099189641687, 
+                    0.4643860315316546, 
+                    0.4643860315316546, 
+                    0.4164419042972263, 
+                    0.4164419042972263, 
+                    0.36822996494330273, 
+                    0.36822996494330273, 
+                    0.3198884078412842, 
+                    0.3198884078412842, 
+                    0.2713629007779028, 
+                    0.2713629007779028, 
+                    0.2225353688966979, 
+                    0.2225353688966979, 
+                    0.17285880675688747, 
+                    0.17285880675688747, 
+                    0.11285316379984726, 
+                    0.11285316379984726
+                ], 
+                0.5004316568374634
+            ], 
+            [
+                1.1444023847579956, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997570044946054, 
+                    0.9997570044946054, 
+                    0.9997511421646778, 
+                    0.9997511421646778, 
+                    0.9997511421646778, 
+                    0.9997511421646778, 
+                    0.9997511421646778, 
+                    0.9997511421646778, 
+                    0.9100080810583862, 
+                    0.9100080810583862, 
+                    0.8394645790667837, 
+                    0.8394645790667837, 
+                    0.7735789749089175, 
+                    0.7735789749089175, 
+                    0.7152301440015472, 
+                    0.7152301440015472, 
+                    0.6612352651268428, 
+                    0.6612352651268428, 
+                    0.6100216157933109, 
+                    0.6100216157933109, 
+                    0.5602282498019089, 
+                    0.5602282498019089, 
+                    0.512621574689086, 
+                    0.512621574689086, 
+                    0.4648945553790798, 
+                    0.4648945553790798, 
+                    0.41733915981144987, 
+                    0.41733915981144987, 
+                    0.36936672547953636, 
+                    0.36936672547953636, 
+                    0.32115605932638713, 
+                    0.32115605932638713, 
+                    0.27267053602852476, 
+                    0.27267053602852476, 
+                    0.2238026708875467, 
+                    0.2238026708875467, 
+                    0.17398823402789543, 
+                    0.17398823402789543, 
+                    0.11434377446917349, 
+                    0.11434377446917349
+                ], 
+                0.5002945065498352
+            ]
+        ]
+    }, 
+    {
+        "block_size": 44, 
+        "preprocessing_block_sizes": [], 
+        "pruning_parameters": [
+            [
+                0.8764146566390991, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996187293618571, 
+                    0.9996187293618571, 
+                    0.9996173539168624, 
+                    0.9996173539168624, 
+                    0.9996088165715875, 
+                    0.9996088165715875, 
+                    0.999568273045812, 
+                    0.999568273045812, 
+                    0.9435209194184656, 
+                    0.9435209194184656, 
+                    0.8709992714392863, 
+                    0.8709992714392863, 
+                    0.805826983832373, 
+                    0.805826983832373, 
+                    0.7456641059938269, 
+                    0.7456641059938269, 
+                    0.688282984627016, 
+                    0.688282984627016, 
+                    0.6340041403078582, 
+                    0.6340041403078582, 
+                    0.58266374032887, 
+                    0.58266374032887, 
+                    0.5348442211591092, 
+                    0.5348442211591092, 
+                    0.48794595811983416, 
+                    0.48794595811983416, 
+                    0.4425451872018555, 
+                    0.4425451872018555, 
+                    0.3970278437920355, 
+                    0.3970278437920355, 
+                    0.35156558500553986, 
+                    0.35156558500553986, 
+                    0.3059212140230838, 
+                    0.3059212140230838, 
+                    0.2600206004632491, 
+                    0.2600206004632491, 
+                    0.2138114761663266, 
+                    0.2138114761663266, 
+                    0.16682666416706665, 
+                    0.16682666416706665, 
+                    0.10737097974389309, 
+                    0.10737097974389309
+                ], 
+                0.5011714696884155
+            ], 
+            [
+                0.8880525827407837, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998579335096414, 
+                    0.9998579335096414, 
+                    0.9998302137167586, 
+                    0.9998302137167586, 
+                    0.9996951429683052, 
+                    0.9996951429683052, 
+                    0.9434497105032302, 
+                    0.9434497105032302, 
+                    0.8709130889592396, 
+                    0.8709130889592396, 
+                    0.8056964805274173, 
+                    0.8056964805274173, 
+                    0.7455026446683682, 
+                    0.7455026446683682, 
+                    0.688105016597342, 
+                    0.688105016597342, 
+                    0.6338709819201613, 
+                    0.6338709819201613, 
+                    0.5826208160826064, 
+                    0.5826208160826064, 
+                    0.5348977930195951, 
+                    0.5348977930195951, 
+                    0.48807043367763137, 
+                    0.48807043367763137, 
+                    0.44269784433711934, 
+                    0.44269784433711934, 
+                    0.3971861364541059, 
+                    0.3971861364541059, 
+                    0.3517120471456971, 
+                    0.3517120471456971, 
+                    0.30604979679560446, 
+                    0.30604979679560446, 
+                    0.26013266163131094, 
+                    0.26013266163131094, 
+                    0.21390574833363074, 
+                    0.21390574833363074, 
+                    0.16689971732949085, 
+                    0.16689971732949085, 
+                    0.10749142012893662, 
+                    0.10749142012893662
+                ], 
+                0.5014678835868835
+            ], 
+            [
+                0.8998450040817261, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995720325499626, 
+                    0.9995720325499626, 
+                    0.9995709527418272, 
+                    0.9995709527418272, 
+                    0.9995644100384061, 
+                    0.9995644100384061, 
+                    0.9995333822229452, 
+                    0.9995333822229452, 
+                    0.9434066380164411, 
+                    0.9434066380164411, 
+                    0.8706638782274668, 
+                    0.8706638782274668, 
+                    0.8052897050840586, 
+                    0.8052897050840586, 
+                    0.7450477327947642, 
+                    0.7450477327947642, 
+                    0.687672642642722, 
+                    0.687672642642722, 
+                    0.6335395653604223, 
+                    0.6335395653604223, 
+                    0.5824267156126246, 
+                    0.5824267156126246, 
+                    0.5348187270624736, 
+                    0.5348187270624736, 
+                    0.48806097236936113, 
+                    0.48806097236936113, 
+                    0.4426955385405998, 
+                    0.4426955385405998, 
+                    0.3971707827288719, 
+                    0.3971707827288719, 
+                    0.3516705406615198, 
+                    0.3516705406615198, 
+                    0.3059842828412118, 
+                    0.3059842828412118, 
+                    0.26005337485514823, 
+                    0.26005337485514823, 
+                    0.21381995517420044, 
+                    0.21381995517420044, 
+                    0.16681677347704063, 
+                    0.16681677347704063, 
+                    0.1074300155945892, 
+                    0.1074300155945892
+                ], 
+                0.5006911158561707
+            ], 
+            [
+                0.9117940068244934, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995695242767539, 
+                    0.9995695242767539, 
+                    0.9995690303836458, 
+                    0.9995690303836458, 
+                    0.9995660814658351, 
+                    0.9995660814658351, 
+                    0.9995523128178017, 
+                    0.9995523128178017, 
+                    0.943430888433533, 
+                    0.943430888433533, 
+                    0.8706231445196835, 
+                    0.8706231445196835, 
+                    0.8052093877322839, 
+                    0.8052093877322839, 
+                    0.7449823445749222, 
+                    0.7449823445749222, 
+                    0.6876692905293618, 
+                    0.6876692905293618, 
+                    0.6336457162618323, 
+                    0.6336457162618323, 
+                    0.582652530082854, 
+                    0.582652530082854, 
+                    0.5351036537877467, 
+                    0.5351036537877467, 
+                    0.4883700466302014, 
+                    0.4883700466302014, 
+                    0.4429614605681892, 
+                    0.4429614605681892, 
+                    0.3973889638524532, 
+                    0.3973889638524532, 
+                    0.3518347279252679, 
+                    0.3518347279252679, 
+                    0.3061024781762088, 
+                    0.3061024781762088, 
+                    0.26013841112667024, 
+                    0.26013841112667024, 
+                    0.21387823771462447, 
+                    0.21387823771462447, 
+                    0.16685187079419314, 
+                    0.16685187079419314, 
+                    0.10751001553105834, 
+                    0.10751001553105834
+                ], 
+                0.5012822151184082
+            ], 
+            [
+                0.9239017367362976, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995600260066971, 
+                    0.9995600260066971, 
+                    0.9995600260066971, 
+                    0.9995600260066971, 
+                    0.9995600260066971, 
+                    0.9995600260066971, 
+                    0.9995600260066971, 
+                    0.9995600260066971, 
+                    0.9434267418641439, 
+                    0.9434267418641439, 
+                    0.8705096401694238, 
+                    0.8705096401694238, 
+                    0.8050016618144287, 
+                    0.8050016618144287, 
+                    0.7447410625869018, 
+                    0.7447410625869018, 
+                    0.6874368672828886, 
+                    0.6874368672828886, 
+                    0.6334864819219261, 
+                    0.6334864819219261, 
+                    0.5826002619186077, 
+                    0.5826002619186077, 
+                    0.5351410365343516, 
+                    0.5351410365343516, 
+                    0.48846237783059093, 
+                    0.48846237783059093, 
+                    0.4430584584379261, 
+                    0.4430584584379261, 
+                    0.397474640134177, 
+                    0.397474640134177, 
+                    0.35189761924975305, 
+                    0.35189761924975305, 
+                    0.3061427723381602, 
+                    0.3061427723381602, 
+                    0.2601619840194343, 
+                    0.2601619840194343, 
+                    0.21388796461335005, 
+                    0.21388796461335005, 
+                    0.16684990867065508, 
+                    0.16684990867065508, 
+                    0.10755902798924866, 
+                    0.10755902798924866
+                ], 
+                0.5012031197547913
+            ], 
+            [
+                0.936170220375061, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998265412349963, 
+                    0.9998265412349963, 
+                    0.9998258052952317, 
+                    0.9998258052952317, 
+                    0.9998239629286091, 
+                    0.9998239629286091, 
+                    0.9433473190294869, 
+                    0.9433473190294869, 
+                    0.8703388235214699, 
+                    0.8703388235214699, 
+                    0.8047086947889913, 
+                    0.8047086947889913, 
+                    0.7443576411795111, 
+                    0.7443576411795111, 
+                    0.6869770029918654, 
+                    0.6869770029918654, 
+                    0.6330348853718568, 
+                    0.6330348853718568, 
+                    0.5822300751187359, 
+                    0.5822300751187359, 
+                    0.5349060702893484, 
+                    0.5349060702893484, 
+                    0.48833293758816776, 
+                    0.48833293758816776, 
+                    0.44301002373900084, 
+                    0.44301002373900084, 
+                    0.3974719104798505, 
+                    0.3974719104798505, 
+                    0.3519183870914833, 
+                    0.3519183870914833, 
+                    0.30617282968304405, 
+                    0.30617282968304405, 
+                    0.26019448660714706, 
+                    0.26019448660714706, 
+                    0.21391751345665427, 
+                    0.21391751345665427, 
+                    0.16687126463122526, 
+                    0.16687126463122526, 
+                    0.10765177040071297, 
+                    0.10765177040071297
+                ], 
+                0.5007129907608032
+            ], 
+            [
+                0.9486016035079956, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995282731928785, 
+                    0.9995282731928785, 
+                    0.9995241394538529, 
+                    0.9995241394538529, 
+                    0.9995005986384986, 
+                    0.9995005986384986, 
+                    0.99940109340118, 
+                    0.99940109340118, 
+                    0.9434807485804683, 
+                    0.9434807485804683, 
+                    0.870342006042805, 
+                    0.870342006042805, 
+                    0.804659186963898, 
+                    0.804659186963898, 
+                    0.7443337890639837, 
+                    0.7443337890639837, 
+                    0.687027380835274, 
+                    0.687027380835274, 
+                    0.6331711853028006, 
+                    0.6331711853028006, 
+                    0.5824382217267068, 
+                    0.5824382217267068, 
+                    0.5351556935560917, 
+                    0.5351556935560917, 
+                    0.4885809143770494, 
+                    0.4885809143770494, 
+                    0.44321686552519424, 
+                    0.44321686552519424, 
+                    0.39762254872799097, 
+                    0.39762254872799097, 
+                    0.35201140649490426, 
+                    0.35201140649490426, 
+                    0.3062175152487579, 
+                    0.3062175152487579, 
+                    0.2602044355887132, 
+                    0.2602044355887132, 
+                    0.2139026086437928, 
+                    0.2139026086437928, 
+                    0.1668406734825675, 
+                    0.1668406734825675, 
+                    0.10766978328981434, 
+                    0.10766978328981434
+                ], 
+                0.5010167360305786
+            ], 
+            [
+                0.961198091506958, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998253563564443, 
+                    0.9998253563564443, 
+                    0.9997624784434518, 
+                    0.9997624784434518, 
+                    0.9994659549891292, 
+                    0.9994659549891292, 
+                    0.9435054843938178, 
+                    0.9435054843938178, 
+                    0.870302015908208, 
+                    0.870302015908208, 
+                    0.8045313997565985, 
+                    0.8045313997565985, 
+                    0.7441388872721115, 
+                    0.7441388872721115, 
+                    0.6867803308506514, 
+                    0.6867803308506514, 
+                    0.632946164780583, 
+                    0.632946164780583, 
+                    0.5822948303383073, 
+                    0.5822948303383073, 
+                    0.5351164918777773, 
+                    0.5351164918777773, 
+                    0.4886172292021817, 
+                    0.4886172292021817, 
+                    0.44329409444373724, 
+                    0.44329409444373724, 
+                    0.3977175610716967, 
+                    0.3977175610716967, 
+                    0.3521079959839088, 
+                    0.3521079959839088, 
+                    0.3063077185058763, 
+                    0.3063077185058763, 
+                    0.2602853879016018, 
+                    0.2602853879016018, 
+                    0.2139704246163747, 
+                    0.2139704246163747, 
+                    0.16688967318623382, 
+                    0.16688967318623382, 
+                    0.10781151572766495, 
+                    0.10781151572766495
+                ], 
+                0.5011232495307922
+            ], 
+            [
+                0.9739618301391602, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995463693819755, 
+                    0.9995463693819755, 
+                    0.9995445980518645, 
+                    0.9995445980518645, 
+                    0.9995347948445071, 
+                    0.9995347948445071, 
+                    0.9994941511290724, 
+                    0.9994941511290724, 
+                    0.9436702698548725, 
+                    0.9436702698548725, 
+                    0.8702523257215381, 
+                    0.8702523257215381, 
+                    0.8043148337243133, 
+                    0.8043148337243133, 
+                    0.7438509707448013, 
+                    0.7438509707448013, 
+                    0.6864866770486122, 
+                    0.6864866770486122, 
+                    0.6327228166815967, 
+                    0.6327228166815967, 
+                    0.5821783020775388, 
+                    0.5821783020775388, 
+                    0.5350829792464861, 
+                    0.5350829792464861, 
+                    0.4886259396200187, 
+                    0.4886259396200187, 
+                    0.4432946358713313, 
+                    0.4432946358713313, 
+                    0.3976997460441043, 
+                    0.3976997460441043, 
+                    0.3520655588819469, 
+                    0.3520655588819469, 
+                    0.3062445723050249, 
+                    0.3062445723050249, 
+                    0.2602092566522456, 
+                    0.2602092566522456, 
+                    0.2138864541008673, 
+                    0.2138864541008673, 
+                    0.16680412643158313, 
+                    0.16680412643158313, 
+                    0.1078035480547703, 
+                    0.1078035480547703
+                ], 
+                0.5005853772163391
+            ], 
+            [
+                0.9868950247764587, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998718279839994, 
+                    0.9998718279839994, 
+                    0.9998703338486326, 
+                    0.9998703338486326, 
+                    0.999865442256555, 
+                    0.999865442256555, 
+                    0.9438153842282675, 
+                    0.9438153842282675, 
+                    0.8703427865842499, 
+                    0.8703427865842499, 
+                    0.8043284661615435, 
+                    0.8043284661615435, 
+                    0.7437981475387094, 
+                    0.7437981475387094, 
+                    0.6863841004854586, 
+                    0.6863841004854586, 
+                    0.63264233555124, 
+                    0.63264233555124, 
+                    0.5821736904978849, 
+                    0.5821736904978849, 
+                    0.5351580557586326, 
+                    0.5351580557586326, 
+                    0.48875626400196603, 
+                    0.48875626400196603, 
+                    0.44344325067286744, 
+                    0.44344325067286744, 
+                    0.3978521577918774, 
+                    0.3978521577918774, 
+                    0.35220922309947844, 
+                    0.35220922309947844, 
+                    0.3063743576604493, 
+                    0.3063743576604493, 
+                    0.26032340379585234, 
+                    0.26032340379585234, 
+                    0.2139810518800253, 
+                    0.2139810518800253, 
+                    0.16687222302664842, 
+                    0.16687222302664842, 
+                    0.10799153431985421, 
+                    0.10799153431985421
+                ], 
+                0.501076340675354
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996114865906894, 
+                    0.9996114865906894, 
+                    0.9996092157260664, 
+                    0.9996092157260664, 
+                    0.9995968911910826, 
+                    0.9995968911910826, 
+                    0.9995454439398085, 
+                    0.9995454439398085, 
+                    0.9441174953209572, 
+                    0.9441174953209572, 
+                    0.8704161477347145, 
+                    0.8704161477347145, 
+                    0.8042209865260203, 
+                    0.8042209865260203, 
+                    0.7435930526193387, 
+                    0.7435930526193387, 
+                    0.6861417099537214, 
+                    0.6861417099537214, 
+                    0.6324355966100018, 
+                    0.6324355966100018, 
+                    0.5820447089952375, 
+                    0.5820447089952375, 
+                    0.535106494220929, 
+                    0.535106494220929, 
+                    0.4887411132210787, 
+                    0.4887411132210787, 
+                    0.4434274341593107, 
+                    0.4434274341593107, 
+                    0.39782117913122667, 
+                    0.39782117913122667, 
+                    0.35215734277698857, 
+                    0.35215734277698857, 
+                    0.30630383175608916, 
+                    0.30630383175608916, 
+                    0.2602399672434915, 
+                    0.2602399672434915, 
+                    0.2138890272705673, 
+                    0.2138890272705673, 
+                    0.16677743263396003, 
+                    0.16677743263396003, 
+                    0.10800050914499845, 
+                    0.10800050914499845
+                ], 
+                0.5006111264228821
+            ], 
+            [
+                1.0132789611816406, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999349923274625, 
+                    0.9999349923274625, 
+                    0.9999324379507111, 
+                    0.9999324379507111, 
+                    0.999923325130969, 
+                    0.999923325130969, 
+                    0.9443180505540401, 
+                    0.9443180505540401, 
+                    0.8705076995275908, 
+                    0.8705076995275908, 
+                    0.8041656577017522, 
+                    0.8041656577017522, 
+                    0.7434049115936423, 
+                    0.7434049115936423, 
+                    0.6858410252286309, 
+                    0.6858410252286309, 
+                    0.6321287168770381, 
+                    0.6321287168770381, 
+                    0.5818179130744884, 
+                    0.5818179130744884, 
+                    0.5349951364475903, 
+                    0.5349951364475903, 
+                    0.4887197948274377, 
+                    0.4887197948274377, 
+                    0.4434657146690877, 
+                    0.4434657146690877, 
+                    0.39789517303027166, 
+                    0.39789517303027166, 
+                    0.35224787185513634, 
+                    0.35224787185513634, 
+                    0.30639812157359925, 
+                    0.30639812157359925, 
+                    0.2603297052957981, 
+                    0.2603297052957981, 
+                    0.213966037665865, 
+                    0.213966037665865, 
+                    0.1668316636773602, 
+                    0.1668316636773602, 
+                    0.10820961131356241, 
+                    0.10820961131356241
+                ], 
+                0.5006396174430847
+            ], 
+            [
+                1.0267343521118164, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999647762998032, 
+                    0.9999647762998032, 
+                    0.999961038524247, 
+                    0.999961038524247, 
+                    0.9999471891835701, 
+                    0.9999471891835701, 
+                    0.944739617216708, 
+                    0.944739617216708, 
+                    0.8707776633357166, 
+                    0.8707776633357166, 
+                    0.8042815728331404, 
+                    0.8042815728331404, 
+                    0.7433978039385957, 
+                    0.7433978039385957, 
+                    0.6857558551319499, 
+                    0.6857558551319499, 
+                    0.6320560326816357, 
+                    0.6320560326816357, 
+                    0.5818155154543428, 
+                    0.5818155154543428, 
+                    0.535055089988762, 
+                    0.535055089988762, 
+                    0.48881864592792473, 
+                    0.48881864592792473, 
+                    0.4435669727417019, 
+                    0.4435669727417019, 
+                    0.3979915400923679, 
+                    0.3979915400923679, 
+                    0.35233079487810093, 
+                    0.35233079487810093, 
+                    0.3064652937219899, 
+                    0.3064652937219899, 
+                    0.26038086469467814, 
+                    0.26038086469467814, 
+                    0.21399877211460944, 
+                    0.21399877211460944, 
+                    0.16684181067148293, 
+                    0.16684181067148293, 
+                    0.10838064939479834, 
+                    0.10838064939479834
+                ], 
+                0.5009398460388184
+            ], 
+            [
+                1.0403683185577393, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999198985694993, 
+                    0.9999198985694993, 
+                    0.9999198985694993, 
+                    0.9999198985694993, 
+                    0.9999198985694993, 
+                    0.9999198985694993, 
+                    0.9999198985694993, 
+                    0.9999198985694993, 
+                    0.9453566281870424, 
+                    0.9453566281870424, 
+                    0.8710386505080165, 
+                    0.8710386505080165, 
+                    0.8042236089955298, 
+                    0.8042236089955298, 
+                    0.7431332549707585, 
+                    0.7431332549707585, 
+                    0.6853900971286467, 
+                    0.6853900971286467, 
+                    0.6317187880262694, 
+                    0.6317187880262694, 
+                    0.5815723253544707, 
+                    0.5815723253544707, 
+                    0.5348805275495226, 
+                    0.5348805275495226, 
+                    0.48868215765642503, 
+                    0.48868215765642503, 
+                    0.4434262415713814, 
+                    0.4434262415713814, 
+                    0.3978453952517301, 
+                    0.3978453952517301, 
+                    0.3521746167669573, 
+                    0.3521746167669573, 
+                    0.30630116200444485, 
+                    0.30630116200444485, 
+                    0.26021285459566335, 
+                    0.26021285459566335, 
+                    0.21382983101749922, 
+                    0.21382983101749922, 
+                    0.1666779789225279, 
+                    0.1666779789225279, 
+                    0.10837738454452717, 
+                    0.10837738454452717
+                ], 
+                0.5001507997512817
+            ], 
+            [
+                1.0541833639144897, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999074120944438, 
+                    0.9999074120944438, 
+                    0.9999074120944438, 
+                    0.9999074120944438, 
+                    0.9999074120944438, 
+                    0.9999074120944438, 
+                    0.9453161614433604, 
+                    0.9453161614433604, 
+                    0.8710000769438223, 
+                    0.8710000769438223, 
+                    0.8040528924462486, 
+                    0.8040528924462486, 
+                    0.7427656167979093, 
+                    0.7427656167979093, 
+                    0.6847876441672086, 
+                    0.6847876441672086, 
+                    0.6310517792479379, 
+                    0.6310517792479379, 
+                    0.5810080746365612, 
+                    0.5810080746365612, 
+                    0.5345489937263129, 
+                    0.5345489937263129, 
+                    0.4885715043338456, 
+                    0.4885715043338456, 
+                    0.44352060275072813, 
+                    0.44352060275072813, 
+                    0.39808299132423625, 
+                    0.39808299132423625, 
+                    0.3525048359518282, 
+                    0.3525048359518282, 
+                    0.30667889829477024, 
+                    0.30667889829477024, 
+                    0.26060213897227613, 
+                    0.26060213897227613, 
+                    0.21419951051961125, 
+                    0.21419951051961125, 
+                    0.16699052394219643, 
+                    0.16699052394219643, 
+                    0.10895615330396721, 
+                    0.10895615330396721
+                ], 
+                0.5003695487976074
+            ], 
+            [
+                1.0681818723678589, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996460449401574, 
+                    0.9996460449401574, 
+                    0.9996460449401574, 
+                    0.9996460449401574, 
+                    0.9996460449401574, 
+                    0.9996460449401574, 
+                    0.944296021241133, 
+                    0.944296021241133, 
+                    0.8702095864368738, 
+                    0.8702095864368738, 
+                    0.8032835108062354, 
+                    0.8032835108062354, 
+                    0.7418378052163329, 
+                    0.7418378052163329, 
+                    0.6835484079540012, 
+                    0.6835484079540012, 
+                    0.6296931467558943, 
+                    0.6296931467558943, 
+                    0.5797918328610271, 
+                    0.5797918328610271, 
+                    0.5337655401323197, 
+                    0.5337655401323197, 
+                    0.48823406491860316, 
+                    0.48823406491860316, 
+                    0.44363370638781663, 
+                    0.44363370638781663, 
+                    0.39851511833003117, 
+                    0.39851511833003117, 
+                    0.3531536341692599, 
+                    0.3531536341692599, 
+                    0.30744899383944524, 
+                    0.30744899383944524, 
+                    0.26141670946629775, 
+                    0.26141670946629775, 
+                    0.21499410780376454, 
+                    0.21499410780376454, 
+                    0.16768804368728407, 
+                    0.16768804368728407, 
+                    0.11001399880758786, 
+                    0.11001399880758786
+                ], 
+                0.5003675818443298
+            ], 
+            [
+                1.0823662281036377, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999996855235935, 
+                    0.9999996855235935, 
+                    0.9991115940246422, 
+                    0.9991115940246422, 
+                    0.9990441172600181, 
+                    0.9990441172600181, 
+                    0.9988598014589386, 
+                    0.9988598014589386, 
+                    0.9422114496991423, 
+                    0.9422114496991423, 
+                    0.8685924276256999, 
+                    0.8685924276256999, 
+                    0.8018863693106499, 
+                    0.8018863693106499, 
+                    0.7404017838513659, 
+                    0.7404017838513659, 
+                    0.6818531443432965, 
+                    0.6818531443432965, 
+                    0.6278864983484392, 
+                    0.6278864983484392, 
+                    0.5781614216918831, 
+                    0.5781614216918831, 
+                    0.5326904300411912, 
+                    0.5326904300411912, 
+                    0.4877786497251669, 
+                    0.4877786497251669, 
+                    0.44381596054446887, 
+                    0.44381596054446887, 
+                    0.3991565977846672, 
+                    0.3991565977846672, 
+                    0.3541107118297045, 
+                    0.3541107118297045, 
+                    0.3085869776400686, 
+                    0.3085869776400686, 
+                    0.26262628543443084, 
+                    0.26262628543443084, 
+                    0.21618318782925233, 
+                    0.21618318782925233, 
+                    0.16874730657015774, 
+                    0.16874730657015774, 
+                    0.11150006298113993, 
+                    0.11150006298113993
+                ], 
+                0.5002744197845459
+            ], 
+            [
+                1.0967389345169067, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985463752744154, 
+                    0.9985463752744154, 
+                    0.9984179655056665, 
+                    0.9984179655056665, 
+                    0.9982503885504682, 
+                    0.9982503885504682, 
+                    0.9397520033585999, 
+                    0.9397520033585999, 
+                    0.8665935533402471, 
+                    0.8665935533402471, 
+                    0.800288322101426, 
+                    0.800288322101426, 
+                    0.7389246931103114, 
+                    0.7389246931103114, 
+                    0.680311506810525, 
+                    0.680311506810525, 
+                    0.6262770628969238, 
+                    0.6262770628969238, 
+                    0.5766730068179011, 
+                    0.5766730068179011, 
+                    0.5316161526492102, 
+                    0.5316161526492102, 
+                    0.4872803753522135, 
+                    0.4872803753522135, 
+                    0.44391206838900904, 
+                    0.44391206838900904, 
+                    0.3997020356578367, 
+                    0.3997020356578367, 
+                    0.35496980258102057, 
+                    0.35496980258102057, 
+                    0.30963265454380784, 
+                    0.30963265454380784, 
+                    0.2637538985905759, 
+                    0.2637538985905759, 
+                    0.21730268463542288, 
+                    0.21730268463542288, 
+                    0.16975130189650403, 
+                    0.16975130189650403, 
+                    0.11294927769199097, 
+                    0.11294927769199097
+                ], 
+                0.4998716115951538
+            ], 
+            [
+                1.1113024950027466, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998645291321343, 
+                    0.9998645291321343, 
+                    0.9997392546621442, 
+                    0.9997392546621442, 
+                    0.99931124554346, 
+                    0.99931124554346, 
+                    0.9894348972755638, 
+                    0.9894348972755638, 
+                    0.8962208630722148, 
+                    0.8962208630722148, 
+                    0.8137442375332078, 
+                    0.8137442375332078, 
+                    0.7421810513655045, 
+                    0.7421810513655045, 
+                    0.6764435781078401, 
+                    0.6764435781078401, 
+                    0.6196506059407952, 
+                    0.6196506059407952, 
+                    0.5703183471977347, 
+                    0.5703183471977347, 
+                    0.5280165514581171, 
+                    0.5280165514581171, 
+                    0.48544206631153863, 
+                    0.48544206631153863, 
+                    0.44391379120536567, 
+                    0.44391379120536567, 
+                    0.40076745711338724, 
+                    0.40076745711338724, 
+                    0.3567996953124371, 
+                    0.3567996953124371, 
+                    0.31197286859522605, 
+                    0.31197286859522605, 
+                    0.26646057128683764, 
+                    0.26646057128683764, 
+                    0.2203101395111617, 
+                    0.2203101395111617, 
+                    0.17297928887896616, 
+                    0.17297928887896616, 
+                    0.11132302452527996, 
+                    0.11132302452527996
+                ], 
+                0.5005919337272644
+            ], 
+            [
+                1.1260594129562378, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998763497068103, 
+                    0.9998763497068103, 
+                    0.9981442180578667, 
+                    0.9981442180578667, 
+                    0.9981340738559936, 
+                    0.9981340738559936, 
+                    0.998102842773471, 
+                    0.998102842773471, 
+                    0.9807827813045777, 
+                    0.9807827813045777, 
+                    0.8867453739947846, 
+                    0.8867453739947846, 
+                    0.8058986639387158, 
+                    0.8058986639387158, 
+                    0.7370293000435973, 
+                    0.7370293000435973, 
+                    0.6737612894845989, 
+                    0.6737612894845989, 
+                    0.6182477869838853, 
+                    0.6182477869838853, 
+                    0.569336525502419, 
+                    0.569336525502419, 
+                    0.5270306738561512, 
+                    0.5270306738561512, 
+                    0.4852369960417717, 
+                    0.4852369960417717, 
+                    0.4445003966715474, 
+                    0.4445003966715474, 
+                    0.4020563545681851, 
+                    0.4020563545681851, 
+                    0.3585755354790912, 
+                    0.3585755354790912, 
+                    0.3140309893017065, 
+                    0.3140309893017065, 
+                    0.26861715770274425, 
+                    0.26861715770274425, 
+                    0.22239232499587178, 
+                    0.22239232499587178, 
+                    0.17477565943047466, 
+                    0.17477565943047466, 
+                    0.1143233735563791, 
+                    0.1143233735563791
+                ], 
+                0.5003534555435181
+            ], 
+            [
+                1.14101243019104, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9985139688825978, 
+                    0.9985139688825978, 
+                    0.9938553781426955, 
+                    0.9938553781426955, 
+                    0.9938310951852212, 
+                    0.9938310951852212, 
+                    0.9937530693082639, 
+                    0.9937530693082639, 
+                    0.9552926442083886, 
+                    0.9552926442083886, 
+                    0.8629224971939132, 
+                    0.8629224971939132, 
+                    0.788799630537676, 
+                    0.788799630537676, 
+                    0.728003887653992, 
+                    0.728003887653992, 
+                    0.6719539312983008, 
+                    0.6719539312983008, 
+                    0.6188654851635369, 
+                    0.6188654851635369, 
+                    0.569352080952832, 
+                    0.569352080952832, 
+                    0.5255697971211035, 
+                    0.5255697971211035, 
+                    0.48506499060246394, 
+                    0.48506499060246394, 
+                    0.4460058569428031, 
+                    0.4460058569428031, 
+                    0.40511199835636463, 
+                    0.40511199835636463, 
+                    0.36274749824542135, 
+                    0.36274749824542135, 
+                    0.31887848725618695, 
+                    0.31887848725618695, 
+                    0.2737371581488107, 
+                    0.2737371581488107, 
+                    0.2274052638773068, 
+                    0.2274052638773068, 
+                    0.17920322164926386, 
+                    0.17920322164926386, 
+                    0.12073089107206743, 
+                    0.12073089107206743
+                ], 
+                0.5004624724388123
+            ]
+        ]
+    }, 
+    {
+        "block_size": 45, 
+        "preprocessing_block_sizes": [
+            6
+        ], 
+        "pruning_parameters": [
+            [
+                0.87890625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992398709800965, 
+                    0.9992398709800965, 
+                    0.9992320129865068, 
+                    0.9992320129865068, 
+                    0.9991969770371413, 
+                    0.9991969770371413, 
+                    0.999084743829168, 
+                    0.999084743829168, 
+                    0.9421650751632532, 
+                    0.9421650751632532, 
+                    0.8694179796800952, 
+                    0.8694179796800952, 
+                    0.8041642325725574, 
+                    0.8041642325725574, 
+                    0.7441915622897991, 
+                    0.7441915622897991, 
+                    0.6870986620864284, 
+                    0.6870986620864284, 
+                    0.6341415662857195, 
+                    0.6341415662857195, 
+                    0.5830559787078395, 
+                    0.5830559787078395, 
+                    0.5353873201250026, 
+                    0.5353873201250026, 
+                    0.4890275138727573, 
+                    0.4890275138727573, 
+                    0.4434886502746688, 
+                    0.4434886502746688, 
+                    0.3978516434363647, 
+                    0.3978516434363647, 
+                    0.3521530165385358, 
+                    0.3521530165385358, 
+                    0.3062939608924257, 
+                    0.3062939608924257, 
+                    0.2602826883067047, 
+                    0.2602826883067047, 
+                    0.21398946689248155, 
+                    0.21398946689248155, 
+                    0.16695270241692967, 
+                    0.16695270241692967, 
+                    0.1073739534987434, 
+                    0.1073739534987434
+                ], 
+                0.5014280080795288
+            ], 
+            [
+                0.8903244733810425, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991882909936753, 
+                    0.9991882909936753, 
+                    0.9991795685885577, 
+                    0.9991795685885577, 
+                    0.9991413117683124, 
+                    0.9991413117683124, 
+                    0.9990213480435504, 
+                    0.9990213480435504, 
+                    0.9419968257255522, 
+                    0.9419968257255522, 
+                    0.8691425383273917, 
+                    0.8691425383273917, 
+                    0.8038015189576921, 
+                    0.8038015189576921, 
+                    0.7438136226459875, 
+                    0.7438136226459875, 
+                    0.6867481480015707, 
+                    0.6867481480015707, 
+                    0.6338948424852338, 
+                    0.6338948424852338, 
+                    0.5829251460712139, 
+                    0.5829251460712139, 
+                    0.5353611899795736, 
+                    0.5353611899795736, 
+                    0.4890583388878897, 
+                    0.4890583388878897, 
+                    0.44353165357322855, 
+                    0.44353165357322855, 
+                    0.39788942787131315, 
+                    0.39788942787131315, 
+                    0.3521774885668075, 
+                    0.3521774885668075, 
+                    0.30630590210485464, 
+                    0.30630590210485464, 
+                    0.260284309365898, 
+                    0.260284309365898, 
+                    0.2139840319663902, 
+                    0.2139840319663902, 
+                    0.16694278739627558, 
+                    0.16694278739627558, 
+                    0.1073810286675551, 
+                    0.1073810286675551
+                ], 
+                0.5010100603103638
+            ], 
+            [
+                0.9018909931182861, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991331513056738, 
+                    0.9991331513056738, 
+                    0.9991244975373533, 
+                    0.9991244975373533, 
+                    0.9990827482489073, 
+                    0.9990827482489073, 
+                    0.9989546371834817, 
+                    0.9989546371834817, 
+                    0.9418218476257866, 
+                    0.9418218476257866, 
+                    0.8688524527658434, 
+                    0.8688524527658434, 
+                    0.8034176804930511, 
+                    0.8034176804930511, 
+                    0.7434112115581676, 
+                    0.7434112115581676, 
+                    0.6863695043648913, 
+                    0.6863695043648913, 
+                    0.6336197968674482, 
+                    0.6336197968674482, 
+                    0.5827646681377, 
+                    0.5827646681377, 
+                    0.5353078555960451, 
+                    0.5353078555960451, 
+                    0.4890651455419363, 
+                    0.4890651455419363, 
+                    0.4435550970673623, 
+                    0.4435550970673623, 
+                    0.39791142706192306, 
+                    0.39791142706192306, 
+                    0.35218953200050496, 
+                    0.35218953200050496, 
+                    0.30630799935526337, 
+                    0.30630799935526337, 
+                    0.2602780944290155, 
+                    0.2602780944290155, 
+                    0.21397227574528696, 
+                    0.21397227574528696, 
+                    0.16692783182822074, 
+                    0.16692783182822074, 
+                    0.10738622287116593, 
+                    0.10738622287116593
+                ], 
+                0.5005064606666565
+            ], 
+            [
+                0.9136077761650085, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999082565668101, 
+                    0.999082565668101, 
+                    0.9990757153602822, 
+                    0.9990757153602822, 
+                    0.9990460685457282, 
+                    0.9990460685457282, 
+                    0.998948050497192, 
+                    0.998948050497192, 
+                    0.9417660112408449, 
+                    0.9417660112408449, 
+                    0.868746867468386, 
+                    0.868746867468386, 
+                    0.8032993972441972, 
+                    0.8032993972441972, 
+                    0.743340804120972, 
+                    0.743340804120972, 
+                    0.6863948845144325, 
+                    0.6863948845144325, 
+                    0.6337642938009582, 
+                    0.6337642938009582, 
+                    0.5830310498112714, 
+                    0.5830310498112714, 
+                    0.5356224549059726, 
+                    0.5356224549059726, 
+                    0.4893698583448708, 
+                    0.4893698583448708, 
+                    0.4438046791772383, 
+                    0.4438046791772383, 
+                    0.39810708206678347, 
+                    0.39810708206678347, 
+                    0.35233563071015495, 
+                    0.35233563071015495, 
+                    0.30641593101349696, 
+                    0.30641593101349696, 
+                    0.2603565929546584, 
+                    0.2603565929546584, 
+                    0.2140281424029417, 
+                    0.2140281424029417, 
+                    0.16696392960094722, 
+                    0.16696392960094722, 
+                    0.10744885298132141, 
+                    0.10744885298132141
+                ], 
+                0.5010386109352112
+            ], 
+            [
+                0.9254767894744873, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999181105218258, 
+                    0.9999181105218258, 
+                    0.9994120907871149, 
+                    0.9994120907871149, 
+                    0.9992727738546703, 
+                    0.9992727738546703, 
+                    0.9988751036823627, 
+                    0.9988751036823627, 
+                    0.9415965679895124, 
+                    0.9415965679895124, 
+                    0.8685193550508402, 
+                    0.8685193550508402, 
+                    0.8030184151946682, 
+                    0.8030184151946682, 
+                    0.7430546201356892, 
+                    0.7430546201356892, 
+                    0.6861301358758303, 
+                    0.6861301358758303, 
+                    0.6335901734442783, 
+                    0.6335901734442783, 
+                    0.582956990070413, 
+                    0.582956990070413, 
+                    0.5356425123624323, 
+                    0.5356425123624323, 
+                    0.4894434222480975, 
+                    0.4894434222480975, 
+                    0.44389397031931066, 
+                    0.44389397031931066, 
+                    0.3981955095116827, 
+                    0.3981955095116827, 
+                    0.3524146769014349, 
+                    0.3524146769014349, 
+                    0.3064841552427064, 
+                    0.3064841552427064, 
+                    0.2604138184903029, 
+                    0.2604138184903029, 
+                    0.21407464966858475, 
+                    0.21407464966858475, 
+                    0.1669980008646273, 
+                    0.1669980008646273, 
+                    0.10752068675093686, 
+                    0.10752068675093686
+                ], 
+                0.5013241767883301
+            ], 
+            [
+                0.9375, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990296040817473, 
+                    0.9990296040817473, 
+                    0.9990215566597788, 
+                    0.9990215566597788, 
+                    0.9989884834674778, 
+                    0.9989884834674778, 
+                    0.9988924198566953, 
+                    0.9988924198566953, 
+                    0.9415266857236834, 
+                    0.9415266857236834, 
+                    0.8683013146891887, 
+                    0.8683013146891887, 
+                    0.8027075433847202, 
+                    0.8027075433847202, 
+                    0.742746846554357, 
+                    0.742746846554357, 
+                    0.6858830363060697, 
+                    0.6858830363060697, 
+                    0.6334587405546566, 
+                    0.6334587405546566, 
+                    0.5829425908861641, 
+                    0.5829425908861641, 
+                    0.5357030371177516, 
+                    0.5357030371177516, 
+                    0.48952461632308913, 
+                    0.48952461632308913, 
+                    0.443954154222623, 
+                    0.443954154222623, 
+                    0.39822794505465536, 
+                    0.39822794505465536, 
+                    0.3524193931485394, 
+                    0.3524193931485394, 
+                    0.3064680357291743, 
+                    0.3064680357291743, 
+                    0.2603832027570789, 
+                    0.2603832027570789, 
+                    0.21403563753534213, 
+                    0.21403563753534213, 
+                    0.1669561169787316, 
+                    0.1669561169787316, 
+                    0.10750421135786019, 
+                    0.10750421135786019
+                ], 
+                0.5006321668624878
+            ], 
+            [
+                0.949679434299469, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989901501687765, 
+                    0.9989901501687765, 
+                    0.9989852774997819, 
+                    0.9989852774997819, 
+                    0.998965153666222, 
+                    0.998965153666222, 
+                    0.998901729116616, 
+                    0.998901729116616, 
+                    0.9414750633984494, 
+                    0.9414750633984494, 
+                    0.8681631404454873, 
+                    0.8681631404454873, 
+                    0.8025186934326916, 
+                    0.8025186934326916, 
+                    0.7425730084471722, 
+                    0.7425730084471722, 
+                    0.6857667922121848, 
+                    0.6857667922121848, 
+                    0.6334435598606384, 
+                    0.6334435598606384, 
+                    0.5830312247366033, 
+                    0.5830312247366033, 
+                    0.5358522046730242, 
+                    0.5358522046730242, 
+                    0.48968626445092944, 
+                    0.48968626445092944, 
+                    0.44409129818258863, 
+                    0.44409129818258863, 
+                    0.3983360572067726, 
+                    0.3983360572067726, 
+                    0.3524985759109072, 
+                    0.3524985759109072, 
+                    0.3065241102326203, 
+                    0.3065241102326203, 
+                    0.2604209472773288, 
+                    0.2604209472773288, 
+                    0.21405892862566336, 
+                    0.21405892862566336, 
+                    0.16696651344458266, 
+                    0.16696651344458266, 
+                    0.10755560991046142, 
+                    0.10755560991046142
+                ], 
+                0.5007488131523132
+            ], 
+            [
+                0.9620170593261719, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999002249402247, 
+                    0.999002249402247, 
+                    0.9990000497936469, 
+                    0.9990000497936469, 
+                    0.9989911093988588, 
+                    0.9989911093988588, 
+                    0.998963384263963, 
+                    0.998963384263963, 
+                    0.9414869447004555, 
+                    0.9414869447004555, 
+                    0.868102592943439, 
+                    0.868102592943439, 
+                    0.8024250948725306, 
+                    0.8024250948725306, 
+                    0.742504512578386, 
+                    0.742504512578386, 
+                    0.6857650479323464, 
+                    0.6857650479323464, 
+                    0.6335367655092595, 
+                    0.6335367655092595, 
+                    0.583220098709206, 
+                    0.583220098709206, 
+                    0.5360815976237024, 
+                    0.5360815976237024, 
+                    0.4899095790615149, 
+                    0.4899095790615149, 
+                    0.4442747389350136, 
+                    0.4442747389350136, 
+                    0.39848004832283596, 
+                    0.39848004832283596, 
+                    0.3526062780127155, 
+                    0.3526062780127155, 
+                    0.3066034152769751, 
+                    0.3066034152769751, 
+                    0.2604777631458195, 
+                    0.2604777631458195, 
+                    0.214097554338861, 
+                    0.214097554338861, 
+                    0.1669882071464446, 
+                    0.1669882071464446, 
+                    0.10762562821474228, 
+                    0.10762562821474228
+                ], 
+                0.501175045967102
+            ], 
+            [
+                0.9745149612426758, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989974303614554, 
+                    0.9989974303614554, 
+                    0.9989974303614554, 
+                    0.9989974303614554, 
+                    0.9989974303614554, 
+                    0.9989974303614554, 
+                    0.9989974303614554, 
+                    0.9989974303614554, 
+                    0.9414375025020217, 
+                    0.9414375025020217, 
+                    0.8679240798964689, 
+                    0.8679240798964689, 
+                    0.802151532679216, 
+                    0.802151532679216, 
+                    0.7422091780743455, 
+                    0.7422091780743455, 
+                    0.6854887294769629, 
+                    0.6854887294769629, 
+                    0.6333499091771791, 
+                    0.6333499091771791, 
+                    0.5831289427821416, 
+                    0.5831289427821416, 
+                    0.5360722533382196, 
+                    0.5360722533382196, 
+                    0.48993980409197874, 
+                    0.48993980409197874, 
+                    0.44431089342960545, 
+                    0.44431089342960545, 
+                    0.3985105103167239, 
+                    0.3985105103167239, 
+                    0.35262611031211477, 
+                    0.35262611031211477, 
+                    0.3066131633027342, 
+                    0.3066131633027342, 
+                    0.26047859871798856, 
+                    0.26047859871798856, 
+                    0.21409091174197217, 
+                    0.21409091174197217, 
+                    0.1669746641128298, 
+                    0.1669746641128298, 
+                    0.10766660112155461, 
+                    0.10766660112155461
+                ], 
+                0.5009037852287292
+            ], 
+            [
+                0.9871752262115479, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998816544845743, 
+                    0.9998816544845743, 
+                    0.9998787392193818, 
+                    0.9998787392193818, 
+                    0.9998727410169206, 
+                    0.9998727410169206, 
+                    0.9412284128380147, 
+                    0.9412284128380147, 
+                    0.8676299663678764, 
+                    0.8676299663678764, 
+                    0.8017604017825349, 
+                    0.8017604017825349, 
+                    0.7417633367017584, 
+                    0.7417633367017584, 
+                    0.685000220122421, 
+                    0.685000220122421, 
+                    0.6329348107831384, 
+                    0.6329348107831384, 
+                    0.5828040054559963, 
+                    0.5828040054559963, 
+                    0.5358837452398715, 
+                    0.5358837452398715, 
+                    0.48985601422239883, 
+                    0.48985601422239883, 
+                    0.4442979741456773, 
+                    0.4442979741456773, 
+                    0.3985380042704609, 
+                    0.3985380042704609, 
+                    0.3526752050947846, 
+                    0.3526752050947846, 
+                    0.306671702602425, 
+                    0.306671702602425, 
+                    0.26053848689572895, 
+                    0.26053848689572895, 
+                    0.21414606119482274, 
+                    0.21414606119482274, 
+                    0.167017852930176, 
+                    0.167017852930176, 
+                    0.10778882264084927, 
+                    0.10778882264084927
+                ], 
+                0.5008407831192017
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989483479029853, 
+                    0.9989483479029853, 
+                    0.998936055238711, 
+                    0.998936055238711, 
+                    0.9988880809765167, 
+                    0.9988880809765167, 
+                    0.9987465828421382, 
+                    0.9987465828421382, 
+                    0.9416019208078554, 
+                    0.9416019208078554, 
+                    0.8678922510749076, 
+                    0.8678922510749076, 
+                    0.802003616545672, 
+                    0.802003616545672, 
+                    0.7420394408827342, 
+                    0.7420394408827342, 
+                    0.6853512394861302, 
+                    0.6853512394861302, 
+                    0.6333396759590102, 
+                    0.6333396759590102, 
+                    0.5832446588556326, 
+                    0.5832446588556326, 
+                    0.536298861400098, 
+                    0.536298861400098, 
+                    0.49020237976114023, 
+                    0.49020237976114023, 
+                    0.4445513383690246, 
+                    0.4445513383690246, 
+                    0.3987083277371785, 
+                    0.3987083277371785, 
+                    0.3527776951274988, 
+                    0.3527776951274988, 
+                    0.30672410772001524, 
+                    0.30672410772001524, 
+                    0.2605545609872022, 
+                    0.2605545609872022, 
+                    0.21413637673393268, 
+                    0.21413637673393268, 
+                    0.16699075977065278, 
+                    0.16699075977065278, 
+                    0.10781538896144394, 
+                    0.10781538896144394
+                ], 
+                0.5012696385383606
+            ], 
+            [
+                1.0129913091659546, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990216590391148, 
+                    0.9990216590391148, 
+                    0.9990143450673249, 
+                    0.9990143450673249, 
+                    0.9989862847996146, 
+                    0.9989862847996146, 
+                    0.9989049247430335, 
+                    0.9989049247430335, 
+                    0.941721300073482, 
+                    0.941721300073482, 
+                    0.8678576034311756, 
+                    0.8678576034311756, 
+                    0.8018532064408951, 
+                    0.8018532064408951, 
+                    0.7418388177119064, 
+                    0.7418388177119064, 
+                    0.6851437162935494, 
+                    0.6851437162935494, 
+                    0.6332020897890986, 
+                    0.6332020897890986, 
+                    0.5831885379713044, 
+                    0.5831885379713044, 
+                    0.5363125325587634, 
+                    0.5363125325587634, 
+                    0.4902471191933629, 
+                    0.4902471191933629, 
+                    0.4445982921265442, 
+                    0.4445982921265442, 
+                    0.3987488261819507, 
+                    0.3987488261819507, 
+                    0.35280771408595424, 
+                    0.35280771408595424, 
+                    0.30674372209898493, 
+                    0.30674372209898493, 
+                    0.2605640375881469, 
+                    0.2605640375881469, 
+                    0.21413599479652376, 
+                    0.21413599479652376, 
+                    0.16697964813916374, 
+                    0.16697964813916374, 
+                    0.10788995476037061, 
+                    0.10788995476037061
+                ], 
+                0.5012350082397461
+            ], 
+            [
+                1.0261515378952026, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999139666875873, 
+                    0.999139666875873, 
+                    0.999139666875873, 
+                    0.999139666875873, 
+                    0.999139666875873, 
+                    0.999139666875873, 
+                    0.999139666875873, 
+                    0.999139666875873, 
+                    0.9419128908081803, 
+                    0.9419128908081803, 
+                    0.8678753929828454, 
+                    0.8678753929828454, 
+                    0.8017382924522012, 
+                    0.8017382924522012, 
+                    0.7416576892605191, 
+                    0.7416576892605191, 
+                    0.6849442879367794, 
+                    0.6849442879367794, 
+                    0.6330666481780718, 
+                    0.6330666481780718, 
+                    0.5831320900901859, 
+                    0.5831320900901859, 
+                    0.5363228199883014, 
+                    0.5363228199883014, 
+                    0.4902873427193902, 
+                    0.4902873427193902, 
+                    0.44464146438688495, 
+                    0.44464146438688495, 
+                    0.39878722256047067, 
+                    0.39878722256047067, 
+                    0.35283710301800436, 
+                    0.35283710301800436, 
+                    0.30676357529183773, 
+                    0.30676357529183773, 
+                    0.26057397420558964, 
+                    0.26057397420558964, 
+                    0.21413567339219777, 
+                    0.21413567339219777, 
+                    0.16696754958001667, 
+                    0.16696754958001667, 
+                    0.10797715899902283, 
+                    0.10797715899902283
+                ], 
+                0.5012571811676025
+            ], 
+            [
+                1.039482593536377, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991904299691395, 
+                    0.9991904299691395, 
+                    0.9991763431148326, 
+                    0.9991763431148326, 
+                    0.9991135748868628, 
+                    0.9991135748868628, 
+                    0.9989636879048664, 
+                    0.9989636879048664, 
+                    0.9420711255865143, 
+                    0.9420711255865143, 
+                    0.8677949298642826, 
+                    0.8677949298642826, 
+                    0.8014601596422876, 
+                    0.8014601596422876, 
+                    0.7412590893641599, 
+                    0.7412590893641599, 
+                    0.6844678557807238, 
+                    0.6844678557807238, 
+                    0.6326490951084071, 
+                    0.6326490951084071, 
+                    0.5827907127641739, 
+                    0.5827907127641739, 
+                    0.536104708059868, 
+                    0.536104708059868, 
+                    0.4901537983508777, 
+                    0.4901537983508777, 
+                    0.44455995174288077, 
+                    0.44455995174288077, 
+                    0.3987320797692701, 
+                    0.3987320797692701, 
+                    0.35279481497920956, 
+                    0.35279481497920956, 
+                    0.30672617560729065, 
+                    0.30672617560729065, 
+                    0.26053678279609105, 
+                    0.26053678279609105, 
+                    0.21409601303302353, 
+                    0.21409601303302353, 
+                    0.16692379894026513, 
+                    0.16692379894026513, 
+                    0.10804375723042599, 
+                    0.10804375723042599
+                ], 
+                0.5005819797515869
+            ], 
+            [
+                1.052986979484558, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993589411216476, 
+                    0.9993589411216476, 
+                    0.9993589411216476, 
+                    0.9993589411216476, 
+                    0.9993589411216476, 
+                    0.9993589411216476, 
+                    0.9993589411216476, 
+                    0.9993589411216476, 
+                    0.9424406718448322, 
+                    0.9424406718448322, 
+                    0.8679307247577902, 
+                    0.8679307247577902, 
+                    0.8014140443502356, 
+                    0.8014140443502356, 
+                    0.741103858859548, 
+                    0.741103858859548, 
+                    0.6842659371769647, 
+                    0.6842659371769647, 
+                    0.6325002568323408, 
+                    0.6325002568323408, 
+                    0.582718562901027, 
+                    0.582718562901027, 
+                    0.536096822870133, 
+                    0.536096822870133, 
+                    0.4901768520942429, 
+                    0.4901768520942429, 
+                    0.4445899546451699, 
+                    0.4445899546451699, 
+                    0.39876245959220913, 
+                    0.39876245959220913, 
+                    0.352820249215099, 
+                    0.352820249215099, 
+                    0.30674444567006276, 
+                    0.30674444567006276, 
+                    0.2605458622403966, 
+                    0.2605458622403966, 
+                    0.21409409496685655, 
+                    0.21409409496685655, 
+                    0.16690794434288286, 
+                    0.16690794434288286, 
+                    0.10815996436584627, 
+                    0.10815996436584627
+                ], 
+                0.5006412267684937
+            ], 
+            [
+                1.0666667222976685, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995632755150199, 
+                    0.9995632755150199, 
+                    0.9995632755150199, 
+                    0.9995632755150199, 
+                    0.9995632755150199, 
+                    0.9995632755150199, 
+                    0.9995632755150199, 
+                    0.9995632755150199, 
+                    0.9429232374142147, 
+                    0.9429232374142147, 
+                    0.8681398650569008, 
+                    0.8681398650569008, 
+                    0.8014104488595799, 
+                    0.8014104488595799, 
+                    0.7409611085434701, 
+                    0.7409611085434701, 
+                    0.6840516609546982, 
+                    0.6840516609546982, 
+                    0.6323279111953459, 
+                    0.6323279111953459, 
+                    0.582615235913276, 
+                    0.582615235913276, 
+                    0.5360620653748016, 
+                    0.5360620653748016, 
+                    0.4901796890377989, 
+                    0.4901796890377989, 
+                    0.44460734047263956, 
+                    0.44460734047263956, 
+                    0.3987852892264993, 
+                    0.3987852892264993, 
+                    0.3528415580258472, 
+                    0.3528415580258472, 
+                    0.3067603437983958, 
+                    0.3067603437983958, 
+                    0.26055312537296277, 
+                    0.26055312537296277, 
+                    0.21409002263597318, 
+                    0.21409002263597318, 
+                    0.16688901130432274, 
+                    0.16688901130432274, 
+                    0.10829133352797675, 
+                    0.10829133352797675
+                ], 
+                0.5006760358810425
+            ], 
+            [
+                1.0805240869522095, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998461217032344, 
+                    0.9998461217032344, 
+                    0.9998461217032344, 
+                    0.9998461217032344, 
+                    0.9998461217032344, 
+                    0.9998461217032344, 
+                    0.9998461217032344, 
+                    0.9998461217032344, 
+                    0.9435636120352179, 
+                    0.9435636120352179, 
+                    0.8684584747650305, 
+                    0.8684584747650305, 
+                    0.8014845619078925, 
+                    0.8014845619078925, 
+                    0.7408723239694203, 
+                    0.7408723239694203, 
+                    0.6838843673770435, 
+                    0.6838843673770435, 
+                    0.6321947947763089, 
+                    0.6321947947763089, 
+                    0.5825500739895225, 
+                    0.5825500739895225, 
+                    0.5360503957047926, 
+                    0.5360503957047926, 
+                    0.49019616338717525, 
+                    0.49019616338717525, 
+                    0.4446330939239845, 
+                    0.4446330939239845, 
+                    0.39881567545954716, 
+                    0.39881567545954716, 
+                    0.3528702985074165, 
+                    0.3528702985074165, 
+                    0.30678346750714425, 
+                    0.30678346750714425, 
+                    0.26056681616943356, 
+                    0.26056681616943356, 
+                    0.214090826174884, 
+                    0.214090826174884, 
+                    0.16687236573143635, 
+                    0.16687236573143635, 
+                    0.10844765779871543, 
+                    0.10844765779871543
+                ], 
+                0.5008102059364319
+            ], 
+            [
+                1.0945615768432617, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999919026206502, 
+                    0.9999919026206502, 
+                    0.9997976038374404, 
+                    0.9997976038374404, 
+                    0.9997976038374404, 
+                    0.9997976038374404, 
+                    0.9997976038374404, 
+                    0.9997976038374404, 
+                    0.9430878735418167, 
+                    0.9430878735418167, 
+                    0.8679138426954641, 
+                    0.8679138426954641, 
+                    0.8008436794927428, 
+                    0.8008436794927428, 
+                    0.7401359856597522, 
+                    0.7401359856597522, 
+                    0.6830350554608278, 
+                    0.6830350554608278, 
+                    0.6314560684329954, 
+                    0.6314560684329954, 
+                    0.5819778155459476, 
+                    0.5819778155459476, 
+                    0.5357550664327843, 
+                    0.5357550664327843, 
+                    0.49015214954809994, 
+                    0.49015214954809994, 
+                    0.4447906940352742, 
+                    0.4447906940352742, 
+                    0.39910733417369365, 
+                    0.39910733417369365, 
+                    0.35324257577802265, 
+                    0.35324257577802265, 
+                    0.30719333507415547, 
+                    0.30719333507415547, 
+                    0.26098102968735726, 
+                    0.26098102968735726, 
+                    0.21448021173298185, 
+                    0.21448021173298185, 
+                    0.1672003907727801, 
+                    0.1672003907727801, 
+                    0.10903333978718696, 
+                    0.10903333978718696
+                ], 
+                0.5007784962654114
+            ], 
+            [
+                1.1087814569473267, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997974977700812, 
+                    0.9997974977700812, 
+                    0.9992439936454284, 
+                    0.9992439936454284, 
+                    0.9992439936454284, 
+                    0.9992439936454284, 
+                    0.9992439936454284, 
+                    0.9992439936454284, 
+                    0.9409836273352278, 
+                    0.9409836273352278, 
+                    0.8660919937405892, 
+                    0.8660919937405892, 
+                    0.7991956569617193, 
+                    0.7991956569617193, 
+                    0.7385513004053873, 
+                    0.7385513004053873, 
+                    0.681378891780457, 
+                    0.681378891780457, 
+                    0.6299954151438958, 
+                    0.6299954151438958, 
+                    0.5808081331682811, 
+                    0.5808081331682811, 
+                    0.5351069719285024, 
+                    0.5351069719285024, 
+                    0.4900104672448347, 
+                    0.4900104672448347, 
+                    0.44506901957249595, 
+                    0.44506901957249595, 
+                    0.39966819595310554, 
+                    0.39966819595310554, 
+                    0.3539796950235723, 
+                    0.3539796950235723, 
+                    0.30802051346641324, 
+                    0.30802051346641324, 
+                    0.2618322960091253, 
+                    0.2618322960091253, 
+                    0.21529762825631796, 
+                    0.21529762825631796, 
+                    0.1679114897328777, 
+                    0.1679114897328777, 
+                    0.11009307823824921, 
+                    0.11009307823824921
+                ], 
+                0.500313401222229
+            ], 
+            [
+                1.1231861114501953, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9981413558068404, 
+                    0.9981413558068404, 
+                    0.9979729775482395, 
+                    0.9979729775482395, 
+                    0.9977352871221871, 
+                    0.9977352871221871, 
+                    0.9374661590841205, 
+                    0.9374661590841205, 
+                    0.8633653092055741, 
+                    0.8633653092055741, 
+                    0.7970311314786072, 
+                    0.7970311314786072, 
+                    0.7366752124377844, 
+                    0.7366752124377844, 
+                    0.6795792446334129, 
+                    0.6795792446334129, 
+                    0.6284118299152012, 
+                    0.6284118299152012, 
+                    0.5795809480120638, 
+                    0.5795809480120638, 
+                    0.5344900665838295, 
+                    0.5344900665838295, 
+                    0.49003091518070935, 
+                    0.49003091518070935, 
+                    0.445628469798253, 
+                    0.445628469798253, 
+                    0.4005959171858791, 
+                    0.4005959171858791, 
+                    0.35513810907863647, 
+                    0.35513810907863647, 
+                    0.309296522755683, 
+                    0.309296522755683, 
+                    0.26313727041678775, 
+                    0.26313727041678775, 
+                    0.21655174574397446, 
+                    0.21655174574397446, 
+                    0.16901355989153452, 
+                    0.16901355989153452, 
+                    0.11160559012616254, 
+                    0.11160559012616254
+                ], 
+                0.5004891753196716
+            ], 
+            [
+                1.1377778053283691, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9962199582144277, 
+                    0.9962199582144277, 
+                    0.9957689610966028, 
+                    0.9957689610966028, 
+                    0.9954060667587314, 
+                    0.9954060667587314, 
+                    0.9299995888572621, 
+                    0.9299995888572621, 
+                    0.857845799720121, 
+                    0.857845799720121, 
+                    0.7932758145683916, 
+                    0.7932758145683916, 
+                    0.7338699037279894, 
+                    0.7338699037279894, 
+                    0.6771926525221234, 
+                    0.6771926525221234, 
+                    0.6261096290158322, 
+                    0.6261096290158322, 
+                    0.5777253926552435, 
+                    0.5777253926552435, 
+                    0.533496239955634, 
+                    0.533496239955634, 
+                    0.4900781838886808, 
+                    0.4900781838886808, 
+                    0.4465763501713165, 
+                    0.4465763501713165, 
+                    0.4021629375656991, 
+                    0.4021629375656991, 
+                    0.35709796382968173, 
+                    0.35709796382968173, 
+                    0.31146347896013055, 
+                    0.31146347896013055, 
+                    0.26536542332246765, 
+                    0.26536542332246765, 
+                    0.21870713124613456, 
+                    0.21870713124613456, 
+                    0.17091765684622431, 
+                    0.17091765684622431, 
+                    0.11410399164143119, 
+                    0.11410399164143119
+                ], 
+                0.5005369782447815
+            ]
+        ]
+    }, 
+    {
+        "block_size": 46, 
+        "preprocessing_block_sizes": [
+            10
+        ], 
+        "pruning_parameters": [
+            [
+                0.8812994360923767, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.92862681014878, 
+                    0.92862681014878, 
+                    0.8664942430160476, 
+                    0.8664942430160476, 
+                    0.8103234222288087, 
+                    0.8103234222288087, 
+                    0.757757535770149, 
+                    0.757757535770149, 
+                    0.7075357939817652, 
+                    0.7075357939817652, 
+                    0.6588903528669858, 
+                    0.6588903528669858, 
+                    0.6113904301733389, 
+                    0.6113904301733389, 
+                    0.5646988773876181, 
+                    0.5646988773876181, 
+                    0.5186688745602412, 
+                    0.5186688745602412, 
+                    0.47317627447222005, 
+                    0.47317627447222005, 
+                    0.42805690351834474, 
+                    0.42805690351834474, 
+                    0.383200988491973, 
+                    0.383200988491973, 
+                    0.3385496476470553, 
+                    0.3385496476470553, 
+                    0.29402890532757897, 
+                    0.29402890532757897, 
+                    0.2495407448701881, 
+                    0.2495407448701881, 
+                    0.20490883909798022, 
+                    0.20490883909798022, 
+                    0.1596936609993079, 
+                    0.1596936609993079, 
+                    0.10623497162145895, 
+                    0.10623497162145895
+                ], 
+                0.5010425448417664
+            ], 
+            [
+                0.8925060033798218, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9286357118738292, 
+                    0.9286357118738292, 
+                    0.866494629867261, 
+                    0.866494629867261, 
+                    0.8103107988344118, 
+                    0.8103107988344118, 
+                    0.7577282570422513, 
+                    0.7577282570422513, 
+                    0.707493032075564, 
+                    0.707493032075564, 
+                    0.658834891370876, 
+                    0.658834891370876, 
+                    0.6113292258307041, 
+                    0.6113292258307041, 
+                    0.564632789969614, 
+                    0.564632789969614, 
+                    0.5186065129369186, 
+                    0.5186065129369186, 
+                    0.4731259864561754, 
+                    0.4731259864561754, 
+                    0.4280183092830955, 
+                    0.4280183092830955, 
+                    0.38317107755448016, 
+                    0.38317107755448016, 
+                    0.33852675637003343, 
+                    0.33852675637003343, 
+                    0.2940112056279505, 
+                    0.2940112056279505, 
+                    0.24952668380282383, 
+                    0.24952668380282383, 
+                    0.20489749188121315, 
+                    0.20489749188121315, 
+                    0.15968463906775424, 
+                    0.15968463906775424, 
+                    0.10623185640076631, 
+                    0.10623185640076631
+                ], 
+                0.5008963346481323
+            ], 
+            [
+                0.9038550853729248, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9286457741965646, 
+                    0.9286457741965646, 
+                    0.8664944400611089, 
+                    0.8664944400611089, 
+                    0.8102950043358882, 
+                    0.8102950043358882, 
+                    0.7576927671573052, 
+                    0.7576927671573052, 
+                    0.7074419972052156, 
+                    0.7074419972052156, 
+                    0.6587695006627905, 
+                    0.6587695006627905, 
+                    0.6112578126753248, 
+                    0.6112578126753248, 
+                    0.5645564557650223, 
+                    0.5645564557650223, 
+                    0.5185351137399966, 
+                    0.5185351137399966, 
+                    0.47306871288098423, 
+                    0.47306871288098423, 
+                    0.4279744559081048, 
+                    0.4279744559081048, 
+                    0.38313714269043003, 
+                    0.38313714269043003, 
+                    0.3385007814512088, 
+                    0.3385007814512088, 
+                    0.29399108736766816, 
+                    0.29399108736766816, 
+                    0.24951066872357805, 
+                    0.24951066872357805, 
+                    0.20488454153293117, 
+                    0.20488454153293117, 
+                    0.15967432507091492, 
+                    0.15967432507091492, 
+                    0.10622829038596679, 
+                    0.10622829038596679
+                ], 
+                0.5007268190383911
+            ], 
+            [
+                0.915348470211029, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9286571201191861, 
+                    0.9286571201191861, 
+                    0.8664934374016622, 
+                    0.8664934374016622, 
+                    0.8102752870314988, 
+                    0.8102752870314988, 
+                    0.7576497694634852, 
+                    0.7576497694634852, 
+                    0.7073810996525371, 
+                    0.7073810996525371, 
+                    0.6586924059943259, 
+                    0.6586924059943259, 
+                    0.6111744821239571, 
+                    0.6111744821239571, 
+                    0.5644682712392387, 
+                    0.5644682712392387, 
+                    0.5184533430898255, 
+                    0.5184533430898255, 
+                    0.4730034533066341, 
+                    0.4730034533066341, 
+                    0.4279245964587642, 
+                    0.4279245964587642, 
+                    0.3830986137431163, 
+                    0.3830986137431163, 
+                    0.3384712816731314, 
+                    0.3384712816731314, 
+                    0.293968198647217, 
+                    0.293968198647217, 
+                    0.24949241078879247, 
+                    0.24949241078879247, 
+                    0.20486974786865517, 
+                    0.20486974786865517, 
+                    0.1596625234222955, 
+                    0.1596625234222955, 
+                    0.10622420481253124, 
+                    0.10622420481253124
+                ], 
+                0.5005301833152771
+            ], 
+            [
+                0.9269880056381226, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999994279880028, 
+                    0.9999994279880028, 
+                    0.9999994279880028, 
+                    0.9999994279880028, 
+                    0.9999994279880028, 
+                    0.9999994279880028, 
+                    0.9287905096438271, 
+                    0.9287905096438271, 
+                    0.8667914229728721, 
+                    0.8667914229728721, 
+                    0.8106355378369531, 
+                    0.8106355378369531, 
+                    0.7580016368053636, 
+                    0.7580016368053636, 
+                    0.7077002075425574, 
+                    0.7077002075425574, 
+                    0.6589686447120106, 
+                    0.6589686447120106, 
+                    0.6114164424876882, 
+                    0.6114164424876882, 
+                    0.5646784667174156, 
+                    0.5646784667174156, 
+                    0.5186471949975906, 
+                    0.5186471949975906, 
+                    0.47319501169902883, 
+                    0.47319501169902883, 
+                    0.4281147851523294, 
+                    0.4281147851523294, 
+                    0.3832845345303663, 
+                    0.3832845345303663, 
+                    0.33865143145912063, 
+                    0.33865143145912063, 
+                    0.2941402398686012, 
+                    0.2941402398686012, 
+                    0.24965350545795023, 
+                    0.24965350545795023, 
+                    0.20501625651087188, 
+                    0.20501625651087188, 
+                    0.15978733691406174, 
+                    0.15978733691406174, 
+                    0.10635920024061966, 
+                    0.10635920024061966
+                ], 
+                0.5015957355499268
+            ], 
+            [
+                0.9387755393981934, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999992764920055, 
+                    0.9999992764920055, 
+                    0.9999992764920055, 
+                    0.9999992764920055, 
+                    0.9999992764920055, 
+                    0.9999992764920055, 
+                    0.9288047151562195, 
+                    0.9288047151562195, 
+                    0.8667881033316449, 
+                    0.8667881033316449, 
+                    0.8106053398921844, 
+                    0.8106053398921844, 
+                    0.7579387888700352, 
+                    0.7579387888700352, 
+                    0.7076135091159726, 
+                    0.7076135091159726, 
+                    0.6588612584089267, 
+                    0.6588612584089267, 
+                    0.6113025767974088, 
+                    0.6113025767974088, 
+                    0.5645602863094741, 
+                    0.5645602863094741, 
+                    0.5185394631370017, 
+                    0.5185394631370017, 
+                    0.4731099144543069, 
+                    0.4731099144543069, 
+                    0.4280501235896522, 
+                    0.4280501235896522, 
+                    0.383234805607857, 
+                    0.383234805607857, 
+                    0.33861344390412335, 
+                    0.33861344390412335, 
+                    0.29411077117493273, 
+                    0.29411077117493273, 
+                    0.24962999780164313, 
+                    0.24962999780164313, 
+                    0.20499720867506122, 
+                    0.20499720867506122, 
+                    0.15977214328737802, 
+                    0.15977214328737802, 
+                    0.10635412567293365, 
+                    0.10635412567293365
+                ], 
+                0.5013307332992554
+            ], 
+            [
+                0.9507129192352295, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999990846682101, 
+                    0.9999990846682101, 
+                    0.9999990846682101, 
+                    0.9999990846682101, 
+                    0.9999990846682101, 
+                    0.9999990846682101, 
+                    0.9288205273521235, 
+                    0.9288205273521235, 
+                    0.8667827740589785, 
+                    0.8667827740589785, 
+                    0.8105677930464098, 
+                    0.8105677930464098, 
+                    0.7578627184186085, 
+                    0.7578627184186085, 
+                    0.7075101029467645, 
+                    0.7075101029467645, 
+                    0.6587346741644736, 
+                    0.6587346741644736, 
+                    0.6111697004189819, 
+                    0.6111697004189819, 
+                    0.5644237148728041, 
+                    0.5644237148728041, 
+                    0.5184159982655767, 
+                    0.5184159982655767, 
+                    0.47301284357216605, 
+                    0.47301284357216605, 
+                    0.4279764996406256, 
+                    0.4279764996406256, 
+                    0.38317824544139695, 
+                    0.38317824544139695, 
+                    0.3385702151481304, 
+                    0.3385702151481304, 
+                    0.29407717555499163, 
+                    0.29407717555499163, 
+                    0.24960314439765058, 
+                    0.24960314439765058, 
+                    0.20497540863072347, 
+                    0.20497540863072347, 
+                    0.15975472731474002, 
+                    0.15975472731474002, 
+                    0.10634831049828569, 
+                    0.10634831049828569
+                ], 
+                0.5010225772857666
+            ], 
+            [
+                0.9628021717071533, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999988416788336, 
+                    0.9999988416788336, 
+                    0.9999988416788336, 
+                    0.9999988416788336, 
+                    0.9999988416788336, 
+                    0.9999988416788336, 
+                    0.9288380324360334, 
+                    0.9288380324360334, 
+                    0.8667747740582166, 
+                    0.8667747740582166, 
+                    0.8105211879305121, 
+                    0.8105211879305121, 
+                    0.7577706884438042, 
+                    0.7577706884438042, 
+                    0.7073867994879196, 
+                    0.7073867994879196, 
+                    0.6585854795784555, 
+                    0.6585854795784555, 
+                    0.6110146424351364, 
+                    0.6110146424351364, 
+                    0.5642658772975814, 
+                    0.5642658772975814, 
+                    0.5182744710818749, 
+                    0.5182744710818749, 
+                    0.4729020701557565, 
+                    0.4729020701557565, 
+                    0.42789262592529437, 
+                    0.42789262592529437, 
+                    0.38311387246632544, 
+                    0.38311387246632544, 
+                    0.33852098344084514, 
+                    0.33852098344084514, 
+                    0.2940388430712043, 
+                    0.2940388430712043, 
+                    0.2495724432424851, 
+                    0.2495724432424851, 
+                    0.20495043821760084, 
+                    0.20495043821760084, 
+                    0.15973474805584764, 
+                    0.15973474805584764, 
+                    0.10634164158740526, 
+                    0.10634164158740526
+                ], 
+                0.5006639957427979
+            ], 
+            [
+                0.9750450849533081, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999706131941187, 
+                    0.9999706131941187, 
+                    0.9999706131941187, 
+                    0.9999706131941187, 
+                    0.9999706131941187, 
+                    0.9999706131941187, 
+                    0.9999706131941187, 
+                    0.9999706131941187, 
+                    0.9289545976364365, 
+                    0.9289545976364365, 
+                    0.867062335455246, 
+                    0.867062335455246, 
+                    0.8107938186487569, 
+                    0.8107938186487569, 
+                    0.7579147960292644, 
+                    0.7579147960292644, 
+                    0.7074125511867428, 
+                    0.7074125511867428, 
+                    0.6584903151651658, 
+                    0.6584903151651658, 
+                    0.6108640241568362, 
+                    0.6108640241568362, 
+                    0.564068159655795, 
+                    0.564068159655795, 
+                    0.5181021643198964, 
+                    0.5181021643198964, 
+                    0.4728162523856497, 
+                    0.4728162523856497, 
+                    0.42788601219302563, 
+                    0.42788601219302563, 
+                    0.3831616899056091, 
+                    0.3831616899056091, 
+                    0.3386088421178644, 
+                    0.3386088421178644, 
+                    0.29415141642436093, 
+                    0.29415141642436093, 
+                    0.24969613289643697, 
+                    0.24969613289643697, 
+                    0.20507458224508954, 
+                    0.20507458224508954, 
+                    0.1598475304629057, 
+                    0.1598475304629057, 
+                    0.10647706071710455, 
+                    0.10647706071710455
+                ], 
+                0.5009217858314514
+            ], 
+            [
+                0.987443745136261, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999673651187075, 
+                    0.9999673651187075, 
+                    0.9999673651187075, 
+                    0.9999673651187075, 
+                    0.9999673651187075, 
+                    0.9999673651187075, 
+                    0.9999673651187075, 
+                    0.9999673651187075, 
+                    0.9289703770492557, 
+                    0.9289703770492557, 
+                    0.8670399182791193, 
+                    0.8670399182791193, 
+                    0.8107140658606049, 
+                    0.8107140658606049, 
+                    0.757771424171693, 
+                    0.757771424171693, 
+                    0.7072302985259804, 
+                    0.7072302985259804, 
+                    0.6582789218260274, 
+                    0.6582789218260274, 
+                    0.6106522127290646, 
+                    0.6106522127290646, 
+                    0.563860473229994, 
+                    0.563860473229994, 
+                    0.5179221196819479, 
+                    0.5179221196819479, 
+                    0.47267830406622974, 
+                    0.47267830406622974, 
+                    0.4277827231163692, 
+                    0.4277827231163692, 
+                    0.38308309693704923, 
+                    0.38308309693704923, 
+                    0.33854887917140236, 
+                    0.33854887917140236, 
+                    0.2941045830959397, 
+                    0.2941045830959397, 
+                    0.24965846248320978, 
+                    0.24965846248320978, 
+                    0.2050438029804237, 
+                    0.2050438029804237, 
+                    0.1598227914899271, 
+                    0.1598227914899271, 
+                    0.10646973319472129, 
+                    0.10646973319472129
+                ], 
+                0.5004387497901917
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999943206531028, 
+                    0.9999943206531028, 
+                    0.9999943206531028, 
+                    0.9999943206531028, 
+                    0.9999943206531028, 
+                    0.9999943206531028, 
+                    0.9290693748054427, 
+                    0.9290693748054427, 
+                    0.8671525194738053, 
+                    0.8671525194738053, 
+                    0.810851240655152, 
+                    0.810851240655152, 
+                    0.7579351972788125, 
+                    0.7579351972788125, 
+                    0.7074089872544983, 
+                    0.7074089872544983, 
+                    0.658474425120169, 
+                    0.658474425120169, 
+                    0.6108512302284548, 
+                    0.6108512302284548, 
+                    0.5640651361313128, 
+                    0.5640651361313128, 
+                    0.5181150795628134, 
+                    0.5181150795628134, 
+                    0.4728398751697885, 
+                    0.4728398751697885, 
+                    0.4279123923946283, 
+                    0.4279123923946283, 
+                    0.38318791823169723, 
+                    0.38318791823169723, 
+                    0.3386326893219794, 
+                    0.3386326893219794, 
+                    0.2941715980278899, 
+                    0.2941715980278899, 
+                    0.24971241778822478, 
+                    0.24971241778822478, 
+                    0.20508673130872324, 
+                    0.20508673130872324, 
+                    0.15985491458447504, 
+                    0.15985491458447504, 
+                    0.10651680330540637, 
+                    0.10651680330540637
+                ], 
+                0.5010273456573486
+            ], 
+            [
+                1.0127159357070923, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999592396969346, 
+                    0.9999592396969346, 
+                    0.9999547846526591, 
+                    0.9999547846526591, 
+                    0.9999547846526591, 
+                    0.9999547846526591, 
+                    0.9999547846526591, 
+                    0.9999547846526591, 
+                    0.9291244585317251, 
+                    0.9291244585317251, 
+                    0.8672756988907048, 
+                    0.8672756988907048, 
+                    0.8108847102937009, 
+                    0.8108847102937009, 
+                    0.7577980964438887, 
+                    0.7577980964438887, 
+                    0.7071490870539124, 
+                    0.7071490870539124, 
+                    0.6581037283898523, 
+                    0.6581037283898523, 
+                    0.6104533119344764, 
+                    0.6104533119344764, 
+                    0.563650388937914, 
+                    0.563650388937914, 
+                    0.5177611584999661, 
+                    0.5177611584999661, 
+                    0.4726030223009281, 
+                    0.4726030223009281, 
+                    0.42777603751753734, 
+                    0.42777603751753734, 
+                    0.383121681044951, 
+                    0.383121681044951, 
+                    0.3386183487761454, 
+                    0.3386183487761454, 
+                    0.2941914280987061, 
+                    0.2941914280987061, 
+                    0.24975202814154424, 
+                    0.24975202814154424, 
+                    0.20513589779014463, 
+                    0.20513589779014463, 
+                    0.15990443928894474, 
+                    0.15990443928894474, 
+                    0.10659554471970074, 
+                    0.10659554471970074
+                ], 
+                0.5005187392234802
+            ], 
+            [
+                1.025593638420105, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999958474279547, 
+                    0.999958474279547, 
+                    0.999943632147783, 
+                    0.999943632147783, 
+                    0.999943632147783, 
+                    0.999943632147783, 
+                    0.999943632147783, 
+                    0.999943632147783, 
+                    0.9292591879681525, 
+                    0.9292591879681525, 
+                    0.8675336834392766, 
+                    0.8675336834392766, 
+                    0.811132864207598, 
+                    0.811132864207598, 
+                    0.757960274548504, 
+                    0.757960274548504, 
+                    0.7072379937009265, 
+                    0.7072379937009265, 
+                    0.6581248377573109, 
+                    0.6581248377573109, 
+                    0.6104506892084586, 
+                    0.6104506892084586, 
+                    0.5636332148898263, 
+                    0.5636332148898263, 
+                    0.5177677367697666, 
+                    0.5177677367697666, 
+                    0.472656038708177, 
+                    0.472656038708177, 
+                    0.42786544610551547, 
+                    0.42786544610551547, 
+                    0.38323357280345577, 
+                    0.38323357280345577, 
+                    0.3387439707668577, 
+                    0.3387439707668577, 
+                    0.2943224004451666, 
+                    0.2943224004451666, 
+                    0.2498813847638264, 
+                    0.2498813847638264, 
+                    0.20525749462828807, 
+                    0.20525749462828807, 
+                    0.16000982826673646, 
+                    0.16000982826673646, 
+                    0.10672949503407766, 
+                    0.10672949503407766
+                ], 
+                0.5010505318641663
+            ], 
+            [
+                1.038635015487671, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999788061556677, 
+                    0.9999788061556677, 
+                    0.9999788061556677, 
+                    0.9999788061556677, 
+                    0.9999788061556677, 
+                    0.9999788061556677, 
+                    0.9293732128428472, 
+                    0.9293732128428472, 
+                    0.8676379035358682, 
+                    0.8676379035358682, 
+                    0.8112209879480173, 
+                    0.8112209879480173, 
+                    0.7580280876821207, 
+                    0.7580280876821207, 
+                    0.7072911635726591, 
+                    0.7072911635726591, 
+                    0.6581725922084196, 
+                    0.6581725922084196, 
+                    0.610499662619511, 
+                    0.610499662619511, 
+                    0.5636887806341566, 
+                    0.5636887806341566, 
+                    0.5178289908805392, 
+                    0.5178289908805392, 
+                    0.4727149819694403, 
+                    0.4727149819694403, 
+                    0.42791806805296795, 
+                    0.42791806805296795, 
+                    0.38328024731229365, 
+                    0.38328024731229365, 
+                    0.3387843693523724, 
+                    0.3387843693523724, 
+                    0.2943567389049609, 
+                    0.2943567389049609, 
+                    0.24991019777876375, 
+                    0.24991019777876375, 
+                    0.20528083602048627, 
+                    0.20528083602048627, 
+                    0.1600269542404719, 
+                    0.1600269542404719, 
+                    0.10677251278366441, 
+                    0.10677251278366441
+                ], 
+                0.5013009309768677
+            ], 
+            [
+                1.051842212677002, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999601923345592, 
+                    0.9999601923345592, 
+                    0.9999107298891803, 
+                    0.9999107298891803, 
+                    0.9999107298891803, 
+                    0.9999107298891803, 
+                    0.9999107298891803, 
+                    0.9999107298891803, 
+                    0.9294053150853051, 
+                    0.9294053150853051, 
+                    0.8676981601872871, 
+                    0.8676981601872871, 
+                    0.8111313885269084, 
+                    0.8111313885269084, 
+                    0.7577155206076167, 
+                    0.7577155206076167, 
+                    0.7068406712787048, 
+                    0.7068406712787048, 
+                    0.6576096421950071, 
+                    0.6576096421950071, 
+                    0.6099327111755724, 
+                    0.6099327111755724, 
+                    0.5631313196631669, 
+                    0.5631313196631669, 
+                    0.5173687595630301, 
+                    0.5173687595630301, 
+                    0.47240559770760115, 
+                    0.47240559770760115, 
+                    0.4277320886473847, 
+                    0.4277320886473847, 
+                    0.3831797488422536, 
+                    0.3831797488422536, 
+                    0.33874600890234224, 
+                    0.33874600890234224, 
+                    0.29435910617083855, 
+                    0.29435910617083855, 
+                    0.24993674112092704, 
+                    0.24993674112092704, 
+                    0.20532003218700673, 
+                    0.20532003218700673, 
+                    0.16006891286450586, 
+                    0.16006891286450586, 
+                    0.10685537933410011, 
+                    0.10685537933410011
+                ], 
+                0.5004240870475769
+            ], 
+            [
+                1.06521737575531, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999510812550909, 
+                    0.9999510812550909, 
+                    0.9998226728250367, 
+                    0.9998226728250367, 
+                    0.9998075051823337, 
+                    0.9998075051823337, 
+                    0.9997767020316768, 
+                    0.9997767020316768, 
+                    0.9295093161610202, 
+                    0.9295093161610202, 
+                    0.8679782885874804, 
+                    0.8679782885874804, 
+                    0.811310375369005, 
+                    0.811310375369005, 
+                    0.7576619844810432, 
+                    0.7576619844810432, 
+                    0.7066283920053498, 
+                    0.7066283920053498, 
+                    0.6572605420115658, 
+                    0.6572605420115658, 
+                    0.6095649508960668, 
+                    0.6095649508960668, 
+                    0.5627631456004376, 
+                    0.5627631456004376, 
+                    0.5170954966565465, 
+                    0.5170954966565465, 
+                    0.47228244823686993, 
+                    0.47228244823686993, 
+                    0.4277290225182328, 
+                    0.4277290225182328, 
+                    0.38325670700157694, 
+                    0.38325670700157694, 
+                    0.338877888839276, 
+                    0.338877888839276, 
+                    0.2945228413141644, 
+                    0.2945228413141644, 
+                    0.25011396986839257, 
+                    0.25011396986839257, 
+                    0.20549627601025505, 
+                    0.20549627601025505, 
+                    0.16022754314475515, 
+                    0.16022754314475515, 
+                    0.10706326806321281, 
+                    0.10706326806321281
+                ], 
+                0.5004600882530212
+            ], 
+            [
+                1.0787626504898071, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999284514659919, 
+                    0.9999284514659919, 
+                    0.9999284514659919, 
+                    0.9999284514659919, 
+                    0.9999284514659919, 
+                    0.9999284514659919, 
+                    0.9297309844123312, 
+                    0.9297309844123312, 
+                    0.8682180972316684, 
+                    0.8682180972316684, 
+                    0.8115627232706718, 
+                    0.8115627232706718, 
+                    0.7579175045185695, 
+                    0.7579175045185695, 
+                    0.7068760536030378, 
+                    0.7068760536030378, 
+                    0.6575115909658504, 
+                    0.6575115909658504, 
+                    0.6098108699584217, 
+                    0.6098108699584217, 
+                    0.5630128603221364, 
+                    0.5630128603221364, 
+                    0.5173321150507397, 
+                    0.5173321150507397, 
+                    0.4724846510879001, 
+                    0.4724846510879001, 
+                    0.42789752667202813, 
+                    0.42789752667202813, 
+                    0.3833995613575832, 
+                    0.3833995613575832, 
+                    0.3389985755564722, 
+                    0.3389985755564722, 
+                    0.29462506203924893, 
+                    0.29462506203924893, 
+                    0.2502006810755329, 
+                    0.2502006810755329, 
+                    0.20556843479836118, 
+                    0.20556843479836118, 
+                    0.16028360504508327, 
+                    0.16028360504508327, 
+                    0.10715708896562103, 
+                    0.10715708896562103
+                ], 
+                0.5013105869293213
+            ], 
+            [
+                1.092480182647705, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998883096467981, 
+                    0.9998883096467981, 
+                    0.9998856456750917, 
+                    0.9998856456750917, 
+                    0.999880645075345, 
+                    0.999880645075345, 
+                    0.9298300633426412, 
+                    0.9298300633426412, 
+                    0.8683598641687905, 
+                    0.8683598641687905, 
+                    0.8115643015589787, 
+                    0.8115643015589787, 
+                    0.7577134867473154, 
+                    0.7577134867473154, 
+                    0.7065520238166428, 
+                    0.7065520238166428, 
+                    0.6570993544250603, 
+                    0.6570993544250603, 
+                    0.609408487650335, 
+                    0.609408487650335, 
+                    0.5626371247504377, 
+                    0.5626371247504377, 
+                    0.5170515880548633, 
+                    0.5170515880548633, 
+                    0.4723309722564594, 
+                    0.4723309722564594, 
+                    0.42784231543399565, 
+                    0.42784231543399565, 
+                    0.3834107592558669, 
+                    0.3834107592558669, 
+                    0.3390552262230399, 
+                    0.3390552262230399, 
+                    0.29470875943546504, 
+                    0.29470875943546504, 
+                    0.2502973682068603, 
+                    0.2502973682068603, 
+                    0.20566744327936848, 
+                    0.20566744327936848, 
+                    0.16037392657216878, 
+                    0.16037392657216878, 
+                    0.1073019302148996, 
+                    0.1073019302148996
+                ], 
+                0.5009750127792358
+            ], 
+            [
+                1.1063719987869263, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999978804244869, 
+                    0.9999978804244869, 
+                    0.9996319937370928, 
+                    0.9996319937370928, 
+                    0.9995989250262821, 
+                    0.9995989250262821, 
+                    0.9995254103578235, 
+                    0.9995254103578235, 
+                    0.9297925848478883, 
+                    0.9297925848478883, 
+                    0.8685737736203787, 
+                    0.8685737736203787, 
+                    0.8115367158466356, 
+                    0.8115367158466356, 
+                    0.7572529971369872, 
+                    0.7572529971369872, 
+                    0.7058347321350166, 
+                    0.7058347321350166, 
+                    0.6561742295063224, 
+                    0.6561742295063224, 
+                    0.608499829035048, 
+                    0.608499829035048, 
+                    0.5617776398579334, 
+                    0.5617776398579334, 
+                    0.5164094344934665, 
+                    0.5164094344934665, 
+                    0.471993876012952, 
+                    0.471993876012952, 
+                    0.42774546809102193, 
+                    0.42774546809102193, 
+                    0.38347542015463293, 
+                    0.38347542015463293, 
+                    0.3392314031692089, 
+                    0.3392314031692089, 
+                    0.29495214843488426, 
+                    0.29495214843488426, 
+                    0.25057356272041076, 
+                    0.25057356272041076, 
+                    0.20594979776489522, 
+                    0.20594979776489522, 
+                    0.16063287217445554, 
+                    0.16063287217445554, 
+                    0.10764127487523588, 
+                    0.10764127487523588
+                ], 
+                0.5002871751785278
+            ], 
+            [
+                1.1204406023025513, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999768609043105, 
+                    0.999768609043105, 
+                    0.999768609043105, 
+                    0.999768609043105, 
+                    0.999768609043105, 
+                    0.999768609043105, 
+                    0.9300261972695841, 
+                    0.9300261972695841, 
+                    0.8687965989695042, 
+                    0.8687965989695042, 
+                    0.8117022930267626, 
+                    0.8117022930267626, 
+                    0.7573492486297593, 
+                    0.7573492486297593, 
+                    0.7058844218678557, 
+                    0.7058844218678557, 
+                    0.6562075879325726, 
+                    0.6562075879325726, 
+                    0.6085375614593779, 
+                    0.6085375614593779, 
+                    0.5618384297084598, 
+                    0.5618384297084598, 
+                    0.5164934677667359, 
+                    0.5164934677667359, 
+                    0.4720871763211135, 
+                    0.4720871763211135, 
+                    0.42784153033783584, 
+                    0.42784153033783584, 
+                    0.3835727382015548, 
+                    0.3835727382015548, 
+                    0.3393262833626253, 
+                    0.3393262833626253, 
+                    0.29504203954676295, 
+                    0.29504203954676295, 
+                    0.2506565923242954, 
+                    0.2506565923242954, 
+                    0.2060234727640995, 
+                    0.2060234727640995, 
+                    0.16069291731846438, 
+                    0.16069291731846438, 
+                    0.1077623858053926, 
+                    0.1077623858053926
+                ], 
+                0.5007515549659729
+            ], 
+            [
+                1.134688138961792, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9994921931389235, 
+                    0.9994921931389235, 
+                    0.9988252506965752, 
+                    0.9988252506965752, 
+                    0.9983370667157473, 
+                    0.9983370667157473, 
+                    0.9980832399075912, 
+                    0.9980832399075912, 
+                    0.9612619109277877, 
+                    0.9612619109277877, 
+                    0.8873914830403707, 
+                    0.8873914830403707, 
+                    0.8195480725238965, 
+                    0.8195480725238965, 
+                    0.7575196406159703, 
+                    0.7575196406159703, 
+                    0.7022572448956126, 
+                    0.7022572448956126, 
+                    0.6501365891476455, 
+                    0.6501365891476455, 
+                    0.602417590193898, 
+                    0.602417590193898, 
+                    0.5558896379602438, 
+                    0.5558896379602438, 
+                    0.5121566188789559, 
+                    0.5121566188789559, 
+                    0.47007195008652075, 
+                    0.47007195008652075, 
+                    0.4275716472762675, 
+                    0.4275716472762675, 
+                    0.38445646485404944, 
+                    0.38445646485404944, 
+                    0.3410557323041169, 
+                    0.3410557323041169, 
+                    0.29735547964731085, 
+                    0.29735547964731085, 
+                    0.25336837831986564, 
+                    0.25336837831986564, 
+                    0.20900029712518928, 
+                    0.20900029712518928, 
+                    0.1637707239216194, 
+                    0.1637707239216194, 
+                    0.10696171051786128, 
+                    0.10696171051786128
+                ], 
+                0.5005256533622742
+            ]
+        ]
+    }, 
+    {
+        "block_size": 47, 
+        "preprocessing_block_sizes": [
+            20
+        ], 
+        "pruning_parameters": [
+            [
+                0.8835999965667725, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9286295365862763, 
+                    0.9286295365862763, 
+                    0.8664629115543064, 
+                    0.8664629115543064, 
+                    0.8102472355831982, 
+                    0.8102472355831982, 
+                    0.7576530302490978, 
+                    0.7576530302490978, 
+                    0.7073823888915034, 
+                    0.7073823888915034, 
+                    0.6587410161822258, 
+                    0.6587410161822258, 
+                    0.6112437319303586, 
+                    0.6112437319303586, 
+                    0.5646204468344536, 
+                    0.5646204468344536, 
+                    0.518649470411105, 
+                    0.518649470411105, 
+                    0.4731731316207976, 
+                    0.4731731316207976, 
+                    0.4280457645958342, 
+                    0.4280457645958342, 
+                    0.38319695793688485, 
+                    0.38319695793688485, 
+                    0.3385467994829747, 
+                    0.3385467994829747, 
+                    0.29402507131642347, 
+                    0.29402507131642347, 
+                    0.24953585016577304, 
+                    0.24953585016577304, 
+                    0.20490370402321742, 
+                    0.20490370402321742, 
+                    0.15968869412543757, 
+                    0.15968869412543757, 
+                    0.10623301020534004, 
+                    0.10623301020534004
+                ], 
+                0.5008349418640137
+            ], 
+            [
+                0.8946025371551514, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9286377317859575, 
+                    0.9286377317859575, 
+                    0.8664555649906475, 
+                    0.8664555649906475, 
+                    0.8102183833530319, 
+                    0.8102183833530319, 
+                    0.7576033954101331, 
+                    0.7576033954101331, 
+                    0.7073118177954993, 
+                    0.7073118177954993, 
+                    0.658660470834001, 
+                    0.658660470834001, 
+                    0.6111594715295815, 
+                    0.6111594715295815, 
+                    0.5645424797097672, 
+                    0.5645424797097672, 
+                    0.5185832109239821, 
+                    0.5185832109239821, 
+                    0.4731209101484173, 
+                    0.4731209101484173, 
+                    0.4280047153952764, 
+                    0.4280047153952764, 
+                    0.38316553349850785, 
+                    0.38316553349850785, 
+                    0.33852253460706705, 
+                    0.33852253460706705, 
+                    0.29400597673280815, 
+                    0.29400597673280815, 
+                    0.24952042075169742, 
+                    0.24952042075169742, 
+                    0.20489108131816086, 
+                    0.20489108131816086, 
+                    0.1596785423564618, 
+                    0.1596785423564618, 
+                    0.10622947386135986, 
+                    0.10622947386135986
+                ], 
+                0.5006500482559204
+            ], 
+            [
+                0.9057421088218689, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999733128099345, 
+                    0.9999733128099345, 
+                    0.9999733128099345, 
+                    0.9999733128099345, 
+                    0.9999733128099345, 
+                    0.9999733128099345, 
+                    0.9999733128099345, 
+                    0.9999733128099345, 
+                    0.9286824056038425, 
+                    0.9286824056038425, 
+                    0.8665971283949012, 
+                    0.8665971283949012, 
+                    0.8103255270625317, 
+                    0.8103255270625317, 
+                    0.7576205640304218, 
+                    0.7576205640304218, 
+                    0.7072047274819241, 
+                    0.7072047274819241, 
+                    0.6584803324513087, 
+                    0.6584803324513087, 
+                    0.6109349545489788, 
+                    0.6109349545489788, 
+                    0.5643313006783903, 
+                    0.5643313006783903, 
+                    0.5184196825947976, 
+                    0.5184196825947976, 
+                    0.4730236503054427, 
+                    0.4730236503054427, 
+                    0.42795980771359915, 
+                    0.42795980771359915, 
+                    0.3831669032833138, 
+                    0.3831669032833138, 
+                    0.33855698647286336, 
+                    0.33855698647286336, 
+                    0.29406190735186394, 
+                    0.29406190735186394, 
+                    0.24958761038663482, 
+                    0.24958761038663482, 
+                    0.20496194936096693, 
+                    0.20496194936096693, 
+                    0.15974490291438476, 
+                    0.15974490291438476, 
+                    0.1063097272321758, 
+                    0.1063097272321758
+                ], 
+                0.5005823969841003
+            ], 
+            [
+                0.9170203804969788, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999989950831594, 
+                    0.9999989950831594, 
+                    0.9999989950831594, 
+                    0.9999989950831594, 
+                    0.9999989950831594, 
+                    0.9999989950831594, 
+                    0.9287759540382713, 
+                    0.9287759540382713, 
+                    0.8667321194334314, 
+                    0.8667321194334314, 
+                    0.8105232894556165, 
+                    0.8105232894556165, 
+                    0.7578746256133045, 
+                    0.7578746256133045, 
+                    0.7075190196658728, 
+                    0.7075190196658728, 
+                    0.6588207913156968, 
+                    0.6588207913156968, 
+                    0.6112859348201812, 
+                    0.6112859348201812, 
+                    0.564660740537646, 
+                    0.564660740537646, 
+                    0.5187081729181445, 
+                    0.5187081729181445, 
+                    0.4732599260284897, 
+                    0.4732599260284897, 
+                    0.42815249438720554, 
+                    0.42815249438720554, 
+                    0.3833195992989704, 
+                    0.3833195992989704, 
+                    0.33867786314423926, 
+                    0.33867786314423926, 
+                    0.29415811094192085, 
+                    0.29415811094192085, 
+                    0.24966514278336643, 
+                    0.24966514278336643, 
+                    0.20502400808112445, 
+                    0.20502400808112445, 
+                    0.15979229834746073, 
+                    0.15979229834746073, 
+                    0.10636091063565567, 
+                    0.10636091063565567
+                ], 
+                0.5014796853065491
+            ], 
+            [
+                0.9284390807151794, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999987346296881, 
+                    0.9999987346296881, 
+                    0.9999987346296881, 
+                    0.9999987346296881, 
+                    0.9999987346296881, 
+                    0.9999987346296881, 
+                    0.9287859388711848, 
+                    0.9287859388711848, 
+                    0.8667154051200116, 
+                    0.8667154051200116, 
+                    0.8104700451914642, 
+                    0.8104700451914642, 
+                    0.7577879309065694, 
+                    0.7577879309065694, 
+                    0.7074003607331395, 
+                    0.7074003607331395, 
+                    0.6586895404325456, 
+                    0.6586895404325456, 
+                    0.6111524124278427, 
+                    0.6111524124278427, 
+                    0.5645401069782586, 
+                    0.5645401069782586, 
+                    0.5186075705438192, 
+                    0.5186075705438192, 
+                    0.4731816379430858, 
+                    0.4731816379430858, 
+                    0.4280915870280577, 
+                    0.4280915870280577, 
+                    0.3832731906935265, 
+                    0.3832731906935265, 
+                    0.338642063273259, 
+                    0.338642063273259, 
+                    0.29412990106805875, 
+                    0.29412990106805875, 
+                    0.24964231954778146, 
+                    0.24964231954778146, 
+                    0.20500531147521192, 
+                    0.20500531147521192, 
+                    0.15977724829359985, 
+                    0.15977724829359985, 
+                    0.10635591152140714, 
+                    0.10635591152140714
+                ], 
+                0.5011876225471497
+            ], 
+            [
+                0.9399999976158142, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999984061955216, 
+                    0.9999984061955216, 
+                    0.9999984061955216, 
+                    0.9999984061955216, 
+                    0.9999984061955216, 
+                    0.9999984061955216, 
+                    0.9287963595641027, 
+                    0.9287963595641027, 
+                    0.8666936608701006, 
+                    0.8666936608701006, 
+                    0.8104047333543111, 
+                    0.8104047333543111, 
+                    0.7576835494908182, 
+                    0.7576835494908182, 
+                    0.7072593664702435, 
+                    0.7072593664702435, 
+                    0.6585352393998704, 
+                    0.6585352393998704, 
+                    0.6109968944256374, 
+                    0.6109968944256374, 
+                    0.5644006888192885, 
+                    0.5644006888192885, 
+                    0.5184919805941459, 
+                    0.5184919805941459, 
+                    0.4730920034930331, 
+                    0.4730920034930331, 
+                    0.4280220234614282, 
+                    0.4280220234614282, 
+                    0.38322020373557053, 
+                    0.38322020373557053, 
+                    0.33860114454498297, 
+                    0.33860114454498297, 
+                    0.2940975954460122, 
+                    0.2940975954460122, 
+                    0.24961613379429284, 
+                    0.24961613379429284, 
+                    0.20498382246726551, 
+                    0.20498382246726551, 
+                    0.15975992667540537, 
+                    0.15975992667540537, 
+                    0.10635016232176614, 
+                    0.10635016232176614
+                ], 
+                0.5008467435836792
+            ], 
+            [
+                0.9517048597335815, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999979917971571, 
+                    0.9999979917971571, 
+                    0.9999979917971571, 
+                    0.9999979917971571, 
+                    0.9999979917971571, 
+                    0.9999979917971571, 
+                    0.9288069833782868, 
+                    0.9288069833782868, 
+                    0.8666655461039026, 
+                    0.8666655461039026, 
+                    0.8103246826090795, 
+                    0.8103246826090795, 
+                    0.757557920541036, 
+                    0.757557920541036, 
+                    0.7070918673550486, 
+                    0.7070918673550486, 
+                    0.6583538567703251, 
+                    0.6583538567703251, 
+                    0.6108157584761069, 
+                    0.6108157584761069, 
+                    0.5642395392221934, 
+                    0.5642395392221934, 
+                    0.5183591338582237, 
+                    0.5183591338582237, 
+                    0.47298933489636813, 
+                    0.47298933489636813, 
+                    0.4279425268294526, 
+                    0.4279425268294526, 
+                    0.3831596620674195, 
+                    0.3831596620674195, 
+                    0.33855433746925223, 
+                    0.33855433746925223, 
+                    0.2940605690417687, 
+                    0.2940605690417687, 
+                    0.24958606567522318, 
+                    0.24958606567522318, 
+                    0.20495910469074416, 
+                    0.20495910469074416, 
+                    0.15973997565243656, 
+                    0.15973997565243656, 
+                    0.10634354604706746, 
+                    0.10634354604706746
+                ], 
+                0.5004485845565796
+            ], 
+            [
+                0.9635554552078247, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999555893173946, 
+                    0.9999555893173946, 
+                    0.9999555893173946, 
+                    0.9999555893173946, 
+                    0.9999555893173946, 
+                    0.9999555893173946, 
+                    0.9999555893173946, 
+                    0.9999555893173946, 
+                    0.9288728169652363, 
+                    0.9288728169652363, 
+                    0.8668678200810506, 
+                    0.8668678200810506, 
+                    0.8104847818634738, 
+                    0.8104847818634738, 
+                    0.7576109640109442, 
+                    0.7576109640109442, 
+                    0.7070028221451691, 
+                    0.7070028221451691, 
+                    0.6581963313364445, 
+                    0.6581963313364445, 
+                    0.6106269759052068, 
+                    0.6106269759052068, 
+                    0.5640843440905119, 
+                    0.5640843440905119, 
+                    0.5182685628908417, 
+                    0.5182685628908417, 
+                    0.47297489663517933, 
+                    0.47297489663517933, 
+                    0.4279842660760757, 
+                    0.4279842660760757, 
+                    0.38324653434222955, 
+                    0.38324653434222955, 
+                    0.3386703595582968, 
+                    0.3386703595582968, 
+                    0.2941927200314152, 
+                    0.2941927200314152, 
+                    0.24972350400142496, 
+                    0.24972350400142496, 
+                    0.20509303660664718, 
+                    0.20509303660664718, 
+                    0.15985949609588299, 
+                    0.15985949609588299, 
+                    0.10648468782097191, 
+                    0.10648468782097191
+                ], 
+                0.5006906986236572
+            ], 
+            [
+                0.9755536317825317, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99999229240674, 
+                    0.99999229240674, 
+                    0.99999229240674, 
+                    0.99999229240674, 
+                    0.99999229240674, 
+                    0.99999229240674, 
+                    0.92899217190917, 
+                    0.92899217190917, 
+                    0.8670064289363392, 
+                    0.8670064289363392, 
+                    0.8106504427183758, 
+                    0.8106504427183758, 
+                    0.7577947456438788, 
+                    0.7577947456438788, 
+                    0.7072072666800884, 
+                    0.7072072666800884, 
+                    0.658404866472055, 
+                    0.658404866472055, 
+                    0.6108345118270746, 
+                    0.6108345118270746, 
+                    0.5642764473189243, 
+                    0.5642764473189243, 
+                    0.5184367795114553, 
+                    0.5184367795114553, 
+                    0.47311430133037946, 
+                    0.47311430133037946, 
+                    0.4280997118184061, 
+                    0.4280997118184061, 
+                    0.38334014999666355, 
+                    0.38334014999666355, 
+                    0.33874640341130663, 
+                    0.33874640341130663, 
+                    0.2942547909548935, 
+                    0.2942547909548935, 
+                    0.2497744938861311, 
+                    0.2497744938861311, 
+                    0.2051343087814721, 
+                    0.2051343087814721, 
+                    0.15989091182797271, 
+                    0.15989091182797271, 
+                    0.10652955220800726, 
+                    0.10652955220800726
+                ], 
+                0.501278817653656
+            ], 
+            [
+                0.9877011775970459, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999902734778052, 
+                    0.9999902734778052, 
+                    0.9999902734778052, 
+                    0.9999902734778052, 
+                    0.9999902734778052, 
+                    0.9999902734778052, 
+                    0.9289988965049989, 
+                    0.9289988965049989, 
+                    0.8669470733147345, 
+                    0.8669470733147345, 
+                    0.8105037333213084, 
+                    0.8105037333213084, 
+                    0.7575759724881266, 
+                    0.7575759724881266, 
+                    0.7069261455999554, 
+                    0.7069261455999554, 
+                    0.6581094742799088, 
+                    0.6581094742799088, 
+                    0.6105472931011809, 
+                    0.6105472931011809, 
+                    0.5640266112175486, 
+                    0.5640266112175486, 
+                    0.518234431092895, 
+                    0.518234431092895, 
+                    0.4729597830986451, 
+                    0.4729597830986451, 
+                    0.42798128338512315, 
+                    0.42798128338512315, 
+                    0.38325046040459143, 
+                    0.38325046040459143, 
+                    0.3386772728784759, 
+                    0.3386772728784759, 
+                    0.2942001998759424, 
+                    0.2942001998759424, 
+                    0.24973025104709073, 
+                    0.24973025104709073, 
+                    0.20509800670493647, 
+                    0.20509800670493647, 
+                    0.15986165744523073, 
+                    0.15986165744523073, 
+                    0.1065208013488562, 
+                    0.1065208013488562
+                ], 
+                0.500644862651825
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999492428534618, 
+                    0.9999492428534618, 
+                    0.9999232157611633, 
+                    0.9999232157611633, 
+                    0.9999232157611633, 
+                    0.9999232157611633, 
+                    0.9999232157611633, 
+                    0.9999232157611633, 
+                    0.9291011379700774, 
+                    0.9291011379700774, 
+                    0.8672598851239641, 
+                    0.8672598851239641, 
+                    0.8107811058489536, 
+                    0.8107811058489536, 
+                    0.7577309458438475, 
+                    0.7577309458438475, 
+                    0.7069157271850779, 
+                    0.7069157271850779, 
+                    0.6580270821752958, 
+                    0.6580270821752958, 
+                    0.6104380920770168, 
+                    0.6104380920770168, 
+                    0.5639643966956446, 
+                    0.5639643966956446, 
+                    0.5182498781188165, 
+                    0.5182498781188165, 
+                    0.4730603315085519, 
+                    0.4730603315085519, 
+                    0.42814165645703706, 
+                    0.42814165645703706, 
+                    0.3834556018333486, 
+                    0.3834556018333486, 
+                    0.3389082608476352, 
+                    0.3389082608476352, 
+                    0.29444200310613877, 
+                    0.29444200310613877, 
+                    0.2499703905721007, 
+                    0.2499703905721007, 
+                    0.2053254196240994, 
+                    0.2053254196240994, 
+                    0.16006089921837463, 
+                    0.16006089921837463, 
+                    0.10675061284505158, 
+                    0.10675061284505158
+                ], 
+                0.5013940930366516
+            ], 
+            [
+                1.0124520063400269, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999489504444455, 
+                    0.9999489504444455, 
+                    0.9999106495995965, 
+                    0.9999106495995965, 
+                    0.9999106495995965, 
+                    0.9999106495995965, 
+                    0.9999106495995965, 
+                    0.9999106495995965, 
+                    0.9290900764377191, 
+                    0.9290900764377191, 
+                    0.8671545925626117, 
+                    0.8671545925626117, 
+                    0.8105530306203659, 
+                    0.8105530306203659, 
+                    0.7574080541297952, 
+                    0.7574080541297952, 
+                    0.7065155529748459, 
+                    0.7065155529748459, 
+                    0.6576184517342123, 
+                    0.6576184517342123, 
+                    0.6100508461299403, 
+                    0.6100508461299403, 
+                    0.5636350411416657, 
+                    0.5636350411416657, 
+                    0.5179881364777408, 
+                    0.5179881364777408, 
+                    0.47286331833908274, 
+                    0.47286331833908274, 
+                    0.42799264155363137, 
+                    0.42799264155363137, 
+                    0.38334378377255296, 
+                    0.38334378377255296, 
+                    0.3388226715858986, 
+                    0.3388226715858986, 
+                    0.29437479070186584, 
+                    0.29437479070186584, 
+                    0.24991622366858346, 
+                    0.24991622366858346, 
+                    0.20528118923353683, 
+                    0.20528118923353683, 
+                    0.16002537280140708, 
+                    0.16002537280140708, 
+                    0.10674239961606434, 
+                    0.10674239961606434
+                ], 
+                0.5005346536636353
+            ], 
+            [
+                1.0250589847564697, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999640885818697, 
+                    0.9999640885818697, 
+                    0.9999640885818697, 
+                    0.9999640885818697, 
+                    0.9999640885818697, 
+                    0.9999640885818697, 
+                    0.9292133374576136, 
+                    0.9292133374576136, 
+                    0.8672483980915178, 
+                    0.8672483980915178, 
+                    0.8106050535778931, 
+                    0.8106050535778931, 
+                    0.7574211669975668, 
+                    0.7574211669975668, 
+                    0.7065010738058227, 
+                    0.7065010738058227, 
+                    0.6575975653573254, 
+                    0.6575975653573254, 
+                    0.6100356724209077, 
+                    0.6100356724209077, 
+                    0.5636329605518128, 
+                    0.5636329605518128, 
+                    0.5179984638042223, 
+                    0.5179984638042223, 
+                    0.4728820057693385, 
+                    0.4728820057693385, 
+                    0.4280160119494042, 
+                    0.4280160119494042, 
+                    0.38336862840185626, 
+                    0.38336862840185626, 
+                    0.3388469818792771, 
+                    0.3388469818792771, 
+                    0.2943973502946767, 
+                    0.2943973502946767, 
+                    0.24993634550622984, 
+                    0.24993634550622984, 
+                    0.20529809152027248, 
+                    0.20529809152027248, 
+                    0.16003787884737083, 
+                    0.16003787884737083, 
+                    0.10678263218370038, 
+                    0.10678263218370038
+                ], 
+                0.5006365776062012
+            ], 
+            [
+                1.037822961807251, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999283285873517, 
+                    0.9999283285873517, 
+                    0.9997394051281122, 
+                    0.9997394051281122, 
+                    0.9997246239635345, 
+                    0.9997246239635345, 
+                    0.9996925679185052, 
+                    0.9996925679185052, 
+                    0.9291304374798202, 
+                    0.9291304374798202, 
+                    0.8673654997030725, 
+                    0.8673654997030725, 
+                    0.8105477444387709, 
+                    0.8105477444387709, 
+                    0.7571215244385728, 
+                    0.7571215244385728, 
+                    0.7059210144270167, 
+                    0.7059210144270167, 
+                    0.656946685148685, 
+                    0.656946685148685, 
+                    0.6094025213272342, 
+                    0.6094025213272342, 
+                    0.5631524628867404, 
+                    0.5631524628867404, 
+                    0.5177153569916121, 
+                    0.5177153569916121, 
+                    0.4727966389427383, 
+                    0.4727966389427383, 
+                    0.42807164032311223, 
+                    0.42807164032311223, 
+                    0.38353002955924964, 
+                    0.38353002955924964, 
+                    0.3390750940034576, 
+                    0.3390750940034576, 
+                    0.294662498430859, 
+                    0.294662498430859, 
+                    0.2502153691096373, 
+                    0.2502153691096373, 
+                    0.20557213219733037, 
+                    0.20557213219733037, 
+                    0.16028381372116174, 
+                    0.16028381372116174, 
+                    0.10707894102473646, 
+                    0.10707894102473646
+                ], 
+                0.5005042552947998
+            ], 
+            [
+                1.050745964050293, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999813001328536, 
+                    0.9999813001328536, 
+                    0.999822451785552, 
+                    0.999822451785552, 
+                    0.9998127770828629, 
+                    0.9998127770828629, 
+                    0.9997901195410561, 
+                    0.9997901195410561, 
+                    0.9292835729972608, 
+                    0.9292835729972608, 
+                    0.8674852551739509, 
+                    0.8674852551739509, 
+                    0.8106143094029082, 
+                    0.8106143094029082, 
+                    0.7571399103374978, 
+                    0.7571399103374978, 
+                    0.705908070665531, 
+                    0.705908070665531, 
+                    0.6569299242483772, 
+                    0.6569299242483772, 
+                    0.6093975681698524, 
+                    0.6093975681698524, 
+                    0.5631665754735412, 
+                    0.5631665754735412, 
+                    0.5177460105704484, 
+                    0.5177460105704484, 
+                    0.4728374369510181, 
+                    0.4728374369510181, 
+                    0.42811799794230987, 
+                    0.42811799794230987, 
+                    0.3835775263616112, 
+                    0.3835775263616112, 
+                    0.33912119356028214, 
+                    0.33912119356028214, 
+                    0.2947056223228921, 
+                    0.2947056223228921, 
+                    0.2502545337467592, 
+                    0.2502545337467592, 
+                    0.2056060830147227, 
+                    0.2056060830147227, 
+                    0.1603104998110479, 
+                    0.1603104998110479, 
+                    0.10714243975086242, 
+                    0.10714243975086242
+                ], 
+                0.5006948113441467
+            ], 
+            [
+                1.063829779624939, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999989034986936, 
+                    0.9999989034986936, 
+                    0.999771487018427, 
+                    0.999771487018427, 
+                    0.9997488716568604, 
+                    0.9997488716568604, 
+                    0.9996986982614746, 
+                    0.9996986982614746, 
+                    0.9292998550455965, 
+                    0.9292998550455965, 
+                    0.8675066531259576, 
+                    0.8675066531259576, 
+                    0.8104860343795945, 
+                    0.8104860343795945, 
+                    0.7568663721202366, 
+                    0.7568663721202366, 
+                    0.7054988796092561, 
+                    0.7054988796092561, 
+                    0.6565067051269772, 
+                    0.6565067051269772, 
+                    0.6090114165231176, 
+                    0.6090114165231176, 
+                    0.562880315187733, 
+                    0.562880315187733, 
+                    0.5175734154777295, 
+                    0.5175734154777295, 
+                    0.4727699104477667, 
+                    0.4727699104477667, 
+                    0.4281244698833953, 
+                    0.4281244698833953, 
+                    0.38363712818101825, 
+                    0.38363712818101825, 
+                    0.339213676184688, 
+                    0.339213676184688, 
+                    0.2948161145340306, 
+                    0.2948161145340306, 
+                    0.2503719109540761, 
+                    0.2503719109540761, 
+                    0.2057213610235053, 
+                    0.2057213610235053, 
+                    0.1604133360404901, 
+                    0.1604133360404901, 
+                    0.10729442464446387, 
+                    0.10729442464446387
+                ], 
+                0.500416100025177
+            ], 
+            [
+                1.0770765542984009, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999971185798777, 
+                    0.9999971185798777, 
+                    0.9995346874201549, 
+                    0.9995346874201549, 
+                    0.9994964752700559, 
+                    0.9994964752700559, 
+                    0.9994047935549427, 
+                    0.9994047935549427, 
+                    0.9292041787227208, 
+                    0.9292041787227208, 
+                    0.8676778856509545, 
+                    0.8676778856509545, 
+                    0.8105191822007299, 
+                    0.8105191822007299, 
+                    0.7566834372527647, 
+                    0.7566834372527647, 
+                    0.7050635627863467, 
+                    0.7050635627863467, 
+                    0.6560234038335581, 
+                    0.6560234038335581, 
+                    0.6085693090659072, 
+                    0.6085693090659072, 
+                    0.5626012652761457, 
+                    0.5626012652761457, 
+                    0.5174903940994403, 
+                    0.5174903940994403, 
+                    0.47287247714699887, 
+                    0.47287247714699887, 
+                    0.4283557201471185, 
+                    0.4283557201471185, 
+                    0.38395929176899757, 
+                    0.38395929176899757, 
+                    0.3395888107200643, 
+                    0.3395888107200643, 
+                    0.2952157082417329, 
+                    0.2952157082417329, 
+                    0.25077349716381575, 
+                    0.25077349716381575, 
+                    0.20610487673185568, 
+                    0.20610487673185568, 
+                    0.1607509727591966, 
+                    0.1607509727591966, 
+                    0.10770091341591534, 
+                    0.10770091341591534
+                ], 
+                0.5009847283363342
+            ], 
+            [
+                1.090488314628601, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999986835811063, 
+                    0.9999986835811063, 
+                    0.9995970059818821, 
+                    0.9995970059818821, 
+                    0.9995801431196372, 
+                    0.9995801431196372, 
+                    0.9995403811642803, 
+                    0.9995403811642803, 
+                    0.9292492566551783, 
+                    0.9292492566551783, 
+                    0.8676081105935984, 
+                    0.8676081105935984, 
+                    0.8102819973753724, 
+                    0.8102819973753724, 
+                    0.7563220172082314, 
+                    0.7563220172082314, 
+                    0.7046178911438504, 
+                    0.7046178911438504, 
+                    0.6555867551977634, 
+                    0.6555867551977634, 
+                    0.6081844968024217, 
+                    0.6081844968024217, 
+                    0.5623040312104289, 
+                    0.5623040312104289, 
+                    0.5172826918728048, 
+                    0.5172826918728048, 
+                    0.47274146039513393, 
+                    0.47274146039513393, 
+                    0.4282798702894493, 
+                    0.4282798702894493, 
+                    0.38392225698192445, 
+                    0.38392225698192445, 
+                    0.33957690806349006, 
+                    0.33957690806349006, 
+                    0.29521925019841344, 
+                    0.29521925019841344, 
+                    0.2507857421924983, 
+                    0.2507857421924983, 
+                    0.20612076089779327, 
+                    0.20612076089779327, 
+                    0.1607658744405787, 
+                    0.1607658744405787, 
+                    0.1077761791459114, 
+                    0.1077761791459114
+                ], 
+                0.5003290772438049
+            ], 
+            [
+                1.1040669679641724, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995564814975294, 
+                    0.9995564814975294, 
+                    0.999544084884991, 
+                    0.999544084884991, 
+                    0.9995204774902384, 
+                    0.9995204774902384, 
+                    0.929239563245984, 
+                    0.929239563245984, 
+                    0.8675999995075727, 
+                    0.8675999995075727, 
+                    0.8100993050550381, 
+                    0.8100993050550381, 
+                    0.755982608859103, 
+                    0.755982608859103, 
+                    0.7041467148376113, 
+                    0.7041467148376113, 
+                    0.6551188685979963, 
+                    0.6551188685979963, 
+                    0.6077811042860419, 
+                    0.6077811042860419, 
+                    0.5620278572147694, 
+                    0.5620278572147694, 
+                    0.517143441050012, 
+                    0.517143441050012, 
+                    0.4727235571025008, 
+                    0.4727235571025008, 
+                    0.42834762845309193, 
+                    0.42834762845309193, 
+                    0.38404934257515205, 
+                    0.38404934257515205, 
+                    0.3397396040636654, 
+                    0.3397396040636654, 
+                    0.29540002068802174, 
+                    0.29540002068802174, 
+                    0.2509712723955977, 
+                    0.2509712723955977, 
+                    0.20629959306770443, 
+                    0.20629959306770443, 
+                    0.1609240021341595, 
+                    0.1609240021341595, 
+                    0.10800558492260294, 
+                    0.10800558492260294
+                ], 
+                0.5001814365386963
+            ], 
+            [
+                1.1178147792816162, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999962218000931, 
+                    0.9999962218000931, 
+                    0.9989871054669643, 
+                    0.9989871054669643, 
+                    0.9989415535927388, 
+                    0.9989415535927388, 
+                    0.9988376278206266, 
+                    0.9988376278206266, 
+                    0.9286562622539445, 
+                    0.9286562622539445, 
+                    0.8674908240296941, 
+                    0.8674908240296941, 
+                    0.8098232824913433, 
+                    0.8098232824913433, 
+                    0.7554303052928111, 
+                    0.7554303052928111, 
+                    0.7032533217099359, 
+                    0.7032533217099359, 
+                    0.6541944958792882, 
+                    0.6541944958792882, 
+                    0.6069741391135844, 
+                    0.6069741391135844, 
+                    0.5615292272594321, 
+                    0.5615292272594321, 
+                    0.5170007212875313, 
+                    0.5170007212875313, 
+                    0.4729087069842148, 
+                    0.4729087069842148, 
+                    0.42876068568677456, 
+                    0.42876068568677456, 
+                    0.384621437165703, 
+                    0.384621437165703, 
+                    0.3404050356031971, 
+                    0.3404050356031971, 
+                    0.29610966432151087, 
+                    0.29610966432151087, 
+                    0.2516864403344719, 
+                    0.2516864403344719, 
+                    0.2069850798787828, 
+                    0.2069850798787828, 
+                    0.16153027851943794, 
+                    0.16153027851943794, 
+                    0.10872035225069238, 
+                    0.10872035225069238
+                ], 
+                0.5008562803268433
+            ], 
+            [
+                1.131733775138855, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9588145946318457, 
+                    0.9588145946318457, 
+                    0.8837086607135431, 
+                    0.8837086607135431, 
+                    0.8151325399801804, 
+                    0.8151325399801804, 
+                    0.7545184507013953, 
+                    0.7545184507013953, 
+                    0.6983389968910187, 
+                    0.6983389968910187, 
+                    0.6484963042499092, 
+                    0.6484963042499092, 
+                    0.6015858481760074, 
+                    0.6015858481760074, 
+                    0.5576229627389281, 
+                    0.5576229627389281, 
+                    0.5147510813941949, 
+                    0.5147510813941949, 
+                    0.47216810261367026, 
+                    0.47216810261367026, 
+                    0.429036299423825, 
+                    0.429036299423825, 
+                    0.38566538682809437, 
+                    0.38566538682809437, 
+                    0.34197882761555565, 
+                    0.34197882761555565, 
+                    0.2980638310807089, 
+                    0.2980638310807089, 
+                    0.253924818276115, 
+                    0.253924818276115, 
+                    0.20943664141167773, 
+                    0.20943664141167773, 
+                    0.16408985337789958, 
+                    0.16408985337789958, 
+                    0.1074896352169791, 
+                    0.1074896352169791
+                ], 
+                0.5006057024002075
+            ]
+        ]
+    }, 
+    {
+        "block_size": 48, 
+        "preprocessing_block_sizes": [
+            18
+        ], 
+        "pruning_parameters": [
+            [
+                0.8858131766319275, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998825451083353, 
+                    0.9998825451083353, 
+                    0.9998818733317856, 
+                    0.9998818733317856, 
+                    0.99987826246521, 
+                    0.99987826246521, 
+                    0.9998628702739573, 
+                    0.9998628702739573, 
+                    0.9465764713275964, 
+                    0.9465764713275964, 
+                    0.8842112719210746, 
+                    0.8842112719210746, 
+                    0.827596770908197, 
+                    0.827596770908197, 
+                    0.7742914313006928, 
+                    0.7742914313006928, 
+                    0.7232753644352037, 
+                    0.7232753644352037, 
+                    0.6746651498762929, 
+                    0.6746651498762929, 
+                    0.6280195680272196, 
+                    0.6280195680272196, 
+                    0.5824099378667479, 
+                    0.5824099378667479, 
+                    0.5383730861981941, 
+                    0.5383730861981941, 
+                    0.4958787223612376, 
+                    0.4958787223612376, 
+                    0.45357799973754803, 
+                    0.45357799973754803, 
+                    0.4115310023453196, 
+                    0.4115310023453196, 
+                    0.3694746163820583, 
+                    0.3694746163820583, 
+                    0.3273283370229595, 
+                    0.3273283370229595, 
+                    0.2851057837691984, 
+                    0.2851057837691984, 
+                    0.24274561697607544, 
+                    0.24274561697607544, 
+                    0.20010828563828945, 
+                    0.20010828563828945, 
+                    0.15678098623791653, 
+                    0.15678098623791653, 
+                    0.10521933095579251, 
+                    0.10521933095579251
+                ], 
+                0.5009956955909729
+            ], 
+            [
+                0.8966189622879028, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998825714127028, 
+                    0.9998825714127028, 
+                    0.9998820722910937, 
+                    0.9998820722910937, 
+                    0.9998794429484518, 
+                    0.9998794429484518, 
+                    0.9998687255196564, 
+                    0.9998687255196564, 
+                    0.9466292852117751, 
+                    0.9466292852117751, 
+                    0.8842387048195539, 
+                    0.8842387048195539, 
+                    0.8276065347831122, 
+                    0.8276065347831122, 
+                    0.7742997536493041, 
+                    0.7742997536493041, 
+                    0.723311025019435, 
+                    0.723311025019435, 
+                    0.6747536101430214, 
+                    0.6747536101430214, 
+                    0.6281677670453293, 
+                    0.6281677670453293, 
+                    0.5826253048705413, 
+                    0.5826253048705413, 
+                    0.5386320815365827, 
+                    0.5386320815365827, 
+                    0.49612263707961296, 
+                    0.49612263707961296, 
+                    0.45379451566692847, 
+                    0.45379451566692847, 
+                    0.4117071800850154, 
+                    0.4117071800850154, 
+                    0.3696118818855053, 
+                    0.3696118818855053, 
+                    0.3274347476293988, 
+                    0.3274347476293988, 
+                    0.28518710074184855, 
+                    0.28518710074184855, 
+                    0.24280776827265643, 
+                    0.24280776827265643, 
+                    0.2001551786262459, 
+                    0.2001551786262459, 
+                    0.15681435001513608, 
+                    0.15681435001513608, 
+                    0.10526722186898693, 
+                    0.10526722186898693
+                ], 
+                0.5015594363212585
+            ], 
+            [
+                0.9075565338134766, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998727682584531, 
+                    0.9998727682584531, 
+                    0.9998721605822352, 
+                    0.9998721605822352, 
+                    0.9998689770628401, 
+                    0.9998689770628401, 
+                    0.9998560793730369, 
+                    0.9998560793730369, 
+                    0.9466460581321711, 
+                    0.9466460581321711, 
+                    0.8841773316437742, 
+                    0.8841773316437742, 
+                    0.8274453835334846, 
+                    0.8274453835334846, 
+                    0.7740268723946852, 
+                    0.7740268723946852, 
+                    0.7229477558157935, 
+                    0.7229477558157935, 
+                    0.674370123165148, 
+                    0.674370123165148, 
+                    0.6278149336248596, 
+                    0.6278149336248596, 
+                    0.5823166668487638, 
+                    0.5823166668487638, 
+                    0.5383963196787184, 
+                    0.5383963196787184, 
+                    0.49596259497179834, 
+                    0.49596259497179834, 
+                    0.45368384730664363, 
+                    0.45368384730664363, 
+                    0.4116290405410109, 
+                    0.4116290405410109, 
+                    0.3695525135083458, 
+                    0.3695525135083458, 
+                    0.32738649777938894, 
+                    0.32738649777938894, 
+                    0.28514540692176105, 
+                    0.28514540692176105, 
+                    0.24277074346137728, 
+                    0.24277074346137728, 
+                    0.20012226329021107, 
+                    0.20012226329021107, 
+                    0.1567861969311987, 
+                    0.1567861969311987, 
+                    0.10526157561287433, 
+                    0.10526157561287433
+                ], 
+                0.5008286237716675
+            ], 
+            [
+                0.9186276197433472, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998681357081536, 
+                    0.9998681357081536, 
+                    0.9998674487294775, 
+                    0.9998674487294775, 
+                    0.9998638315842981, 
+                    0.9998638315842981, 
+                    0.9998494325560714, 
+                    0.9998494325560714, 
+                    0.9466889301654707, 
+                    0.9466889301654707, 
+                    0.8841519090414167, 
+                    0.8841519090414167, 
+                    0.827339069453105, 
+                    0.827339069453105, 
+                    0.7738360495072261, 
+                    0.7738360495072261, 
+                    0.7226969174610451, 
+                    0.7226969174610451, 
+                    0.6741184889362472, 
+                    0.6741184889362472, 
+                    0.6276018774022569, 
+                    0.6276018774022569, 
+                    0.582153433676511, 
+                    0.582153433676511, 
+                    0.5382969955039821, 
+                    0.5382969955039821, 
+                    0.4959136360041859, 
+                    0.4959136360041859, 
+                    0.4536626720429058, 
+                    0.4536626720429058, 
+                    0.4116203301104513, 
+                    0.4116203301104513, 
+                    0.36954693659158133, 
+                    0.36954693659158133, 
+                    0.3273807066421021, 
+                    0.3273807066421021, 
+                    0.2851376797899291, 
+                    0.2851376797899291, 
+                    0.24276121356708671, 
+                    0.24276121356708671, 
+                    0.20011146838948407, 
+                    0.20011146838948407, 
+                    0.1567749436297307, 
+                    0.1567749436297307, 
+                    0.10527470923256207, 
+                    0.10527470923256207
+                ], 
+                0.5004616975784302
+            ], 
+            [
+                0.929833710193634, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998702987910113, 
+                    0.9998702987910113, 
+                    0.9998699282197937, 
+                    0.9998699282197937, 
+                    0.9998680125795366, 
+                    0.9998680125795366, 
+                    0.9998603663269278, 
+                    0.9998603663269278, 
+                    0.9467721716707197, 
+                    0.9467721716707197, 
+                    0.8841860958501072, 
+                    0.8841860958501072, 
+                    0.8273245617067738, 
+                    0.8273245617067738, 
+                    0.773779540775307, 
+                    0.773779540775307, 
+                    0.7226245316734656, 
+                    0.7226245316734656, 
+                    0.6740702822537482, 
+                    0.6740702822537482, 
+                    0.6275993402182865, 
+                    0.6275993402182865, 
+                    0.5822051772139001, 
+                    0.5822051772139001, 
+                    0.5383959214103887, 
+                    0.5383959214103887, 
+                    0.4960232204109213, 
+                    0.4960232204109213, 
+                    0.45376793518010716, 
+                    0.45376793518010716, 
+                    0.4117091843311608, 
+                    0.4117091843311608, 
+                    0.3696169743631103, 
+                    0.3696169743631103, 
+                    0.3274348502106063, 
+                    0.3274348502106063, 
+                    0.2851782084158967, 
+                    0.2851782084158967, 
+                    0.2427910297029213, 
+                    0.2427910297029213, 
+                    0.20013256521730435, 
+                    0.20013256521730435, 
+                    0.15678823600970782, 
+                    0.15678823600970782, 
+                    0.10531430993558809, 
+                    0.10531430993558809
+                ], 
+                0.5006369948387146
+            ], 
+            [
+                0.9411764740943909, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999874637989481, 
+                    0.999874637989481, 
+                    0.999874637989481, 
+                    0.999874637989481, 
+                    0.999874637989481, 
+                    0.999874637989481, 
+                    0.999874637989481, 
+                    0.999874637989481, 
+                    0.9468694413055885, 
+                    0.9468694413055885, 
+                    0.8842232482375468, 
+                    0.8842232482375468, 
+                    0.8272980822678488, 
+                    0.8272980822678488, 
+                    0.7736912532303657, 
+                    0.7736912532303657, 
+                    0.7224995220526994, 
+                    0.7224995220526994, 
+                    0.6739563615986106, 
+                    0.6739563615986106, 
+                    0.6275256134600157, 
+                    0.6275256134600157, 
+                    0.582181476847519, 
+                    0.582181476847519, 
+                    0.5384229677100719, 
+                    0.5384229677100719, 
+                    0.49607368569705823, 
+                    0.49607368569705823, 
+                    0.4538250901268648, 
+                    0.4538250901268648, 
+                    0.41176071423556865, 
+                    0.41176071423556865, 
+                    0.3696584209541429, 
+                    0.3696584209541429, 
+                    0.3274667864991897, 
+                    0.3274667864991897, 
+                    0.2852013213960821, 
+                    0.2852013213960821, 
+                    0.24280693718047883, 
+                    0.24280693718047883, 
+                    0.2001424746071025, 
+                    0.2001424746071025, 
+                    0.1567927633743579, 
+                    0.1567927633743579, 
+                    0.10535028320339103, 
+                    0.10535028320339103
+                ], 
+                0.5006361603736877
+            ], 
+            [
+                0.9526576399803162, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998744466911056, 
+                    0.9998744466911056, 
+                    0.9998736758193811, 
+                    0.9998736758193811, 
+                    0.9998699061666979, 
+                    0.9998699061666979, 
+                    0.9998558089654438, 
+                    0.9998558089654438, 
+                    0.9470137297728968, 
+                    0.9470137297728968, 
+                    0.8843266243312832, 
+                    0.8843266243312832, 
+                    0.8273715211682434, 
+                    0.8273715211682434, 
+                    0.7737469640540569, 
+                    0.7737469640540569, 
+                    0.7225586185424573, 
+                    0.7225586185424573, 
+                    0.6740398513734858, 
+                    0.6740398513734858, 
+                    0.6276431052053694, 
+                    0.6276431052053694, 
+                    0.5823350581378807, 
+                    0.5823350581378807, 
+                    0.5386017080649965, 
+                    0.5386017080649965, 
+                    0.49624810685015974, 
+                    0.49624810685015974, 
+                    0.4539823125853609, 
+                    0.4539823125853609, 
+                    0.41189205173841054, 
+                    0.41189205173841054, 
+                    0.36976362732933743, 
+                    0.36976362732933743, 
+                    0.3275501568429789, 
+                    0.3275501568429789, 
+                    0.28526641892504456, 
+                    0.28526641892504456, 
+                    0.2428572642435526, 
+                    0.2428572642435526, 
+                    0.20018028584066236, 
+                    0.20018028584066236, 
+                    0.15681881489340085, 
+                    0.15681881489340085, 
+                    0.1054102018934941, 
+                    0.1054102018934941
+                ], 
+                0.5011168718338013
+            ], 
+            [
+                0.9642788171768188, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999888650041102, 
+                    0.999888650041102, 
+                    0.9998882628256667, 
+                    0.9998882628256667, 
+                    0.9998863787667674, 
+                    0.9998863787667674, 
+                    0.9998793711870658, 
+                    0.9998793711870658, 
+                    0.9471709845341676, 
+                    0.9471709845341676, 
+                    0.8844179835003698, 
+                    0.8844179835003698, 
+                    0.8273942032741012, 
+                    0.8273942032741012, 
+                    0.7736983362519028, 
+                    0.7736983362519028, 
+                    0.7224606297467707, 
+                    0.7224606297467707, 
+                    0.6739412221935117, 
+                    0.6739412221935117, 
+                    0.6275763242371191, 
+                    0.6275763242371191, 
+                    0.5823113589766628, 
+                    0.5823113589766628, 
+                    0.5386239645292846, 
+                    0.5386239645292846, 
+                    0.49629232049951183, 
+                    0.49629232049951183, 
+                    0.45403335120608856, 
+                    0.45403335120608856, 
+                    0.4119390897385413, 
+                    0.4119390897385413, 
+                    0.3698026098178719, 
+                    0.3698026098178719, 
+                    0.32758122083067237, 
+                    0.32758122083067237, 
+                    0.28528978248138104, 
+                    0.28528978248138104, 
+                    0.2428739389810995, 
+                    0.2428739389810995, 
+                    0.20019097190306748, 
+                    0.20019097190306748, 
+                    0.156823665789107, 
+                    0.156823665789107, 
+                    0.10545737669279474, 
+                    0.10545737669279474
+                ], 
+                0.5011558532714844
+            ], 
+            [
+                0.9760417938232422, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998984176162555, 
+                    0.9998984176162555, 
+                    0.9998984176162555, 
+                    0.9998984176162555, 
+                    0.9998984176162555, 
+                    0.9998984176162555, 
+                    0.9998984176162555, 
+                    0.9998984176162555, 
+                    0.9473207954522234, 
+                    0.9473207954522234, 
+                    0.8844573820335863, 
+                    0.8844573820335863, 
+                    0.827301622862382, 
+                    0.827301622862382, 
+                    0.7734550276418497, 
+                    0.7734550276418497, 
+                    0.722091722028186, 
+                    0.722091722028186, 
+                    0.6735350372011861, 
+                    0.6735350372011861, 
+                    0.6271983166491389, 
+                    0.6271983166491389, 
+                    0.5819790870957765, 
+                    0.5819790870957765, 
+                    0.5383692365804952, 
+                    0.5383692365804952, 
+                    0.4961167566607856, 
+                    0.4961167566607856, 
+                    0.45390996742047784, 
+                    0.45390996742047784, 
+                    0.4118516233513824, 
+                    0.4118516233513824, 
+                    0.369737465783218, 
+                    0.369737465783218, 
+                    0.3275299404765534, 
+                    0.3275299404765534, 
+                    0.28524691948359016, 
+                    0.28524691948359016, 
+                    0.24283651242911136, 
+                    0.24283651242911136, 
+                    0.20015747101986076, 
+                    0.20015747101986076, 
+                    0.1567938328344306, 
+                    0.1567938328344306, 
+                    0.10547941749304461, 
+                    0.10547941749304461
+                ], 
+                0.5004311800003052
+            ], 
+            [
+                0.9879482984542847, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999132223180206, 
+                    0.9999132223180206, 
+                    0.9999129177020586, 
+                    0.9999129177020586, 
+                    0.9999115558776794, 
+                    0.9999115558776794, 
+                    0.9999070045776516, 
+                    0.9999070045776516, 
+                    0.9475466295516608, 
+                    0.9475466295516608, 
+                    0.8845984892761684, 
+                    0.8845984892761684, 
+                    0.8273515389647768, 
+                    0.8273515389647768, 
+                    0.7734026547154993, 
+                    0.7734026547154993, 
+                    0.7219578262302117, 
+                    0.7219578262302117, 
+                    0.6733804892479055, 
+                    0.6733804892479055, 
+                    0.6270678750793791, 
+                    0.6270678750793791, 
+                    0.5818862369725923, 
+                    0.5818862369725923, 
+                    0.5383264476890276, 
+                    0.5383264476890276, 
+                    0.49611022224140716, 
+                    0.49611022224140716, 
+                    0.45392152462806623, 
+                    0.45392152462806623, 
+                    0.41186977137156033, 
+                    0.41186977137156033, 
+                    0.36975565526770926, 
+                    0.36975565526770926, 
+                    0.3275457174334156, 
+                    0.3275457174334156, 
+                    0.2852587809473847, 
+                    0.2852587809473847, 
+                    0.24284409388194567, 
+                    0.24284409388194567, 
+                    0.20016060561270685, 
+                    0.20016060561270685, 
+                    0.1567922582307694, 
+                    0.1567922582307694, 
+                    0.10553473279783969, 
+                    0.10553473279783969
+                ], 
+                0.5003485679626465
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999606156038192, 
+                    0.9999606156038192, 
+                    0.9999606156038192, 
+                    0.9999606156038192, 
+                    0.9999606156038192, 
+                    0.9999606156038192, 
+                    0.9999606156038192, 
+                    0.9999606156038192, 
+                    0.9478883341683096, 
+                    0.9478883341683096, 
+                    0.8849018098672998, 
+                    0.8849018098672998, 
+                    0.827629158302231, 
+                    0.827629158302231, 
+                    0.7736499236010663, 
+                    0.7736499236010663, 
+                    0.7221881812637171, 
+                    0.7221881812637171, 
+                    0.6736146028542382, 
+                    0.6736146028542382, 
+                    0.6273185993563342, 
+                    0.6273185993563342, 
+                    0.5821652519553878, 
+                    0.5821652519553878, 
+                    0.5386120902654822, 
+                    0.5386120902654822, 
+                    0.49635755777322965, 
+                    0.49635755777322965, 
+                    0.4541324008362229, 
+                    0.4541324008362229, 
+                    0.4120415345964345, 
+                    0.4120415345964345, 
+                    0.36989421126565974, 
+                    0.36989421126565974, 
+                    0.3276584593503917, 
+                    0.3276584593503917, 
+                    0.2853501607093347, 
+                    0.2853501607093347, 
+                    0.24291759515402114, 
+                    0.24291759515402114, 
+                    0.20021790608849674, 
+                    0.20021790608849674, 
+                    0.15683282950082572, 
+                    0.15683282950082572, 
+                    0.10563775761554381, 
+                    0.10563775761554381
+                ], 
+                0.5012471079826355
+            ], 
+            [
+                1.0121986865997314, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9482185551655891, 
+                    0.9482185551655891, 
+                    0.8851243429400298, 
+                    0.8851243429400298, 
+                    0.8277273133629144, 
+                    0.8277273133629144, 
+                    0.7735951370367025, 
+                    0.7735951370367025, 
+                    0.7220038146127674, 
+                    0.7220038146127674, 
+                    0.6733861510648159, 
+                    0.6733861510648159, 
+                    0.6271087487683058, 
+                    0.6271087487683058, 
+                    0.5819957872273278, 
+                    0.5819957872273278, 
+                    0.5385008499066118, 
+                    0.5385008499066118, 
+                    0.49629135952849485, 
+                    0.49629135952849485, 
+                    0.45409544604497315, 
+                    0.45409544604497315, 
+                    0.4120221656480106, 
+                    0.4120221656480106, 
+                    0.369884401517398, 
+                    0.369884401517398, 
+                    0.32765345962652803, 
+                    0.32765345962652803, 
+                    0.28534639728697386, 
+                    0.28534639728697386, 
+                    0.24291302698245323, 
+                    0.24291302698245323, 
+                    0.20021119470882304, 
+                    0.20021119470882304, 
+                    0.15682299028493205, 
+                    0.15682299028493205, 
+                    0.10570461436077475, 
+                    0.10570461436077475
+                ], 
+                0.5010216236114502
+            ], 
+            [
+                1.0245462656021118, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999721096465044, 
+                    0.9999721096465044, 
+                    0.9999721096465044, 
+                    0.9999721096465044, 
+                    0.9999721096465044, 
+                    0.9999721096465044, 
+                    0.948403904541492, 
+                    0.948403904541492, 
+                    0.8854923779201972, 
+                    0.8854923779201972, 
+                    0.8280003819453718, 
+                    0.8280003819453718, 
+                    0.7734929468182098, 
+                    0.7734929468182098, 
+                    0.7214854510916368, 
+                    0.7214854510916368, 
+                    0.672665552206637, 
+                    0.672665552206637, 
+                    0.6263631492055725, 
+                    0.6263631492055725, 
+                    0.5812834081414686, 
+                    0.5812834081414686, 
+                    0.5379644474391532, 
+                    0.5379644474391532, 
+                    0.49601969594564016, 
+                    0.49601969594564016, 
+                    0.45402476097192035, 
+                    0.45402476097192035, 
+                    0.412111420422878, 
+                    0.412111420422878, 
+                    0.3700815587010364, 
+                    0.3700815587010364, 
+                    0.32791512946959234, 
+                    0.32791512946959234, 
+                    0.2856416348518915, 
+                    0.2856416348518915, 
+                    0.24321810021979642, 
+                    0.24321810021979642, 
+                    0.20050604618965093, 
+                    0.20050604618965093, 
+                    0.1570833370161899, 
+                    0.1570833370161899, 
+                    0.1060646192319571, 
+                    0.1060646192319571
+                ], 
+                0.5008267164230347
+            ], 
+            [
+                1.0370444059371948, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999132567214032, 
+                    0.9999132567214032, 
+                    0.9999115955069852, 
+                    0.9999115955069852, 
+                    0.9999072744676871, 
+                    0.9999072744676871, 
+                    0.9485315962401083, 
+                    0.9485315962401083, 
+                    0.8858866233415265, 
+                    0.8858866233415265, 
+                    0.8283131738899977, 
+                    0.8283131738899977, 
+                    0.7733881644885168, 
+                    0.7733881644885168, 
+                    0.7209201679894107, 
+                    0.7209201679894107, 
+                    0.6718765636949535, 
+                    0.6718765636949535, 
+                    0.6255454385168685, 
+                    0.6255454385168685, 
+                    0.5805114988423764, 
+                    0.5805114988423764, 
+                    0.5374024963358185, 
+                    0.5374024963358185, 
+                    0.49577162187745766, 
+                    0.49577162187745766, 
+                    0.4540199792942478, 
+                    0.4540199792942478, 
+                    0.4122997084261683, 
+                    0.4122997084261683, 
+                    0.37039991005170336, 
+                    0.37039991005170336, 
+                    0.32831059160143333, 
+                    0.32831059160143333, 
+                    0.2860758864465543, 
+                    0.2860758864465543, 
+                    0.24366127285921552, 
+                    0.24366127285921552, 
+                    0.2009320835907443, 
+                    0.2009320835907443, 
+                    0.15745953711121402, 
+                    0.15745953711121402, 
+                    0.10655375027876493, 
+                    0.10655375027876493
+                ], 
+                0.5009095668792725
+            ], 
+            [
+                1.0496950149536133, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998318484904891, 
+                    0.9998318484904891, 
+                    0.9998266951201472, 
+                    0.9998266951201472, 
+                    0.9998113372540278, 
+                    0.9998113372540278, 
+                    0.9485482687134673, 
+                    0.9485482687134673, 
+                    0.8860961385628405, 
+                    0.8860961385628405, 
+                    0.8283616929211967, 
+                    0.8283616929211967, 
+                    0.7729504648088772, 
+                    0.7729504648088772, 
+                    0.7199866575151644, 
+                    0.7199866575151644, 
+                    0.6707155521660326, 
+                    0.6707155521660326, 
+                    0.6243728185738653, 
+                    0.6243728185738653, 
+                    0.5794190592100454, 
+                    0.5794190592100454, 
+                    0.5365718138123955, 
+                    0.5365718138123955, 
+                    0.4953181221259667, 
+                    0.4953181221259667, 
+                    0.4538630807216494, 
+                    0.4538630807216494, 
+                    0.41237844616920916, 
+                    0.41237844616920916, 
+                    0.3706400581865884, 
+                    0.3706400581865884, 
+                    0.3286502926486977, 
+                    0.3286502926486977, 
+                    0.28647058488732474, 
+                    0.28647058488732474, 
+                    0.2440767588332417, 
+                    0.2440767588332417, 
+                    0.20133933197842738, 
+                    0.20133933197842738, 
+                    0.15782379595334708, 
+                    0.15782379595334708, 
+                    0.1070476058160426, 
+                    0.1070476058160426
+                ], 
+                0.5001345872879028
+            ], 
+            [
+                1.0625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999681660930567, 
+                    0.999681660930567, 
+                    0.9996733621838358, 
+                    0.9996733621838358, 
+                    0.9996524873823205, 
+                    0.9996524873823205, 
+                    0.9483611221527036, 
+                    0.9483611221527036, 
+                    0.886314925695433, 
+                    0.886314925695433, 
+                    0.8285220708783239, 
+                    0.8285220708783239, 
+                    0.7726351295564222, 
+                    0.7726351295564222, 
+                    0.7191664954921988, 
+                    0.7191664954921988, 
+                    0.6696293884719927, 
+                    0.6696293884719927, 
+                    0.6232330182471701, 
+                    0.6232330182471701, 
+                    0.5783570585984985, 
+                    0.5783570585984985, 
+                    0.5358011659459901, 
+                    0.5358011659459901, 
+                    0.4949903209219391, 
+                    0.4949903209219391, 
+                    0.4538984053422481, 
+                    0.4538984053422481, 
+                    0.4127028122451377, 
+                    0.4127028122451377, 
+                    0.37116184953064063, 
+                    0.37116184953064063, 
+                    0.32929150031515647, 
+                    0.32929150031515647, 
+                    0.28717368753676586, 
+                    0.28717368753676586, 
+                    0.24479620668963042, 
+                    0.24479620668963042, 
+                    0.20203425913825046, 
+                    0.20203425913825046, 
+                    0.15844154155577583, 
+                    0.15844154155577583, 
+                    0.10781150310746175, 
+                    0.10781150310746175
+                ], 
+                0.5002838969230652
+            ], 
+            [
+                1.0754611492156982, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999451526512938, 
+                    0.999451526512938, 
+                    0.999451526512938, 
+                    0.999451526512938, 
+                    0.999451526512938, 
+                    0.999451526512938, 
+                    0.9478356672098237, 
+                    0.9478356672098237, 
+                    0.8863066206899346, 
+                    0.8863066206899346, 
+                    0.828538784233915, 
+                    0.828538784233915, 
+                    0.7722254540187898, 
+                    0.7722254540187898, 
+                    0.7182989212536515, 
+                    0.7182989212536515, 
+                    0.668449877225885, 
+                    0.668449877225885, 
+                    0.6219289840167468, 
+                    0.6219289840167468, 
+                    0.5771256179922482, 
+                    0.5771256179922482, 
+                    0.534887481387748, 
+                    0.534887481387748, 
+                    0.49459364119714155, 
+                    0.49459364119714155, 
+                    0.45394567700549704, 
+                    0.45394567700549704, 
+                    0.41310542180551685, 
+                    0.41310542180551685, 
+                    0.3718097761399216, 
+                    0.3718097761399216, 
+                    0.3300900251610852, 
+                    0.3300900251610852, 
+                    0.2880523682954807, 
+                    0.2880523682954807, 
+                    0.24569879510983755, 
+                    0.24569879510983755, 
+                    0.20290947686553723, 
+                    0.20290947686553723, 
+                    0.15922163761732633, 
+                    0.15922163761732633, 
+                    0.10876088366809494, 
+                    0.10876088366809494
+                ], 
+                0.5005084276199341
+            ], 
+            [
+                1.0885803699493408, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999833247095627, 
+                    0.9999833247095627, 
+                    0.9999833247095627, 
+                    0.9999833247095627, 
+                    0.9999605555946275, 
+                    0.9999605555946275, 
+                    0.9998702218152071, 
+                    0.9998702218152071, 
+                    0.9889663791043414, 
+                    0.9889663791043414, 
+                    0.9124322925464092, 
+                    0.9124322925464092, 
+                    0.8427424939575494, 
+                    0.8427424939575494, 
+                    0.7770674039470457, 
+                    0.7770674039470457, 
+                    0.7162466996042547, 
+                    0.7162466996042547, 
+                    0.66352984981174, 
+                    0.66352984981174, 
+                    0.6167485898364492, 
+                    0.6167485898364492, 
+                    0.5720320343386401, 
+                    0.5720320343386401, 
+                    0.5311650479285697, 
+                    0.5311650479285697, 
+                    0.4928321114702109, 
+                    0.4928321114702109, 
+                    0.45334985618166573, 
+                    0.45334985618166573, 
+                    0.41341031321345345, 
+                    0.41341031321345345, 
+                    0.37270561828057375, 
+                    0.37270561828057375, 
+                    0.3313655091961307, 
+                    0.3313655091961307, 
+                    0.28959382564079483, 
+                    0.28959382564079483, 
+                    0.2474359746225545, 
+                    0.2474359746225545, 
+                    0.2047869445081625, 
+                    0.2047869445081625, 
+                    0.161149356940974, 
+                    0.161149356940974, 
+                    0.10735036518497028, 
+                    0.10735036518497028
+                ], 
+                0.49983927607536316
+            ], 
+            [
+                1.10185968875885, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996058184301888, 
+                    0.9996058184301888, 
+                    0.9995851239839133, 
+                    0.9995851239839133, 
+                    0.999537404928619, 
+                    0.999537404928619, 
+                    0.9880172614963062, 
+                    0.9880172614963062, 
+                    0.9107973883621209, 
+                    0.9107973883621209, 
+                    0.8410311902612921, 
+                    0.8410311902612921, 
+                    0.7754580461197175, 
+                    0.7754580461197175, 
+                    0.7150091584777547, 
+                    0.7150091584777547, 
+                    0.6626103975486463, 
+                    0.6626103975486463, 
+                    0.6159550454062532, 
+                    0.6159550454062532, 
+                    0.5715170512672452, 
+                    0.5715170512672452, 
+                    0.5308939438175866, 
+                    0.5308939438175866, 
+                    0.49283997870357654, 
+                    0.49283997870357654, 
+                    0.4537132497998453, 
+                    0.4537132497998453, 
+                    0.4140573649898035, 
+                    0.4140573649898035, 
+                    0.37355471062967394, 
+                    0.37355471062967394, 
+                    0.33233683441467277, 
+                    0.33233683441467277, 
+                    0.2906187246908319, 
+                    0.2906187246908319, 
+                    0.24845635751530992, 
+                    0.24845635751530992, 
+                    0.2057471481685347, 
+                    0.2057471481685347, 
+                    0.1619769160733429, 
+                    0.1619769160733429, 
+                    0.10860522715545597, 
+                    0.10860522715545597
+                ], 
+                0.5005652904510498
+            ], 
+            [
+                1.1153010129928589, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986498044197751, 
+                    0.9986498044197751, 
+                    0.9985741103183616, 
+                    0.9985741103183616, 
+                    0.9985124456038321, 
+                    0.9985124456038321, 
+                    0.9818433961405213, 
+                    0.9818433961405213, 
+                    0.9036945006214991, 
+                    0.9036945006214991, 
+                    0.8344296673675977, 
+                    0.8344296673675977, 
+                    0.770468205743388, 
+                    0.770468205743388, 
+                    0.7120829450291384, 
+                    0.7120829450291384, 
+                    0.6605260826272571, 
+                    0.6605260826272571, 
+                    0.6137697178326944, 
+                    0.6137697178326944, 
+                    0.5696049704067607, 
+                    0.5696049704067607, 
+                    0.5293351824059546, 
+                    0.5293351824059546, 
+                    0.492167492383431, 
+                    0.492167492383431, 
+                    0.45408116339857413, 
+                    0.45408116339857413, 
+                    0.4152855924421385, 
+                    0.4152855924421385, 
+                    0.3754004610976726, 
+                    0.3754004610976726, 
+                    0.33457124566271657, 
+                    0.33457124566271657, 
+                    0.2930592097453854, 
+                    0.2930592097453854, 
+                    0.25094940388920317, 
+                    0.25094940388920317, 
+                    0.2081484167509525, 
+                    0.2081484167509525, 
+                    0.16410046540051107, 
+                    0.16410046540051107, 
+                    0.11134159314656708, 
+                    0.11134159314656708
+                ], 
+                0.5000507831573486
+            ], 
+            [
+                1.12890625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9972776831551504, 
+                    0.9972776831551504, 
+                    0.9968997463510855, 
+                    0.9968997463510855, 
+                    0.9967422331402185, 
+                    0.9967422331402185, 
+                    0.9708734774651356, 
+                    0.9708734774651356, 
+                    0.8920945326865019, 
+                    0.8920945326865019, 
+                    0.8243282792034036, 
+                    0.8243282792034036, 
+                    0.7642227987022818, 
+                    0.7642227987022818, 
+                    0.7104130998309358, 
+                    0.7104130998309358, 
+                    0.6601022529908244, 
+                    0.6601022529908244, 
+                    0.6123330575247887, 
+                    0.6123330575247887, 
+                    0.56797663314716, 
+                    0.56797663314716, 
+                    0.5274855294679968, 
+                    0.5274855294679968, 
+                    0.49119519648340965, 
+                    0.49119519648340965, 
+                    0.4545037460872961, 
+                    0.4545037460872961, 
+                    0.41690701394199253, 
+                    0.41690701394199253, 
+                    0.3779066082932912, 
+                    0.3779066082932912, 
+                    0.3376507805131011, 
+                    0.3376507805131011, 
+                    0.29646061313764704, 
+                    0.29646061313764704, 
+                    0.2544575843876217, 
+                    0.2544575843876217, 
+                    0.21155818812122223, 
+                    0.21155818812122223, 
+                    0.16714419606477532, 
+                    0.16714419606477532, 
+                    0.11510571379887229, 
+                    0.11510571379887229
+                ], 
+                0.5006175637245178
+            ]
+        ]
+    }, 
+    {
+        "block_size": 49, 
+        "preprocessing_block_sizes": [
+            30
+        ], 
+        "pruning_parameters": [
+            [
+                0.8879438042640686, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997065148491652, 
+                    0.9997065148491652, 
+                    0.9997065148491652, 
+                    0.9997065148491652, 
+                    0.9997065148491652, 
+                    0.9997065148491652, 
+                    0.9997065148491652, 
+                    0.9997065148491652, 
+                    0.9458438594657929, 
+                    0.9458438594657929, 
+                    0.8835274351997381, 
+                    0.8835274351997381, 
+                    0.8269992459157506, 
+                    0.8269992459157506, 
+                    0.7739190912783989, 
+                    0.7739190912783989, 
+                    0.723569103626305, 
+                    0.723569103626305, 
+                    0.6753855622815834, 
+                    0.6753855622815834, 
+                    0.6284687002607459, 
+                    0.6284687002607459, 
+                    0.5832041965083151, 
+                    0.5832041965083151, 
+                    0.5390277601266166, 
+                    0.5390277601266166, 
+                    0.49579642370582777, 
+                    0.49579642370582777, 
+                    0.45308946955694046, 
+                    0.45308946955694046, 
+                    0.41096883865345896, 
+                    0.41096883865345896, 
+                    0.36898930401083313, 
+                    0.36898930401083313, 
+                    0.32694247473603816, 
+                    0.32694247473603816, 
+                    0.2848304678620423, 
+                    0.2848304678620423, 
+                    0.24255709475630405, 
+                    0.24255709475630405, 
+                    0.19998353624999235, 
+                    0.19998353624999235, 
+                    0.15670480405021406, 
+                    0.15670480405021406, 
+                    0.10507715755107094, 
+                    0.10507715755107094
+                ], 
+                0.5006130933761597
+            ], 
+            [
+                0.8985596895217896, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996825878276836, 
+                    0.9996825878276836, 
+                    0.9996825878276836, 
+                    0.9996825878276836, 
+                    0.9996825878276836, 
+                    0.9996825878276836, 
+                    0.9996825878276836, 
+                    0.9996825878276836, 
+                    0.9457821246635042, 
+                    0.9457821246635042, 
+                    0.8834219421579508, 
+                    0.8834219421579508, 
+                    0.826841980915573, 
+                    0.826841980915573, 
+                    0.7737196598167841, 
+                    0.7737196598167841, 
+                    0.7233667057569467, 
+                    0.7233667057569467, 
+                    0.6752139717013665, 
+                    0.6752139717013665, 
+                    0.6283451447023477, 
+                    0.6283451447023477, 
+                    0.5831447422814221, 
+                    0.5831447422814221, 
+                    0.5390285749968606, 
+                    0.5390285749968606, 
+                    0.49584255659784104, 
+                    0.49584255659784104, 
+                    0.4531635959145257, 
+                    0.4531635959145257, 
+                    0.4110440189720259, 
+                    0.4110440189720259, 
+                    0.369051015508488, 
+                    0.369051015508488, 
+                    0.3269894809904231, 
+                    0.3269894809904231, 
+                    0.28486244012659195, 
+                    0.28486244012659195, 
+                    0.24257740050375282, 
+                    0.24257740050375282, 
+                    0.19999543017595456, 
+                    0.19999543017595456, 
+                    0.1567108750522047, 
+                    0.1567108750522047, 
+                    0.10508591739600986, 
+                    0.10508591739600986
+                ], 
+                0.5004804134368896
+            ], 
+            [
+                0.9093024730682373, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999042446729011, 
+                    0.9999042446729011, 
+                    0.9999038169995543, 
+                    0.9999038169995543, 
+                    0.9999034954639223, 
+                    0.9999034954639223, 
+                    0.9457600025090246, 
+                    0.9457600025090246, 
+                    0.883486435952685, 
+                    0.883486435952685, 
+                    0.8269433403955312, 
+                    0.8269433403955312, 
+                    0.7738211757470045, 
+                    0.7738211757470045, 
+                    0.723476186999272, 
+                    0.723476186999272, 
+                    0.6753458601249012, 
+                    0.6753458601249012, 
+                    0.6285122812410475, 
+                    0.6285122812410475, 
+                    0.583354244729347, 
+                    0.583354244729347, 
+                    0.5392754610808705, 
+                    0.5392754610808705, 
+                    0.4961115058341867, 
+                    0.4961115058341867, 
+                    0.4534403316801668, 
+                    0.4534403316801668, 
+                    0.41130329871976207, 
+                    0.41130329871976207, 
+                    0.36928194663257613, 
+                    0.36928194663257613, 
+                    0.32719333340624956, 
+                    0.32719333340624956, 
+                    0.28503983709176595, 
+                    0.28503983709176595, 
+                    0.24273144807423247, 
+                    0.24273144807423247, 
+                    0.2001274880315743, 
+                    0.2001274880315743, 
+                    0.15681827928954795, 
+                    0.15681827928954795, 
+                    0.10519829523605694, 
+                    0.10519829523605694
+                ], 
+                0.5014224648475647
+            ], 
+            [
+                0.920173704624176, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996155209053125, 
+                    0.9996155209053125, 
+                    0.9996098285972195, 
+                    0.9996098285972195, 
+                    0.9995868909387506, 
+                    0.9995868909387506, 
+                    0.9995174566221693, 
+                    0.9995174566221693, 
+                    0.9457440082896766, 
+                    0.9457440082896766, 
+                    0.8833505832608847, 
+                    0.8833505832608847, 
+                    0.8267584243657661, 
+                    0.8267584243657661, 
+                    0.7736737546789602, 
+                    0.7736737546789602, 
+                    0.7234154890270875, 
+                    0.7234154890270875, 
+                    0.6753818944280305, 
+                    0.6753818944280305, 
+                    0.6286484909625415, 
+                    0.6286484909625415, 
+                    0.5835593041732249, 
+                    0.5835593041732249, 
+                    0.5395183396416536, 
+                    0.5395183396416536, 
+                    0.4963568450818939, 
+                    0.4963568450818939, 
+                    0.4536645386872547, 
+                    0.4536645386872547, 
+                    0.4114764338428818, 
+                    0.4114764338428818, 
+                    0.3693970274612717, 
+                    0.3693970274612717, 
+                    0.3272596374024856, 
+                    0.3272596374024856, 
+                    0.28506660634299547, 
+                    0.28506660634299547, 
+                    0.24273057275691545, 
+                    0.24273057275691545, 
+                    0.2001092210582393, 
+                    0.2001092210582393, 
+                    0.15679205223209175, 
+                    0.15679205223209175, 
+                    0.10516714507645382, 
+                    0.10516714507645382
+                ], 
+                0.5016211271286011
+            ], 
+            [
+                0.9311749339103699, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995852023842391, 
+                    0.9995852023842391, 
+                    0.9995789340689272, 
+                    0.9995789340689272, 
+                    0.9995540121367896, 
+                    0.9995540121367896, 
+                    0.9994796999234827, 
+                    0.9994796999234827, 
+                    0.945683138897753, 
+                    0.945683138897753, 
+                    0.8832395728208394, 
+                    0.8832395728208394, 
+                    0.8265903121115858, 
+                    0.8265903121115858, 
+                    0.7734595876236603, 
+                    0.7734595876236603, 
+                    0.7231962599050676, 
+                    0.7231962599050676, 
+                    0.6751915214464509, 
+                    0.6751915214464509, 
+                    0.6285017932673999, 
+                    0.6285017932673999, 
+                    0.5834726042446678, 
+                    0.5834726042446678, 
+                    0.539487626948711, 
+                    0.539487626948711, 
+                    0.4963686149852436, 
+                    0.4963686149852436, 
+                    0.453702821348992, 
+                    0.453702821348992, 
+                    0.4115188201682394, 
+                    0.4115188201682394, 
+                    0.369431375800421, 
+                    0.369431375800421, 
+                    0.32728454435663357, 
+                    0.32728454435663357, 
+                    0.28508161998347276, 
+                    0.28508161998347276, 
+                    0.2427380609021268, 
+                    0.2427380609021268, 
+                    0.2001115135048812, 
+                    0.2001115135048812, 
+                    0.15679110211028552, 
+                    0.15679110211028552, 
+                    0.10517282274964787, 
+                    0.10517282274964787
+                ], 
+                0.5013836026191711
+            ], 
+            [
+                0.942307710647583, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995530498353605, 
+                    0.9995530498353605, 
+                    0.9995461561006116, 
+                    0.9995461561006116, 
+                    0.9995191143570535, 
+                    0.9995191143570535, 
+                    0.9994396946864686, 
+                    0.9994396946864686, 
+                    0.9456209852758273, 
+                    0.9456209852758273, 
+                    0.8831231549529482, 
+                    0.8831231549529482, 
+                    0.8264126859775027, 
+                    0.8264126859775027, 
+                    0.7732325246858622, 
+                    0.7732325246858622, 
+                    0.722962865027283, 
+                    0.722962865027283, 
+                    0.6749871023947386, 
+                    0.6749871023947386, 
+                    0.6283409167578116, 
+                    0.6283409167578116, 
+                    0.5833723133720359, 
+                    0.5833723133720359, 
+                    0.5394437647109663, 
+                    0.5394437647109663, 
+                    0.49636784473012496, 
+                    0.49636784473012496, 
+                    0.45372917943670044, 
+                    0.45372917943670044, 
+                    0.41155085561886057, 
+                    0.41155085561886057, 
+                    0.36945729067868993, 
+                    0.36945729067868993, 
+                    0.327302669625762, 
+                    0.327302669625762, 
+                    0.2850913465573052, 
+                    0.2850913465573052, 
+                    0.24274143111983099, 
+                    0.24274143111983099, 
+                    0.200110598351002, 
+                    0.200110598351002, 
+                    0.1567877072809803, 
+                    0.1567877072809803, 
+                    0.10517759097089038, 
+                    0.10517759097089038
+                ], 
+                0.5010996460914612
+            ], 
+            [
+                0.9535735249519348, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995189953124091, 
+                    0.9995189953124091, 
+                    0.9995114233308122, 
+                    0.9995114233308122, 
+                    0.9994821201115796, 
+                    0.9994821201115796, 
+                    0.9993973619510982, 
+                    0.9993973619510982, 
+                    0.9455576525804936, 
+                    0.9455576525804936, 
+                    0.8830006505474898, 
+                    0.8830006505474898, 
+                    0.8262239538605528, 
+                    0.8262239538605528, 
+                    0.7729899755598809, 
+                    0.7729899755598809, 
+                    0.722712045270365, 
+                    0.722712045270365, 
+                    0.6747651155848958, 
+                    0.6747651155848958, 
+                    0.6281621926050076, 
+                    0.6281621926050076, 
+                    0.5832550657306502, 
+                    0.5832550657306502, 
+                    0.5393838675886008, 
+                    0.5393838675886008, 
+                    0.49635224704366177, 
+                    0.49635224704366177, 
+                    0.4537418843668041, 
+                    0.4537418843668041, 
+                    0.41157131044174644, 
+                    0.41157131044174644, 
+                    0.36947388272441667, 
+                    0.36947388272441667, 
+                    0.32731334424792435, 
+                    0.32731334424792435, 
+                    0.2850952534996218, 
+                    0.2850952534996218, 
+                    0.24274023941946263, 
+                    0.24274023941946263, 
+                    0.2001060981110387, 
+                    0.2001060981110387, 
+                    0.15678155597170948, 
+                    0.15678155597170948, 
+                    0.1051813468691837, 
+                    0.1051813468691837
+                ], 
+                0.5007609724998474
+            ], 
+            [
+                0.964974045753479, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999544694235894, 
+                    0.999544694235894, 
+                    0.9995367065345842, 
+                    0.9995367065345842, 
+                    0.9995068911822202, 
+                    0.9995068911822202, 
+                    0.9994297350867424, 
+                    0.9994297350867424, 
+                    0.9455923485249278, 
+                    0.9455923485249278, 
+                    0.8830255182997022, 
+                    0.8830255182997022, 
+                    0.8262571872938457, 
+                    0.8262571872938457, 
+                    0.7730579673325927, 
+                    0.7730579673325927, 
+                    0.7228351028156632, 
+                    0.7228351028156632, 
+                    0.6749480356686289, 
+                    0.6749480356686289, 
+                    0.6284123577876835, 
+                    0.6284123577876835, 
+                    0.5835490597073999, 
+                    0.5835490597073999, 
+                    0.5396991227689737, 
+                    0.5396991227689737, 
+                    0.49665984699749294, 
+                    0.49665984699749294, 
+                    0.4540257855355888, 
+                    0.4540257855355888, 
+                    0.411806245166284, 
+                    0.411806245166284, 
+                    0.3696578646604572, 
+                    0.3696578646604572, 
+                    0.3274564993746615, 
+                    0.3274564993746615, 
+                    0.2852048250314549, 
+                    0.2852048250314549, 
+                    0.24282440381137657, 
+                    0.24282440381137657, 
+                    0.20017038185405284, 
+                    0.20017038185405284, 
+                    0.1568283752967552, 
+                    0.1568283752967552, 
+                    0.10523541768065793, 
+                    0.10523541768065793
+                ], 
+                0.501571774482727
+            ], 
+            [
+                0.9765108823776245, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995127522634576, 
+                    0.9995127522634576, 
+                    0.9995038717321957, 
+                    0.9995038717321957, 
+                    0.9994712342179776, 
+                    0.9994712342179776, 
+                    0.9993886716093967, 
+                    0.9993886716093967, 
+                    0.9455325663367834, 
+                    0.9455325663367834, 
+                    0.882895225471102, 
+                    0.882895225471102, 
+                    0.8260483779083767, 
+                    0.8260483779083767, 
+                    0.7727826670638486, 
+                    0.7727826670638486, 
+                    0.7225431206062304, 
+                    0.7225431206062304, 
+                    0.6746806913253277, 
+                    0.6746806913253277, 
+                    0.6281838923324436, 
+                    0.6281838923324436, 
+                    0.5833819562678677, 
+                    0.5833819562678677, 
+                    0.5395907783140894, 
+                    0.5395907783140894, 
+                    0.4965993599630174, 
+                    0.4965993599630174, 
+                    0.45399780790057864, 
+                    0.45399780790057864, 
+                    0.4117930015426086, 
+                    0.4117930015426086, 
+                    0.3696478961482651, 
+                    0.3696478961482651, 
+                    0.327446327779586, 
+                    0.327446327779586, 
+                    0.2851926443025668, 
+                    0.2851926443025668, 
+                    0.24281069887802986, 
+                    0.24281069887802986, 
+                    0.20015609965710363, 
+                    0.20015609965710363, 
+                    0.15681474684167512, 
+                    0.15681474684167512, 
+                    0.10523610681348619, 
+                    0.10523610681348619
+                ], 
+                0.5010928511619568
+            ], 
+            [
+                0.9881856441497803, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994792563983487, 
+                    0.9994792563983487, 
+                    0.9994693884854174, 
+                    0.9994693884854174, 
+                    0.9994336876527076, 
+                    0.9994336876527076, 
+                    0.9993454494084792, 
+                    0.9993454494084792, 
+                    0.9454718229968162, 
+                    0.9454718229968162, 
+                    0.8827554408067835, 
+                    0.8827554408067835, 
+                    0.825820823371118, 
+                    0.825820823371118, 
+                    0.7724797156842789, 
+                    0.7724797156842789, 
+                    0.7222187943273339, 
+                    0.7222187943273339, 
+                    0.6743801500914345, 
+                    0.6743801500914345, 
+                    0.627921896367436, 
+                    0.627921896367436, 
+                    0.5831840559929018, 
+                    0.5831840559929018, 
+                    0.5394549765490609, 
+                    0.5394549765490609, 
+                    0.49651527914701876, 
+                    0.49651527914701876, 
+                    0.45394971522318167, 
+                    0.45394971522318167, 
+                    0.41176359084758846, 
+                    0.41176359084758846, 
+                    0.36962523770871913, 
+                    0.36962523770871913, 
+                    0.32742611859929865, 
+                    0.32742611859929865, 
+                    0.2851725395671236, 
+                    0.2851725395671236, 
+                    0.24279065203041694, 
+                    0.24279065203041694, 
+                    0.20013670778571552, 
+                    0.20013670778571552, 
+                    0.15679709831011637, 
+                    0.15679709831011637, 
+                    0.10523536554755847, 
+                    0.10523536554755847
+                ], 
+                0.5005250573158264
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994683032741825, 
+                    0.9994683032741825, 
+                    0.9994623476839558, 
+                    0.9994623476839558, 
+                    0.9994405294475743, 
+                    0.9994405294475743, 
+                    0.99938122796394, 
+                    0.99938122796394, 
+                    0.9455279073625992, 
+                    0.9455279073625992, 
+                    0.8827817602197191, 
+                    0.8827817602197191, 
+                    0.8258322632336518, 
+                    0.8258322632336518, 
+                    0.7724979255878623, 
+                    0.7724979255878623, 
+                    0.7222691480469574, 
+                    0.7222691480469574, 
+                    0.6744755582984605, 
+                    0.6744755582984605, 
+                    0.6280706108790839, 
+                    0.6280706108790839, 
+                    0.583372576958696, 
+                    0.583372576958696, 
+                    0.5396659182080218, 
+                    0.5396659182080218, 
+                    0.4967258161635287, 
+                    0.4967258161635287, 
+                    0.45414638027606297, 
+                    0.45414638027606297, 
+                    0.41192692880140236, 
+                    0.41192692880140236, 
+                    0.3697533235886656, 
+                    0.3697533235886656, 
+                    0.32752589040561864, 
+                    0.32752589040561864, 
+                    0.2852489194724884, 
+                    0.2852489194724884, 
+                    0.24284920021505127, 
+                    0.24284920021505127, 
+                    0.20018111244323902, 
+                    0.20018111244323902, 
+                    0.15682882638908457, 
+                    0.15682882638908457, 
+                    0.1052828845288119, 
+                    0.1052828845288119
+                ], 
+                0.5010392665863037
+            ], 
+            [
+                1.0119556188583374, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994685094852712, 
+                    0.9994685094852712, 
+                    0.9994618964918852, 
+                    0.9994618964918852, 
+                    0.9994385521930449, 
+                    0.9994385521930449, 
+                    0.9993817202391837, 
+                    0.9993817202391837, 
+                    0.9455218997197019, 
+                    0.9455218997197019, 
+                    0.882700692273109, 
+                    0.882700692273109, 
+                    0.8256748593714586, 
+                    0.8256748593714586, 
+                    0.7722787056670712, 
+                    0.7722787056670712, 
+                    0.7220367894491183, 
+                    0.7220367894491183, 
+                    0.6742693937656924, 
+                    0.6742693937656924, 
+                    0.6279037506949879, 
+                    0.6279037506949879, 
+                    0.5832622766801399, 
+                    0.5832622766801399, 
+                    0.5396067340892515, 
+                    0.5396067340892515, 
+                    0.49670509892547043, 
+                    0.49670509892547043, 
+                    0.4541494100074421, 
+                    0.4541494100074421, 
+                    0.41193744112210295, 
+                    0.41193744112210295, 
+                    0.36976230657438774, 
+                    0.36976230657438774, 
+                    0.32753140965540267, 
+                    0.32753140965540267, 
+                    0.28525014011394695, 
+                    0.28525014011394695, 
+                    0.24284697500833202, 
+                    0.24284697500833202, 
+                    0.2001764040607482, 
+                    0.2001764040607482, 
+                    0.1568225064280615, 
+                    0.1568225064280615, 
+                    0.10529829155718695, 
+                    0.10529829155718695
+                ], 
+                0.5007409453392029
+            ], 
+            [
+                1.0240541696548462, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994787242513672, 
+                    0.9994787242513672, 
+                    0.9994757855658284, 
+                    0.9994757855658284, 
+                    0.9994653174091553, 
+                    0.9994653174091553, 
+                    0.9994377612169482, 
+                    0.9994377612169482, 
+                    0.9455962490442417, 
+                    0.9455962490442417, 
+                    0.882722430632687, 
+                    0.882722430632687, 
+                    0.8256546920098939, 
+                    0.8256546920098939, 
+                    0.7722335623957002, 
+                    0.7722335623957002, 
+                    0.7219997475657672, 
+                    0.7219997475657672, 
+                    0.6742641578863184, 
+                    0.6742641578863184, 
+                    0.6279405859942664, 
+                    0.6279405859942664, 
+                    0.5833399344783905, 
+                    0.5833399344783905, 
+                    0.5397133379598348, 
+                    0.5397133379598348, 
+                    0.4968232628002685, 
+                    0.4968232628002685, 
+                    0.45426662449102767, 
+                    0.45426662449102767, 
+                    0.41203769438862897, 
+                    0.41203769438862897, 
+                    0.3698419072943757, 
+                    0.3698419072943757, 
+                    0.3275936843650316, 
+                    0.3275936843650316, 
+                    0.2852975695531095, 
+                    0.2852975695531095, 
+                    0.24288281420826488, 
+                    0.24288281420826488, 
+                    0.2002028497034915, 
+                    0.2002028497034915, 
+                    0.15684038529932098, 
+                    0.15684038529932098, 
+                    0.10533967242587317, 
+                    0.10533967242587317
+                ], 
+                0.5009829998016357
+            ], 
+            [
+                1.03629732131958, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995092486875629, 
+                    0.9995092486875629, 
+                    0.9995092486875629, 
+                    0.9995092486875629, 
+                    0.9995092486875629, 
+                    0.9995092486875629, 
+                    0.9995092486875629, 
+                    0.9995092486875629, 
+                    0.945680868825777, 
+                    0.945680868825777, 
+                    0.8827386315658281, 
+                    0.8827386315658281, 
+                    0.8256102796740055, 
+                    0.8256102796740055, 
+                    0.7721426481410221, 
+                    0.7721426481410221, 
+                    0.721901597121718, 
+                    0.721901597121718, 
+                    0.6741904805775086, 
+                    0.6741904805775086, 
+                    0.6279035640015576, 
+                    0.6279035640015576, 
+                    0.5833464703130962, 
+                    0.5833464703130962, 
+                    0.53975484029697, 
+                    0.53975484029697, 
+                    0.4968852041080712, 
+                    0.4968852041080712, 
+                    0.454336533349973, 
+                    0.454336533349973, 
+                    0.41210081493580486, 
+                    0.41210081493580486, 
+                    0.3698930329364366, 
+                    0.3698930329364366, 
+                    0.3276338947844715, 
+                    0.3276338947844715, 
+                    0.2853278310250757, 
+                    0.2853278310250757, 
+                    0.2429050564562837, 
+                    0.2429050564562837, 
+                    0.20021843840596268, 
+                    0.20021843840596268, 
+                    0.15684982274230816, 
+                    0.15684982274230816, 
+                    0.10537732224532045, 
+                    0.10537732224532045
+                ], 
+                0.5010538697242737
+            ], 
+            [
+                1.0486868619918823, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998152962461238, 
+                    0.9998152962461238, 
+                    0.9998134044772411, 
+                    0.9998134044772411, 
+                    0.9998096155872684, 
+                    0.9998096155872684, 
+                    0.9456502511159902, 
+                    0.9456502511159902, 
+                    0.8826653308378898, 
+                    0.8826653308378898, 
+                    0.8254398816884055, 
+                    0.8254398816884055, 
+                    0.7718432543571278, 
+                    0.7718432543571278, 
+                    0.7215340338980699, 
+                    0.7215340338980699, 
+                    0.6738205094745977, 
+                    0.6738205094745977, 
+                    0.627551362738872, 
+                    0.627551362738872, 
+                    0.5830646391823942, 
+                    0.5830646391823942, 
+                    0.5395518235351887, 
+                    0.5395518235351887, 
+                    0.4967586787464604, 
+                    0.4967586787464604, 
+                    0.4542701043708021, 
+                    0.4542701043708021, 
+                    0.4120800840186204, 
+                    0.4120800840186204, 
+                    0.36990101790460983, 
+                    0.36990101790460983, 
+                    0.3276588670341743, 
+                    0.3276588670341743, 
+                    0.28536196509197864, 
+                    0.28536196509197864, 
+                    0.24294297815597404, 
+                    0.24294297815597404, 
+                    0.20025609650868878, 
+                    0.20025609650868878, 
+                    0.15688290043770245, 
+                    0.15688290043770245, 
+                    0.10544825934127189, 
+                    0.10544825934127189
+                ], 
+                0.5006662607192993
+            ], 
+            [
+                1.0612244606018066, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995158598263686, 
+                    0.9995158598263686, 
+                    0.9995061300368108, 
+                    0.9995061300368108, 
+                    0.9994738182641791, 
+                    0.9994738182641791, 
+                    0.9994022474513524, 
+                    0.9994022474513524, 
+                    0.9458790031578552, 
+                    0.9458790031578552, 
+                    0.8827414140874812, 
+                    0.8827414140874812, 
+                    0.8254248411668241, 
+                    0.8254248411668241, 
+                    0.7717876269512731, 
+                    0.7717876269512731, 
+                    0.7214782876156843, 
+                    0.7214782876156843, 
+                    0.6737921240115733, 
+                    0.6737921240115733, 
+                    0.6275591981680259, 
+                    0.6275591981680259, 
+                    0.5831041769163972, 
+                    0.5831041769163972, 
+                    0.5396093536527771, 
+                    0.5396093536527771, 
+                    0.49681727538244097, 
+                    0.49681727538244097, 
+                    0.4543185532614565, 
+                    0.4543185532614565, 
+                    0.4121062630517409, 
+                    0.4121062630517409, 
+                    0.369903940397286, 
+                    0.369903940397286, 
+                    0.32764370286561717, 
+                    0.32764370286561717, 
+                    0.2853331109811145, 
+                    0.2853331109811145, 
+                    0.24290527564155145, 
+                    0.24290527564155145, 
+                    0.200213765316862, 
+                    0.200213765316862, 
+                    0.15684054089397906, 
+                    0.15684054089397906, 
+                    0.105440400608678, 
+                    0.105440400608678
+                ], 
+                0.5005284547805786
+            ], 
+            [
+                1.0739120244979858, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996192070623746, 
+                    0.9996192070623746, 
+                    0.9996192070623746, 
+                    0.9996192070623746, 
+                    0.9996192070623746, 
+                    0.9996192070623746, 
+                    0.9996192070623746, 
+                    0.9996192070623746, 
+                    0.9461463033685672, 
+                    0.9461463033685672, 
+                    0.8829328015702488, 
+                    0.8829328015702488, 
+                    0.8255587790345514, 
+                    0.8255587790345514, 
+                    0.7718699901543056, 
+                    0.7718699901543056, 
+                    0.721539199580097, 
+                    0.721539199580097, 
+                    0.6738618333089139, 
+                    0.6738618333089139, 
+                    0.6276526308150454, 
+                    0.6276526308150454, 
+                    0.5832222104835365, 
+                    0.5832222104835365, 
+                    0.5397434766265881, 
+                    0.5397434766265881, 
+                    0.49695381997556676, 
+                    0.49695381997556676, 
+                    0.4544488228262447, 
+                    0.4544488228262447, 
+                    0.4122183628676607, 
+                    0.4122183628676607, 
+                    0.36999636616855647, 
+                    0.36999636616855647, 
+                    0.32771971879285616, 
+                    0.32771971879285616, 
+                    0.28539476135694797, 
+                    0.28539476135694797, 
+                    0.24295484411568274, 
+                    0.24295484411568274, 
+                    0.2002524492976603, 
+                    0.2002524492976603, 
+                    0.15686795858047503, 
+                    0.15686795858047503, 
+                    0.10551099821255996, 
+                    0.10551099821255996
+                ], 
+                0.5010286569595337
+            ], 
+            [
+                1.0867513418197632, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996694490399511, 
+                    0.9996694490399511, 
+                    0.9996650400165544, 
+                    0.9996650400165544, 
+                    0.9996503400044608, 
+                    0.9996503400044608, 
+                    0.9996147848483196, 
+                    0.9996147848483196, 
+                    0.9464048601021581, 
+                    0.9464048601021581, 
+                    0.8830717773791632, 
+                    0.8830717773791632, 
+                    0.8255883940915231, 
+                    0.8255883940915231, 
+                    0.7717910206157808, 
+                    0.7717910206157808, 
+                    0.7214034051700028, 
+                    0.7214034051700028, 
+                    0.673723684496144, 
+                    0.673723684496144, 
+                    0.6275322130745474, 
+                    0.6275322130745474, 
+                    0.583144090639827, 
+                    0.583144090639827, 
+                    0.5397063004690461, 
+                    0.5397063004690461, 
+                    0.49694881418666526, 
+                    0.49694881418666526, 
+                    0.45446417041177634, 
+                    0.45446417041177634, 
+                    0.41224195784814166, 
+                    0.41224195784814166, 
+                    0.3700207703176859, 
+                    0.3700207703176859, 
+                    0.32774225434449805, 
+                    0.32774225434449805, 
+                    0.28541372567127904, 
+                    0.28541372567127904, 
+                    0.24296967154163165, 
+                    0.24296967154163165, 
+                    0.20026274467675698, 
+                    0.20026274467675698, 
+                    0.15687304811441954, 
+                    0.15687304811441954, 
+                    0.1055676455133274, 
+                    0.1055676455133274
+                ], 
+                0.5009848475456238
+            ], 
+            [
+                1.0997440814971924, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997675383301052, 
+                    0.9997675383301052, 
+                    0.9997627700473418, 
+                    0.9997627700473418, 
+                    0.9997470838757954, 
+                    0.9997470838757954, 
+                    0.9997098245650948, 
+                    0.9997098245650948, 
+                    0.9467028827768331, 
+                    0.9467028827768331, 
+                    0.883216902374158, 
+                    0.883216902374158, 
+                    0.8255887211508954, 
+                    0.8255887211508954, 
+                    0.7716447736419251, 
+                    0.7716447736419251, 
+                    0.7211787981095111, 
+                    0.7211787981095111, 
+                    0.6734917249726646, 
+                    0.6734917249726646, 
+                    0.6273192545368442, 
+                    0.6273192545368442, 
+                    0.5829832292690845, 
+                    0.5829832292690845, 
+                    0.5395984108138928, 
+                    0.5395984108138928, 
+                    0.49688586407388285, 
+                    0.49688586407388285, 
+                    0.45443321775988665, 
+                    0.45443321775988665, 
+                    0.41222977846514525, 
+                    0.41222977846514525, 
+                    0.3700178577217271, 
+                    0.3700178577217271, 
+                    0.32774376488073037, 
+                    0.32774376488073037, 
+                    0.28541630076021407, 
+                    0.28541630076021407, 
+                    0.2429714618312875, 
+                    0.2429714618312875, 
+                    0.20026252495690355, 
+                    0.20026252495690355, 
+                    0.15686974999809852, 
+                    0.15686974999809852, 
+                    0.1056249149000931, 
+                    0.1056249149000931
+                ], 
+                0.5007433891296387
+            ], 
+            [
+                1.1128921508789062, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99993715297038, 
+                    0.99993715297038, 
+                    0.99993715297038, 
+                    0.99993715297038, 
+                    0.99993715297038, 
+                    0.99993715297038, 
+                    0.99993715297038, 
+                    0.99993715297038, 
+                    0.9470810020420024, 
+                    0.9470810020420024, 
+                    0.8834164764816864, 
+                    0.8834164764816864, 
+                    0.8256208393225436, 
+                    0.8256208393225436, 
+                    0.7715043904377364, 
+                    0.7715043904377364, 
+                    0.7209439045102617, 
+                    0.7209439045102617, 
+                    0.6732435680028973, 
+                    0.6732435680028973, 
+                    0.6270892311549194, 
+                    0.6270892311549194, 
+                    0.5828068254677635, 
+                    0.5828068254677635, 
+                    0.5394775571013894, 
+                    0.5394775571013894, 
+                    0.4968127941417938, 
+                    0.4968127941417938, 
+                    0.4543951740198816, 
+                    0.4543951740198816, 
+                    0.4122131180390837, 
+                    0.4122131180390837, 
+                    0.37001272418659503, 
+                    0.37001272418659503, 
+                    0.327744715526144, 
+                    0.327744715526144, 
+                    0.28541935750599506, 
+                    0.28541935750599506, 
+                    0.24297423235853616, 
+                    0.24297423235853616, 
+                    0.20026333866378476, 
+                    0.20026333866378476, 
+                    0.15686712515236167, 
+                    0.15686712515236167, 
+                    0.10569225119489233, 
+                    0.10569225119489233
+                ], 
+                0.5004936456680298
+            ], 
+            [
+                1.1261974573135376, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999934024227841, 
+                    0.9999934024227841, 
+                    0.9997794311471221, 
+                    0.9997794311471221, 
+                    0.9997628725581038, 
+                    0.9997628725581038, 
+                    0.999725301672914, 
+                    0.999725301672914, 
+                    0.946857376932584, 
+                    0.946857376932584, 
+                    0.8833272627058074, 
+                    0.8833272627058074, 
+                    0.8254324736447669, 
+                    0.8254324736447669, 
+                    0.7710314932977408, 
+                    0.7710314932977408, 
+                    0.7202996420650565, 
+                    0.7202996420650565, 
+                    0.6725699946703251, 
+                    0.6725699946703251, 
+                    0.6264323960679419, 
+                    0.6264323960679419, 
+                    0.5823063001449273, 
+                    0.5823063001449273, 
+                    0.5391663982443653, 
+                    0.5391663982443653, 
+                    0.49669723147072026, 
+                    0.49669723147072026, 
+                    0.454440938048067, 
+                    0.454440938048067, 
+                    0.4123920747952492, 
+                    0.4123920747952492, 
+                    0.3702808366925718, 
+                    0.3702808366925718, 
+                    0.32806475229539755, 
+                    0.32806475229539755, 
+                    0.28576444161950176, 
+                    0.28576444161950176, 
+                    0.24332255396322466, 
+                    0.24332255396322466, 
+                    0.20059553507829092, 
+                    0.20059553507829092, 
+                    0.15715831434063818, 
+                    0.15715831434063818, 
+                    0.10607435393221114, 
+                    0.10607435393221114
+                ], 
+                0.5004013180732727
+            ]
+        ]
+    }, 
+    {
+        "block_size": 50, 
+        "preprocessing_block_sizes": [
+            26
+        ], 
+        "pruning_parameters": [
+            [
+                0.8899964690208435, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9997771164101557, 
+                    0.9997771164101557, 
+                    0.9997745359125901, 
+                    0.9997745359125901, 
+                    0.9997624354661735, 
+                    0.9997624354661735, 
+                    0.9997203859210224, 
+                    0.9997203859210224, 
+                    0.9648203795065332, 
+                    0.9648203795065332, 
+                    0.902278781847568, 
+                    0.902278781847568, 
+                    0.8453965797600765, 
+                    0.8453965797600765, 
+                    0.7916733259988408, 
+                    0.7916733259988408, 
+                    0.7412061950254955, 
+                    0.7412061950254955, 
+                    0.6926091143692317, 
+                    0.6926091143692317, 
+                    0.6454034852236596, 
+                    0.6454034852236596, 
+                    0.5999549058387347, 
+                    0.5999549058387347, 
+                    0.5563619651506646, 
+                    0.5563619651506646, 
+                    0.5155897139520562, 
+                    0.5155897139520562, 
+                    0.4753711080756652, 
+                    0.4753711080756652, 
+                    0.4353263867157934, 
+                    0.4353263867157934, 
+                    0.3959930383539543, 
+                    0.3959930383539543, 
+                    0.35656925524435856, 
+                    0.35656925524435856, 
+                    0.3168421111080381, 
+                    0.3168421111080381, 
+                    0.2768643730926182, 
+                    0.2768643730926182, 
+                    0.23655243342044702, 
+                    0.23655243342044702, 
+                    0.19580588023710271, 
+                    0.19580588023710271, 
+                    0.15424239909176937, 
+                    0.15424239909176937, 
+                    0.104178745491198, 
+                    0.104178745491198
+                ], 
+                0.501573383808136
+            ], 
+            [
+                0.9004289507865906, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9997572304445438, 
+                    0.9997572304445438, 
+                    0.9997543420753493, 
+                    0.9997543420753493, 
+                    0.999740984687122, 
+                    0.999740984687122, 
+                    0.9996953264107857, 
+                    0.9996953264107857, 
+                    0.9647630802138847, 
+                    0.9647630802138847, 
+                    0.9021429882631019, 
+                    0.9021429882631019, 
+                    0.8451588162513238, 
+                    0.8451588162513238, 
+                    0.7913337199428035, 
+                    0.7913337199428035, 
+                    0.7408422796787666, 
+                    0.7408422796787666, 
+                    0.6922610904856107, 
+                    0.6922610904856107, 
+                    0.645117567641202, 
+                    0.645117567641202, 
+                    0.5997792262362418, 
+                    0.5997792262362418, 
+                    0.5563172011515611, 
+                    0.5563172011515611, 
+                    0.5156460751351041, 
+                    0.5156460751351041, 
+                    0.47548951390008687, 
+                    0.47548951390008687, 
+                    0.43548544467503975, 
+                    0.43548544467503975, 
+                    0.39614426408759684, 
+                    0.39614426408759684, 
+                    0.35669032754433033, 
+                    0.35669032754433033, 
+                    0.31693235447566603, 
+                    0.31693235447566603, 
+                    0.27692558848939497, 
+                    0.27692558848939497, 
+                    0.2365921366959108, 
+                    0.2365921366959108, 
+                    0.19583019728811404, 
+                    0.19583019728811404, 
+                    0.1542558186863244, 
+                    0.1542558186863244, 
+                    0.10419508491001796, 
+                    0.10419508491001796
+                ], 
+                0.5013809204101562
+            ], 
+            [
+                0.9109837412834167, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9997358800917571, 
+                    0.9997358800917571, 
+                    0.9997326494272305, 
+                    0.9997326494272305, 
+                    0.9997179164189631, 
+                    0.9997179164189631, 
+                    0.9996683927218089, 
+                    0.9996683927218089, 
+                    0.964705137545286, 
+                    0.964705137545286, 
+                    0.9020017338702873, 
+                    0.9020017338702873, 
+                    0.8449110399477594, 
+                    0.8449110399477594, 
+                    0.7909812963383857, 
+                    0.7909812963383857, 
+                    0.7404666126567305, 
+                    0.7404666126567305, 
+                    0.6919031178429977, 
+                    0.6919031178429977, 
+                    0.644823472383918, 
+                    0.644823472383918, 
+                    0.5995962274073744, 
+                    0.5995962274073744, 
+                    0.5562642969634833, 
+                    0.5562642969634833, 
+                    0.5156931856580149, 
+                    0.5156931856580149, 
+                    0.4755971620242783, 
+                    0.4755971620242783, 
+                    0.4356319115119063, 
+                    0.4356319115119063, 
+                    0.3962831534809493, 
+                    0.3962831534809493, 
+                    0.3568007442231422, 
+                    0.3568007442231422, 
+                    0.31701386071026405, 
+                    0.31701386071026405, 
+                    0.2769800926506875, 
+                    0.2769800926506875, 
+                    0.2366267704456976, 
+                    0.2366267704456976, 
+                    0.19585074520745593, 
+                    0.19585074520745593, 
+                    0.15426653368325502, 
+                    0.15426653368325502, 
+                    0.10421033949027916, 
+                    0.10421033949027916
+                ], 
+                0.5011433362960815
+            ], 
+            [
+                0.9216622114181519, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9997129834634441, 
+                    0.9997129834634441, 
+                    0.999709372341844, 
+                    0.999709372341844, 
+                    0.9996931344726475, 
+                    0.9996931344726475, 
+                    0.9996394744026088, 
+                    0.9996394744026088, 
+                    0.9646470172096137, 
+                    0.9646470172096137, 
+                    0.9018548952564378, 
+                    0.9018548952564378, 
+                    0.8446524669959373, 
+                    0.8446524669959373, 
+                    0.7906145164366327, 
+                    0.7906145164366327, 
+                    0.7400771004306037, 
+                    0.7400771004306037, 
+                    0.6915325260196721, 
+                    0.6915325260196721, 
+                    0.6445179330258626, 
+                    0.6445179330258626, 
+                    0.5994022536629076, 
+                    0.5994022536629076, 
+                    0.5561995590009859, 
+                    0.5561995590009859, 
+                    0.5157279784030029, 
+                    0.5157279784030029, 
+                    0.4756916241757985, 
+                    0.4756916241757985, 
+                    0.4357639706892003, 
+                    0.4357639706892003, 
+                    0.3964084975947678, 
+                    0.3964084975947678, 
+                    0.3568996956124211, 
+                    0.3568996956124211, 
+                    0.3170860611540489, 
+                    0.3170860611540489, 
+                    0.27702744673287, 
+                    0.27702744673287, 
+                    0.2366559687252485, 
+                    0.2366559687252485, 
+                    0.19586720659140308, 
+                    0.19586720659140308, 
+                    0.1542742761228548, 
+                    0.1542742761228548, 
+                    0.10422443148888895, 
+                    0.10422443148888895
+                ], 
+                0.5008524656295776
+            ], 
+            [
+                0.9324659109115601, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996884548761884, 
+                    0.9996884548761884, 
+                    0.9996844209596367, 
+                    0.9996844209596367, 
+                    0.9996665373918152, 
+                    0.9996665373918152, 
+                    0.9996084550355314, 
+                    0.9996084550355314, 
+                    0.9645892647893659, 
+                    0.9645892647893659, 
+                    0.9017022968313921, 
+                    0.9017022968313921, 
+                    0.8443820937738151, 
+                    0.8443820937738151, 
+                    0.7902314203158161, 
+                    0.7902314203158161, 
+                    0.7396711000379981, 
+                    0.7396711000379981, 
+                    0.6911460040273211, 
+                    0.6911460040273211, 
+                    0.6441969983980854, 
+                    0.6441969983980854, 
+                    0.5991930044247308, 
+                    0.5991930044247308, 
+                    0.5561187582688785, 
+                    0.5561187582688785, 
+                    0.5157470111882076, 
+                    0.5157470111882076, 
+                    0.47577020968186684, 
+                    0.47577020968186684, 
+                    0.4358796225592369, 
+                    0.4358796225592369, 
+                    0.39651895195299053, 
+                    0.39651895195299053, 
+                    0.356986261491082, 
+                    0.356986261491082, 
+                    0.3171482926456979, 
+                    0.3171482926456979, 
+                    0.2770671299122709, 
+                    0.2770671299122709, 
+                    0.23667929481391806, 
+                    0.23667929481391806, 
+                    0.195879204142832, 
+                    0.195879204142832, 
+                    0.15427872986730046, 
+                    0.15427872986730046, 
+                    0.10423726756767145, 
+                    0.10423726756767145
+                ], 
+                0.5004985332489014
+            ], 
+            [
+                0.9433962106704712, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996695489638544, 
+                    0.9996695489638544, 
+                    0.9996659546830025, 
+                    0.9996659546830025, 
+                    0.9996501108061929, 
+                    0.9996501108061929, 
+                    0.9995975640267529, 
+                    0.9995975640267529, 
+                    0.9645836976146899, 
+                    0.9645836976146899, 
+                    0.9016403446548659, 
+                    0.9016403446548659, 
+                    0.8442663686321142, 
+                    0.8442663686321142, 
+                    0.7900898156527347, 
+                    0.7900898156527347, 
+                    0.7395693093301781, 
+                    0.7395693093301781, 
+                    0.6911229922549261, 
+                    0.6911229922549261, 
+                    0.6442944656273486, 
+                    0.6442944656273486, 
+                    0.5994330445244204, 
+                    0.5994330445244204, 
+                    0.5564871754961853, 
+                    0.5564871754961853, 
+                    0.5161511406844196, 
+                    0.5161511406844196, 
+                    0.4761720606928484, 
+                    0.4761720606928484, 
+                    0.4362657219402544, 
+                    0.4362657219402544, 
+                    0.396839570456976, 
+                    0.396839570456976, 
+                    0.35723508839008455, 
+                    0.35723508839008455, 
+                    0.3173379428103911, 
+                    0.3173379428103911, 
+                    0.2772078582332027, 
+                    0.2772078582332027, 
+                    0.23678397968029521, 
+                    0.23678397968029521, 
+                    0.19595650469143505, 
+                    0.19595650469143505, 
+                    0.15433308272348895, 
+                    0.15433308272348895, 
+                    0.10429803498254746, 
+                    0.10429803498254746
+                ], 
+                0.5013154745101929
+            ], 
+            [
+                0.9544546604156494, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996415566418752, 
+                    0.9996415566418752, 
+                    0.9996375757876323, 
+                    0.9996375757876323, 
+                    0.9996202650863403, 
+                    0.9996202650863403, 
+                    0.999563684182871, 
+                    0.999563684182871, 
+                    0.9645321539826157, 
+                    0.9645321539826157, 
+                    0.9014807555246785, 
+                    0.9014807555246785, 
+                    0.8439756632600992, 
+                    0.8439756632600992, 
+                    0.7896748418737395, 
+                    0.7896748418737395, 
+                    0.7391276679750511, 
+                    0.7391276679750511, 
+                    0.6906979375667923, 
+                    0.6906979375667923, 
+                    0.6439313933079909, 
+                    0.6439313933079909, 
+                    0.5991775397156469, 
+                    0.5991775397156469, 
+                    0.5563555544017342, 
+                    0.5563555544017342, 
+                    0.5161208071797821, 
+                    0.5161208071797821, 
+                    0.47620290013318584, 
+                    0.47620290013318584, 
+                    0.43633463663593414, 
+                    0.43633463663593414, 
+                    0.3969095916077038, 
+                    0.3969095916077038, 
+                    0.3572890690775666, 
+                    0.3572890690775666, 
+                    0.3173744811803942, 
+                    0.3173744811803942, 
+                    0.27722793835821996, 
+                    0.27722793835821996, 
+                    0.2367923151281803, 
+                    0.2367923151281803, 
+                    0.19595706248267392, 
+                    0.19595706248267392, 
+                    0.15432906627923834, 
+                    0.15432906627923834, 
+                    0.10430742141112707, 
+                    0.10430742141112707
+                ], 
+                0.5007967352867126
+            ], 
+            [
+                0.9656427502632141, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996307156672174, 
+                    0.9996307156672174, 
+                    0.9996256969041043, 
+                    0.9996256969041043, 
+                    0.9996045281980921, 
+                    0.9996045281980921, 
+                    0.9995413503514842, 
+                    0.9995413503514842, 
+                    0.9645059775656447, 
+                    0.9645059775656447, 
+                    0.9013576096728125, 
+                    0.9013576096728125, 
+                    0.8437435698775848, 
+                    0.8437435698775848, 
+                    0.7893512325067886, 
+                    0.7893512325067886, 
+                    0.7388020062238433, 
+                    0.7388020062238433, 
+                    0.6904108067458724, 
+                    0.6904108067458724, 
+                    0.6437235886024565, 
+                    0.6437235886024565, 
+                    0.5990830106691184, 
+                    0.5990830106691184, 
+                    0.5563777344793541, 
+                    0.5563777344793541, 
+                    0.5162206555036417, 
+                    0.5162206555036417, 
+                    0.4763411470986105, 
+                    0.4763411470986105, 
+                    0.4364905354131457, 
+                    0.4364905354131457, 
+                    0.39704717628393915, 
+                    0.39704717628393915, 
+                    0.3573957680038202, 
+                    0.3573957680038202, 
+                    0.31745285957289654, 
+                    0.31745285957289654, 
+                    0.2772817313453717, 
+                    0.2772817313453717, 
+                    0.23682811528396108, 
+                    0.23682811528396108, 
+                    0.19597983585473774, 
+                    0.19597983585473774, 
+                    0.1543421252569821, 
+                    0.1543421252569821, 
+                    0.10433476675595442, 
+                    0.10433476675595442
+                ], 
+                0.5006929636001587
+            ], 
+            [
+                0.9769619703292847, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996079420865545, 
+                    0.9996079420865545, 
+                    0.9996026124828775, 
+                    0.9996026124828775, 
+                    0.9995805101935872, 
+                    0.9995805101935872, 
+                    0.9995162800974525, 
+                    0.9995162800974525, 
+                    0.9644878015116952, 
+                    0.9644878015116952, 
+                    0.901233093225495, 
+                    0.901233093225495, 
+                    0.8434991600071701, 
+                    0.8434991600071701, 
+                    0.7890028764375611, 
+                    0.7890028764375611, 
+                    0.7384440184529164, 
+                    0.7384440184529164, 
+                    0.690085614698203, 
+                    0.690085614698203, 
+                    0.6434740736340782, 
+                    0.6434740736340782, 
+                    0.5989463191488833, 
+                    0.5989463191488833, 
+                    0.5563600796412295, 
+                    0.5563600796412295, 
+                    0.5162839057619767, 
+                    0.5162839057619767, 
+                    0.4764461800115785, 
+                    0.4764461800115785, 
+                    0.43661694764254716, 
+                    0.43661694764254716, 
+                    0.3971595596944124, 
+                    0.3971595596944124, 
+                    0.3574819894337863, 
+                    0.3574819894337863, 
+                    0.31751499935194083, 
+                    0.31751499935194083, 
+                    0.27732287808974837, 
+                    0.27732287808974837, 
+                    0.23685406569519107, 
+                    0.23685406569519107, 
+                    0.19599495457946275, 
+                    0.19599495457946275, 
+                    0.15434937158520715, 
+                    0.15434937158520715, 
+                    0.10436009889073045, 
+                    0.10436009889073045
+                ], 
+                0.5004624724388123
+            ], 
+            [
+                0.9884138703346252, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995865335308913, 
+                    0.9995865335308913, 
+                    0.9995819995375304, 
+                    0.9995819995375304, 
+                    0.9995632960732286, 
+                    0.9995632960732286, 
+                    0.9995076835458678, 
+                    0.9995076835458678, 
+                    0.9645164689880181, 
+                    0.9645164689880181, 
+                    0.9011751526103643, 
+                    0.9011751526103643, 
+                    0.8433549502420262, 
+                    0.8433549502420262, 
+                    0.7887982864580982, 
+                    0.7887982864580982, 
+                    0.7382573311277372, 
+                    0.7382573311277372, 
+                    0.6899562025686341, 
+                    0.6899562025686341, 
+                    0.6434407097652335, 
+                    0.6434407097652335, 
+                    0.5990325261584516, 
+                    0.5990325261584516, 
+                    0.5565567169772293, 
+                    0.5565567169772293, 
+                    0.5165244631511957, 
+                    0.5165244631511957, 
+                    0.47669574800514436, 
+                    0.47669574800514436, 
+                    0.43686103063857495, 
+                    0.43686103063857495, 
+                    0.39736237049457335, 
+                    0.39736237049457335, 
+                    0.35763842334610635, 
+                    0.35763842334610635, 
+                    0.31763303981911567, 
+                    0.31763303981911567, 
+                    0.2774092636113677, 
+                    0.2774092636113677, 
+                    0.2369171362828587, 
+                    0.2369171362828587, 
+                    0.19604032320047046, 
+                    0.19604032320047046, 
+                    0.15437995220217673, 
+                    0.15437995220217673, 
+                    0.1044104819332353, 
+                    0.1044104819332353
+                ], 
+                0.5008072257041931
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995658249391268, 
+                    0.9995658249391268, 
+                    0.9995622044383591, 
+                    0.9995622044383591, 
+                    0.9995473077325434, 
+                    0.9995473077325434, 
+                    0.9995014440568597, 
+                    0.9995014440568597, 
+                    0.9645592203205691, 
+                    0.9645592203205691, 
+                    0.9011197965068385, 
+                    0.9011197965068385, 
+                    0.8431999733093309, 
+                    0.8431999733093309, 
+                    0.7885673468576536, 
+                    0.7885673468576536, 
+                    0.7380334040831162, 
+                    0.7380334040831162, 
+                    0.6897795968642253, 
+                    0.6897795968642253, 
+                    0.6433504029285843, 
+                    0.6433504029285843, 
+                    0.5990546943481914, 
+                    0.5990546943481914, 
+                    0.5566860217207125, 
+                    0.5566860217207125, 
+                    0.5167044444605451, 
+                    0.5167044444605451, 
+                    0.4768918320534176, 
+                    0.4768918320534176, 
+                    0.43705786094312027, 
+                    0.43705786094312027, 
+                    0.39752732160868925, 
+                    0.39752732160868925, 
+                    0.35776560353288966, 
+                    0.35776560353288966, 
+                    0.31772848783767194, 
+                    0.31772848783767194, 
+                    0.2774783309914426, 
+                    0.2774783309914426, 
+                    0.2369667321737796, 
+                    0.2369667321737796, 
+                    0.19607515697263306, 
+                    0.19607515697263306, 
+                    0.15440254735486475, 
+                    0.15440254735486475, 
+                    0.10445744534739257, 
+                    0.10445744534739257
+                ], 
+                0.5009782910346985
+            ], 
+            [
+                1.0117219686508179, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995584876065489, 
+                    0.9995584876065489, 
+                    0.999555002479463, 
+                    0.999555002479463, 
+                    0.9995410311232452, 
+                    0.9995410311232452, 
+                    0.999500799881345, 
+                    0.999500799881345, 
+                    0.9646169515814838, 
+                    0.9646169515814838, 
+                    0.9010652164559912, 
+                    0.9010652164559912, 
+                    0.8430293845651368, 
+                    0.8430293845651368, 
+                    0.7883020250129518, 
+                    0.7883020250129518, 
+                    0.7377623407773912, 
+                    0.7377623407773912, 
+                    0.6895442075218567, 
+                    0.6895442075218567, 
+                    0.6431897854768954, 
+                    0.6431897854768954, 
+                    0.5989986381793734, 
+                    0.5989986381793734, 
+                    0.556734233586205, 
+                    0.556734233586205, 
+                    0.5168141330180605, 
+                    0.5168141330180605, 
+                    0.4770275523705939, 
+                    0.4770275523705939, 
+                    0.43720239206811884, 
+                    0.43720239206811884, 
+                    0.39765122869073727, 
+                    0.39765122869073727, 
+                    0.3578613626145251, 
+                    0.3578613626145251, 
+                    0.31779968581272394, 
+                    0.31779968581272394, 
+                    0.27752870046353123, 
+                    0.27752870046353123, 
+                    0.2370016313514881, 
+                    0.2370016313514881, 
+                    0.19609836463171515, 
+                    0.19609836463171515, 
+                    0.15441625001293965, 
+                    0.15441625001293965, 
+                    0.10450055973765322, 
+                    0.10450055973765322
+                ], 
+                0.5009517073631287
+            ], 
+            [
+                1.0235812664031982, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995417928979103, 
+                    0.9995417928979103, 
+                    0.9995393834772954, 
+                    0.9995393834772954, 
+                    0.9995297473757085, 
+                    0.9995297473757085, 
+                    0.9995009904946298, 
+                    0.9995009904946298, 
+                    0.9646926209688863, 
+                    0.9646926209688863, 
+                    0.901010559517837, 
+                    0.901010559517837, 
+                    0.8428367673193043, 
+                    0.8428367673193043, 
+                    0.7879885846657155, 
+                    0.7879885846657155, 
+                    0.7374260916008686, 
+                    0.7374260916008686, 
+                    0.6892302572672084, 
+                    0.6892302572672084, 
+                    0.6429407380843224, 
+                    0.6429407380843224, 
+                    0.5988509790485348, 
+                    0.5988509790485348, 
+                    0.5566941315340951, 
+                    0.5566941315340951, 
+                    0.5168478193708296, 
+                    0.5168478193708296, 
+                    0.4770987526740623, 
+                    0.4770987526740623, 
+                    0.43729249582217783, 
+                    0.43729249582217783, 
+                    0.39773195009365314, 
+                    0.39773195009365314, 
+                    0.3579235552154283, 
+                    0.3579235552154283, 
+                    0.3178446925759703, 
+                    0.3178446925759703, 
+                    0.2775585943526144, 
+                    0.2775585943526144, 
+                    0.2370202857945731, 
+                    0.2370202857945731, 
+                    0.19610863495601802, 
+                    0.19610863495601802, 
+                    0.15441995678654724, 
+                    0.15441995678654724, 
+                    0.10453977466111161, 
+                    0.10453977466111161
+                ], 
+                0.500684380531311
+            ], 
+            [
+                1.0355796813964844, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995424639346954, 
+                    0.9995424639346954, 
+                    0.9995413637159023, 
+                    0.9995413637159023, 
+                    0.9995370267967797, 
+                    0.9995370267967797, 
+                    0.9995242899163582, 
+                    0.9995242899163582, 
+                    0.9648215123515197, 
+                    0.9648215123515197, 
+                    0.9010122073189062, 
+                    0.9010122073189062, 
+                    0.8427098617008311, 
+                    0.8427098617008311, 
+                    0.7877518964939054, 
+                    0.7877518964939054, 
+                    0.7371697531753557, 
+                    0.7371697531753557, 
+                    0.6889991618156114, 
+                    0.6889991618156114, 
+                    0.6427760359904995, 
+                    0.6427760359904995, 
+                    0.5987845519571086, 
+                    0.5987845519571086, 
+                    0.5567275856501562, 
+                    0.5567275856501562, 
+                    0.5169398300943049, 
+                    0.5169398300943049, 
+                    0.47721593483692054, 
+                    0.47721593483692054, 
+                    0.4374189391760218, 
+                    0.4374189391760218, 
+                    0.39784082057416775, 
+                    0.39784082057416775, 
+                    0.3580084268372408, 
+                    0.3580084268372408, 
+                    0.31790858604488803, 
+                    0.31790858604488803, 
+                    0.27760451454822943, 
+                    0.27760451454822943, 
+                    0.2370525599680145, 
+                    0.2370525599680145, 
+                    0.1961302341033551, 
+                    0.1961302341033551, 
+                    0.1544324324091035, 
+                    0.1544324324091035, 
+                    0.10459301348805403, 
+                    0.10459301348805403
+                ], 
+                0.5006492137908936
+            ], 
+            [
+                1.0477186441421509, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998763547538521, 
+                    0.9998763547538521, 
+                    0.9998751294843439, 
+                    0.9998751294843439, 
+                    0.999872864570483, 
+                    0.999872864570483, 
+                    0.9649311238333362, 
+                    0.9649311238333362, 
+                    0.9010245538548093, 
+                    0.9010245538548093, 
+                    0.842612881519405, 
+                    0.842612881519405, 
+                    0.7875252418883564, 
+                    0.7875252418883564, 
+                    0.7368975018201359, 
+                    0.7368975018201359, 
+                    0.6887183594009175, 
+                    0.6887183594009175, 
+                    0.6425296910344457, 
+                    0.6425296910344457, 
+                    0.5986183222101502, 
+                    0.5986183222101502, 
+                    0.556661301814846, 
+                    0.556661301814846, 
+                    0.5169595306319642, 
+                    0.5169595306319642, 
+                    0.4772899414148033, 
+                    0.4772899414148033, 
+                    0.43752767560146627, 
+                    0.43752767560146627, 
+                    0.3979588716538502, 
+                    0.3979588716538502, 
+                    0.3581230840829608, 
+                    0.3581230840829608, 
+                    0.3180158632567676, 
+                    0.3180158632567676, 
+                    0.2777020684412263, 
+                    0.2777020684412263, 
+                    0.2371398716667276, 
+                    0.2371398716667276, 
+                    0.1962061182242318, 
+                    0.1962061182242318, 
+                    0.15449354460779577, 
+                    0.15449354460779577, 
+                    0.10470487582849841, 
+                    0.10470487582849841
+                ], 
+                0.500711977481842
+            ], 
+            [
+                1.059999942779541, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9995171467165038, 
+                    0.9995171467165038, 
+                    0.9995087238733572, 
+                    0.9995087238733572, 
+                    0.999476820234575, 
+                    0.999476820234575, 
+                    0.9993927832996201, 
+                    0.9993927832996201, 
+                    0.9652067712528924, 
+                    0.9652067712528924, 
+                    0.9011198192917783, 
+                    0.9011198192917783, 
+                    0.84255065833224, 
+                    0.84255065833224, 
+                    0.7873601893290686, 
+                    0.7873601893290686, 
+                    0.7367093008678912, 
+                    0.7367093008678912, 
+                    0.6885486409445258, 
+                    0.6885486409445258, 
+                    0.6424005544877113, 
+                    0.6424005544877113, 
+                    0.5985526686046053, 
+                    0.5985526686046053, 
+                    0.556661300084149, 
+                    0.556661300084149, 
+                    0.5170238889958956, 
+                    0.5170238889958956, 
+                    0.4773715814862409, 
+                    0.4773715814862409, 
+                    0.4376039661289543, 
+                    0.4376039661289543, 
+                    0.3980145051794576, 
+                    0.3980145051794576, 
+                    0.3581510009409727, 
+                    0.3581510009409727, 
+                    0.3180191630343193, 
+                    0.3180191630343193, 
+                    0.2776856670203067, 
+                    0.2776856670203067, 
+                    0.23710965939938483, 
+                    0.23710965939938483, 
+                    0.19616754666593988, 
+                    0.19616754666593988, 
+                    0.1544527480231549, 
+                    0.1544527480231549, 
+                    0.10471326243621826, 
+                    0.10471326243621826
+                ], 
+                0.5004411935806274
+            ], 
+            [
+                1.0724252462387085, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999557154801417, 
+                    0.999557154801417, 
+                    0.9995536948689038, 
+                    0.9995536948689038, 
+                    0.999540542474208, 
+                    0.999540542474208, 
+                    0.9995036802107459, 
+                    0.9995036802107459, 
+                    0.9655724327752115, 
+                    0.9655724327752115, 
+                    0.9013698090701174, 
+                    0.9013698090701174, 
+                    0.8427017217911575, 
+                    0.8427017217911575, 
+                    0.7874234220833959, 
+                    0.7874234220833959, 
+                    0.7367405286072232, 
+                    0.7367405286072232, 
+                    0.688596939242992, 
+                    0.688596939242992, 
+                    0.6425064327544365, 
+                    0.6425064327544365, 
+                    0.598738143840186, 
+                    0.598738143840186, 
+                    0.5569183254499753, 
+                    0.5569183254499753, 
+                    0.5172884344435899, 
+                    0.5172884344435899, 
+                    0.4776231206456878, 
+                    0.4776231206456878, 
+                    0.43783715471456264, 
+                    0.43783715471456264, 
+                    0.3982068549332747, 
+                    0.3982068549332747, 
+                    0.3583044488305701, 
+                    0.3583044488305701, 
+                    0.31814145157653567, 
+                    0.31814145157653567, 
+                    0.27778207355076434, 
+                    0.27778207355076434, 
+                    0.2371854467458088, 
+                    0.2371854467458088, 
+                    0.19622567630891363, 
+                    0.19622567630891363, 
+                    0.15449363546637887, 
+                    0.15449363546637887, 
+                    0.10481638206275253, 
+                    0.10481638206275253
+                ], 
+                0.5011685490608215
+            ], 
+            [
+                1.084996223449707, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996065118479863, 
+                    0.9996065118479863, 
+                    0.9996065118479863, 
+                    0.9996065118479863, 
+                    0.9996065118479863, 
+                    0.9996065118479863, 
+                    0.9996065118479863, 
+                    0.9996065118479863, 
+                    0.9659199538280654, 
+                    0.9659199538280654, 
+                    0.9015197450046194, 
+                    0.9015197450046194, 
+                    0.8426442279341885, 
+                    0.8426442279341885, 
+                    0.7871514617054999, 
+                    0.7871514617054999, 
+                    0.7363666560890156, 
+                    0.7363666560890156, 
+                    0.6881913701895167, 
+                    0.6881913701895167, 
+                    0.6421300841537771, 
+                    0.6421300841537771, 
+                    0.5984485629570284, 
+                    0.5984485629570284, 
+                    0.5567378946239462, 
+                    0.5567378946239462, 
+                    0.5171964997547862, 
+                    0.5171964997547862, 
+                    0.47758585570048806, 
+                    0.47758585570048806, 
+                    0.437836235075088, 
+                    0.437836235075088, 
+                    0.39821747931687257, 
+                    0.39821747931687257, 
+                    0.3583158330371416, 
+                    0.3583158330371416, 
+                    0.3181504396305286, 
+                    0.3181504396305286, 
+                    0.2777868441841147, 
+                    0.2777868441841147, 
+                    0.23718605354737507, 
+                    0.23718605354737507, 
+                    0.19622230062848417, 
+                    0.19622230062848417, 
+                    0.15448640274493622, 
+                    0.15448640274493622, 
+                    0.1048854611022472, 
+                    0.1048854611022472
+                ], 
+                0.5006721615791321
+            ], 
+            [
+                1.0977144241333008, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9996294510108148, 
+                    0.9996294510108148, 
+                    0.9996253184768199, 
+                    0.9996253184768199, 
+                    0.9996100001772871, 
+                    0.9996100001772871, 
+                    0.999568491878594, 
+                    0.999568491878594, 
+                    0.966388320982699, 
+                    0.966388320982699, 
+                    0.9018011939412259, 
+                    0.9018011939412259, 
+                    0.8427418840845429, 
+                    0.8427418840845429, 
+                    0.7870528165760587, 
+                    0.7870528165760587, 
+                    0.7361585999384362, 
+                    0.7361585999384362, 
+                    0.6879409453299308, 
+                    0.6879409453299308, 
+                    0.6418899499337548, 
+                    0.6418899499337548, 
+                    0.5982715889415785, 
+                    0.5982715889415785, 
+                    0.5566467277271344, 
+                    0.5566467277271344, 
+                    0.5171825888250827, 
+                    0.5171825888250827, 
+                    0.47761413732783664, 
+                    0.47761413732783664, 
+                    0.43788862626138464, 
+                    0.43788862626138464, 
+                    0.39827387575572476, 
+                    0.39827387575572476, 
+                    0.35836652833981436, 
+                    0.35836652833981436, 
+                    0.31819304014470284, 
+                    0.31819304014470284, 
+                    0.2778203238223948, 
+                    0.2778203238223948, 
+                    0.2372108104864018, 
+                    0.2372108104864018, 
+                    0.19623869312333603, 
+                    0.19623869312333603, 
+                    0.15449446248918725, 
+                    0.15449446248918725, 
+                    0.10497882625744155, 
+                    0.10497882625744155
+                ], 
+                0.500545859336853
+            ], 
+            [
+                1.1105817556381226, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.966679467910986, 
+                    0.966679467910986, 
+                    0.9020121309266741, 
+                    0.9020121309266741, 
+                    0.8428642713680549, 
+                    0.8428642713680549, 
+                    0.7869696202617101, 
+                    0.7869696202617101, 
+                    0.7359472441990951, 
+                    0.7359472441990951, 
+                    0.6876436238679009, 
+                    0.6876436238679009, 
+                    0.64157307962395, 
+                    0.64157307962395, 
+                    0.5980162142109644, 
+                    0.5980162142109644, 
+                    0.556507818302617, 
+                    0.556507818302617, 
+                    0.5171739004670617, 
+                    0.5171739004670617, 
+                    0.47771445362068604, 
+                    0.47771445362068604, 
+                    0.43807414283326984, 
+                    0.43807414283326984, 
+                    0.39851525161766665, 
+                    0.39851525161766665, 
+                    0.3586397310233017, 
+                    0.3586397310233017, 
+                    0.31848064951258614, 
+                    0.31848064951258614, 
+                    0.2781085305733238, 
+                    0.2781085305733238, 
+                    0.23748847304089285, 
+                    0.23748847304089285, 
+                    0.19649459382188578, 
+                    0.19649459382188578, 
+                    0.15471214441677614, 
+                    0.15471214441677614, 
+                    0.10530149383364645, 
+                    0.10530149383364645
+                ], 
+                0.5010611414909363
+            ], 
+            [
+                1.1236000061035156, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9998296152068493, 
+                    0.9998296152068493, 
+                    0.999827569736562, 
+                    0.999827569736562, 
+                    0.999820181137504, 
+                    0.999820181137504, 
+                    0.9998008722884706, 
+                    0.9998008722884706, 
+                    0.967678067117826, 
+                    0.967678067117826, 
+                    0.9026297926411997, 
+                    0.9026297926411997, 
+                    0.8431005099285227, 
+                    0.8431005099285227, 
+                    0.7868768305843132, 
+                    0.7868768305843132, 
+                    0.7356692648246059, 
+                    0.7356692648246059, 
+                    0.6873319658450019, 
+                    0.6873319658450019, 
+                    0.6413111867377018, 
+                    0.6413111867377018, 
+                    0.597846336509296, 
+                    0.597846336509296, 
+                    0.5564184840960573, 
+                    0.5564184840960573, 
+                    0.5170887449717159, 
+                    0.5170887449717159, 
+                    0.47760730081235503, 
+                    0.47760730081235503, 
+                    0.437943439240407, 
+                    0.437943439240407, 
+                    0.39834360489446485, 
+                    0.39834360489446485, 
+                    0.35843482897415807, 
+                    0.35843482897415807, 
+                    0.31825458000333756, 
+                    0.31825458000333756, 
+                    0.2778706832219685, 
+                    0.2778706832219685, 
+                    0.23724867346352027, 
+                    0.23724867346352027, 
+                    0.19626286712925373, 
+                    0.19626286712925373, 
+                    0.15450332627316743, 
+                    0.15450332627316743, 
+                    0.10520278207234397, 
+                    0.10520278207234397
+                ], 
+                0.5001866221427917
+            ]
+        ]
+    }, 
+    {
+        "block_size": 51, 
+        "preprocessing_block_sizes": [
+            30
+        ], 
+        "pruning_parameters": [
+            [
+                0.8919752836227417, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996001092395164, 
+                    0.9996001092395164, 
+                    0.9995935967922528, 
+                    0.9995935967922528, 
+                    0.9995701762197848, 
+                    0.9995701762197848, 
+                    0.9994965832529095, 
+                    0.9994965832529095, 
+                    0.964213012416995, 
+                    0.964213012416995, 
+                    0.9014220962266604, 
+                    0.9014220962266604, 
+                    0.8442640999967127, 
+                    0.8442640999967127, 
+                    0.7910494830209261, 
+                    0.7910494830209261, 
+                    0.7401122711501844, 
+                    0.7401122711501844, 
+                    0.6917998031443309, 
+                    0.6917998031443309, 
+                    0.645300014942152, 
+                    0.645300014942152, 
+                    0.6001576279552658, 
+                    0.6001576279552658, 
+                    0.5570700872174521, 
+                    0.5570700872174521, 
+                    0.5155340728649004, 
+                    0.5155340728649004, 
+                    0.4752046628859926, 
+                    0.4752046628859926, 
+                    0.43545791768187264, 
+                    0.43545791768187264, 
+                    0.3961228613102651, 
+                    0.3961228613102651, 
+                    0.35663933542977133, 
+                    0.35663933542977133, 
+                    0.31693170204621707, 
+                    0.31693170204621707, 
+                    0.2769141717938957, 
+                    0.2769141717938957, 
+                    0.23658771705551343, 
+                    0.23658771705551343, 
+                    0.1958236376588336, 
+                    0.1958236376588336, 
+                    0.1542469095725415, 
+                    0.1542469095725415, 
+                    0.10419022904850807, 
+                    0.10419022904850807
+                ], 
+                0.5010334253311157
+            ], 
+            [
+                0.9022306203842163, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999566699218564, 
+                    0.999566699218564, 
+                    0.9995594210742449, 
+                    0.9995594210742449, 
+                    0.9995336403214983, 
+                    0.9995336403214983, 
+                    0.9994540679217936, 
+                    0.9994540679217936, 
+                    0.9641195486711766, 
+                    0.9641195486711766, 
+                    0.9012416464644533, 
+                    0.9012416464644533, 
+                    0.8439763344839583, 
+                    0.8439763344839583, 
+                    0.7906932879569404, 
+                    0.7906932879569404, 
+                    0.7397188572807261, 
+                    0.7397188572807261, 
+                    0.6914397543159121, 
+                    0.6914397543159121, 
+                    0.6450153165608118, 
+                    0.6450153165608118, 
+                    0.5999797872047188, 
+                    0.5999797872047188, 
+                    0.55701524770067, 
+                    0.55701524770067, 
+                    0.5155840895081119, 
+                    0.5155840895081119, 
+                    0.4753229590010108, 
+                    0.4753229590010108, 
+                    0.43560615438999967, 
+                    0.43560615438999967, 
+                    0.3962602800366068, 
+                    0.3962602800366068, 
+                    0.3567498162840635, 
+                    0.3567498162840635, 
+                    0.3170105564678645, 
+                    0.3170105564678645, 
+                    0.27696686002476006, 
+                    0.27696686002476006, 
+                    0.23662015859360638, 
+                    0.23662015859360638, 
+                    0.1958424191928664, 
+                    0.1958424191928664, 
+                    0.15425641487586336, 
+                    0.15425641487586336, 
+                    0.10420519665702017, 
+                    0.10420519665702017
+                ], 
+                0.5007748007774353
+            ], 
+            [
+                0.9126037955284119, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995310992847728, 
+                    0.9995310992847728, 
+                    0.9995229703886307, 
+                    0.9995229703886307, 
+                    0.9994946134675228, 
+                    0.9994946134675228, 
+                    0.9994086733362315, 
+                    0.9994086733362315, 
+                    0.9640242706461899, 
+                    0.9640242706461899, 
+                    0.901054074018069, 
+                    0.901054074018069, 
+                    0.8436764593890292, 
+                    0.8436764593890292, 
+                    0.790323085884417, 
+                    0.790323085884417, 
+                    0.7393110306276439, 
+                    0.7393110306276439, 
+                    0.6910668196749001, 
+                    0.6910668196749001, 
+                    0.6447191179260993, 
+                    0.6447191179260993, 
+                    0.5997906926911796, 
+                    0.5997906926911796, 
+                    0.5569485740701478, 
+                    0.5569485740701478, 
+                    0.5156209372955372, 
+                    0.5156209372955372, 
+                    0.4754268608313938, 
+                    0.4754268608313938, 
+                    0.4357394341601915, 
+                    0.4357394341601915, 
+                    0.39638394566052954, 
+                    0.39638394566052954, 
+                    0.3568485914619513, 
+                    0.3568485914619513, 
+                    0.3170801446075748, 
+                    0.3170801446075748, 
+                    0.27701241489330675, 
+                    0.27701241489330675, 
+                    0.23664725100810588, 
+                    0.23664725100810588, 
+                    0.1958571795471246, 
+                    0.1958571795471246, 
+                    0.15426297210361065, 
+                    0.15426297210361065, 
+                    0.10421907136335172, 
+                    0.10421907136335172
+                ], 
+                0.5004600286483765
+            ], 
+            [
+                0.923096239566803, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994998984924008, 
+                    0.9994998984924008, 
+                    0.9994929815407161, 
+                    0.9994929815407161, 
+                    0.9994688563461736, 
+                    0.9994688563461736, 
+                    0.9993926622886594, 
+                    0.9993926622886594, 
+                    0.9639963078005501, 
+                    0.9639963078005501, 
+                    0.9009749506429114, 
+                    0.9009749506429114, 
+                    0.8435510452368791, 
+                    0.8435510452368791, 
+                    0.7901947168869191, 
+                    0.7901947168869191, 
+                    0.739221834383681, 
+                    0.739221834383681, 
+                    0.6910653018215364, 
+                    0.6910653018215364, 
+                    0.6448333091472055, 
+                    0.6448333091472055, 
+                    0.6000408001996888, 
+                    0.6000408001996888, 
+                    0.5573122796193533, 
+                    0.5573122796193533, 
+                    0.5160520428606354, 
+                    0.5160520428606354, 
+                    0.475868305422464, 
+                    0.475868305422464, 
+                    0.43614984647364635, 
+                    0.43614984647364635, 
+                    0.3967236455911936, 
+                    0.3967236455911936, 
+                    0.35711499763126037, 
+                    0.35711499763126037, 
+                    0.31728024866774374, 
+                    0.31728024866774374, 
+                    0.2771615231417363, 
+                    0.2771615231417363, 
+                    0.2367574739372936, 
+                    0.2367574739372936, 
+                    0.19593860781478695, 
+                    0.19593860781478695, 
+                    0.1543204633333602, 
+                    0.1543204633333602, 
+                    0.10428166503894458, 
+                    0.10428166503894458
+                ], 
+                0.5013269782066345
+            ], 
+            [
+                0.9337093234062195, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994589934103045, 
+                    0.9994589934103045, 
+                    0.9994513579402393, 
+                    0.9994513579402393, 
+                    0.9994251037742979, 
+                    0.9994251037742979, 
+                    0.9993433379146538, 
+                    0.9993433379146538, 
+                    0.9639032916546544, 
+                    0.9639032916546544, 
+                    0.9007782307440731, 
+                    0.9007782307440731, 
+                    0.8432310332344457, 
+                    0.8432310332344457, 
+                    0.78979849584822, 
+                    0.78979849584822, 
+                    0.7387838919104717, 
+                    0.7387838919104717, 
+                    0.6906613724261381, 
+                    0.6906613724261381, 
+                    0.6445047370137487, 
+                    0.6445047370137487, 
+                    0.5998155655701903, 
+                    0.5998155655701903, 
+                    0.5572055302792751, 
+                    0.5572055302792751, 
+                    0.5160452618919286, 
+                    0.5160452618919286, 
+                    0.47592725380181355, 
+                    0.47592725380181355, 
+                    0.4362393817261782, 
+                    0.4362393817261782, 
+                    0.39680917479832595, 
+                    0.39680917479832595, 
+                    0.3571825140557387, 
+                    0.3571825140557387, 
+                    0.31732562572655526, 
+                    0.31732562572655526, 
+                    0.27718863194827675, 
+                    0.27718863194827675, 
+                    0.23677072265698718, 
+                    0.23677072265698718, 
+                    0.19594291651339324, 
+                    0.19594291651339324, 
+                    0.15431932862302356, 
+                    0.15431932862302356, 
+                    0.10429242551099809, 
+                    0.10429242551099809
+                ], 
+                0.500863790512085
+            ], 
+            [
+                0.9444444179534912, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997717463217879, 
+                    0.9997717463217879, 
+                    0.9996577727572574, 
+                    0.9996577727572574, 
+                    0.9992890905380916, 
+                    0.9992890905380916, 
+                    0.9638148533526973, 
+                    0.9638148533526973, 
+                    0.9006569942157273, 
+                    0.9006569942157273, 
+                    0.8430610304662368, 
+                    0.8430610304662368, 
+                    0.789596050973359, 
+                    0.789596050973359, 
+                    0.7385629154772211, 
+                    0.7385629154772211, 
+                    0.6904772215291904, 
+                    0.6904772215291904, 
+                    0.6443890434665837, 
+                    0.6443890434665837, 
+                    0.5997929636750268, 
+                    0.5997929636750268, 
+                    0.5572830301946128, 
+                    0.5572830301946128, 
+                    0.5162028985494425, 
+                    0.5162028985494425, 
+                    0.4761319159477967, 
+                    0.4761319159477967, 
+                    0.4364599474139496, 
+                    0.4364599474139496, 
+                    0.3970145506585584, 
+                    0.3970145506585584, 
+                    0.35736208285634663, 
+                    0.35736208285634663, 
+                    0.31747678254872874, 
+                    0.31747678254872874, 
+                    0.2773154360968211, 
+                    0.2773154360968211, 
+                    0.23687674289438632, 
+                    0.23687674289438632, 
+                    0.19603111772824267, 
+                    0.19603111772824267, 
+                    0.15438898954577818, 
+                    0.15438898954577818, 
+                    0.10437774351247334, 
+                    0.10437774351247334
+                ], 
+                0.501299262046814
+            ], 
+            [
+                0.9553029537200928, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994230697262609, 
+                    0.9994230697262609, 
+                    0.9994118524966089, 
+                    0.9994118524966089, 
+                    0.9993756880339695, 
+                    0.9993756880339695, 
+                    0.9992800985366893, 
+                    0.9992800985366893, 
+                    0.9637840266758826, 
+                    0.9637840266758826, 
+                    0.9004692153334278, 
+                    0.9004692153334278, 
+                    0.8427142013702179, 
+                    0.8427142013702179, 
+                    0.7891738354142752, 
+                    0.7891738354142752, 
+                    0.7381278471750735, 
+                    0.7381278471750735, 
+                    0.6901084992186215, 
+                    0.6901084992186215, 
+                    0.6441248798293601, 
+                    0.6441248798293601, 
+                    0.5996522580975342, 
+                    0.5996522580975342, 
+                    0.5572627889663233, 
+                    0.5572627889663233, 
+                    0.5162691635009461, 
+                    0.5162691635009461, 
+                    0.47623990855368015, 
+                    0.47623990855368015, 
+                    0.4365717700257954, 
+                    0.4365717700257954, 
+                    0.39709745245835015, 
+                    0.39709745245835015, 
+                    0.357408234950502, 
+                    0.357408234950502, 
+                    0.3174881721945721, 
+                    0.3174881721945721, 
+                    0.2773011362702317, 
+                    0.2773011362702317, 
+                    0.23684522616960946, 
+                    0.23684522616960946, 
+                    0.19599072870704815, 
+                    0.19599072870704815, 
+                    0.15434730424408896, 
+                    0.15434730424408896, 
+                    0.10434883237954823, 
+                    0.10434883237954823
+                ], 
+                0.500694990158081
+            ], 
+            [
+                0.9662863612174988, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993876280616615, 
+                    0.9993876280616615, 
+                    0.9993785390681218, 
+                    0.9993785390681218, 
+                    0.999349208341698, 
+                    0.999349208341698, 
+                    0.9992681147235891, 
+                    0.9992681147235891, 
+                    0.9637843228826093, 
+                    0.9637843228826093, 
+                    0.9003918647907078, 
+                    0.9003918647907078, 
+                    0.8425634382273068, 
+                    0.8425634382273068, 
+                    0.7889985779174424, 
+                    0.7889985779174424, 
+                    0.7379693967551253, 
+                    0.7379693967551253, 
+                    0.6900204608344701, 
+                    0.6900204608344701, 
+                    0.6441346114652915, 
+                    0.6441346114652915, 
+                    0.59977580642516, 
+                    0.59977580642516, 
+                    0.5574840096055025, 
+                    0.5574840096055025, 
+                    0.5165497061915554, 
+                    0.5165497061915554, 
+                    0.47653393279910505, 
+                    0.47653393279910505, 
+                    0.4368464252362603, 
+                    0.4368464252362603, 
+                    0.3973240261287073, 
+                    0.3973240261287073, 
+                    0.3575848462433951, 
+                    0.3575848462433951, 
+                    0.31761993783351344, 
+                    0.31761993783351344, 
+                    0.2773985428220269, 
+                    0.2773985428220269, 
+                    0.2369165174323959, 
+                    0.2369165174323959, 
+                    0.1960425911941492, 
+                    0.1960425911941492, 
+                    0.15438294073196995, 
+                    0.15438294073196995, 
+                    0.10440173813059526, 
+                    0.10440173813059526
+                ], 
+                0.5011370778083801
+            ], 
+            [
+                0.9773960113525391, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993542953405321, 
+                    0.9993542953405321, 
+                    0.9993474539288842, 
+                    0.9993474539288842, 
+                    0.9993252584527925, 
+                    0.9993252584527925, 
+                    0.9992599759957739, 
+                    0.9992599759957739, 
+                    0.96379700417732, 
+                    0.96379700417732, 
+                    0.9003164623096622, 
+                    0.9003164623096622, 
+                    0.8424030466175394, 
+                    0.8424030466175394, 
+                    0.7888030760554001, 
+                    0.7888030760554001, 
+                    0.7377793240163637, 
+                    0.7377793240163637, 
+                    0.6898923356857599, 
+                    0.6898923356857599, 
+                    0.6440970332590376, 
+                    0.6440970332590376, 
+                    0.5998449826020246, 
+                    0.5998449826020246, 
+                    0.5576480001609938, 
+                    0.5576480001609938, 
+                    0.5167738422333866, 
+                    0.5167738422333866, 
+                    0.4767761624756024, 
+                    0.4767761624756024, 
+                    0.437075922465604, 
+                    0.437075922465604, 
+                    0.3975142771525776, 
+                    0.3975142771525776, 
+                    0.3577331719889867, 
+                    0.3577331719889867, 
+                    0.31773022679277385, 
+                    0.31773022679277385, 
+                    0.2774795653052149, 
+                    0.2774795653052149, 
+                    0.23697524513704454, 
+                    0.23697524513704454, 
+                    0.19608472623711704, 
+                    0.19608472623711704, 
+                    0.1544112590405629, 
+                    0.1544112590405629, 
+                    0.10445143731062471, 
+                    0.10445143731062471
+                ], 
+                0.5014240741729736
+            ], 
+            [
+                0.988633394241333, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996943278821764, 
+                    0.9996943278821764, 
+                    0.9995912288067811, 
+                    0.9995912288067811, 
+                    0.9992774348195571, 
+                    0.9992774348195571, 
+                    0.9637247805024621, 
+                    0.9637247805024621, 
+                    0.9001554814729089, 
+                    0.9001554814729089, 
+                    0.8421334617270735, 
+                    0.8421334617270735, 
+                    0.7884559386261839, 
+                    0.7884559386261839, 
+                    0.7373722511567931, 
+                    0.7373722511567931, 
+                    0.6894999182140207, 
+                    0.6894999182140207, 
+                    0.643759379514856, 
+                    0.643759379514856, 
+                    0.5995893302442703, 
+                    0.5995893302442703, 
+                    0.5574975020177428, 
+                    0.5574975020177428, 
+                    0.5167185266420034, 
+                    0.5167185266420034, 
+                    0.47679140350923754, 
+                    0.47679140350923754, 
+                    0.43713323217775346, 
+                    0.43713323217775346, 
+                    0.397586731218436, 
+                    0.397586731218436, 
+                    0.35780644004687234, 
+                    0.35780644004687234, 
+                    0.3177974891398366, 
+                    0.3177974891398366, 
+                    0.27753950871174415, 
+                    0.27753950871174415, 
+                    0.2370275800306768, 
+                    0.2370275800306768, 
+                    0.19612958564997604, 
+                    0.19612958564997604, 
+                    0.15444715179411053, 
+                    0.15444715179411053, 
+                    0.10451785541964355, 
+                    0.10451785541964355
+                ], 
+                0.5012454390525818
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993250087052443, 
+                    0.9993250087052443, 
+                    0.999320494929224, 
+                    0.999320494929224, 
+                    0.9993062832854555, 
+                    0.9993062832854555, 
+                    0.9992657036210647, 
+                    0.9992657036210647, 
+                    0.9638632508951337, 
+                    0.9638632508951337, 
+                    0.9001638937451295, 
+                    0.9001638937451295, 
+                    0.8420324377515748, 
+                    0.8420324377515748, 
+                    0.788318416907227, 
+                    0.788318416907227, 
+                    0.73725969420623, 
+                    0.73725969420623, 
+                    0.6894656553846155, 
+                    0.6894656553846155, 
+                    0.6438283617245812, 
+                    0.6438283617245812, 
+                    0.5997701381717417, 
+                    0.5997701381717417, 
+                    0.5577615473157371, 
+                    0.5577615473157371, 
+                    0.5170197004276538, 
+                    0.5170197004276538, 
+                    0.47708168860056277, 
+                    0.47708168860056277, 
+                    0.4373835037768184, 
+                    0.4373835037768184, 
+                    0.3977750718871813, 
+                    0.3977750718871813, 
+                    0.3579371879914457, 
+                    0.3579371879914457, 
+                    0.31788019409422413, 
+                    0.31788019409422413, 
+                    0.2775872023718382, 
+                    0.2775872023718382, 
+                    0.2370503586853551, 
+                    0.2370503586853551, 
+                    0.1961357255926142, 
+                    0.1961357255926142, 
+                    0.15444254369796714, 
+                    0.15444254369796714, 
+                    0.10453994878388788, 
+                    0.10453994878388788
+                ], 
+                0.5014454126358032
+            ], 
+            [
+                1.0114972591400146, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996925856012218, 
+                    0.9996925856012218, 
+                    0.9996308708325305, 
+                    0.9996308708325305, 
+                    0.9994650792325501, 
+                    0.9994650792325501, 
+                    0.9638507121713401, 
+                    0.9638507121713401, 
+                    0.9000444341781455, 
+                    0.9000444341781455, 
+                    0.8417915514011175, 
+                    0.8417915514011175, 
+                    0.7879898355332968, 
+                    0.7879898355332968, 
+                    0.7368630231262846, 
+                    0.7368630231262846, 
+                    0.6890782564584553, 
+                    0.6890782564584553, 
+                    0.6434926118371728, 
+                    0.6434926118371728, 
+                    0.5995137073970626, 
+                    0.5995137073970626, 
+                    0.5576082098245719, 
+                    0.5576082098245719, 
+                    0.5169594353607744, 
+                    0.5169594353607744, 
+                    0.47709028213179683, 
+                    0.47709028213179683, 
+                    0.437433480707138, 
+                    0.437433480707138, 
+                    0.3978412143064357, 
+                    0.3978412143064357, 
+                    0.35800588615168144, 
+                    0.35800588615168144, 
+                    0.3179447523966876, 
+                    0.3179447523966876, 
+                    0.2776458111318522, 
+                    0.2776458111318522, 
+                    0.23710220623698602, 
+                    0.23710220623698602, 
+                    0.19618040484032404, 
+                    0.19618040484032404, 
+                    0.15447816548298493, 
+                    0.15447816548298493, 
+                    0.10461561926122258, 
+                    0.10461561926122258
+                ], 
+                0.501293420791626
+            ], 
+            [
+                1.0231267213821411, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993229360767215, 
+                    0.9993229360767215, 
+                    0.9993229360767215, 
+                    0.9993229360767215, 
+                    0.9993229360767215, 
+                    0.9993229360767215, 
+                    0.9993229360767215, 
+                    0.9993229360767215, 
+                    0.9640394048462613, 
+                    0.9640394048462613, 
+                    0.9000633880492461, 
+                    0.9000633880492461, 
+                    0.8416534607500978, 
+                    0.8416534607500978, 
+                    0.7877682461005147, 
+                    0.7877682461005147, 
+                    0.7366180271110475, 
+                    0.7366180271110475, 
+                    0.688880566698304, 
+                    0.688880566698304, 
+                    0.6433785443811535, 
+                    0.6433785443811535, 
+                    0.5994992262349635, 
+                    0.5994992262349635, 
+                    0.5576819116652092, 
+                    0.5576819116652092, 
+                    0.5170859756620707, 
+                    0.5170859756620707, 
+                    0.4772295748199071, 
+                    0.4772295748199071, 
+                    0.43755856387629816, 
+                    0.43755856387629816, 
+                    0.39793148792537997, 
+                    0.39793148792537997, 
+                    0.3580612386114081, 
+                    0.3580612386114081, 
+                    0.31797008790613057, 
+                    0.31797008790613057, 
+                    0.2776493487151526, 
+                    0.2776493487151526, 
+                    0.23709060753797057, 
+                    0.23709060753797057, 
+                    0.19615954822565485, 
+                    0.19615954822565485, 
+                    0.1544529420766081, 
+                    0.1544529420766081, 
+                    0.10463048387546438, 
+                    0.10463048387546438
+                ], 
+                0.5009897351264954
+            ], 
+            [
+                1.0348899364471436, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9639847708375618, 
+                    0.9639847708375618, 
+                    0.8998969591850288, 
+                    0.8998969591850288, 
+                    0.8413483391543405, 
+                    0.8413483391543405, 
+                    0.7873394037488874, 
+                    0.7873394037488874, 
+                    0.7360647871981022, 
+                    0.7360647871981022, 
+                    0.6882988736040934, 
+                    0.6882988736040934, 
+                    0.6428250059799674, 
+                    0.6428250059799674, 
+                    0.5990150008630549, 
+                    0.5990150008630549, 
+                    0.5573190399937328, 
+                    0.5573190399937328, 
+                    0.516851567587529, 
+                    0.516851567587529, 
+                    0.4771091010489547, 
+                    0.4771091010489547, 
+                    0.4375234885310838, 
+                    0.4375234885310838, 
+                    0.3979533067205233, 
+                    0.3979533067205233, 
+                    0.35811659724912426, 
+                    0.35811659724912426, 
+                    0.31804352009949305, 
+                    0.31804352009949305, 
+                    0.2777310529353573, 
+                    0.2777310529353573, 
+                    0.23717373195261046, 
+                    0.23717373195261046, 
+                    0.19623869853038117, 
+                    0.19623869853038117, 
+                    0.1545213579879875, 
+                    0.1545213579879875, 
+                    0.104755669981966, 
+                    0.104755669981966
+                ], 
+                0.5004554986953735
+            ], 
+            [
+                1.0467883348464966, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992626641257256, 
+                    0.9992626641257256, 
+                    0.999251026684086, 
+                    0.999251026684086, 
+                    0.9992162757638693, 
+                    0.9992162757638693, 
+                    0.9991228890074629, 
+                    0.9991228890074629, 
+                    0.9644281608207478, 
+                    0.9644281608207478, 
+                    0.9001440854552561, 
+                    0.9001440854552561, 
+                    0.8414474053910276, 
+                    0.8414474053910276, 
+                    0.787364819689347, 
+                    0.787364819689347, 
+                    0.7360808603729176, 
+                    0.7360808603729176, 
+                    0.6883518079577708, 
+                    0.6883518079577708, 
+                    0.6429381143894961, 
+                    0.6429381143894961, 
+                    0.5991866403185793, 
+                    0.5991866403185793, 
+                    0.5575378231337136, 
+                    0.5575378231337136, 
+                    0.5170844036109428, 
+                    0.5170844036109428, 
+                    0.47732156585455343, 
+                    0.47732156585455343, 
+                    0.43769195444800474, 
+                    0.43769195444800474, 
+                    0.3980647835941557, 
+                    0.3980647835941557, 
+                    0.35817496960250667, 
+                    0.35817496960250667, 
+                    0.3180584003819133, 
+                    0.3180584003819133, 
+                    0.27771429969853545, 
+                    0.27771429969853545, 
+                    0.23713534984689455, 
+                    0.23713534984689455, 
+                    0.19618763343980156, 
+                    0.19618763343980156, 
+                    0.1544666720746899, 
+                    0.1544666720746899, 
+                    0.10474849055229168, 
+                    0.10474849055229168
+                ], 
+                0.5005356073379517
+            ], 
+            [
+                1.058823585510254, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993435773305868, 
+                    0.9993435773305868, 
+                    0.9993366144796118, 
+                    0.9993366144796118, 
+                    0.9993166641314372, 
+                    0.9993166641314372, 
+                    0.9992683767012093, 
+                    0.9992683767012093, 
+                    0.9647513386275652, 
+                    0.9647513386275652, 
+                    0.9002843542926187, 
+                    0.9002843542926187, 
+                    0.8414139142789482, 
+                    0.8414139142789482, 
+                    0.7871988921134269, 
+                    0.7871988921134269, 
+                    0.735824256546485, 
+                    0.735824256546485, 
+                    0.6880893993363225, 
+                    0.6880893993363225, 
+                    0.6427227121135872, 
+                    0.6427227121135872, 
+                    0.5990481255496902, 
+                    0.5990481255496902, 
+                    0.5574880781539003, 
+                    0.5574880781539003, 
+                    0.5171035195263252, 
+                    0.5171035195263252, 
+                    0.47737999754210003, 
+                    0.47737999754210003, 
+                    0.4377657523777133, 
+                    0.4377657523777133, 
+                    0.398133878760893, 
+                    0.398133878760893, 
+                    0.3582333158877067, 
+                    0.3582333158877067, 
+                    0.31810440447374705, 
+                    0.31810440447374705, 
+                    0.2777495085682091, 
+                    0.2777495085682091, 
+                    0.23716107953610674, 
+                    0.23716107953610674, 
+                    0.1962051525167834, 
+                    0.1962051525167834, 
+                    0.15447620726404085, 
+                    0.15447620726404085, 
+                    0.10482465266441146, 
+                    0.10482465266441146
+                ], 
+                0.5004564523696899
+            ], 
+            [
+                1.0709971189498901, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9649774018972993, 
+                    0.9649774018972993, 
+                    0.9004042519566805, 
+                    0.9004042519566805, 
+                    0.8414332149835893, 
+                    0.8414332149835893, 
+                    0.7871052117167875, 
+                    0.7871052117167875, 
+                    0.7356152521524018, 
+                    0.7356152521524018, 
+                    0.6878445101199223, 
+                    0.6878445101199223, 
+                    0.6424984088148651, 
+                    0.6424984088148651, 
+                    0.598886892194644, 
+                    0.598886892194644, 
+                    0.5574216443845488, 
+                    0.5574216443845488, 
+                    0.5171292793576878, 
+                    0.5171292793576878, 
+                    0.47747899202383287, 
+                    0.47747899202383287, 
+                    0.4379150278897647, 
+                    0.4379150278897647, 
+                    0.3983098414155847, 
+                    0.3983098414155847, 
+                    0.35842108345756357, 
+                    0.35842108345756357, 
+                    0.31829365272116356, 
+                    0.31829365272116356, 
+                    0.2779336711052783, 
+                    0.2779336711052783, 
+                    0.23733452365000834, 
+                    0.23733452365000834, 
+                    0.19636221644488447, 
+                    0.19636221644488447, 
+                    0.15460754333182378, 
+                    0.15460754333182378, 
+                    0.10503649916641788, 
+                    0.10503649916641788
+                ], 
+                0.5009532570838928
+            ], 
+            [
+                1.083310604095459, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995115017287376, 
+                    0.9995115017287376, 
+                    0.99950808197661, 
+                    0.99950808197661, 
+                    0.9994983084315436, 
+                    0.9994983084315436, 
+                    0.9994733423137722, 
+                    0.9994733423137722, 
+                    0.9657611262995734, 
+                    0.9657611262995734, 
+                    0.9008871093156061, 
+                    0.9008871093156061, 
+                    0.8416525509415747, 
+                    0.8416525509415747, 
+                    0.7871245432612164, 
+                    0.7871245432612164, 
+                    0.7355217517976053, 
+                    0.7355217517976053, 
+                    0.6877304865992453, 
+                    0.6877304865992453, 
+                    0.6424240788020472, 
+                    0.6424240788020472, 
+                    0.5988751104223986, 
+                    0.5988751104223986, 
+                    0.5574680896234472, 
+                    0.5574680896234472, 
+                    0.5172019493335301, 
+                    0.5172019493335301, 
+                    0.4775438838211707, 
+                    0.4775438838211707, 
+                    0.4379527422933045, 
+                    0.4379527422933045, 
+                    0.39830841324812377, 
+                    0.39830841324812377, 
+                    0.3583848919222292, 
+                    0.3583848919222292, 
+                    0.31822999329283147, 
+                    0.31822999329283147, 
+                    0.2778513705562442, 
+                    0.2778513705562442, 
+                    0.23724090159945313, 
+                    0.23724090159945313, 
+                    0.19626444107406163, 
+                    0.19626444107406163, 
+                    0.15451424784431472, 
+                    0.15451424784431472, 
+                    0.10502554891026637, 
+                    0.10502554891026637
+                ], 
+                0.5007264614105225
+            ], 
+            [
+                1.0957658290863037, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996413905640862, 
+                    0.9996413905640862, 
+                    0.9996376792859463, 
+                    0.9996376792859463, 
+                    0.9996272100000945, 
+                    0.9996272100000945, 
+                    0.9996009400184613, 
+                    0.9996009400184613, 
+                    0.9664298207005101, 
+                    0.9664298207005101, 
+                    0.9012874746874938, 
+                    0.9012874746874938, 
+                    0.8418081456817972, 
+                    0.8418081456817972, 
+                    0.7870567701902264, 
+                    0.7870567701902264, 
+                    0.7352854305850229, 
+                    0.7352854305850229, 
+                    0.687438634501085, 
+                    0.687438634501085, 
+                    0.6421536751849499, 
+                    0.6421536751849499, 
+                    0.5986705523113022, 
+                    0.5986705523113022, 
+                    0.5573506614682051, 
+                    0.5573506614682051, 
+                    0.5171577175982598, 
+                    0.5171577175982598, 
+                    0.47754800253328156, 
+                    0.47754800253328156, 
+                    0.43798422003480897, 
+                    0.43798422003480897, 
+                    0.39834825291312953, 
+                    0.39834825291312953, 
+                    0.35842525881905596, 
+                    0.35842525881905596, 
+                    0.3182665276770527, 
+                    0.3182665276770527, 
+                    0.2778825751269774, 
+                    0.2778825751269774, 
+                    0.23726564531756345, 
+                    0.23726564531756345, 
+                    0.19628212119149552, 
+                    0.19628212119149552, 
+                    0.1545238296397253, 
+                    0.1545238296397253, 
+                    0.10513654498721331, 
+                    0.10513654498721331
+                ], 
+                0.5006095170974731
+            ], 
+            [
+                1.1083641052246094, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999913415753934, 
+                    0.9999913415753934, 
+                    0.9999798093646602, 
+                    0.9999798093646602, 
+                    0.9999525689007038, 
+                    0.9999525689007038, 
+                    0.9669562337679294, 
+                    0.9669562337679294, 
+                    0.9015721964149687, 
+                    0.9015721964149687, 
+                    0.8418808099324984, 
+                    0.8418808099324984, 
+                    0.7869083347219463, 
+                    0.7869083347219463, 
+                    0.734940475495549, 
+                    0.734940475495549, 
+                    0.687022748582019, 
+                    0.687022748582019, 
+                    0.6417526288968471, 
+                    0.6417526288968471, 
+                    0.598344923093983, 
+                    0.598344923093983, 
+                    0.5571406468132922, 
+                    0.5571406468132922, 
+                    0.51706389174626, 
+                    0.51706389174626, 
+                    0.47755213889763254, 
+                    0.47755213889763254, 
+                    0.4380624568529995, 
+                    0.4380624568529995, 
+                    0.3984741872386502, 
+                    0.3984741872386502, 
+                    0.35857980789038674, 
+                    0.35857980789038674, 
+                    0.3184349116204912, 
+                    0.3184349116204912, 
+                    0.2780541869813134, 
+                    0.2780541869813134, 
+                    0.23743173598213094, 
+                    0.23743173598213094, 
+                    0.19643476341457805, 
+                    0.19643476341457805, 
+                    0.1546522733943785, 
+                    0.1546522733943785, 
+                    0.10538418777959076, 
+                    0.10538418777959076
+                ], 
+                0.5006214380264282
+            ], 
+            [
+                1.1211072206497192, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999989962713374, 
+                    0.9999989962713374, 
+                    0.9997497251421665, 
+                    0.9997497251421665, 
+                    0.9997377677146772, 
+                    0.9997377677146772, 
+                    0.9997087608500176, 
+                    0.9997087608500176, 
+                    0.9671090020976016, 
+                    0.9671090020976016, 
+                    0.9014870013755029, 
+                    0.9014870013755029, 
+                    0.8416072841439937, 
+                    0.8416072841439937, 
+                    0.7864332626555296, 
+                    0.7864332626555296, 
+                    0.7342508034206925, 
+                    0.7342508034206925, 
+                    0.6862657425046532, 
+                    0.6862657425046532, 
+                    0.6410223290524474, 
+                    0.6410223290524474, 
+                    0.5977210595187359, 
+                    0.5977210595187359, 
+                    0.5566957166794492, 
+                    0.5566957166794492, 
+                    0.5168181228435504, 
+                    0.5168181228435504, 
+                    0.47749310391128935, 
+                    0.47749310391128935, 
+                    0.4381559529888771, 
+                    0.4381559529888771, 
+                    0.39867918326206453, 
+                    0.39867918326206453, 
+                    0.3588579149370835, 
+                    0.3588579149370835, 
+                    0.3187552144265505, 
+                    0.3187552144265505, 
+                    0.2783927272379666, 
+                    0.2783927272379666, 
+                    0.23776909810919622, 
+                    0.23776909810919622, 
+                    0.19675316063100623, 
+                    0.19675316063100623, 
+                    0.15492846706250155, 
+                    0.15492846706250155, 
+                    0.10579883199613291, 
+                    0.10579883199613291
+                ], 
+                0.5002844333648682
+            ]
+        ]
+    }, 
+    {
+        "block_size": 52, 
+        "preprocessing_block_sizes": [
+            30
+        ], 
+        "pruning_parameters": [
+            [
+                0.8938843011856079, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999518933791435, 
+                    0.9999518933791435, 
+                    0.9999518506358644, 
+                    0.9999518506358644, 
+                    0.999951725245864, 
+                    0.999951725245864, 
+                    0.9999511954857058, 
+                    0.9999511954857058, 
+                    0.9514347212689707, 
+                    0.9514347212689707, 
+                    0.8964950207841268, 
+                    0.8964950207841268, 
+                    0.8459931208915925, 
+                    0.8459931208915925, 
+                    0.7983017342770722, 
+                    0.7983017342770722, 
+                    0.7523338188165177, 
+                    0.7523338188165177, 
+                    0.7076904305774431, 
+                    0.7076904305774431, 
+                    0.6644846085675882, 
+                    0.6644846085675882, 
+                    0.6219067590290076, 
+                    0.6219067590290076, 
+                    0.5806942557431463, 
+                    0.5806942557431463, 
+                    0.5400959525043126, 
+                    0.5400959525043126, 
+                    0.5004109689359098, 
+                    0.5004109689359098, 
+                    0.46137525910811805, 
+                    0.46137525910811805, 
+                    0.4226059556710609, 
+                    0.4226059556710609, 
+                    0.38400853659972856, 
+                    0.38400853659972856, 
+                    0.3453613138597809, 
+                    0.3453613138597809, 
+                    0.30659022655461954, 
+                    0.30659022655461954, 
+                    0.26770661933966583, 
+                    0.26770661933966583, 
+                    0.22864728843303278, 
+                    0.22864728843303278, 
+                    0.1892942295254221, 
+                    0.1892942295254221, 
+                    0.14932163724105005, 
+                    0.14932163724105005, 
+                    0.10354166139987916, 
+                    0.10354166139987916
+                ], 
+                0.5005577802658081
+            ], 
+            [
+                0.9039682745933533, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999528664916172, 
+                    0.9999528664916172, 
+                    0.9999528664916172, 
+                    0.9999528664916172, 
+                    0.9999528664916172, 
+                    0.9999528664916172, 
+                    0.9999528664916172, 
+                    0.9999528664916172, 
+                    0.9514820691589985, 
+                    0.9514820691589985, 
+                    0.8965316029486577, 
+                    0.8965316029486577, 
+                    0.8460251842717644, 
+                    0.8460251842717644, 
+                    0.7983414383154294, 
+                    0.7983414383154294, 
+                    0.7524000743492116, 
+                    0.7524000743492116, 
+                    0.707804285234357, 
+                    0.707804285234357, 
+                    0.664653724134424, 
+                    0.664653724134424, 
+                    0.6221511077035894, 
+                    0.6221511077035894, 
+                    0.5809935622198519, 
+                    0.5809935622198519, 
+                    0.5404443169061981, 
+                    0.5404443169061981, 
+                    0.5007716926849407, 
+                    0.5007716926849407, 
+                    0.4617101724940164, 
+                    0.4617101724940164, 
+                    0.42289712536107393, 
+                    0.42289712536107393, 
+                    0.38424199792208563, 
+                    0.38424199792208563, 
+                    0.3455418673588597, 
+                    0.3455418673588597, 
+                    0.30673021846915616, 
+                    0.30673021846915616, 
+                    0.26781430017485486, 
+                    0.26781430017485486, 
+                    0.22873104172437547, 
+                    0.22873104172437547, 
+                    0.18935930757209182, 
+                    0.18935930757209182, 
+                    0.14937000993417565, 
+                    0.14937000993417565, 
+                    0.10358877330047762, 
+                    0.10358877330047762
+                ], 
+                0.5014352798461914
+            ], 
+            [
+                0.9141659736633301, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999483961457161, 
+                    0.9999483961457161, 
+                    0.9999483961457161, 
+                    0.9999483961457161, 
+                    0.9999483961457161, 
+                    0.9999483961457161, 
+                    0.9999483961457161, 
+                    0.9999483961457161, 
+                    0.9515167108390131, 
+                    0.9515167108390131, 
+                    0.8965308083235641, 
+                    0.8965308083235641, 
+                    0.8459682171618599, 
+                    0.8459682171618599, 
+                    0.7982228702367749, 
+                    0.7982228702367749, 
+                    0.752217552142583, 
+                    0.752217552142583, 
+                    0.7075758224876738, 
+                    0.7075758224876738, 
+                    0.6644192717880576, 
+                    0.6644192717880576, 
+                    0.621920705661485, 
+                    0.621920705661485, 
+                    0.5808042699208141, 
+                    0.5808042699208141, 
+                    0.5403006297497651, 
+                    0.5403006297497651, 
+                    0.5006777626111387, 
+                    0.5006777626111387, 
+                    0.461655711725747, 
+                    0.461655711725747, 
+                    0.4228679091684793, 
+                    0.4228679091684793, 
+                    0.3842248045764984, 
+                    0.3842248045764984, 
+                    0.3455286203153667, 
+                    0.3455286203153667, 
+                    0.306718194342732, 
+                    0.306718194342732, 
+                    0.26780195959126435, 
+                    0.26780195959126435, 
+                    0.22871866206423455, 
+                    0.22871866206423455, 
+                    0.18934751830836258, 
+                    0.18934751830836258, 
+                    0.14935964239291755, 
+                    0.14935964239291755, 
+                    0.10358852297226404, 
+                    0.10358852297226404
+                ], 
+                0.5010131001472473
+            ], 
+            [
+                0.9244787096977234, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999435523950326, 
+                    0.9999435523950326, 
+                    0.9999435523950326, 
+                    0.9999435523950326, 
+                    0.9999435523950326, 
+                    0.9999435523950326, 
+                    0.9999435523950326, 
+                    0.9999435523950326, 
+                    0.951558390576075, 
+                    0.951558390576075, 
+                    0.8965324107671381, 
+                    0.8965324107671381, 
+                    0.8459070184106222, 
+                    0.8459070184106222, 
+                    0.7980931726232863, 
+                    0.7980931726232863, 
+                    0.7520168362314954, 
+                    0.7520168362314954, 
+                    0.7073236331077966, 
+                    0.7073236331077966, 
+                    0.6641591345440241, 
+                    0.6641591345440241, 
+                    0.6216625757618679, 
+                    0.6216625757618679, 
+                    0.5805887998433082, 
+                    0.5805887998433082, 
+                    0.5401323431046263, 
+                    0.5401323431046263, 
+                    0.5005621656579429, 
+                    0.5005621656579429, 
+                    0.4615830877096321, 
+                    0.4615830877096321, 
+                    0.42282377209969396, 
+                    0.42282377209969396, 
+                    0.3841958422653717, 
+                    0.3841958422653717, 
+                    0.3455062203735007, 
+                    0.3455062203735007, 
+                    0.30669897946704655, 
+                    0.30669897946704655, 
+                    0.2677839737288024, 
+                    0.2677839737288024, 
+                    0.22870179449047098, 
+                    0.22870179449047098, 
+                    0.18933215826952401, 
+                    0.18933215826952401, 
+                    0.14934654094741534, 
+                    0.14934654094741534, 
+                    0.10358736546064201, 
+                    0.10358736546064201
+                ], 
+                0.5005216002464294
+            ], 
+            [
+                0.9349077939987183, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999354260745087, 
+                    0.9999354260745087, 
+                    0.9999351811346964, 
+                    0.9999351811346964, 
+                    0.9999344934102388, 
+                    0.9999344934102388, 
+                    0.9999317056569608, 
+                    0.9999317056569608, 
+                    0.9516207416234609, 
+                    0.9516207416234609, 
+                    0.8965632133785859, 
+                    0.8965632133785859, 
+                    0.8458989071173346, 
+                    0.8458989071173346, 
+                    0.7980531793606501, 
+                    0.7980531793606501, 
+                    0.751956157299464, 
+                    0.751956157299464, 
+                    0.7072636451889209, 
+                    0.7072636451889209, 
+                    0.6641216391451642, 
+                    0.6641216391451642, 
+                    0.6216534359677159, 
+                    0.6216534359677159, 
+                    0.5806182583840738, 
+                    0.5806182583840738, 
+                    0.5401952789276634, 
+                    0.5401952789276634, 
+                    0.500650142607828, 
+                    0.500650142607828, 
+                    0.46168150270939073, 
+                    0.46168150270939073, 
+                    0.42291943009373734, 
+                    0.42291943009373734, 
+                    0.38427848801859266, 
+                    0.38427848801859266, 
+                    0.34557237648734396, 
+                    0.34557237648734396, 
+                    0.30675043544418723, 
+                    0.30675043544418723, 
+                    0.26782287011804684, 
+                    0.26782287011804684, 
+                    0.22873103453609428, 
+                    0.22873103453609428, 
+                    0.18935390726518642, 
+                    0.18935390726518642, 
+                    0.14936200651036569, 
+                    0.14936200651036569, 
+                    0.10361089142926133, 
+                    0.10361089142926133
+                ], 
+                0.5006716251373291
+            ], 
+            [
+                0.9454545378684998, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999373514609919, 
+                    0.9999373514609919, 
+                    0.999937175926086, 
+                    0.999937175926086, 
+                    0.9999367107129347, 
+                    0.9999367107129347, 
+                    0.9999349024096873, 
+                    0.9999349024096873, 
+                    0.9517087215809358, 
+                    0.9517087215809358, 
+                    0.8966275720144395, 
+                    0.8966275720144395, 
+                    0.8459429251692819, 
+                    0.8459429251692819, 
+                    0.7980856885938193, 
+                    0.7980856885938193, 
+                    0.7519913201544355, 
+                    0.7519913201544355, 
+                    0.7073200387852807, 
+                    0.7073200387852807, 
+                    0.6642124851109203, 
+                    0.6642124851109203, 
+                    0.621793985918854, 
+                    0.621793985918854, 
+                    0.5808003791653211, 
+                    0.5808003791653211, 
+                    0.5404145482652055, 
+                    0.5404145482652055, 
+                    0.5008817988358919, 
+                    0.5008817988358919, 
+                    0.4618987246461819, 
+                    0.4618987246461819, 
+                    0.42310917506395684, 
+                    0.42310917506395684, 
+                    0.3844312223146257, 
+                    0.3844312223146257, 
+                    0.34569117414962786, 
+                    0.34569117414962786, 
+                    0.3068431886898605, 
+                    0.3068431886898605, 
+                    0.2678948557228521, 
+                    0.2678948557228521, 
+                    0.22878749248008337, 
+                    0.22878749248008337, 
+                    0.18939804612936528, 
+                    0.18939804612936528, 
+                    0.1493948864842282, 
+                    0.1493948864842282, 
+                    0.10365137275028838, 
+                    0.10365137275028838
+                ], 
+                0.5012388229370117
+            ], 
+            [
+                0.9561202526092529, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999315682288213, 
+                    0.9999315682288213, 
+                    0.9999313453171823, 
+                    0.9999313453171823, 
+                    0.9999307164479818, 
+                    0.9999307164479818, 
+                    0.999928266789802, 
+                    0.999928266789802, 
+                    0.9517823900972573, 
+                    0.9517823900972573, 
+                    0.8966441645983314, 
+                    0.8966441645983314, 
+                    0.8458728924212788, 
+                    0.8458728924212788, 
+                    0.7979209182290936, 
+                    0.7979209182290936, 
+                    0.7517266488453727, 
+                    0.7517266488453727, 
+                    0.7069782356859755, 
+                    0.7069782356859755, 
+                    0.6638498664579563, 
+                    0.6638498664579563, 
+                    0.6214197428807477, 
+                    0.6214197428807477, 
+                    0.5804711179173466, 
+                    0.5804711179173466, 
+                    0.5401364444571007, 
+                    0.5401364444571007, 
+                    0.5006681039034444, 
+                    0.5006681039034444, 
+                    0.461743609654768, 
+                    0.461743609654768, 
+                    0.4229976377293105, 
+                    0.4229976377293105, 
+                    0.38434957580407203, 
+                    0.38434957580407203, 
+                    0.3456281854597191, 
+                    0.3456281854597191, 
+                    0.306792400955862, 
+                    0.306792400955862, 
+                    0.26785224758032067, 
+                    0.26785224758032067, 
+                    0.22875114890189083, 
+                    0.22875114890189083, 
+                    0.1893672559592984, 
+                    0.1893672559592984, 
+                    0.14937001710660713, 
+                    0.14937001710660713, 
+                    0.1036459360483851, 
+                    0.1036459360483851
+                ], 
+                0.5004591345787048
+            ], 
+            [
+                0.9669063091278076, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999388081616754, 
+                    0.9999388081616754, 
+                    0.9999386916096387, 
+                    0.9999386916096387, 
+                    0.9999383468383475, 
+                    0.9999383468383475, 
+                    0.9999370064290339, 
+                    0.9999370064290339, 
+                    0.9519138303854939, 
+                    0.9519138303854939, 
+                    0.8967526589301216, 
+                    0.8967526589301216, 
+                    0.8459707692549467, 
+                    0.8459707692549467, 
+                    0.7980194119825539, 
+                    0.7980194119825539, 
+                    0.7518428430777757, 
+                    0.7518428430777757, 
+                    0.7071282526742237, 
+                    0.7071282526742237, 
+                    0.6640382416420908, 
+                    0.6640382416420908, 
+                    0.6216619515483306, 
+                    0.6216619515483306, 
+                    0.5807471670600829, 
+                    0.5807471670600829, 
+                    0.5404399350033698, 
+                    0.5404399350033698, 
+                    0.5009694257168806, 
+                    0.5009694257168806, 
+                    0.4620154511453462, 
+                    0.4620154511453462, 
+                    0.4232296992358479, 
+                    0.4232296992358479, 
+                    0.3845353475667367, 
+                    0.3845353475667367, 
+                    0.3457737140947555, 
+                    0.3457737140947555, 
+                    0.3069074339394184, 
+                    0.3069074339394184, 
+                    0.26794323364935163, 
+                    0.26794323364935163, 
+                    0.2288238829736854, 
+                    0.2288238829736854, 
+                    0.189425108212255, 
+                    0.189425108212255, 
+                    0.1494137824603237, 
+                    0.1494137824603237, 
+                    0.1037000058025536, 
+                    0.1037000058025536
+                ], 
+                0.5012921690940857
+            ], 
+            [
+                0.9778140187263489, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999437255124292, 
+                    0.9999437255124292, 
+                    0.9999437255124292, 
+                    0.9999437255124292, 
+                    0.9999437255124292, 
+                    0.9999437255124292, 
+                    0.9999437255124292, 
+                    0.9999437255124292, 
+                    0.9520525929057552, 
+                    0.9520525929057552, 
+                    0.896849255229273, 
+                    0.896849255229273, 
+                    0.8460214957133725, 
+                    0.8460214957133725, 
+                    0.7980262445150964, 
+                    0.7980262445150964, 
+                    0.7518129019702233, 
+                    0.7518129019702233, 
+                    0.7070799855853078, 
+                    0.7070799855853078, 
+                    0.6639991920059511, 
+                    0.6639991920059511, 
+                    0.6216456004054108, 
+                    0.6216456004054108, 
+                    0.5807666848298666, 
+                    0.5807666848298666, 
+                    0.5404946064720002, 
+                    0.5404946064720002, 
+                    0.5010484220260535, 
+                    0.5010484220260535, 
+                    0.46210158194172424, 
+                    0.46210158194172424, 
+                    0.42331164320874437, 
+                    0.42331164320874437, 
+                    0.3846044653246915, 
+                    0.3846044653246915, 
+                    0.3458289673669037, 
+                    0.3458289673669037, 
+                    0.3069514140693965, 
+                    0.3069514140693965, 
+                    0.267977691375461, 
+                    0.267977691375461, 
+                    0.2288509853722792, 
+                    0.2288509853722792, 
+                    0.18944620996048037, 
+                    0.18944620996048037, 
+                    0.14942925997519502, 
+                    0.14942925997519502, 
+                    0.1037333422850155, 
+                    0.1037333422850155
+                ], 
+                0.5014597773551941
+            ], 
+            [
+                0.9888448119163513, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999925456124692, 
+                    0.9999925456124692, 
+                    0.9999469103659587, 
+                    0.9999469103659587, 
+                    0.9999463848041263, 
+                    0.9999463848041263, 
+                    0.9999450708670938, 
+                    0.9999450708670938, 
+                    0.9521918453518124, 
+                    0.9521918453518124, 
+                    0.8970494719792963, 
+                    0.8970494719792963, 
+                    0.8461458138706912, 
+                    0.8461458138706912, 
+                    0.7979772668412722, 
+                    0.7979772668412722, 
+                    0.7515259327233641, 
+                    0.7515259327233641, 
+                    0.7065749460222905, 
+                    0.7065749460222905, 
+                    0.6633871648644182, 
+                    0.6633871648644182, 
+                    0.6209364923005657, 
+                    0.6209364923005657, 
+                    0.5800995841495609, 
+                    0.5800995841495609, 
+                    0.5398930391802662, 
+                    0.5398930391802662, 
+                    0.5005686914185103, 
+                    0.5005686914185103, 
+                    0.46175829173800864, 
+                    0.46175829173800864, 
+                    0.42308507323611766, 
+                    0.42308507323611766, 
+                    0.38447340147375536, 
+                    0.38447340147375536, 
+                    0.34576511943993493, 
+                    0.34576511943993493, 
+                    0.3069318540081152, 
+                    0.3069318540081152, 
+                    0.2679869151369162, 
+                    0.2679869151369162, 
+                    0.22887754687571052, 
+                    0.22887754687571052, 
+                    0.18948196307007464, 
+                    0.18948196307007464, 
+                    0.14946691654107513, 
+                    0.14946691654107513, 
+                    0.10379804176547555, 
+                    0.10379804176547555
+                ], 
+                0.5003417730331421
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999470061627349, 
+                    0.9999470061627349, 
+                    0.9999468980631316, 
+                    0.9999468980631316, 
+                    0.9999466680749931, 
+                    0.9999466680749931, 
+                    0.9999458858462208, 
+                    0.9999458858462208, 
+                    0.9523896684582048, 
+                    0.9523896684582048, 
+                    0.8970661418626793, 
+                    0.8970661418626793, 
+                    0.8460920913017911, 
+                    0.8460920913017911, 
+                    0.7979438461196243, 
+                    0.7979438461196243, 
+                    0.7515812512860723, 
+                    0.7515812512860723, 
+                    0.706741638955018, 
+                    0.706741638955018, 
+                    0.6636418037542687, 
+                    0.6636418037542687, 
+                    0.6212931064943751, 
+                    0.6212931064943751, 
+                    0.5804907058941218, 
+                    0.5804907058941218, 
+                    0.5402995464846301, 
+                    0.5402995464846301, 
+                    0.5009371121620915, 
+                    0.5009371121620915, 
+                    0.46205210678998804, 
+                    0.46205210678998804, 
+                    0.4232987235520994, 
+                    0.4232987235520994, 
+                    0.3846075067179406, 
+                    0.3846075067179406, 
+                    0.345836358310508, 
+                    0.345836358310508, 
+                    0.3069591037272644, 
+                    0.3069591037272644, 
+                    0.267983318569092, 
+                    0.267983318569092, 
+                    0.228854363240413, 
+                    0.228854363240413, 
+                    0.1894475526471552, 
+                    0.1894475526471552, 
+                    0.14942876637337385, 
+                    0.14942876637337385, 
+                    0.10378358356410668, 
+                    0.10378358356410668
+                ], 
+                0.5010130405426025
+            ], 
+            [
+                1.0112810134887695, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999955758192465, 
+                    0.999955758192465, 
+                    0.999955758192465, 
+                    0.999955758192465, 
+                    0.999955758192465, 
+                    0.999955758192465, 
+                    0.999955758192465, 
+                    0.999955758192465, 
+                    0.9526005265664076, 
+                    0.9526005265664076, 
+                    0.8972004930793555, 
+                    0.8972004930793555, 
+                    0.8461299852356468, 
+                    0.8461299852356468, 
+                    0.797875746347755, 
+                    0.797875746347755, 
+                    0.7514052170082396, 
+                    0.7514052170082396, 
+                    0.7064833323634722, 
+                    0.7064833323634722, 
+                    0.6633616330508658, 
+                    0.6633616330508658, 
+                    0.6210070454747286, 
+                    0.6210070454747286, 
+                    0.5802497831363294, 
+                    0.5802497831363294, 
+                    0.5401086857073116, 
+                    0.5401086857073116, 
+                    0.5008021362230688, 
+                    0.5008021362230688, 
+                    0.46196273757267253, 
+                    0.46196273757267253, 
+                    0.42324087250261194, 
+                    0.42324087250261194, 
+                    0.38456923105502233, 
+                    0.38456923105502233, 
+                    0.3458094405986866, 
+                    0.3458094405986866, 
+                    0.30693917097045875, 
+                    0.30693917097045875, 
+                    0.26796746253940773, 
+                    0.26796746253940773, 
+                    0.22884118633945683, 
+                    0.22884118633945683, 
+                    0.18943637679841321, 
+                    0.18943637679841321, 
+                    0.14941940664258252, 
+                    0.14941940664258252, 
+                    0.10380725520674429, 
+                    0.10380725520674429
+                ], 
+                0.5005455613136292
+            ], 
+            [
+                1.0226893424987793, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999736805953575, 
+                    0.9999736805953575, 
+                    0.9999736805953575, 
+                    0.9999736805953575, 
+                    0.9999736805953575, 
+                    0.9999736805953575, 
+                    0.9999736805953575, 
+                    0.9999736805953575, 
+                    0.9528851439287737, 
+                    0.9528851439287737, 
+                    0.8974303143197593, 
+                    0.8974303143197593, 
+                    0.846314097890271, 
+                    0.846314097890271, 
+                    0.798009344479607, 
+                    0.798009344479607, 
+                    0.7514938975086923, 
+                    0.7514938975086923, 
+                    0.7065421141383528, 
+                    0.7065421141383528, 
+                    0.6634176385360111, 
+                    0.6634176385360111, 
+                    0.621078774215896, 
+                    0.621078774215896, 
+                    0.5803456652160063, 
+                    0.5803456652160063, 
+                    0.5402290470544856, 
+                    0.5402290470544856, 
+                    0.5009343324170331, 
+                    0.5009343324170331, 
+                    0.46209075443971986, 
+                    0.46209075443971986, 
+                    0.4233566369606779, 
+                    0.4233566369606779, 
+                    0.3846670546423107, 
+                    0.3846670546423107, 
+                    0.3458903972343011, 
+                    0.3458903972343011, 
+                    0.3070066163469699, 
+                    0.3070066163469699, 
+                    0.2680234219336234, 
+                    0.2680234219336234, 
+                    0.22888763276733398, 
+                    0.22888763276733398, 
+                    0.18947429040235514, 
+                    0.18947429040235514, 
+                    0.14944846141277424, 
+                    0.14944846141277424, 
+                    0.10386769816052455, 
+                    0.10386769816052455
+                ], 
+                0.5010153651237488
+            ], 
+            [
+                1.034226417541504, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999988144393912, 
+                    0.999988144393912, 
+                    0.999988144393912, 
+                    0.999988144393912, 
+                    0.999988144393912, 
+                    0.999988144393912, 
+                    0.999988144393912, 
+                    0.999988144393912, 
+                    0.9531790772369954, 
+                    0.9531790772369954, 
+                    0.8976292010293764, 
+                    0.8976292010293764, 
+                    0.8463953371584472, 
+                    0.8463953371584472, 
+                    0.7979548472756857, 
+                    0.7979548472756857, 
+                    0.7512986403732707, 
+                    0.7512986403732707, 
+                    0.7062362643384573, 
+                    0.7062362643384573, 
+                    0.6630772868081389, 
+                    0.6630772868081389, 
+                    0.6207250954911635, 
+                    0.6207250954911635, 
+                    0.580041228394923, 
+                    0.580041228394923, 
+                    0.5399808863714601, 
+                    0.5399808863714601, 
+                    0.5007512165021722, 
+                    0.5007512165021722, 
+                    0.4619630281344419, 
+                    0.4619630281344419, 
+                    0.4232693796017399, 
+                    0.4232693796017399, 
+                    0.3846073127413761, 
+                    0.3846073127413761, 
+                    0.34584821898203527, 
+                    0.34584821898203527, 
+                    0.30697584755072166, 
+                    0.30697584755072166, 
+                    0.26799985001588866, 
+                    0.26799985001588866, 
+                    0.22886883018536047, 
+                    0.22886883018536047, 
+                    0.18945892176357915, 
+                    0.18945892176357915, 
+                    0.14943599604112595, 
+                    0.14943599604112595, 
+                    0.10389912401581615, 
+                    0.10389912401581615
+                ], 
+                0.5004348158836365
+            ], 
+            [
+                1.0458935499191284, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999993776183367, 
+                    0.999993776183367, 
+                    0.999993776183367, 
+                    0.999993776183367, 
+                    0.999993776183367, 
+                    0.999993776183367, 
+                    0.9535272122184182, 
+                    0.9535272122184182, 
+                    0.8980470822845523, 
+                    0.8980470822845523, 
+                    0.8467546571070361, 
+                    0.8467546571070361, 
+                    0.7981430747950213, 
+                    0.7981430747950213, 
+                    0.7512544954983508, 
+                    0.7512544954983508, 
+                    0.7059873125658109, 
+                    0.7059873125658109, 
+                    0.6627352300783308, 
+                    0.6627352300783308, 
+                    0.6203182838359137, 
+                    0.6203182838359137, 
+                    0.5796823985511351, 
+                    0.5796823985511351, 
+                    0.5396905720549096, 
+                    0.5396905720549096, 
+                    0.5005609164556349, 
+                    0.5005609164556349, 
+                    0.4618716391637349, 
+                    0.4618716391637349, 
+                    0.4232572071942148, 
+                    0.4232572071942148, 
+                    0.38465456535638737, 
+                    0.38465456535638737, 
+                    0.3459342935249124, 
+                    0.3459342935249124, 
+                    0.3070849027875077, 
+                    0.3070849027875077, 
+                    0.26812041290344485, 
+                    0.26812041290344485, 
+                    0.22899214086551956, 
+                    0.22899214086551956, 
+                    0.18957752139011705, 
+                    0.18957752139011705, 
+                    0.14954070169656403, 
+                    0.14954070169656403, 
+                    0.10404539611761736, 
+                    0.10404539611761736
+                ], 
+                0.5003458857536316
+            ], 
+            [
+                1.057692289352417, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999867581834141, 
+                    0.9999867581834141, 
+                    0.9999454910007468, 
+                    0.9999454910007468, 
+                    0.999945321840175, 
+                    0.999945321840175, 
+                    0.9999449579983806, 
+                    0.9999449579983806, 
+                    0.9538664447362651, 
+                    0.9538664447362651, 
+                    0.8988545414655572, 
+                    0.8988545414655572, 
+                    0.8476081398915158, 
+                    0.8476081398915158, 
+                    0.7987054639749138, 
+                    0.7987054639749138, 
+                    0.751326831318533, 
+                    0.751326831318533, 
+                    0.7056043183874644, 
+                    0.7056043183874644, 
+                    0.6621101657977814, 
+                    0.6621101657977814, 
+                    0.6194951954973745, 
+                    0.6194951954973745, 
+                    0.5789269735626589, 
+                    0.5789269735626589, 
+                    0.5390616926621012, 
+                    0.5390616926621012, 
+                    0.5001601889341454, 
+                    0.5001601889341454, 
+                    0.4617221111079621, 
+                    0.4617221111079621, 
+                    0.4233198229583945, 
+                    0.4233198229583945, 
+                    0.38488530483092026, 
+                    0.38488530483092026, 
+                    0.3462776905678456, 
+                    0.3462776905678456, 
+                    0.3074948518268211, 
+                    0.3074948518268211, 
+                    0.26856354340910993, 
+                    0.26856354340910993, 
+                    0.22944136040095356, 
+                    0.22944136040095356, 
+                    0.19000860362827457, 
+                    0.19000860362827457, 
+                    0.14992221271364328, 
+                    0.14992221271364328, 
+                    0.10445732854871387, 
+                    0.10445732854871387
+                ], 
+                0.500726580619812
+            ], 
+            [
+                1.0696241855621338, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999923230366916, 
+                    0.9999923230366916, 
+                    0.9999028622226918, 
+                    0.9999028622226918, 
+                    0.9999013318073068, 
+                    0.9999013318073068, 
+                    0.9998959718643937, 
+                    0.9998959718643937, 
+                    0.9542086657450761, 
+                    0.9542086657450761, 
+                    0.8995808411588687, 
+                    0.8995808411588687, 
+                    0.8483405979997753, 
+                    0.8483405979997753, 
+                    0.7991527006755434, 
+                    0.7991527006755434, 
+                    0.7513249701530916, 
+                    0.7513249701530916, 
+                    0.7052016161096631, 
+                    0.7052016161096631, 
+                    0.6614951313784828, 
+                    0.6614951313784828, 
+                    0.618726455091875, 
+                    0.618726455091875, 
+                    0.5782310226016332, 
+                    0.5782310226016332, 
+                    0.538498629341736, 
+                    0.538498629341736, 
+                    0.49981313490746343, 
+                    0.49981313490746343, 
+                    0.4616060894931057, 
+                    0.4616060894931057, 
+                    0.42339725936311234, 
+                    0.42339725936311234, 
+                    0.38511358632989334, 
+                    0.38511358632989334, 
+                    0.3466066798999349, 
+                    0.3466066798999349, 
+                    0.3078834258354758, 
+                    0.3078834258354758, 
+                    0.2689814967050779, 
+                    0.2689814967050779, 
+                    0.2298642059892169, 
+                    0.2298642059892169, 
+                    0.19041406629638927, 
+                    0.19041406629638927, 
+                    0.15028094800533798, 
+                    0.15028094800533798, 
+                    0.10485452314670206, 
+                    0.10485452314670206
+                ], 
+                0.5010278224945068
+            ], 
+            [
+                1.0816906690597534, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999999603948151, 
+                    0.999999603948151, 
+                    0.9997896807035563, 
+                    0.9997896807035563, 
+                    0.9997816592526952, 
+                    0.9997816592526952, 
+                    0.9997531405823347, 
+                    0.9997531405823347, 
+                    0.9544251782938629, 
+                    0.9544251782938629, 
+                    0.900364557729499, 
+                    0.900364557729499, 
+                    0.8491095491680523, 
+                    0.8491095491680523, 
+                    0.7995091383264286, 
+                    0.7995091383264286, 
+                    0.7510410432210479, 
+                    0.7510410432210479, 
+                    0.7043582089129444, 
+                    0.7043582089129444, 
+                    0.6603467619173257, 
+                    0.6603467619173257, 
+                    0.6173575576586651, 
+                    0.6173575576586651, 
+                    0.5769771938639323, 
+                    0.5769771938639323, 
+                    0.5374574420115357, 
+                    0.5374574420115357, 
+                    0.4991192121238056, 
+                    0.4991192121238056, 
+                    0.4612891931564945, 
+                    0.4612891931564945, 
+                    0.42339853789604825, 
+                    0.42339853789604825, 
+                    0.3853656626905163, 
+                    0.3853656626905163, 
+                    0.34702875167362773, 
+                    0.34702875167362773, 
+                    0.30840915294252624, 
+                    0.30840915294252624, 
+                    0.26956278781724646, 
+                    0.26956278781724646, 
+                    0.2304622907515938, 
+                    0.2304622907515938, 
+                    0.19099429505499632, 
+                    0.19099429505499632, 
+                    0.15079877263956865, 
+                    0.15079877263956865, 
+                    0.10541115550471296, 
+                    0.10541115550471296
+                ], 
+                0.5006676316261292
+            ], 
+            [
+                1.09389328956604, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997688346817181, 
+                    0.9997688346817181, 
+                    0.9997629273276909, 
+                    0.9997629273276909, 
+                    0.9997476957013668, 
+                    0.9997476957013668, 
+                    0.9547638490229992, 
+                    0.9547638490229992, 
+                    0.9007834265138147, 
+                    0.9007834265138147, 
+                    0.8493756798290013, 
+                    0.8493756798290013, 
+                    0.799496931317647, 
+                    0.799496931317647, 
+                    0.7507036379752401, 
+                    0.7507036379752401, 
+                    0.7037757459587197, 
+                    0.7037757459587197, 
+                    0.6596418232857881, 
+                    0.6596418232857881, 
+                    0.616616869201398, 
+                    0.616616869201398, 
+                    0.5763190925416607, 
+                    0.5763190925416607, 
+                    0.5369394193630019, 
+                    0.5369394193630019, 
+                    0.4987788550798804, 
+                    0.4987788550798804, 
+                    0.4611253281940548, 
+                    0.4611253281940548, 
+                    0.42338186859757254, 
+                    0.42338186859757254, 
+                    0.3854610637818538, 
+                    0.3854610637818538, 
+                    0.3472010883540475, 
+                    0.3472010883540475, 
+                    0.3086301783041101, 
+                    0.3086301783041101, 
+                    0.26981070606140384, 
+                    0.26981070606140384, 
+                    0.23071983121989015, 
+                    0.23071983121989015, 
+                    0.1912459375051628, 
+                    0.1912459375051628, 
+                    0.15102548319065462, 
+                    0.15102548319065462, 
+                    0.10570133412730803, 
+                    0.10570133412730803
+                ], 
+                0.5001806616783142
+            ], 
+            [
+                1.1062335968017578, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999889865942367, 
+                    0.9999889865942367, 
+                    0.9999216353865513, 
+                    0.9999216353865513, 
+                    0.9999203578532891, 
+                    0.9999203578532891, 
+                    0.9998836083631772, 
+                    0.9998836083631772, 
+                    0.989694817834878, 
+                    0.989694817834878, 
+                    0.9243753830300724, 
+                    0.9243753830300724, 
+                    0.8635853037766384, 
+                    0.8635853037766384, 
+                    0.8066516408596842, 
+                    0.8066516408596842, 
+                    0.7521297326612236, 
+                    0.7521297326612236, 
+                    0.7010791607928358, 
+                    0.7010791607928358, 
+                    0.6553050793345436, 
+                    0.6553050793345436, 
+                    0.6109146651766989, 
+                    0.6109146651766989, 
+                    0.5713628663630135, 
+                    0.5713628663630135, 
+                    0.5328092960431909, 
+                    0.5328092960431909, 
+                    0.4960479670118922, 
+                    0.4960479670118922, 
+                    0.4598031071191109, 
+                    0.4598031071191109, 
+                    0.4231538523135424, 
+                    0.4231538523135424, 
+                    0.38608063379212504, 
+                    0.38608063379212504, 
+                    0.34838484612080906, 
+                    0.34838484612080906, 
+                    0.3101712078660774, 
+                    0.3101712078660774, 
+                    0.27157989320339565, 
+                    0.27157989320339565, 
+                    0.23261697159177197, 
+                    0.23261697159177197, 
+                    0.1931762440702085, 
+                    0.1931762440702085, 
+                    0.152847190205493, 
+                    0.152847190205493, 
+                    0.10517368153698405, 
+                    0.10517368153698405
+                ], 
+                0.4999689757823944
+            ], 
+            [
+                1.1187130212783813, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9914996438574651, 
+                    0.9914996438574651, 
+                    0.9258869547776201, 
+                    0.9258869547776201, 
+                    0.8648512947724137, 
+                    0.8648512947724137, 
+                    0.8074159409228936, 
+                    0.8074159409228936, 
+                    0.7524853582857558, 
+                    0.7524853582857558, 
+                    0.701181596867124, 
+                    0.701181596867124, 
+                    0.655423508529542, 
+                    0.655423508529542, 
+                    0.6111957641300634, 
+                    0.6111957641300634, 
+                    0.5717359668906766, 
+                    0.5717359668906766, 
+                    0.533244813312382, 
+                    0.533244813312382, 
+                    0.4964079175102091, 
+                    0.4964079175102091, 
+                    0.46000387122514613, 
+                    0.46000387122514613, 
+                    0.4232064083750347, 
+                    0.4232064083750347, 
+                    0.38599980892966695, 
+                    0.38599980892966695, 
+                    0.348212273457722, 
+                    0.348212273457722, 
+                    0.3099425542905546, 
+                    0.3099425542905546, 
+                    0.27131724501240095, 
+                    0.27131724501240095, 
+                    0.2323393884069937, 
+                    0.2323393884069937, 
+                    0.19290045645565326, 
+                    0.19290045645565326, 
+                    0.1525946304247927, 
+                    0.1525946304247927, 
+                    0.10509486441466778, 
+                    0.10509486441466778
+                ], 
+                0.5004308819770813
+            ]
+        ]
+    }, 
+    {
+        "block_size": 53, 
+        "preprocessing_block_sizes": [
+            38
+        ], 
+        "pruning_parameters": [
+            [
+                0.8957270383834839, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999847459075116, 
+                    0.9999847459075116, 
+                    0.9999847459075116, 
+                    0.9999847459075116, 
+                    0.9999847459075116, 
+                    0.9999847459075116, 
+                    0.9999847459075116, 
+                    0.9999847459075116, 
+                    0.9521778456765321, 
+                    0.9521778456765321, 
+                    0.8972462393158638, 
+                    0.8972462393158638, 
+                    0.846868025004175, 
+                    0.846868025004175, 
+                    0.7991288512130185, 
+                    0.7991288512130185, 
+                    0.7530745191895849, 
+                    0.7530745191895849, 
+                    0.7080370455558482, 
+                    0.7080370455558482, 
+                    0.66354021100602, 
+                    0.66354021100602, 
+                    0.6209936255404607, 
+                    0.6209936255404607, 
+                    0.5797506407964356, 
+                    0.5797506407964356, 
+                    0.5394722538339157, 
+                    0.5394722538339157, 
+                    0.500149689574812, 
+                    0.500149689574812, 
+                    0.46153077311708424, 
+                    0.46153077311708424, 
+                    0.42284411857182885, 
+                    0.42284411857182885, 
+                    0.3842564722365036, 
+                    0.3842564722365036, 
+                    0.3455562396848297, 
+                    0.3455562396848297, 
+                    0.3067474394653876, 
+                    0.3067474394653876, 
+                    0.26782171768426116, 
+                    0.26782171768426116, 
+                    0.22872866595269706, 
+                    0.22872866595269706, 
+                    0.1893511982403252, 
+                    0.1893511982403252, 
+                    0.14935805693219165, 
+                    0.14935805693219165, 
+                    0.10368257576400712, 
+                    0.10368257576400712
+                ], 
+                0.5006884932518005
+            ], 
+            [
+                0.9056452512741089, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999856099160623, 
+                    0.9999856099160623, 
+                    0.9999856099160623, 
+                    0.9999856099160623, 
+                    0.9999856099160623, 
+                    0.9999856099160623, 
+                    0.9999856099160623, 
+                    0.9999856099160623, 
+                    0.952312254550858, 
+                    0.952312254550858, 
+                    0.8973473803666312, 
+                    0.8973473803666312, 
+                    0.8469339261863207, 
+                    0.8469339261863207, 
+                    0.7991500989081115, 
+                    0.7991500989081115, 
+                    0.7530489293125745, 
+                    0.7530489293125745, 
+                    0.7079698250309066, 
+                    0.7079698250309066, 
+                    0.6634434903444606, 
+                    0.6634434903444606, 
+                    0.6209157184900786, 
+                    0.6209157184900786, 
+                    0.5797109961966915, 
+                    0.5797109961966915, 
+                    0.5394753015344426, 
+                    0.5394753015344426, 
+                    0.5001863175352144, 
+                    0.5001863175352144, 
+                    0.4615795599256668, 
+                    0.4615795599256668, 
+                    0.42289681175691696, 
+                    0.42289681175691696, 
+                    0.3843031191486666, 
+                    0.3843031191486666, 
+                    0.345594551019165, 
+                    0.345594551019165, 
+                    0.3067774945883406, 
+                    0.3067774945883406, 
+                    0.2678445297505458, 
+                    0.2678445297505458, 
+                    0.22874596934985295, 
+                    0.22874596934985295, 
+                    0.18936400714300675, 
+                    0.18936400714300675, 
+                    0.14936685174035197, 
+                    0.14936685174035197, 
+                    0.10371336251247869, 
+                    0.10371336251247869
+                ], 
+                0.5007401704788208
+            ], 
+            [
+                0.9156733155250549, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999853907216124, 
+                    0.9999853907216124, 
+                    0.9999853907216124, 
+                    0.9999853907216124, 
+                    0.9999853907216124, 
+                    0.9999853907216124, 
+                    0.9999853907216124, 
+                    0.9999853907216124, 
+                    0.9524632845374145, 
+                    0.9524632845374145, 
+                    0.897456833034835, 
+                    0.897456833034835, 
+                    0.8469937314469267, 
+                    0.8469937314469267, 
+                    0.799141151718621, 
+                    0.799141151718621, 
+                    0.7529639824002751, 
+                    0.7529639824002751, 
+                    0.7078077643998675, 
+                    0.7078077643998675, 
+                    0.6632073652081867, 
+                    0.6632073652081867, 
+                    0.6206773432458307, 
+                    0.6206773432458307, 
+                    0.5795034826708617, 
+                    0.5795034826708617, 
+                    0.539313629158739, 
+                    0.539313629158739, 
+                    0.5000771952447487, 
+                    0.5000771952447487, 
+                    0.46151477470310387, 
+                    0.46151477470310387, 
+                    0.4228589979446824, 
+                    0.4228589979446824, 
+                    0.38428126097355536, 
+                    0.38428126097355536, 
+                    0.3455803468063425, 
+                    0.3455803468063425, 
+                    0.30676664494214784, 
+                    0.30676664494214784, 
+                    0.267834914820734, 
+                    0.267834914820734, 
+                    0.22873700379535902, 
+                    0.22873700379535902, 
+                    0.18935555120586453, 
+                    0.18935555120586453, 
+                    0.14935920524917076, 
+                    0.14935920524917076, 
+                    0.10373373125330305, 
+                    0.10373373125330305
+                ], 
+                0.5004034638404846
+            ], 
+            [
+                0.9258123636245728, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999989443552707, 
+                    0.999989443552707, 
+                    0.999989443552707, 
+                    0.999989443552707, 
+                    0.999989443552707, 
+                    0.999989443552707, 
+                    0.999989443552707, 
+                    0.999989443552707, 
+                    0.9526493021251566, 
+                    0.9526493021251566, 
+                    0.8976118079961233, 
+                    0.8976118079961233, 
+                    0.8471337167051247, 
+                    0.8471337167051247, 
+                    0.7992777790730883, 
+                    0.7992777790730883, 
+                    0.753104329899573, 
+                    0.753104329899573, 
+                    0.7079682051240306, 
+                    0.7079682051240306, 
+                    0.6634133257343325, 
+                    0.6634133257343325, 
+                    0.6209273483105616, 
+                    0.6209273483105616, 
+                    0.5797910026818034, 
+                    0.5797910026818034, 
+                    0.5396236930450243, 
+                    0.5396236930450243, 
+                    0.5003777328982583, 
+                    0.5003777328982583, 
+                    0.4617701329855809, 
+                    0.4617701329855809, 
+                    0.4230757452284148, 
+                    0.4230757452284148, 
+                    0.38445451510209233, 
+                    0.38445451510209233, 
+                    0.34571815313463294, 
+                    0.34571815313463294, 
+                    0.3068764333253522, 
+                    0.3068764333253522, 
+                    0.2679227585160988, 
+                    0.2679227585160988, 
+                    0.2288079752799682, 
+                    0.2288079752799682, 
+                    0.1894122751776748, 
+                    0.1894122751776748, 
+                    0.14940212137719405, 
+                    0.14940212137719405, 
+                    0.10380023274759567, 
+                    0.10380023274759567
+                ], 
+                0.5012691020965576
+            ], 
+            [
+                0.9360637068748474, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999908270119365, 
+                    0.9999908270119365, 
+                    0.9999908270119365, 
+                    0.9999908270119365, 
+                    0.9999908270119365, 
+                    0.9999908270119365, 
+                    0.9999908270119365, 
+                    0.9999908270119365, 
+                    0.9528474148748137, 
+                    0.9528474148748137, 
+                    0.8977576864537554, 
+                    0.8977576864537554, 
+                    0.8472178015873993, 
+                    0.8472178015873993, 
+                    0.799272476905895, 
+                    0.799272476905895, 
+                    0.7529927279728906, 
+                    0.7529927279728906, 
+                    0.7077424174181701, 
+                    0.7077424174181701, 
+                    0.6630712022872062, 
+                    0.6630712022872062, 
+                    0.6205700805267079, 
+                    0.6205700805267079, 
+                    0.5794673725423188, 
+                    0.5794673725423188, 
+                    0.5393565124664885, 
+                    0.5393565124664885, 
+                    0.5001786168725443, 
+                    0.5001786168725443, 
+                    0.46163204345949954, 
+                    0.46163204345949954, 
+                    0.42297926514029205, 
+                    0.42297926514029205, 
+                    0.38438703819478265, 
+                    0.38438703819478265, 
+                    0.3456687373675467, 
+                    0.3456687373675467, 
+                    0.3068383110626398, 
+                    0.3068383110626398, 
+                    0.26789180846328825, 
+                    0.26789180846328825, 
+                    0.22878206171979776, 
+                    0.22878206171979776, 
+                    0.1893903291781577, 
+                    0.1893903291781577, 
+                    0.14938407279321705, 
+                    0.14938407279321705, 
+                    0.10382061065001895, 
+                    0.10382061065001895
+                ], 
+                0.5006896257400513
+            ], 
+            [
+                0.9464285969734192, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99999413504056, 
+                    0.99999413504056, 
+                    0.99999413504056, 
+                    0.99999413504056, 
+                    0.99999413504056, 
+                    0.99999413504056, 
+                    0.99999413504056, 
+                    0.99999413504056, 
+                    0.9530762830786275, 
+                    0.9530762830786275, 
+                    0.8979324154633848, 
+                    0.8979324154633848, 
+                    0.8473345562286185, 
+                    0.8473345562286185, 
+                    0.7993077749983023, 
+                    0.7993077749983023, 
+                    0.7529292706251084, 
+                    0.7529292706251084, 
+                    0.7075747667820982, 
+                    0.7075747667820982, 
+                    0.6628020281044046, 
+                    0.6628020281044046, 
+                    0.6202937968026581, 
+                    0.6202937968026581, 
+                    0.5792280918390272, 
+                    0.5792280918390272, 
+                    0.5391718225521887, 
+                    0.5391718225521887, 
+                    0.5000519185612741, 
+                    0.5000519185612741, 
+                    0.4615500319577518, 
+                    0.4615500319577518, 
+                    0.4229275628862591, 
+                    0.4229275628862591, 
+                    0.38435396922876297, 
+                    0.38435396922876297, 
+                    0.34564640051237683, 
+                    0.34564640051237683, 
+                    0.3068219676155056, 
+                    0.3068219676155056, 
+                    0.2678786883513405, 
+                    0.2678786883513405, 
+                    0.22877092014991088, 
+                    0.22877092014991088, 
+                    0.18938048890840906, 
+                    0.18938048890840906, 
+                    0.14937539625068003, 
+                    0.14937539625068003, 
+                    0.10385396087186316, 
+                    0.10385396087186316
+                ], 
+                0.5003315210342407
+            ], 
+            [
+                0.9569081664085388, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9533412336942337, 
+                    0.9533412336942337, 
+                    0.898143994193682, 
+                    0.898143994193682, 
+                    0.8474989780830526, 
+                    0.8474989780830526, 
+                    0.7994101201350904, 
+                    0.7994101201350904, 
+                    0.7529527036827603, 
+                    0.7529527036827603, 
+                    0.707517786978783, 
+                    0.707517786978783, 
+                    0.6626740205610863, 
+                    0.6626740205610863, 
+                    0.6201694633167417, 
+                    0.6201694633167417, 
+                    0.5791404853152006, 
+                    0.5791404853152006, 
+                    0.5391294448168438, 
+                    0.5391294448168438, 
+                    0.5000467401281344, 
+                    0.5000467401281344, 
+                    0.4615618837478222, 
+                    0.4615618837478222, 
+                    0.42295023899759154, 
+                    0.42295023899759154, 
+                    0.3843782455583222, 
+                    0.3843782455583222, 
+                    0.34566930678744745, 
+                    0.34566930678744745, 
+                    0.30684209059524925, 
+                    0.30684209059524925, 
+                    0.2678954808619843, 
+                    0.2678954808619843, 
+                    0.22878458000639643, 
+                    0.22878458000639643, 
+                    0.18939100263364855, 
+                    0.18939100263364855, 
+                    0.1493825508442299, 
+                    0.1493825508442299, 
+                    0.1039062783711766, 
+                    0.1039062783711766
+                ], 
+                0.5003601908683777
+            ], 
+            [
+                0.9675038456916809, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999960486754235, 
+                    0.9999960486754235, 
+                    0.9999960486754235, 
+                    0.9999960486754235, 
+                    0.9999960486754235, 
+                    0.9999960486754235, 
+                    0.9537408854079219, 
+                    0.9537408854079219, 
+                    0.898948622882871, 
+                    0.898948622882871, 
+                    0.8484698924888424, 
+                    0.8484698924888424, 
+                    0.8002280625728981, 
+                    0.8002280625728981, 
+                    0.7534380193635974, 
+                    0.7534380193635974, 
+                    0.7075743969272688, 
+                    0.7075743969272688, 
+                    0.6622723564763425, 
+                    0.6622723564763425, 
+                    0.619593391356617, 
+                    0.619593391356617, 
+                    0.5785468786030352, 
+                    0.5785468786030352, 
+                    0.5386203100867771, 
+                    0.5386203100867771, 
+                    0.49970739138689996, 
+                    0.49970739138689996, 
+                    0.46142596777815587, 
+                    0.46142596777815587, 
+                    0.4229659539477938, 
+                    0.4229659539477938, 
+                    0.38451591111577244, 
+                    0.38451591111577244, 
+                    0.34588687028845555, 
+                    0.34588687028845555, 
+                    0.30710759320016473, 
+                    0.30710759320016473, 
+                    0.2681848900509745, 
+                    0.2681848900509745, 
+                    0.22907895724128668, 
+                    0.22907895724128668, 
+                    0.1896738135467375, 
+                    0.1896738135467375, 
+                    0.14963274076176417, 
+                    0.14963274076176417, 
+                    0.10419364695430645, 
+                    0.10419364695430645
+                ], 
+                0.5008789896965027
+            ], 
+            [
+                0.978216826915741, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999906993687405, 
+                    0.9999906993687405, 
+                    0.9999906993687405, 
+                    0.9999906993687405, 
+                    0.9999906993687405, 
+                    0.9999906993687405, 
+                    0.9541360124792153, 
+                    0.9541360124792153, 
+                    0.8996681471001023, 
+                    0.8996681471001023, 
+                    0.849281467867137, 
+                    0.849281467867137, 
+                    0.8008198951271654, 
+                    0.8008198951271654, 
+                    0.7536440226845963, 
+                    0.7536440226845963, 
+                    0.7073085965652891, 
+                    0.7073085965652891, 
+                    0.6615190422539011, 
+                    0.6615190422539011, 
+                    0.618674545643167, 
+                    0.618674545643167, 
+                    0.5776373172822167, 
+                    0.5776373172822167, 
+                    0.5378317275263197, 
+                    0.5378317275263197, 
+                    0.4991305029046686, 
+                    0.4991305029046686, 
+                    0.4610931436005424, 
+                    0.4610931436005424, 
+                    0.42281600639744976, 
+                    0.42281600639744976, 
+                    0.3845128546577605, 
+                    0.3845128546577605, 
+                    0.3459825294590811, 
+                    0.3459825294590811, 
+                    0.3072659130362378, 
+                    0.3072659130362378, 
+                    0.268379297041426, 
+                    0.268379297041426, 
+                    0.2292892597644777, 
+                    0.2292892597644777, 
+                    0.1898835102023099, 
+                    0.1898835102023099, 
+                    0.14982285099007522, 
+                    0.14982285099007522, 
+                    0.10443524282827095, 
+                    0.10443524282827095
+                ], 
+                0.5004008412361145
+            ], 
+            [
+                0.9890484809875488, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999803218721905, 
+                    0.9999803218721905, 
+                    0.9999803218721905, 
+                    0.9999803218721905, 
+                    0.9999803218721905, 
+                    0.9999803218721905, 
+                    0.9545904858267806, 
+                    0.9545904858267806, 
+                    0.9006329020919633, 
+                    0.9006329020919633, 
+                    0.850425314637728, 
+                    0.850425314637728, 
+                    0.8017158211215537, 
+                    0.8017158211215537, 
+                    0.7540765422919915, 
+                    0.7540765422919915, 
+                    0.7071729485649298, 
+                    0.7071729485649298, 
+                    0.6608203976086812, 
+                    0.6608203976086812, 
+                    0.6177607616508926, 
+                    0.6177607616508926, 
+                    0.5767129897203991, 
+                    0.5767129897203991, 
+                    0.537036878288029, 
+                    0.537036878288029, 
+                    0.4985784774704922, 
+                    0.4985784774704922, 
+                    0.46082789252378664, 
+                    0.46082789252378664, 
+                    0.42276903256307047, 
+                    0.42276903256307047, 
+                    0.38464053566054435, 
+                    0.38464053566054435, 
+                    0.3462267142635078, 
+                    0.3462267142635078, 
+                    0.307582260228768, 
+                    0.307582260228768, 
+                    0.2687345209880835, 
+                    0.2687345209880835, 
+                    0.22965727389224636, 
+                    0.22965727389224636, 
+                    0.1902416536470596, 
+                    0.1902416536470596, 
+                    0.1501428444561812, 
+                    0.1501428444561812, 
+                    0.10480379546395684, 
+                    0.10480379546395684
+                ], 
+                0.5005378723144531
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999191293962454, 
+                    0.9999191293962454, 
+                    0.9999191293962454, 
+                    0.9999191293962454, 
+                    0.9999191293962454, 
+                    0.9999191293962454, 
+                    0.9999191293962454, 
+                    0.9999191293962454, 
+                    0.9897735843620284, 
+                    0.9897735843620284, 
+                    0.9264905064544967, 
+                    0.9264905064544967, 
+                    0.8686456298247267, 
+                    0.8686456298247267, 
+                    0.8132198992210805, 
+                    0.8132198992210805, 
+                    0.759757847532388, 
+                    0.759757847532388, 
+                    0.7074200858068592, 
+                    0.7074200858068592, 
+                    0.6555882750713595, 
+                    0.6555882750713595, 
+                    0.6107094469157476, 
+                    0.6107094469157476, 
+                    0.5695872434276373, 
+                    0.5695872434276373, 
+                    0.5308355913673262, 
+                    0.5308355913673262, 
+                    0.4942339734562316, 
+                    0.4942339734562316, 
+                    0.4587156432979902, 
+                    0.4587156432979902, 
+                    0.42214540207810436, 
+                    0.42214540207810436, 
+                    0.38524520002017243, 
+                    0.38524520002017243, 
+                    0.3476367942384515, 
+                    0.3476367942384515, 
+                    0.3095143768556545, 
+                    0.3095143768556545, 
+                    0.2709923671920653, 
+                    0.2709923671920653, 
+                    0.23209059127279177, 
+                    0.23209059127279177, 
+                    0.1927157903587436, 
+                    0.1927157903587436, 
+                    0.15246791352448524, 
+                    0.15246791352448524, 
+                    0.1046306588509483, 
+                    0.1046306588509483
+                ], 
+                0.5010872483253479
+            ], 
+            [
+                1.0110727548599243, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999404990916705, 
+                    0.9999404990916705, 
+                    0.9999404990916705, 
+                    0.9999404990916705, 
+                    0.9999404990916705, 
+                    0.9999404990916705, 
+                    0.9999404990916705, 
+                    0.9999404990916705, 
+                    0.9903994242399538, 
+                    0.9903994242399538, 
+                    0.926992748223945, 
+                    0.926992748223945, 
+                    0.8690519455361455, 
+                    0.8690519455361455, 
+                    0.813463613112633, 
+                    0.813463613112633, 
+                    0.7597673779794772, 
+                    0.7597673779794772, 
+                    0.7072091897014258, 
+                    0.7072091897014258, 
+                    0.655222081330782, 
+                    0.655222081330782, 
+                    0.6104225451482584, 
+                    0.6104225451482584, 
+                    0.5694507557890178, 
+                    0.5694507557890178, 
+                    0.5308421389563286, 
+                    0.5308421389563286, 
+                    0.494319670371363, 
+                    0.494319670371363, 
+                    0.4587993865912852, 
+                    0.4587993865912852, 
+                    0.42223226307857953, 
+                    0.42223226307857953, 
+                    0.3853138971476438, 
+                    0.3853138971476438, 
+                    0.3476895258655662, 
+                    0.3476895258655662, 
+                    0.3095526844184728, 
+                    0.3095526844184728, 
+                    0.27101775959698304, 
+                    0.27101775959698304, 
+                    0.23210523992511872, 
+                    0.23210523992511872, 
+                    0.1927209360526704, 
+                    0.1927209360526704, 
+                    0.1524648770008089, 
+                    0.1524648770008089, 
+                    0.10477486062295843, 
+                    0.10477486062295843
+                ], 
+                0.5010333061218262
+            ], 
+            [
+                1.0222681760787964, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999664000314311, 
+                    0.9999664000314311, 
+                    0.9999664000314311, 
+                    0.9999664000314311, 
+                    0.9999664000314311, 
+                    0.9999664000314311, 
+                    0.9999664000314311, 
+                    0.9999664000314311, 
+                    0.9910694114951657, 
+                    0.9910694114951657, 
+                    0.9275262305771363, 
+                    0.9275262305771363, 
+                    0.8694679267628733, 
+                    0.8694679267628733, 
+                    0.8136514716137777, 
+                    0.8136514716137777, 
+                    0.7596204753117559, 
+                    0.7596204753117559, 
+                    0.7067440703447009, 
+                    0.7067440703447009, 
+                    0.6545254023843851, 
+                    0.6545254023843851, 
+                    0.6098166758123978, 
+                    0.6098166758123978, 
+                    0.5690249954029001, 
+                    0.5690249954029001, 
+                    0.530595718479878, 
+                    0.530595718479878, 
+                    0.49418849148179944, 
+                    0.49418849148179944, 
+                    0.4587016281019027, 
+                    0.4587016281019027, 
+                    0.42217273062680055, 
+                    0.42217273062680055, 
+                    0.3852659562264063, 
+                    0.3852659562264063, 
+                    0.34764922670710546, 
+                    0.34764922670710546, 
+                    0.3095158886906809, 
+                    0.3095158886906809, 
+                    0.2709816495529116, 
+                    0.2709816495529116, 
+                    0.23206896676562241, 
+                    0.23206896676562241, 
+                    0.19268410057734336, 
+                    0.19268410057734336, 
+                    0.1524287040121053, 
+                    0.1524287040121053, 
+                    0.10490849006395087, 
+                    0.10490849006395087
+                ], 
+                0.5001814961433411
+            ], 
+            [
+                1.0335875749588013, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999929673992807, 
+                    0.9999929673992807, 
+                    0.9999624028549624, 
+                    0.9999624028549624, 
+                    0.9999624028549624, 
+                    0.9999624028549624, 
+                    0.9999624028549624, 
+                    0.9999624028549624, 
+                    0.9915439098498787, 
+                    0.9915439098498787, 
+                    0.9279662933913959, 
+                    0.9279662933913959, 
+                    0.8700020392127414, 
+                    0.8700020392127414, 
+                    0.8139535952083695, 
+                    0.8139535952083695, 
+                    0.7594996505511415, 
+                    0.7594996505511415, 
+                    0.7061557392368978, 
+                    0.7061557392368978, 
+                    0.653711826499864, 
+                    0.653711826499864, 
+                    0.6089684848757003, 
+                    0.6089684848757003, 
+                    0.5682551903358917, 
+                    0.5682551903358917, 
+                    0.5300064785257156, 
+                    0.5300064785257156, 
+                    0.49382326186563624, 
+                    0.49382326186563624, 
+                    0.4585671153723581, 
+                    0.4585671153723581, 
+                    0.42226055504328025, 
+                    0.42226055504328025, 
+                    0.3855195529748102, 
+                    0.3855195529748102, 
+                    0.34801802974037876, 
+                    0.34801802974037876, 
+                    0.3099549319468209, 
+                    0.3099549319468209, 
+                    0.27145483128040226, 
+                    0.27145483128040226, 
+                    0.23254703489707082, 
+                    0.23254703489707082, 
+                    0.19313992114757164, 
+                    0.19313992114757164, 
+                    0.15282805003215008, 
+                    0.15282805003215008, 
+                    0.10550089651516742, 
+                    0.10550089651516742
+                ], 
+                0.5000024437904358
+            ], 
+            [
+                1.0450323820114136, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998439829204471, 
+                    0.9998439829204471, 
+                    0.9998326396725639, 
+                    0.9998326396725639, 
+                    0.999810585383436, 
+                    0.999810585383436, 
+                    0.9913792741792579, 
+                    0.9913792741792579, 
+                    0.9278914103661278, 
+                    0.9278914103661278, 
+                    0.870259824585442, 
+                    0.870259824585442, 
+                    0.8139305925741904, 
+                    0.8139305925741904, 
+                    0.759053176403119, 
+                    0.759053176403119, 
+                    0.705186051504454, 
+                    0.705186051504454, 
+                    0.6528107050228946, 
+                    0.6528107050228946, 
+                    0.6077223755992245, 
+                    0.6077223755992245, 
+                    0.5667737136215002, 
+                    0.5667737136215002, 
+                    0.5286160958495759, 
+                    0.5286160958495759, 
+                    0.4928434020845367, 
+                    0.4928434020845367, 
+                    0.45824408664919847, 
+                    0.45824408664919847, 
+                    0.42255315323578485, 
+                    0.42255315323578485, 
+                    0.38631455875264575, 
+                    0.38631455875264575, 
+                    0.34916410819050486, 
+                    0.34916410819050486, 
+                    0.3113211420706205, 
+                    0.3113211420706205, 
+                    0.2729354137459342, 
+                    0.2729354137459342, 
+                    0.2340534601364121, 
+                    0.2340534601364121, 
+                    0.19458972003416686, 
+                    0.19458972003416686, 
+                    0.15411533515491135, 
+                    0.15411533515491135, 
+                    0.10699396410774456, 
+                    0.10699396410774456
+                ], 
+                0.5007488131523132
+            ], 
+            [
+                1.0566037893295288, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998520653568385, 
+                    0.9998520653568385, 
+                    0.9998520653568385, 
+                    0.9998520653568385, 
+                    0.9998520653568385, 
+                    0.9998520653568385, 
+                    0.9998520653568385, 
+                    0.9998520653568385, 
+                    0.9682800879463953, 
+                    0.9682800879463953, 
+                    0.8997931509487248, 
+                    0.8997931509487248, 
+                    0.8333277962447982, 
+                    0.8333277962447982, 
+                    0.76928917048719, 
+                    0.76928917048719, 
+                    0.7070809461620509, 
+                    0.7070809461620509, 
+                    0.6466715901822021, 
+                    0.6466715901822021, 
+                    0.5998507062974635, 
+                    0.5998507062974635, 
+                    0.5595782673218912, 
+                    0.5595782673218912, 
+                    0.5231278377381987, 
+                    0.5231278377381987, 
+                    0.4897792355521478, 
+                    0.4897792355521478, 
+                    0.4576271169282817, 
+                    0.4576271169282817, 
+                    0.4235143339031148, 
+                    0.4235143339031148, 
+                    0.3884862835379473, 
+                    0.3884862835379473, 
+                    0.35208777966399996, 
+                    0.35208777966399996, 
+                    0.3146977146745101, 
+                    0.3146977146745101, 
+                    0.2765618799604078, 
+                    0.2765618799604078, 
+                    0.2377742035583412, 
+                    0.2377742035583412, 
+                    0.19825054661959116, 
+                    0.19825054661959116, 
+                    0.1574719300143991, 
+                    0.1574719300143991, 
+                    0.1072549743386354, 
+                    0.1072549743386354
+                ], 
+                0.5007104277610779
+            ], 
+            [
+                1.0683033466339111, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991180319389544, 
+                    0.9991180319389544, 
+                    0.9986990524699894, 
+                    0.9986990524699894, 
+                    0.9985179796627088, 
+                    0.9985179796627088, 
+                    0.9981085138950642, 
+                    0.9981085138950642, 
+                    0.962658047095518, 
+                    0.962658047095518, 
+                    0.8915611310462912, 
+                    0.8915611310462912, 
+                    0.8237405581271222, 
+                    0.8237405581271222, 
+                    0.7611967396229916, 
+                    0.7611967396229916, 
+                    0.7014851582661858, 
+                    0.7014851582661858, 
+                    0.6467982416939333, 
+                    0.6467982416939333, 
+                    0.600397501678502, 
+                    0.600397501678502, 
+                    0.5587556211031246, 
+                    0.5587556211031246, 
+                    0.5210996632596111, 
+                    0.5210996632596111, 
+                    0.4873295300679236, 
+                    0.4873295300679236, 
+                    0.45606543572001806, 
+                    0.45606543572001806, 
+                    0.42331872135535514, 
+                    0.42331872135535514, 
+                    0.3895169101335655, 
+                    0.3895169101335655, 
+                    0.3540404996926234, 
+                    0.3540404996926234, 
+                    0.31726821348775597, 
+                    0.31726821348775597, 
+                    0.2794918945208404, 
+                    0.2794918945208404, 
+                    0.2408425458983482, 
+                    0.2408425458983482, 
+                    0.20125623911320822, 
+                    0.20125623911320822, 
+                    0.1601755310281172, 
+                    0.1601755310281172, 
+                    0.11069009237279336, 
+                    0.11069009237279336
+                ], 
+                0.5005531311035156
+            ], 
+            [
+                1.0801324844360352, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984780617704734, 
+                    0.9984780617704734, 
+                    0.9977982495581232, 
+                    0.9977982495581232, 
+                    0.9977253274361284, 
+                    0.9977253274361284, 
+                    0.9975549517825653, 
+                    0.9975549517825653, 
+                    0.9577980708752805, 
+                    0.9577980708752805, 
+                    0.8844171668203047, 
+                    0.8844171668203047, 
+                    0.8154326426955022, 
+                    0.8154326426955022, 
+                    0.7544681127160122, 
+                    0.7544681127160122, 
+                    0.6975930755251045, 
+                    0.6975930755251045, 
+                    0.6501127230113901, 
+                    0.6501127230113901, 
+                    0.6036879201448936, 
+                    0.6036879201448936, 
+                    0.5595670037426045, 
+                    0.5595670037426045, 
+                    0.5197277476034673, 
+                    0.5197277476034673, 
+                    0.48476367631111444, 
+                    0.48476367631111444, 
+                    0.4538527510501131, 
+                    0.4538527510501131, 
+                    0.42214902449360997, 
+                    0.42214902449360997, 
+                    0.38933263355747916, 
+                    0.38933263355747916, 
+                    0.35463244304294217, 
+                    0.35463244304294217, 
+                    0.31840906410078174, 
+                    0.31840906410078174, 
+                    0.2809869642262227, 
+                    0.2809869642262227, 
+                    0.24252631821786336, 
+                    0.24252631821786336, 
+                    0.2029812135346809, 
+                    0.2029812135346809, 
+                    0.16177260693365533, 
+                    0.16177260693365533, 
+                    0.1129319396461025, 
+                    0.1129319396461025
+                ], 
+                0.500227689743042
+            ], 
+            [
+                1.092092514038086, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999843811898727, 
+                    0.9999843811898727, 
+                    0.9989654302217298, 
+                    0.9989654302217298, 
+                    0.9977949415108447, 
+                    0.9977949415108447, 
+                    0.9762445930760424, 
+                    0.9762445930760424, 
+                    0.9165853882944461, 
+                    0.9165853882944461, 
+                    0.862622192209185, 
+                    0.862622192209185, 
+                    0.8076625614934515, 
+                    0.8076625614934515, 
+                    0.7515890027494341, 
+                    0.7515890027494341, 
+                    0.697607019247694, 
+                    0.697607019247694, 
+                    0.6350196072523374, 
+                    0.6350196072523374, 
+                    0.5949923938975712, 
+                    0.5949923938975712, 
+                    0.556352554362648, 
+                    0.556352554362648, 
+                    0.5196555198790435, 
+                    0.5196555198790435, 
+                    0.48591001913131515, 
+                    0.48591001913131515, 
+                    0.45539380775253785, 
+                    0.45539380775253785, 
+                    0.4251984059033974, 
+                    0.4251984059033974, 
+                    0.39422849651084246, 
+                    0.39422849651084246, 
+                    0.3610942976785958, 
+                    0.3610942976785958, 
+                    0.32597649226249514, 
+                    0.32597649226249514, 
+                    0.2891981042504021, 
+                    0.2891981042504021, 
+                    0.25094326467015127, 
+                    0.25094326467015127, 
+                    0.21118603072513153, 
+                    0.21118603072513153, 
+                    0.1693230970539863, 
+                    0.1693230970539863, 
+                    0.12237507602357331, 
+                    0.12237507602357331
+                ], 
+                0.5002315044403076
+            ], 
+            [
+                1.1041851043701172, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996572748063326, 
+                    0.9996572748063326, 
+                    0.9967876652594122, 
+                    0.9967876652594122, 
+                    0.9913536175964923, 
+                    0.9913536175964923, 
+                    0.9619134814718874, 
+                    0.9619134814718874, 
+                    0.9123296782939523, 
+                    0.9123296782939523, 
+                    0.858311026647464, 
+                    0.858311026647464, 
+                    0.8008603930623538, 
+                    0.8008603930623538, 
+                    0.7454262887285722, 
+                    0.7454262887285722, 
+                    0.6928410449134507, 
+                    0.6928410449134507, 
+                    0.6383182297110667, 
+                    0.6383182297110667, 
+                    0.595699527158129, 
+                    0.595699527158129, 
+                    0.5527697243904872, 
+                    0.5527697243904872, 
+                    0.5143988231225164, 
+                    0.5143988231225164, 
+                    0.48060448135402495, 
+                    0.48060448135402495, 
+                    0.45142736246083026, 
+                    0.45142736246083026, 
+                    0.42361647475171504, 
+                    0.42361647475171504, 
+                    0.3959909027290671, 
+                    0.3959909027290671, 
+                    0.3658384110123473, 
+                    0.3658384110123473, 
+                    0.33292020971939157, 
+                    0.33292020971939157, 
+                    0.2975961856748691, 
+                    0.2975961856748691, 
+                    0.2601401272054247, 
+                    0.2601401272054247, 
+                    0.2206163328781592, 
+                    0.2206163328781592, 
+                    0.17843879072913232, 
+                    0.17843879072913232, 
+                    0.1308971060663874, 
+                    0.1308971060663874
+                ], 
+                0.5002739429473877
+            ], 
+            [
+                1.116411566734314, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996265208546453, 
+                    0.9996265208546453, 
+                    0.9951275547027318, 
+                    0.9951275547027318, 
+                    0.9808198032463571, 
+                    0.9808198032463571, 
+                    0.9519554645712147, 
+                    0.9519554645712147, 
+                    0.9092052963810281, 
+                    0.9092052963810281, 
+                    0.8550423064495435, 
+                    0.8550423064495435, 
+                    0.7976023803980242, 
+                    0.7976023803980242, 
+                    0.7412946638958902, 
+                    0.7412946638958902, 
+                    0.6885145162878447, 
+                    0.6885145162878447, 
+                    0.6338100085325182, 
+                    0.6338100085325182, 
+                    0.5907184009314937, 
+                    0.5907184009314937, 
+                    0.5481613978574525, 
+                    0.5481613978574525, 
+                    0.5106525337130781, 
+                    0.5106525337130781, 
+                    0.47692227016840205, 
+                    0.47692227016840205, 
+                    0.44779942208670803, 
+                    0.44779942208670803, 
+                    0.421008423187239, 
+                    0.421008423187239, 
+                    0.39731239128707563, 
+                    0.39731239128707563, 
+                    0.3742964085216491, 
+                    0.3742964085216491, 
+                    0.3483064104857312, 
+                    0.3483064104857312, 
+                    0.3180355895592669, 
+                    0.3180355895592669, 
+                    0.28366186927445664, 
+                    0.28366186927445664, 
+                    0.24559686008748385, 
+                    0.24559686008748385, 
+                    0.20336461261591038, 
+                    0.20336461261591038, 
+                    0.1544201761131225, 
+                    0.1544201761131225
+                ], 
+                0.5004479289054871
+            ]
+        ]
+    }, 
+    {
+        "block_size": 54, 
+        "preprocessing_block_sizes": [
+            40
+        ], 
+        "pruning_parameters": [
+            [
+                0.8975069522857666, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999678573544107, 
+                    0.9999678573544107, 
+                    0.9999678573544107, 
+                    0.9999678573544107, 
+                    0.9999678573544107, 
+                    0.9999678573544107, 
+                    0.9999678573544107, 
+                    0.9999678573544107, 
+                    0.969355756892714, 
+                    0.969355756892714, 
+                    0.9144499663437743, 
+                    0.9144499663437743, 
+                    0.8641409749368913, 
+                    0.8641409749368913, 
+                    0.8164948015896225, 
+                    0.8164948015896225, 
+                    0.7698673498308198, 
+                    0.7698673498308198, 
+                    0.724296449426, 
+                    0.724296449426, 
+                    0.6794573862133733, 
+                    0.6794573862133733, 
+                    0.6360885483883457, 
+                    0.6360885483883457, 
+                    0.5947929559286059, 
+                    0.5947929559286059, 
+                    0.5543361184912664, 
+                    0.5543361184912664, 
+                    0.5165894941677016, 
+                    0.5165894941677016, 
+                    0.48011059868750544, 
+                    0.48011059868750544, 
+                    0.443758499017841, 
+                    0.443758499017841, 
+                    0.4076589358841676, 
+                    0.4076589358841676, 
+                    0.37158366888673794, 
+                    0.37158366888673794, 
+                    0.3350844417991846, 
+                    0.3350844417991846, 
+                    0.2982841850671493, 
+                    0.2982841850671493, 
+                    0.2611611438692202, 
+                    0.2611611438692202, 
+                    0.22374071093760198, 
+                    0.22374071093760198, 
+                    0.18592418945297876, 
+                    0.18592418945297876, 
+                    0.14740604542056757, 
+                    0.14740604542056757, 
+                    0.10295002800975764, 
+                    0.10295002800975764
+                ], 
+                0.5011217594146729
+            ], 
+            [
+                0.9072647094726562, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999652724050674, 
+                    0.9999652724050674, 
+                    0.9999652551865542, 
+                    0.9999652551865542, 
+                    0.9999652123733174, 
+                    0.9999652123733174, 
+                    0.9999651781791784, 
+                    0.9999651781791784, 
+                    0.9694718286498089, 
+                    0.9694718286498089, 
+                    0.9145121307914852, 
+                    0.9145121307914852, 
+                    0.864138090159523, 
+                    0.864138090159523, 
+                    0.8164057039025246, 
+                    0.8164057039025246, 
+                    0.7696563176036966, 
+                    0.7696563176036966, 
+                    0.7239890552313597, 
+                    0.7239890552313597, 
+                    0.6790896936213803, 
+                    0.6790896936213803, 
+                    0.6357283919313369, 
+                    0.6357283919313369, 
+                    0.5945045468993625, 
+                    0.5945045468993625, 
+                    0.5541411647743585, 
+                    0.5541411647743585, 
+                    0.516505694454805, 
+                    0.516505694454805, 
+                    0.48010675697304306, 
+                    0.48010675697304306, 
+                    0.44380450492159706, 
+                    0.44380450492159706, 
+                    0.40772471044952285, 
+                    0.40772471044952285, 
+                    0.3716415730180663, 
+                    0.3716415730180663, 
+                    0.33512879716318744, 
+                    0.33512879716318744, 
+                    0.29831336058568464, 
+                    0.29831336058568464, 
+                    0.2611790327109164, 
+                    0.2611790327109164, 
+                    0.2237504342458412, 
+                    0.2237504342458412, 
+                    0.1859286134377864, 
+                    0.1859286134377864, 
+                    0.14740721627514144, 
+                    0.14740721627514144, 
+                    0.10296744175315625, 
+                    0.10296744175315625
+                ], 
+                0.5007107853889465
+            ], 
+            [
+                0.9171286225318909, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999637269564737, 
+                    0.9999637269564737, 
+                    0.9999637159881262, 
+                    0.9999637159881262, 
+                    0.9999636859548, 
+                    0.9999636859548, 
+                    0.9999636434970895, 
+                    0.9999636434970895, 
+                    0.9696119168103203, 
+                    0.9696119168103203, 
+                    0.9146003286503773, 
+                    0.9146003286503773, 
+                    0.8641694161155966, 
+                    0.8641694161155966, 
+                    0.8163684975151986, 
+                    0.8163684975151986, 
+                    0.7695313780763592, 
+                    0.7695313780763592, 
+                    0.7238069556306045, 
+                    0.7238069556306045, 
+                    0.6788910654129636, 
+                    0.6788910654129636, 
+                    0.6355734387014793, 
+                    0.6355734387014793, 
+                    0.5944396221436563, 
+                    0.5944396221436563, 
+                    0.5541862530205774, 
+                    0.5541862530205774, 
+                    0.516642663616673, 
+                    0.516642663616673, 
+                    0.4802883303130358, 
+                    0.4802883303130358, 
+                    0.4440039119831101, 
+                    0.4440039119831101, 
+                    0.40791153870524066, 
+                    0.40791153870524066, 
+                    0.3717910924848267, 
+                    0.3717910924848267, 
+                    0.3352442748952893, 
+                    0.3352442748952893, 
+                    0.29839855848973085, 
+                    0.29839855848973085, 
+                    0.26124219718765607, 
+                    0.26124219718765607, 
+                    0.22379717252152156, 
+                    0.22379717252152156, 
+                    0.18596310532121624, 
+                    0.18596310532121624, 
+                    0.1474315434555233, 
+                    0.1474315434555233, 
+                    0.10300679862156481, 
+                    0.10300679862156481
+                ], 
+                0.5008964538574219
+            ], 
+            [
+                0.9270997643470764, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999622387502024, 
+                    0.9999622387502024, 
+                    0.9999622387502024, 
+                    0.9999622387502024, 
+                    0.9999622387502024, 
+                    0.9999622387502024, 
+                    0.9999622387502024, 
+                    0.9999622387502024, 
+                    0.969773883591368, 
+                    0.969773883591368, 
+                    0.9147035438959763, 
+                    0.9147035438959763, 
+                    0.8642082904354, 
+                    0.8642082904354, 
+                    0.8163292581959122, 
+                    0.8163292581959122, 
+                    0.7693900599169651, 
+                    0.7693900599169651, 
+                    0.7235936425423668, 
+                    0.7235936425423668, 
+                    0.6786457437946344, 
+                    0.6786457437946344, 
+                    0.6353593845522835, 
+                    0.6353593845522835, 
+                    0.5943089065001499, 
+                    0.5943089065001499, 
+                    0.5541588301417717, 
+                    0.5541588301417717, 
+                    0.516710331366448, 
+                    0.516710331366448, 
+                    0.480408621810645, 
+                    0.480408621810645, 
+                    0.4441498056715333, 
+                    0.4441498056715333, 
+                    0.4080540813813899, 
+                    0.4080540813813899, 
+                    0.37190655388268945, 
+                    0.37190655388268945, 
+                    0.3353336101738022, 
+                    0.3353336101738022, 
+                    0.2984639514753622, 
+                    0.2984639514753622, 
+                    0.2612900883296723, 
+                    0.2612900883296723, 
+                    0.22383201721206458, 
+                    0.22383201721206458, 
+                    0.1859883282966142, 
+                    0.1859883282966142, 
+                    0.14744894081299426, 
+                    0.14744894081299426, 
+                    0.10304347409412251, 
+                    0.10304347409412251
+                ], 
+                0.5009025931358337
+            ], 
+            [
+                0.9371792674064636, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999688803363118, 
+                    0.9999688803363118, 
+                    0.9999687232703567, 
+                    0.9999687232703567, 
+                    0.9999686855361006, 
+                    0.9999686855361006, 
+                    0.9699585748124084, 
+                    0.9699585748124084, 
+                    0.9149297371140501, 
+                    0.9149297371140501, 
+                    0.8644599080036925, 
+                    0.8644599080036925, 
+                    0.8165127547158947, 
+                    0.8165127547158947, 
+                    0.7694069130636438, 
+                    0.7694069130636438, 
+                    0.7234459744661107, 
+                    0.7234459744661107, 
+                    0.6783615993730765, 
+                    0.6783615993730765, 
+                    0.6350148114305307, 
+                    0.6350148114305307, 
+                    0.5939839882676949, 
+                    0.5939839882676949, 
+                    0.553889020877333, 
+                    0.553889020877333, 
+                    0.516546680980519, 
+                    0.516546680980519, 
+                    0.4803462002995509, 
+                    0.4803462002995509, 
+                    0.4441649088915167, 
+                    0.4441649088915167, 
+                    0.40812261198332866, 
+                    0.40812261198332866, 
+                    0.37200294392965055, 
+                    0.37200294392965055, 
+                    0.3354428661494713, 
+                    0.3354428661494713, 
+                    0.2985766307131136, 
+                    0.2985766307131136, 
+                    0.2614016116406324, 
+                    0.2614016116406324, 
+                    0.2239387804809419, 
+                    0.2239387804809419, 
+                    0.18608687031352394, 
+                    0.18608687031352394, 
+                    0.14753346656160574, 
+                    0.14753346656160574, 
+                    0.10314916516457784, 
+                    0.10314916516457784
+                ], 
+                0.500805675983429
+            ], 
+            [
+                0.9473684430122375, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999545398119398, 
+                    0.9999545398119398, 
+                    0.9999544636941873, 
+                    0.9999544636941873, 
+                    0.9999543431889796, 
+                    0.9999543431889796, 
+                    0.9999541636467452, 
+                    0.9999541636467452, 
+                    0.9701746945135359, 
+                    0.9701746945135359, 
+                    0.9149648536277989, 
+                    0.9149648536277989, 
+                    0.8643246486401079, 
+                    0.8643246486401079, 
+                    0.8162821679655029, 
+                    0.8162821679655029, 
+                    0.7691515597208656, 
+                    0.7691515597208656, 
+                    0.7232450016736625, 
+                    0.7232450016736625, 
+                    0.6782622995475235, 
+                    0.6782622995475235, 
+                    0.6350330974733519, 
+                    0.6350330974733519, 
+                    0.5941127677762815, 
+                    0.5941127677762815, 
+                    0.5540918263022675, 
+                    0.5540918263022675, 
+                    0.5168039277454914, 
+                    0.5168039277454914, 
+                    0.48061560770633277, 
+                    0.48061560770633277, 
+                    0.44440673986556295, 
+                    0.44440673986556295, 
+                    0.40831471006017717, 
+                    0.40831471006017717, 
+                    0.3721320955086826, 
+                    0.3721320955086826, 
+                    0.33551466896024285, 
+                    0.33551466896024285, 
+                    0.29860207767799835, 
+                    0.29860207767799835, 
+                    0.2613941642864376, 
+                    0.2613941642864376, 
+                    0.22390947981002038, 
+                    0.22390947981002038, 
+                    0.18604523785381866, 
+                    0.18604523785381866, 
+                    0.1474890271881065, 
+                    0.1474890271881065, 
+                    0.10312983494522578, 
+                    0.10312983494522578
+                ], 
+                0.5010025501251221
+            ], 
+            [
+                0.9576683044433594, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999527983838277, 
+                    0.9999527983838277, 
+                    0.9999527261480269, 
+                    0.9999527261480269, 
+                    0.9999525479356435, 
+                    0.9999525479356435, 
+                    0.9999523948173923, 
+                    0.9999523948173923, 
+                    0.9704192366200627, 
+                    0.9704192366200627, 
+                    0.9151229068493637, 
+                    0.9151229068493637, 
+                    0.8643873096906489, 
+                    0.8643873096906489, 
+                    0.8162258604745053, 
+                    0.8162258604745053, 
+                    0.7689308572293602, 
+                    0.7689308572293602, 
+                    0.7228865306072494, 
+                    0.7228865306072494, 
+                    0.6778026435172055, 
+                    0.6778026435172055, 
+                    0.6345519209084836, 
+                    0.6345519209084836, 
+                    0.5936938933178867, 
+                    0.5936938933178867, 
+                    0.5537611504107655, 
+                    0.5537611504107655, 
+                    0.5165970765021254, 
+                    0.5165970765021254, 
+                    0.48050367641102515, 
+                    0.48050367641102515, 
+                    0.44435786253686116, 
+                    0.44435786253686116, 
+                    0.4083004528403368, 
+                    0.4083004528403368, 
+                    0.3721272513711617, 
+                    0.3721272513711617, 
+                    0.3355112568174024, 
+                    0.3355112568174024, 
+                    0.2985961180307155, 
+                    0.2985961180307155, 
+                    0.26138612997343796, 
+                    0.26138612997343796, 
+                    0.2239000003706466, 
+                    0.2239000003706466, 
+                    0.18603537311959012, 
+                    0.18603537311959012, 
+                    0.14747983882568672, 
+                    0.14747983882568672, 
+                    0.1031565843151908, 
+                    0.1031565843151908
+                ], 
+                0.5002810955047607
+            ], 
+            [
+                0.9680802226066589, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999543436879589, 
+                    0.9999543436879589, 
+                    0.9999542899439885, 
+                    0.9999542899439885, 
+                    0.9999541395036977, 
+                    0.9999541395036977, 
+                    0.9999538993771442, 
+                    0.9999538993771442, 
+                    0.9707107378639043, 
+                    0.9707107378639043, 
+                    0.9153358872609496, 
+                    0.9153358872609496, 
+                    0.8645242359188846, 
+                    0.8645242359188846, 
+                    0.8162793520891551, 
+                    0.8162793520891551, 
+                    0.7688820228889551, 
+                    0.7688820228889551, 
+                    0.7227621085239121, 
+                    0.7227621085239121, 
+                    0.6776411963225083, 
+                    0.6776411963225083, 
+                    0.634415950517084, 
+                    0.634415950517084, 
+                    0.5936357387359048, 
+                    0.5936357387359048, 
+                    0.5538023028154213, 
+                    0.5538023028154213, 
+                    0.516720459476304, 
+                    0.516720459476304, 
+                    0.48066289407442125, 
+                    0.48066289407442125, 
+                    0.44452968656779734, 
+                    0.44452968656779734, 
+                    0.4084595720088648, 
+                    0.4084595720088648, 
+                    0.3722551493561061, 
+                    0.3722551493561061, 
+                    0.3356122568736006, 
+                    0.3356122568736006, 
+                    0.2986736437787021, 
+                    0.2986736437787021, 
+                    0.26144635144666906, 
+                    0.26144635144666906, 
+                    0.2239468166599212, 
+                    0.2239468166599212, 
+                    0.18607152286693024, 
+                    0.18607152286693024, 
+                    0.14750629958168562, 
+                    0.14750629958168562, 
+                    0.10321810582440272, 
+                    0.10321810582440272
+                ], 
+                0.5005142092704773
+            ], 
+            [
+                0.9786052703857422, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.99995821043089, 
+                    0.99995821043089, 
+                    0.99995821043089, 
+                    0.99995821043089, 
+                    0.99995821043089, 
+                    0.99995821043089, 
+                    0.99995821043089, 
+                    0.99995821043089, 
+                    0.9710467415987859, 
+                    0.9710467415987859, 
+                    0.9155909212621256, 
+                    0.9155909212621256, 
+                    0.8647039670905672, 
+                    0.8647039670905672, 
+                    0.8163788544760201, 
+                    0.8163788544760201, 
+                    0.7688840524143518, 
+                    0.7688840524143518, 
+                    0.7226888167531853, 
+                    0.7226888167531853, 
+                    0.6775312881741898, 
+                    0.6775312881741898, 
+                    0.6343328413630251, 
+                    0.6343328413630251, 
+                    0.5936302802155904, 
+                    0.5936302802155904, 
+                    0.5538984489556416, 
+                    0.5538984489556416, 
+                    0.5168896844321479, 
+                    0.5168896844321479, 
+                    0.4808556416690374, 
+                    0.4808556416690374, 
+                    0.44472665368389114, 
+                    0.44472665368389114, 
+                    0.40863705233519393, 
+                    0.40863705233519393, 
+                    0.37239680905162265, 
+                    0.37239680905162265, 
+                    0.3357247100661003, 
+                    0.3357247100661003, 
+                    0.29876119805468515, 
+                    0.29876119805468515, 
+                    0.26151554623474976, 
+                    0.26151554623474976, 
+                    0.22400161529621168, 
+                    0.22400161529621168, 
+                    0.18611457583989377, 
+                    0.18611457583989377, 
+                    0.14753831008167884, 
+                    0.14753831008167884, 
+                    0.10329027199698017, 
+                    0.10329027199698017
+                ], 
+                0.500902533531189
+            ], 
+            [
+                0.989244818687439, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999561716196729, 
+                    0.9999561716196729, 
+                    0.9999561412898053, 
+                    0.9999561412898053, 
+                    0.9999560547106568, 
+                    0.9999560547106568, 
+                    0.9999559070047376, 
+                    0.9999559070047376, 
+                    0.9714168979305269, 
+                    0.9714168979305269, 
+                    0.9158599156733745, 
+                    0.9158599156733745, 
+                    0.864873440753115, 
+                    0.864873440753115, 
+                    0.8164362946751346, 
+                    0.8164362946751346, 
+                    0.7687997321356651, 
+                    0.7687997321356651, 
+                    0.7224882295184029, 
+                    0.7224882295184029, 
+                    0.6772467044390028, 
+                    0.6772467044390028, 
+                    0.6340281365907395, 
+                    0.6340281365907395, 
+                    0.5933746021420583, 
+                    0.5933746021420583, 
+                    0.5537044937147303, 
+                    0.5537044937147303, 
+                    0.5167949698722301, 
+                    0.5167949698722301, 
+                    0.4808370647782819, 
+                    0.4808370647782819, 
+                    0.44475159083380944, 
+                    0.44475159083380944, 
+                    0.40868252876363, 
+                    0.40868252876363, 
+                    0.37244341686608645, 
+                    0.37244341686608645, 
+                    0.33576537616752583, 
+                    0.33576537616752583, 
+                    0.29879361296640833, 
+                    0.29879361296640833, 
+                    0.26154060617324665, 
+                    0.26154060617324665, 
+                    0.22402032397766167, 
+                    0.22402032397766167, 
+                    0.18612808468363723, 
+                    0.18612808468363723, 
+                    0.1475474863657809, 
+                    0.1475474863657809, 
+                    0.10334928338833783, 
+                    0.10334928338833783
+                ], 
+                0.5006411075592041
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999618209734663, 
+                    0.9999618209734663, 
+                    0.9999617970357273, 
+                    0.9999617970357273, 
+                    0.9999617526326343, 
+                    0.9999617526326343, 
+                    0.9999617526326343, 
+                    0.9999617526326343, 
+                    0.971836084344441, 
+                    0.971836084344441, 
+                    0.9161711834863803, 
+                    0.9161711834863803, 
+                    0.8650748307809948, 
+                    0.8650748307809948, 
+                    0.8165054639641826, 
+                    0.8165054639641826, 
+                    0.7686845831724229, 
+                    0.7686845831724229, 
+                    0.7222025396742746, 
+                    0.7222025396742746, 
+                    0.6768319318008591, 
+                    0.6768319318008591, 
+                    0.6335815387128773, 
+                    0.6335815387128773, 
+                    0.5929934245314441, 
+                    0.5929934245314441, 
+                    0.5534243259624533, 
+                    0.5534243259624533, 
+                    0.5166323594573698, 
+                    0.5166323594573698, 
+                    0.48075406908754587, 
+                    0.48075406908754587, 
+                    0.4447225923125364, 
+                    0.4447225923125364, 
+                    0.4086811546173427, 
+                    0.4086811546173427, 
+                    0.3724480826850683, 
+                    0.3724480826850683, 
+                    0.3357715714659211, 
+                    0.3357715714659211, 
+                    0.298798021570958, 
+                    0.298798021570958, 
+                    0.26154334201514745, 
+                    0.26154334201514745, 
+                    0.22402135034125328, 
+                    0.22402135034125328, 
+                    0.18612777991590848, 
+                    0.18612777991590848, 
+                    0.14754616581623994, 
+                    0.14754616581623994, 
+                    0.10340845958556777, 
+                    0.10340845958556777
+                ], 
+                0.5001070499420166
+            ], 
+            [
+                1.0108721256256104, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999971496308617, 
+                    0.999971496308617, 
+                    0.999971496308617, 
+                    0.999971496308617, 
+                    0.999971496308617, 
+                    0.999971496308617, 
+                    0.999971496308617, 
+                    0.999971496308617, 
+                    0.9723262055447871, 
+                    0.9723262055447871, 
+                    0.9165773168664971, 
+                    0.9165773168664971, 
+                    0.8654134117513927, 
+                    0.8654134117513927, 
+                    0.8167790300803044, 
+                    0.8167790300803044, 
+                    0.7688811256576265, 
+                    0.7688811256576265, 
+                    0.7223234741711247, 
+                    0.7223234741711247, 
+                    0.6769146574475522, 
+                    0.6769146574475522, 
+                    0.6336885695779426, 
+                    0.6336885695779426, 
+                    0.5931677976609757, 
+                    0.5931677976609757, 
+                    0.5536905300773876, 
+                    0.5536905300773876, 
+                    0.5169383840982686, 
+                    0.5169383840982686, 
+                    0.4810490157179779, 
+                    0.4810490157179779, 
+                    0.44499666334083376, 
+                    0.44499666334083376, 
+                    0.40891707946047373, 
+                    0.40891707946047373, 
+                    0.3726364618404328, 
+                    0.3726364618404328, 
+                    0.33592374859224167, 
+                    0.33592374859224167, 
+                    0.29892050115921054, 
+                    0.29892050115921054, 
+                    0.261643406435029, 
+                    0.261643406435029, 
+                    0.22410312067719437, 
+                    0.22410312067719437, 
+                    0.18619372577371326, 
+                    0.18619372577371326, 
+                    0.14759643766774505, 
+                    0.14759643766774505, 
+                    0.1035186535853576, 
+                    0.1035186535853576
+                ], 
+                0.5010300278663635
+            ], 
+            [
+                1.0218623876571655, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999837104101493, 
+                    0.9999837104101493, 
+                    0.9999837104101493, 
+                    0.9999837104101493, 
+                    0.9999837104101493, 
+                    0.9999837104101493, 
+                    0.9999837104101493, 
+                    0.9999837104101493, 
+                    0.9728590390291061, 
+                    0.9728590390291061, 
+                    0.9170096688169211, 
+                    0.9170096688169211, 
+                    0.8657512472691897, 
+                    0.8657512472691897, 
+                    0.8170052189786103, 
+                    0.8170052189786103, 
+                    0.7689471823286966, 
+                    0.7689471823286966, 
+                    0.72222359328606, 
+                    0.72222359328606, 
+                    0.6766957331639516, 
+                    0.6766957331639516, 
+                    0.633451879386442, 
+                    0.633451879386442, 
+                    0.5929982289179836, 
+                    0.5929982289179836, 
+                    0.5536263744686754, 
+                    0.5536263744686754, 
+                    0.5169557956160064, 
+                    0.5169557956160064, 
+                    0.48110319504560917, 
+                    0.48110319504560917, 
+                    0.445074098585041, 
+                    0.445074098585041, 
+                    0.4089966727301499, 
+                    0.4089966727301499, 
+                    0.3727030676712139, 
+                    0.3727030676712139, 
+                    0.3359800559764737, 
+                    0.3359800559764737, 
+                    0.2989666484720879, 
+                    0.2989666484720879, 
+                    0.2616816060311227, 
+                    0.2616816060311227, 
+                    0.2241342900000331, 
+                    0.2241342900000331, 
+                    0.18621856437831308, 
+                    0.18621856437831308, 
+                    0.1476149107177857, 
+                    0.1476149107177857, 
+                    0.10361273343269543, 
+                    0.10361273343269543
+                ], 
+                0.5010944604873657
+            ], 
+            [
+                1.0329722166061401, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999959115454723, 
+                    0.9999959115454723, 
+                    0.9999959115454723, 
+                    0.9999959115454723, 
+                    0.9999959115454723, 
+                    0.9999959115454723, 
+                    0.9999959115454723, 
+                    0.9999959115454723, 
+                    0.9734230486808858, 
+                    0.9734230486808858, 
+                    0.9174470319879139, 
+                    0.9174470319879139, 
+                    0.8660513447730044, 
+                    0.8660513447730044, 
+                    0.8171232466131008, 
+                    0.8171232466131008, 
+                    0.7687865731110871, 
+                    0.7687865731110871, 
+                    0.7217791662319983, 
+                    0.7217791662319983, 
+                    0.6760301709268056, 
+                    0.6760301709268056, 
+                    0.6327180264548818, 
+                    0.6327180264548818, 
+                    0.5923372878822706, 
+                    0.5923372878822706, 
+                    0.5530901609925152, 
+                    0.5530901609925152, 
+                    0.5165673464644256, 
+                    0.5165673464644256, 
+                    0.4808261867837847, 
+                    0.4808261867837847, 
+                    0.4448843111164595, 
+                    0.4448843111164595, 
+                    0.4088658012299657, 
+                    0.4088658012299657, 
+                    0.3726064271838273, 
+                    0.3726064271838273, 
+                    0.33590719852815515, 
+                    0.33590719852815515, 
+                    0.2989089974060524, 
+                    0.2989089974060524, 
+                    0.2616347200288329, 
+                    0.2616347200288329, 
+                    0.22409507011234772, 
+                    0.22409507011234772, 
+                    0.1861856325109948, 
+                    0.1861856325109948, 
+                    0.14758833775902627, 
+                    0.14758833775902627, 
+                    0.10368099854995308, 
+                    0.10368099854995308
+                ], 
+                0.49991217255592346
+            ], 
+            [
+                1.0442028045654297, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999957423047118, 
+                    0.9999957423047118, 
+                    0.9999555020698363, 
+                    0.9999555020698363, 
+                    0.9999553378779606, 
+                    0.9999553378779606, 
+                    0.9999552457598598, 
+                    0.9999552457598598, 
+                    0.9737968584258322, 
+                    0.9737968584258322, 
+                    0.9184173893332194, 
+                    0.9184173893332194, 
+                    0.867622816382648, 
+                    0.867622816382648, 
+                    0.8185706806482376, 
+                    0.8185706806482376, 
+                    0.7694496415937419, 
+                    0.7694496415937419, 
+                    0.7216074429245379, 
+                    0.7216074429245379, 
+                    0.6750947443936148, 
+                    0.6750947443936148, 
+                    0.6312740552501445, 
+                    0.6312740552501445, 
+                    0.5906773799566473, 
+                    0.5906773799566473, 
+                    0.5514309739323855, 
+                    0.5514309739323855, 
+                    0.5152641918222617, 
+                    0.5152641918222617, 
+                    0.4800462394243124, 
+                    0.4800462394243124, 
+                    0.44458583002504165, 
+                    0.44458583002504165, 
+                    0.4089903121310298, 
+                    0.4089903121310298, 
+                    0.3730641641738467, 
+                    0.3730641641738467, 
+                    0.3365839075564009, 
+                    0.3365839075564009, 
+                    0.2997208498033663, 
+                    0.2997208498033663, 
+                    0.26251413063077955, 
+                    0.26251413063077955, 
+                    0.22498902821739103, 
+                    0.22498902821739103, 
+                    0.1870448860892213, 
+                    0.1870448860892213, 
+                    0.14834900681749288, 
+                    0.14834900681749288, 
+                    0.10448567157227942, 
+                    0.10448567157227942
+                ], 
+                0.4999357759952545
+            ], 
+            [
+                1.0555555820465088, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999978842136493, 
+                    0.9999978842136493, 
+                    0.999912618317775, 
+                    0.999912618317775, 
+                    0.9999095840082569, 
+                    0.9999095840082569, 
+                    0.999904679485422, 
+                    0.999904679485422, 
+                    0.9741461767874631, 
+                    0.9741461767874631, 
+                    0.9192145069996601, 
+                    0.9192145069996601, 
+                    0.8688751771831399, 
+                    0.8688751771831399, 
+                    0.8196530520466897, 
+                    0.8196530520466897, 
+                    0.7698479546004166, 
+                    0.7698479546004166, 
+                    0.7213395426518707, 
+                    0.7213395426518707, 
+                    0.6742692714782529, 
+                    0.6742692714782529, 
+                    0.6300849206830804, 
+                    0.6300849206830804, 
+                    0.5893016625200973, 
+                    0.5893016625200973, 
+                    0.5500850350754949, 
+                    0.5500850350754949, 
+                    0.5141801250111697, 
+                    0.5141801250111697, 
+                    0.47939219323722887, 
+                    0.47939219323722887, 
+                    0.4443532822413291, 
+                    0.4443532822413291, 
+                    0.40913040759152586, 
+                    0.40913040759152586, 
+                    0.37349839857593053, 
+                    0.37349839857593053, 
+                    0.3372155039936302, 
+                    0.3372155039936302, 
+                    0.30047557415949605, 
+                    0.30047557415949605, 
+                    0.2633319919962834, 
+                    0.2633319919962834, 
+                    0.22582180670932547, 
+                    0.22582180670932547, 
+                    0.18784719540535427, 
+                    0.18784719540535427, 
+                    0.14906190219565002, 
+                    0.14906190219565002, 
+                    0.10525342310570375, 
+                    0.10525342310570375
+                ], 
+                0.49996712803840637
+            ], 
+            [
+                1.067031741142273, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999870384002619, 
+                    0.9999870384002619, 
+                    0.9999278749994218, 
+                    0.9999278749994218, 
+                    0.9999244907278448, 
+                    0.9999244907278448, 
+                    0.9999172728115862, 
+                    0.9999172728115862, 
+                    0.9998947565003201, 
+                    0.9998947565003201, 
+                    0.9500783604822313, 
+                    0.9500783604822313, 
+                    0.8910030334902886, 
+                    0.8910030334902886, 
+                    0.8346921652404847, 
+                    0.8346921652404847, 
+                    0.7779308623919531, 
+                    0.7779308623919531, 
+                    0.7234654027800341, 
+                    0.7234654027800341, 
+                    0.6713598553621236, 
+                    0.6713598553621236, 
+                    0.6242674864355272, 
+                    0.6242674864355272, 
+                    0.5830649945500787, 
+                    0.5830649945500787, 
+                    0.5438748595225316, 
+                    0.5438748595225316, 
+                    0.5099047020808078, 
+                    0.5099047020808078, 
+                    0.4770668430537622, 
+                    0.4770668430537622, 
+                    0.44345769881714064, 
+                    0.44345769881714064, 
+                    0.40939893954037515, 
+                    0.40939893954037515, 
+                    0.3746329553362524, 
+                    0.3746329553362524, 
+                    0.3388807888162053, 
+                    0.3388807888162053, 
+                    0.30247486112797556, 
+                    0.30247486112797556, 
+                    0.26551774738750683, 
+                    0.26551774738750683, 
+                    0.22808774040432336, 
+                    0.22808774040432336, 
+                    0.1900828300925008, 
+                    0.1900828300925008, 
+                    0.15109801805525783, 
+                    0.15109801805525783, 
+                    0.10500099268556648, 
+                    0.10500099268556648
+                ], 
+                0.49963927268981934
+            ], 
+            [
+                1.0786325931549072, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999999288593927, 
+                    0.9999999288593927, 
+                    0.999491030312668, 
+                    0.999491030312668, 
+                    0.9994307114857115, 
+                    0.9994307114857115, 
+                    0.9993578276667427, 
+                    0.9993578276667427, 
+                    0.9991768592161951, 
+                    0.9991768592161951, 
+                    0.9484237954021452, 
+                    0.9484237954021452, 
+                    0.8893298919398388, 
+                    0.8893298919398388, 
+                    0.8329130709753764, 
+                    0.8329130709753764, 
+                    0.7757283634465534, 
+                    0.7757283634465534, 
+                    0.7214840042256516, 
+                    0.7214840042256516, 
+                    0.6699882466269972, 
+                    0.6699882466269972, 
+                    0.6233052954904158, 
+                    0.6233052954904158, 
+                    0.5817340653152518, 
+                    0.5817340653152518, 
+                    0.542592100154793, 
+                    0.542592100154793, 
+                    0.5083954044209164, 
+                    0.5083954044209164, 
+                    0.4760243682367641, 
+                    0.4760243682367641, 
+                    0.44314443207902654, 
+                    0.44314443207902654, 
+                    0.40980341210455323, 
+                    0.40980341210455323, 
+                    0.3756455076018693, 
+                    0.3756455076018693, 
+                    0.34032124667320046, 
+                    0.34032124667320046, 
+                    0.30418795814186, 
+                    0.30418795814186, 
+                    0.26737237072133296, 
+                    0.26737237072133296, 
+                    0.22997421736963106, 
+                    0.22997421736963106, 
+                    0.1918972997919838, 
+                    0.1918972997919838, 
+                    0.1527074583627228, 
+                    0.1527074583627228, 
+                    0.10685269175616124, 
+                    0.10685269175616124
+                ], 
+                0.4996550679206848
+            ], 
+            [
+                1.0903595685958862, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999999176558313, 
+                    0.9999999176558313, 
+                    0.9996200572269539, 
+                    0.9996200572269539, 
+                    0.9984277504901925, 
+                    0.9984277504901925, 
+                    0.99752882348349, 
+                    0.99752882348349, 
+                    0.9948706560736669, 
+                    0.9948706560736669, 
+                    0.9394645153214121, 
+                    0.9394645153214121, 
+                    0.8816234899137164, 
+                    0.8816234899137164, 
+                    0.8259355437422543, 
+                    0.8259355437422543, 
+                    0.7694030181897918, 
+                    0.7694030181897918, 
+                    0.7167433420467698, 
+                    0.7167433420467698, 
+                    0.6667918379630386, 
+                    0.6667918379630386, 
+                    0.6206848934637501, 
+                    0.6206848934637501, 
+                    0.5785084702832167, 
+                    0.5785084702832167, 
+                    0.5388230237525706, 
+                    0.5388230237525706, 
+                    0.5040471606085491, 
+                    0.5040471606085491, 
+                    0.47267185079481644, 
+                    0.47267185079481644, 
+                    0.44181908896421657, 
+                    0.44181908896421657, 
+                    0.41079528451162256, 
+                    0.41079528451162256, 
+                    0.37877482185663436, 
+                    0.37877482185663436, 
+                    0.3449702762226281, 
+                    0.3449702762226281, 
+                    0.30983845173603847, 
+                    0.30983845173603847, 
+                    0.27357181676588965, 
+                    0.27357181676588965, 
+                    0.2363502917265063, 
+                    0.2363502917265063, 
+                    0.19809933626092446, 
+                    0.19809933626092446, 
+                    0.15831212730424685, 
+                    0.15831212730424685, 
+                    0.11254969013208026, 
+                    0.11254969013208026
+                ], 
+                0.4995175302028656
+            ], 
+            [
+                1.1022140979766846, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999679777042752, 
+                    0.999679777042752, 
+                    0.9981002516609653, 
+                    0.9981002516609653, 
+                    0.9977152465696609, 
+                    0.9977152465696609, 
+                    0.9965769414248348, 
+                    0.9965769414248348, 
+                    0.9394919536067006, 
+                    0.9394919536067006, 
+                    0.8808395185756389, 
+                    0.8808395185756389, 
+                    0.8247964848054441, 
+                    0.8247964848054441, 
+                    0.768600318566492, 
+                    0.768600318566492, 
+                    0.7167716908180906, 
+                    0.7167716908180906, 
+                    0.6678660473130956, 
+                    0.6678660473130956, 
+                    0.6223989791696571, 
+                    0.6223989791696571, 
+                    0.5800767376018587, 
+                    0.5800767376018587, 
+                    0.5402866865857829, 
+                    0.5402866865857829, 
+                    0.5047584587520131, 
+                    0.5047584587520131, 
+                    0.47279036519473416, 
+                    0.47279036519473416, 
+                    0.4416473443704499, 
+                    0.4416473443704499, 
+                    0.4103843658391697, 
+                    0.4103843658391697, 
+                    0.3781702195990536, 
+                    0.3781702195990536, 
+                    0.3442795535008887, 
+                    0.3442795535008887, 
+                    0.30911304548004714, 
+                    0.30911304548004714, 
+                    0.2728531168637097, 
+                    0.2728531168637097, 
+                    0.23566374664498246, 
+                    0.23566374664498246, 
+                    0.19746613534676816, 
+                    0.19746613534676816, 
+                    0.15775327452809962, 
+                    0.15775327452809962, 
+                    0.11228943483134977, 
+                    0.11228943483134977
+                ], 
+                0.5005362033843994
+            ], 
+            [
+                1.1141974925994873, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9906799761058281, 
+                    0.9906799761058281, 
+                    0.9209610177420949, 
+                    0.9209610177420949, 
+                    0.8705425351517878, 
+                    0.8705425351517878, 
+                    0.8230047444862131, 
+                    0.8230047444862131, 
+                    0.7743009208872873, 
+                    0.7743009208872873, 
+                    0.7170116341857162, 
+                    0.7170116341857162, 
+                    0.6534825645149009, 
+                    0.6534825645149009, 
+                    0.6037913187113361, 
+                    0.6037913187113361, 
+                    0.5734229230313334, 
+                    0.5734229230313334, 
+                    0.5344468945565682, 
+                    0.5344468945565682, 
+                    0.5073966180720889, 
+                    0.5073966180720889, 
+                    0.4743376731945374, 
+                    0.4743376731945374, 
+                    0.4437775017078606, 
+                    0.4437775017078606, 
+                    0.41477445576536215, 
+                    0.41477445576536215, 
+                    0.3853592802939949, 
+                    0.3853592802939949, 
+                    0.3537337801628491, 
+                    0.3537337801628491, 
+                    0.3201391978885033, 
+                    0.3201391978885033, 
+                    0.28476823880434216, 
+                    0.28476823880434216, 
+                    0.2478602251755771, 
+                    0.2478602251755771, 
+                    0.2093431645187044, 
+                    0.2093431645187044, 
+                    0.16859729117511238, 
+                    0.16859729117511238, 
+                    0.12270951170042692, 
+                    0.12270951170042692
+                ], 
+                0.5001612901687622
+            ]
+        ]
+    }, 
+    {
+        "block_size": 55, 
+        "preprocessing_block_sizes": [
+            40
+        ], 
+        "pruning_parameters": [
+            [
+                0.8992270827293396, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999847336252203, 
+                    0.999847336252203, 
+                    0.9998462467860167, 
+                    0.9998462467860167, 
+                    0.9998408922180941, 
+                    0.9998408922180941, 
+                    0.9998241754507667, 
+                    0.9998241754507667, 
+                    0.968583494860688, 
+                    0.968583494860688, 
+                    0.9133331686024092, 
+                    0.9133331686024092, 
+                    0.8623563589455577, 
+                    0.8623563589455577, 
+                    0.8133434023913431, 
+                    0.8133434023913431, 
+                    0.7666983363286914, 
+                    0.7666983363286914, 
+                    0.7213580983622423, 
+                    0.7213580983622423, 
+                    0.6776919883237994, 
+                    0.6776919883237994, 
+                    0.6357253572930226, 
+                    0.6357253572930226, 
+                    0.594873329106213, 
+                    0.594873329106213, 
+                    0.5557540600728564, 
+                    0.5557540600728564, 
+                    0.518273123640757, 
+                    0.518273123640757, 
+                    0.4812656003410893, 
+                    0.4812656003410893, 
+                    0.4449944631758718, 
+                    0.4449944631758718, 
+                    0.4086006516129489, 
+                    0.4086006516129489, 
+                    0.3721611211302851, 
+                    0.3721611211302851, 
+                    0.3354486778372238, 
+                    0.3354486778372238, 
+                    0.29851391157233015, 
+                    0.29851391157233015, 
+                    0.2613119107110067, 
+                    0.2613119107110067, 
+                    0.22384031525217776, 
+                    0.22384031525217776, 
+                    0.185991577595723, 
+                    0.185991577595723, 
+                    0.147450078939172, 
+                    0.147450078939172, 
+                    0.10292468830015832, 
+                    0.10292468830015832
+                ], 
+                0.500524640083313
+            ], 
+            [
+                0.9088295698165894, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998420195650726, 
+                    0.9998420195650726, 
+                    0.9998410258665277, 
+                    0.9998410258665277, 
+                    0.9998362154737902, 
+                    0.9998362154737902, 
+                    0.9998216673229579, 
+                    0.9998216673229579, 
+                    0.9686491889447866, 
+                    0.9686491889447866, 
+                    0.9133520804299458, 
+                    0.9133520804299458, 
+                    0.862323372366365, 
+                    0.862323372366365, 
+                    0.8132514967867014, 
+                    0.8132514967867014, 
+                    0.7665950293536617, 
+                    0.7665950293536617, 
+                    0.7212803083444789, 
+                    0.7212803083444789, 
+                    0.6776847199336162, 
+                    0.6776847199336162, 
+                    0.635816315250793, 
+                    0.635816315250793, 
+                    0.5950784950807622, 
+                    0.5950784950807622, 
+                    0.556059006204893, 
+                    0.556059006204893, 
+                    0.518627854474386, 
+                    0.518627854474386, 
+                    0.48163888547598427, 
+                    0.48163888547598427, 
+                    0.4453350796580911, 
+                    0.4453350796580911, 
+                    0.40889670355741237, 
+                    0.40889670355741237, 
+                    0.37239967078994984, 
+                    0.37239967078994984, 
+                    0.33563577961577823, 
+                    0.33563577961577823, 
+                    0.2986558061342668, 
+                    0.2986558061342668, 
+                    0.2614201106678064, 
+                    0.2614201106678064, 
+                    0.22392318797099459, 
+                    0.22392318797099459, 
+                    0.18605478724078214, 
+                    0.18605478724078214, 
+                    0.14749624051138718, 
+                    0.14749624051138718, 
+                    0.10297193214326479, 
+                    0.10297193214326479
+                ], 
+                0.501255989074707
+            ], 
+            [
+                0.9185345768928528, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998279105102645, 
+                    0.9998279105102645, 
+                    0.9998268017461173, 
+                    0.9998268017461173, 
+                    0.9998215009258183, 
+                    0.9998215009258183, 
+                    0.9998057269747951, 
+                    0.9998057269747951, 
+                    0.9687007258824616, 
+                    0.9687007258824616, 
+                    0.9133241841675965, 
+                    0.9133241841675965, 
+                    0.8621894984515546, 
+                    0.8621894984515546, 
+                    0.8129630640202695, 
+                    0.8129630640202695, 
+                    0.7662130047441601, 
+                    0.7662130047441601, 
+                    0.7208356581255952, 
+                    0.7208356581255952, 
+                    0.6772413139669282, 
+                    0.6772413139669282, 
+                    0.6354279096572547, 
+                    0.6354279096572547, 
+                    0.5947723359422122, 
+                    0.5947723359422122, 
+                    0.5558595145032378, 
+                    0.5558595145032378, 
+                    0.5185276694655423, 
+                    0.5185276694655423, 
+                    0.48161109395470286, 
+                    0.48161109395470286, 
+                    0.4453477783492967, 
+                    0.4453477783492967, 
+                    0.40892690376869123, 
+                    0.40892690376869123, 
+                    0.3724290110120675, 
+                    0.3724290110120675, 
+                    0.33565759416539387, 
+                    0.33565759416539387, 
+                    0.2986672165013009, 
+                    0.2986672165013009, 
+                    0.2614235497842943, 
+                    0.2614235497842943, 
+                    0.2239212105342513, 
+                    0.2239212105342513, 
+                    0.18604973266010938, 
+                    0.18604973266010938, 
+                    0.147490152486597, 
+                    0.147490152486597, 
+                    0.10297725768003153, 
+                    0.10297725768003153
+                ], 
+                0.5005983114242554
+            ], 
+            [
+                0.9283432364463806, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999821112627613, 
+                    0.999821112627613, 
+                    0.9998202854178095, 
+                    0.9998202854178095, 
+                    0.9998163609895041, 
+                    0.9998163609895041, 
+                    0.9998046063523895, 
+                    0.9998046063523895, 
+                    0.9687975451975596, 
+                    0.9687975451975596, 
+                    0.9133617726041037, 
+                    0.9133617726041037, 
+                    0.8621614699873154, 
+                    0.8621614699873154, 
+                    0.8128572250371331, 
+                    0.8128572250371331, 
+                    0.7660804625248598, 
+                    0.7660804625248598, 
+                    0.7207134694894141, 
+                    0.7207134694894141, 
+                    0.6771772387545527, 
+                    0.6771772387545527, 
+                    0.635452650176002, 
+                    0.635452650176002, 
+                    0.5949023290174151, 
+                    0.5949023290174151, 
+                    0.5560845416258108, 
+                    0.5560845416258108, 
+                    0.5188037001656605, 
+                    0.5188037001656605, 
+                    0.4819088281935653, 
+                    0.4819088281935653, 
+                    0.4456217025404208, 
+                    0.4456217025404208, 
+                    0.4091658410597579, 
+                    0.4091658410597579, 
+                    0.37262155537761843, 
+                    0.37262155537761843, 
+                    0.3358085879023398, 
+                    0.3358085879023398, 
+                    0.2987817609561151, 
+                    0.2987817609561151, 
+                    0.2615110017043161, 
+                    0.2615110017043161, 
+                    0.22398830788951443, 
+                    0.22398830788951443, 
+                    0.1861010052227983, 
+                    0.1861010052227983, 
+                    0.14752762113846454, 
+                    0.14752762113846454, 
+                    0.10302092050940449, 
+                    0.10302092050940449
+                ], 
+                0.5011066794395447
+            ], 
+            [
+                0.9382566213607788, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998100197681244, 
+                    0.9998100197681244, 
+                    0.9998092257983253, 
+                    0.9998092257983253, 
+                    0.9998055187846666, 
+                    0.9998055187846666, 
+                    0.9997947725796421, 
+                    0.9997947725796421, 
+                    0.9688941514983417, 
+                    0.9688941514983417, 
+                    0.9133736013097828, 
+                    0.9133736013097828, 
+                    0.8620683173906528, 
+                    0.8620683173906528, 
+                    0.812619984551116, 
+                    0.812619984551116, 
+                    0.7657622560361231, 
+                    0.7657622560361231, 
+                    0.7203486946856912, 
+                    0.7203486946856912, 
+                    0.6768272355825274, 
+                    0.6768272355825274, 
+                    0.6351656842900881, 
+                    0.6351656842900881, 
+                    0.5947017653951313, 
+                    0.5947017653951313, 
+                    0.5559854778252925, 
+                    0.5559854778252925, 
+                    0.5187898016427709, 
+                    0.5187898016427709, 
+                    0.48195235248613266, 
+                    0.48195235248613266, 
+                    0.4456892893675155, 
+                    0.4456892893675155, 
+                    0.4092382496924946, 
+                    0.4092382496924946, 
+                    0.3726835580404107, 
+                    0.3726835580404107, 
+                    0.335856652494585, 
+                    0.335856652494585, 
+                    0.29881512688608824, 
+                    0.29881512688608824, 
+                    0.26153326518193365, 
+                    0.26153326518193365, 
+                    0.2240025608065907, 
+                    0.2240025608065907, 
+                    0.18610971404636115, 
+                    0.18610971404636115, 
+                    0.14753248559732418, 
+                    0.14753248559732418, 
+                    0.10303941544951901, 
+                    0.10303941544951901
+                ], 
+                0.5007232427597046
+            ], 
+            [
+                0.9482758641242981, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998040196849881, 
+                    0.9998040196849881, 
+                    0.999803597585842, 
+                    0.999803597585842, 
+                    0.9998016433213951, 
+                    0.9998016433213951, 
+                    0.9997959610478958, 
+                    0.9997959610478958, 
+                    0.96903258907335, 
+                    0.96903258907335, 
+                    0.9134351402326562, 
+                    0.9134351402326562, 
+                    0.8620440729834745, 
+                    0.8620440729834745, 
+                    0.812489484255096, 
+                    0.812489484255096, 
+                    0.7655819762647921, 
+                    0.7655819762647921, 
+                    0.7201558350763521, 
+                    0.7201558350763521, 
+                    0.6766743540195563, 
+                    0.6766743540195563, 
+                    0.6350891756427846, 
+                    0.6350891756427846, 
+                    0.5947195079330283, 
+                    0.5947195079330283, 
+                    0.5560952358675648, 
+                    0.5560952358675648, 
+                    0.5189577032244317, 
+                    0.5189577032244317, 
+                    0.48215068159676766, 
+                    0.48215068159676766, 
+                    0.44587953460403545, 
+                    0.44587953460403545, 
+                    0.4094079823259078, 
+                    0.4094079823259078, 
+                    0.3728217447003557, 
+                    0.3728217447003557, 
+                    0.3359654942481612, 
+                    0.3359654942481612, 
+                    0.2988977064797182, 
+                    0.2988977064797182, 
+                    0.261596220549122, 
+                    0.261596220549122, 
+                    0.2240507346034958, 
+                    0.2240507346034958, 
+                    0.18614640599580393, 
+                    0.18614640599580393, 
+                    0.1475591809722042, 
+                    0.1475591809722042, 
+                    0.10307870465003055, 
+                    0.10307870465003055
+                ], 
+                0.5009263753890991
+            ], 
+            [
+                0.9584020972251892, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997991159784773, 
+                    0.9997991159784773, 
+                    0.9997991159784773, 
+                    0.9997991159784773, 
+                    0.9997991159784773, 
+                    0.9997991159784773, 
+                    0.9997991159784773, 
+                    0.9997991159784773, 
+                    0.9691970479475057, 
+                    0.9691970479475057, 
+                    0.9135115006044566, 
+                    0.9135115006044566, 
+                    0.8620215245015127, 
+                    0.8620215245015127, 
+                    0.8123415766380632, 
+                    0.8123415766380632, 
+                    0.7653683140322276, 
+                    0.7653683140322276, 
+                    0.7199138447216702, 
+                    0.7199138447216702, 
+                    0.6764603632162837, 
+                    0.6764603632162837, 
+                    0.6349442025429108, 
+                    0.6349442025429108, 
+                    0.5946632536562737, 
+                    0.5946632536562737, 
+                    0.5561312284203225, 
+                    0.5561312284203225, 
+                    0.5190583599241662, 
+                    0.5190583599241662, 
+                    0.482288928150704, 
+                    0.482288928150704, 
+                    0.4460202839598998, 
+                    0.4460202839598998, 
+                    0.4095375089413285, 
+                    0.4095375089413285, 
+                    0.3729286420511441, 
+                    0.3729286420511441, 
+                    0.336050146307962, 
+                    0.336050146307962, 
+                    0.29896183833769846, 
+                    0.29896183833769846, 
+                    0.26164491181931415, 
+                    0.26164491181931415, 
+                    0.22408777066852695, 
+                    0.22408777066852695, 
+                    0.18617442411035218, 
+                    0.18617442411035218, 
+                    0.1475794089209746, 
+                    0.1475794089209746, 
+                    0.10311540969777255, 
+                    0.10311540969777255
+                ], 
+                0.5009368062019348
+            ], 
+            [
+                0.9686364531517029, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999851023158796, 
+                    0.9999851023158796, 
+                    0.9999843332253404, 
+                    0.9999843332253404, 
+                    0.9999831575681398, 
+                    0.9999831575681398, 
+                    0.969351324671947, 
+                    0.969351324671947, 
+                    0.913637198630603, 
+                    0.913637198630603, 
+                    0.8620867730590285, 
+                    0.8620867730590285, 
+                    0.8122371713389767, 
+                    0.8122371713389767, 
+                    0.7651382877084747, 
+                    0.7651382877084747, 
+                    0.7195754343619761, 
+                    0.7195754343619761, 
+                    0.6760795687234861, 
+                    0.6760795687234861, 
+                    0.6345822036292362, 
+                    0.6345822036292362, 
+                    0.5943553214022309, 
+                    0.5943553214022309, 
+                    0.5559163156817428, 
+                    0.5559163156817428, 
+                    0.5189462501815708, 
+                    0.5189462501815708, 
+                    0.4822599284081641, 
+                    0.4822599284081641, 
+                    0.44605313637215177, 
+                    0.44605313637215177, 
+                    0.4096087835240387, 
+                    0.4096087835240387, 
+                    0.37301994229369123, 
+                    0.37301994229369123, 
+                    0.3361500522651506, 
+                    0.3361500522651506, 
+                    0.2990630112693406, 
+                    0.2990630112693406, 
+                    0.2617438774833911, 
+                    0.2617438774833911, 
+                    0.22418188248512524, 
+                    0.22418188248512524, 
+                    0.18626087647991213, 
+                    0.18626087647991213, 
+                    0.14765333620758772, 
+                    0.14765333620758772, 
+                    0.10320790206447324, 
+                    0.10320790206447324
+                ], 
+                0.5006685853004456
+            ], 
+            [
+                0.9789801239967346, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999767111984919, 
+                    0.999767111984919, 
+                    0.9997638129906898, 
+                    0.9997638129906898, 
+                    0.999749118526551, 
+                    0.999749118526551, 
+                    0.9997097773241439, 
+                    0.9997097773241439, 
+                    0.9696268062060506, 
+                    0.9696268062060506, 
+                    0.9137408396082896, 
+                    0.9137408396082896, 
+                    0.862040990764317, 
+                    0.862040990764317, 
+                    0.8121184941006805, 
+                    0.8121184941006805, 
+                    0.7650314425912258, 
+                    0.7650314425912258, 
+                    0.7195221020566186, 
+                    0.7195221020566186, 
+                    0.6761030611947169, 
+                    0.6761030611947169, 
+                    0.6346878962824873, 
+                    0.6346878962824873, 
+                    0.5945275829792844, 
+                    0.5945275829792844, 
+                    0.5561402768991565, 
+                    0.5561402768991565, 
+                    0.5191964327455865, 
+                    0.5191964327455865, 
+                    0.4825003602037606, 
+                    0.4825003602037606, 
+                    0.4462594815453941, 
+                    0.4462594815453941, 
+                    0.4097674648323268, 
+                    0.4097674648323268, 
+                    0.37312791029561365, 
+                    0.37312791029561365, 
+                    0.33621367229660265, 
+                    0.33621367229660265, 
+                    0.29909069269334926, 
+                    0.29909069269334926, 
+                    0.26174566755885176, 
+                    0.26174566755885176, 
+                    0.22416612445372633, 
+                    0.22416612445372633, 
+                    0.18623465412625492, 
+                    0.18623465412625492, 
+                    0.14762380556367274, 
+                    0.14762380556367274, 
+                    0.1032003455943297, 
+                    0.1032003455943297
+                ], 
+                0.5009763240814209
+            ], 
+            [
+                0.9894342422485352, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999919360788819, 
+                    0.9999919360788819, 
+                    0.9999613092663963, 
+                    0.9999613092663963, 
+                    0.9998707860574976, 
+                    0.9998707860574976, 
+                    0.9698889868218041, 
+                    0.9698889868218041, 
+                    0.9139737003103724, 
+                    0.9139737003103724, 
+                    0.8622299303985994, 
+                    0.8622299303985994, 
+                    0.8121729353188928, 
+                    0.8121729353188928, 
+                    0.7649806104944806, 
+                    0.7649806104944806, 
+                    0.719385171684083, 
+                    0.719385171684083, 
+                    0.6759373465544726, 
+                    0.6759373465544726, 
+                    0.6345461655224882, 
+                    0.6345461655224882, 
+                    0.5944432853544309, 
+                    0.5944432853544309, 
+                    0.5561376549435437, 
+                    0.5561376549435437, 
+                    0.5192686990771417, 
+                    0.5192686990771417, 
+                    0.4826288662287755, 
+                    0.4826288662287755, 
+                    0.44641798762871543, 
+                    0.44641798762871543, 
+                    0.40994009379029217, 
+                    0.40994009379029217, 
+                    0.37330060090568457, 
+                    0.37330060090568457, 
+                    0.3363806407524905, 
+                    0.3363806407524905, 
+                    0.29924811098215215, 
+                    0.29924811098215215, 
+                    0.2618926692462235, 
+                    0.2618926692462235, 
+                    0.22430139672049076, 
+                    0.22430139672049076, 
+                    0.1863558429266134, 
+                    0.1863558429266134, 
+                    0.1477253721139279, 
+                    0.1477253721139279, 
+                    0.10332403878210845, 
+                    0.10332403878210845
+                ], 
+                0.5013715028762817
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999770122569559, 
+                    0.999770122569559, 
+                    0.9997684715662709, 
+                    0.9997684715662709, 
+                    0.9997612364836599, 
+                    0.9997612364836599, 
+                    0.9997417198658853, 
+                    0.9997417198658853, 
+                    0.9702460983016726, 
+                    0.9702460983016726, 
+                    0.9141054880620361, 
+                    0.9141054880620361, 
+                    0.862128837408421, 
+                    0.862128837408421, 
+                    0.8118478365081866, 
+                    0.8118478365081866, 
+                    0.7645248380654611, 
+                    0.7645248380654611, 
+                    0.7188600812899697, 
+                    0.7188600812899697, 
+                    0.6754238104662826, 
+                    0.6754238104662826, 
+                    0.6341079124950539, 
+                    0.6341079124950539, 
+                    0.5941047918575961, 
+                    0.5941047918575961, 
+                    0.5559125156664145, 
+                    0.5559125156664145, 
+                    0.5191318611530379, 
+                    0.5191318611530379, 
+                    0.48254522855700516, 
+                    0.48254522855700516, 
+                    0.44635288172770793, 
+                    0.44635288172770793, 
+                    0.409876974685486, 
+                    0.409876974685486, 
+                    0.3732283796455903, 
+                    0.3732283796455903, 
+                    0.33629871582267595, 
+                    0.33629871582267595, 
+                    0.29915789031014095, 
+                    0.29915789031014095, 
+                    0.26179859995685684, 
+                    0.26179859995685684, 
+                    0.22420763246917247, 
+                    0.22420763246917247, 
+                    0.18626686347637483, 
+                    0.18626686347637483, 
+                    0.1476474483562982, 
+                    0.1476474483562982, 
+                    0.10328732582447504, 
+                    0.10328732582447504
+                ], 
+                0.500313401222229
+            ], 
+            [
+                1.0106785297393799, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997939540603422, 
+                    0.9997939540603422, 
+                    0.9997939540603422, 
+                    0.9997939540603422, 
+                    0.9997939540603422, 
+                    0.9997939540603422, 
+                    0.9997939540603422, 
+                    0.9997939540603422, 
+                    0.9706742646234869, 
+                    0.9706742646234869, 
+                    0.9144074997462546, 
+                    0.9144074997462546, 
+                    0.8623068026664893, 
+                    0.8623068026664893, 
+                    0.8118735630956272, 
+                    0.8118735630956272, 
+                    0.7644408311011409, 
+                    0.7644408311011409, 
+                    0.7187114023807343, 
+                    0.7187114023807343, 
+                    0.675273825707311, 
+                    0.675273825707311, 
+                    0.634007931135995, 
+                    0.634007931135995, 
+                    0.5940821220596549, 
+                    0.5940821220596549, 
+                    0.5559719478658559, 
+                    0.5559719478658559, 
+                    0.5192441719663887, 
+                    0.5192441719663887, 
+                    0.4826874209771634, 
+                    0.4826874209771634, 
+                    0.44649314416695723, 
+                    0.44649314416695723, 
+                    0.410006584762679, 
+                    0.410006584762679, 
+                    0.3733389429864158, 
+                    0.3733389429864158, 
+                    0.33639137622284077, 
+                    0.33639137622284077, 
+                    0.2992340167432314, 
+                    0.2992340167432314, 
+                    0.2618616987209133, 
+                    0.2618616987209133, 
+                    0.22425995444100008, 
+                    0.22425995444100008, 
+                    0.18630969105480902, 
+                    0.18630969105480902, 
+                    0.1476805525357835, 
+                    0.1476805525357835, 
+                    0.10335695504198446, 
+                    0.10335695504198446
+                ], 
+                0.5005399584770203
+            ], 
+            [
+                1.0214711427688599, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998042830141328, 
+                    0.9998042830141328, 
+                    0.9998022961315309, 
+                    0.9998022961315309, 
+                    0.9997937631353588, 
+                    0.9997937631353588, 
+                    0.9997714594544699, 
+                    0.9997714594544699, 
+                    0.971197859894434, 
+                    0.971197859894434, 
+                    0.9148132221027534, 
+                    0.9148132221027534, 
+                    0.8626137868685836, 
+                    0.8626137868685836, 
+                    0.8120767202861299, 
+                    0.8120767202861299, 
+                    0.7645601836905052, 
+                    0.7645601836905052, 
+                    0.7187836966687196, 
+                    0.7187836966687196, 
+                    0.6753415079089867, 
+                    0.6753415079089867, 
+                    0.6341077775219836, 
+                    0.6341077775219836, 
+                    0.5942313828824481, 
+                    0.5942313828824481, 
+                    0.5561728445875689, 
+                    0.5561728445875689, 
+                    0.5194742589134423, 
+                    0.5194742589134423, 
+                    0.48292496911968014, 
+                    0.48292496911968014, 
+                    0.44671374334123726, 
+                    0.44671374334123726, 
+                    0.41020297438349224, 
+                    0.41020297438349224, 
+                    0.3735062177766935, 
+                    0.3735062177766935, 
+                    0.3365324089338428, 
+                    0.3365324089338428, 
+                    0.2993518343521125, 
+                    0.2993518343521125, 
+                    0.26196063345571513, 
+                    0.26196063345571513, 
+                    0.22434282857896387, 
+                    0.22434282857896387, 
+                    0.18637803332815533, 
+                    0.18637803332815533, 
+                    0.1477339234978723, 
+                    0.1477339234978723, 
+                    0.10344933811891127, 
+                    0.10344933811891127
+                ], 
+                0.5013108849525452
+            ], 
+            [
+                1.0323790311813354, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998382163425047, 
+                    0.9998382163425047, 
+                    0.9998382163425047, 
+                    0.9998382163425047, 
+                    0.9998382163425047, 
+                    0.9998382163425047, 
+                    0.9998382163425047, 
+                    0.9998382163425047, 
+                    0.9717420327068411, 
+                    0.9717420327068411, 
+                    0.9151724169180255, 
+                    0.9151724169180255, 
+                    0.8627719573779405, 
+                    0.8627719573779405, 
+                    0.8119567293900617, 
+                    0.8119567293900617, 
+                    0.7642192783829296, 
+                    0.7642192783829296, 
+                    0.7182813200253142, 
+                    0.7182813200253142, 
+                    0.6747810009393754, 
+                    0.6747810009393754, 
+                    0.6335815576510841, 
+                    0.6335815576510841, 
+                    0.5937873271922862, 
+                    0.5937873271922862, 
+                    0.5558471683802942, 
+                    0.5558471683802942, 
+                    0.5192592949024681, 
+                    0.5192592949024681, 
+                    0.482794364428681, 
+                    0.482794364428681, 
+                    0.44663845473787944, 
+                    0.44663845473787944, 
+                    0.4101630683426783, 
+                    0.4101630683426783, 
+                    0.3734854232958345, 
+                    0.3734854232958345, 
+                    0.33652225213250087, 
+                    0.33652225213250087, 
+                    0.29934675705192165, 
+                    0.29934675705192165, 
+                    0.2619584026915475, 
+                    0.2619584026915475, 
+                    0.22434204036148248, 
+                    0.22434204036148248, 
+                    0.18637795187286646, 
+                    0.18637795187286646, 
+                    0.14773404298694734, 
+                    0.14773404298694734, 
+                    0.1035056955870099, 
+                    0.1035056955870099
+                ], 
+                0.5004752278327942
+            ], 
+            [
+                1.0434033870697021, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999886704993126, 
+                    0.999886704993126, 
+                    0.999886704993126, 
+                    0.999886704993126, 
+                    0.999886704993126, 
+                    0.999886704993126, 
+                    0.999886704993126, 
+                    0.999886704993126, 
+                    0.9724459666924034, 
+                    0.9724459666924034, 
+                    0.9157255592993109, 
+                    0.9157255592993109, 
+                    0.8631886406649704, 
+                    0.8631886406649704, 
+                    0.8121976800841886, 
+                    0.8121976800841886, 
+                    0.7642904303098007, 
+                    0.7642904303098007, 
+                    0.7182441536832331, 
+                    0.7182441536832331, 
+                    0.6747096395103537, 
+                    0.6747096395103537, 
+                    0.6335389141159723, 
+                    0.6335389141159723, 
+                    0.5938082558448157, 
+                    0.5938082558448157, 
+                    0.5559369157994927, 
+                    0.5559369157994927, 
+                    0.519389616766234, 
+                    0.519389616766234, 
+                    0.48294794382964573, 
+                    0.48294794382964573, 
+                    0.4467877207719169, 
+                    0.4467877207719169, 
+                    0.41030274046351695, 
+                    0.41030274046351695, 
+                    0.37360873803166644, 
+                    0.37360873803166644, 
+                    0.3366302073906033, 
+                    0.3366302073906033, 
+                    0.2994400114420961, 
+                    0.2994400114420961, 
+                    0.2620391929792855, 
+                    0.2620391929792855, 
+                    0.2244115046714164, 
+                    0.2244115046714164, 
+                    0.18643644983550509, 
+                    0.18643644983550509, 
+                    0.14778041071935463, 
+                    0.14778041071935463, 
+                    0.10360923538170994, 
+                    0.10360923538170994
+                ], 
+                0.5009682774543762
+            ], 
+            [
+                1.0545454025268555, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999562214001937, 
+                    0.9999562214001937, 
+                    0.9999534611045688, 
+                    0.9999534611045688, 
+                    0.9999485151117357, 
+                    0.9999485151117357, 
+                    0.9730714268031807, 
+                    0.9730714268031807, 
+                    0.9162462725995156, 
+                    0.9162462725995156, 
+                    0.863589135800057, 
+                    0.863589135800057, 
+                    0.8122788270355061, 
+                    0.8122788270355061, 
+                    0.7640805185744463, 
+                    0.7640805185744463, 
+                    0.7177929356254229, 
+                    0.7177929356254229, 
+                    0.6741398488568794, 
+                    0.6741398488568794, 
+                    0.6329655638888975, 
+                    0.6329655638888975, 
+                    0.5933035815476473, 
+                    0.5933035815476473, 
+                    0.5555624043722887, 
+                    0.5555624043722887, 
+                    0.5191612836486103, 
+                    0.5191612836486103, 
+                    0.48284865870013394, 
+                    0.48284865870013394, 
+                    0.44679237061566573, 
+                    0.44679237061566573, 
+                    0.41038311499783514, 
+                    0.41038311499783514, 
+                    0.37373936176395156, 
+                    0.37373936176395156, 
+                    0.33679166983002146, 
+                    0.33679166983002146, 
+                    0.2996176092696815, 
+                    0.2996176092696815, 
+                    0.2622224691027497, 
+                    0.2622224691027497, 
+                    0.22459191269793513, 
+                    0.22459191269793513, 
+                    0.18660587151456268, 
+                    0.18660587151456268, 
+                    0.14792760889257517, 
+                    0.14792760889257517, 
+                    0.10381902498700853, 
+                    0.10381902498700853
+                ], 
+                0.5006551742553711
+            ], 
+            [
+                1.06580650806427, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999737514385425, 
+                    0.9999737514385425, 
+                    0.9999737514385425, 
+                    0.9999737514385425, 
+                    0.9999737514385425, 
+                    0.9999737514385425, 
+                    0.9739015137272454, 
+                    0.9739015137272454, 
+                    0.9168650640363523, 
+                    0.9168650640363523, 
+                    0.8639917339098101, 
+                    0.8639917339098101, 
+                    0.812340680515758, 
+                    0.812340680515758, 
+                    0.7638326636980414, 
+                    0.7638326636980414, 
+                    0.7173347787480585, 
+                    0.7173347787480585, 
+                    0.6736067025892531, 
+                    0.6736067025892531, 
+                    0.6324670555693966, 
+                    0.6324670555693966, 
+                    0.5929015605070526, 
+                    0.5929015605070526, 
+                    0.5552832871006186, 
+                    0.5552832871006186, 
+                    0.5189858978098996, 
+                    0.5189858978098996, 
+                    0.4827590370176623, 
+                    0.4827590370176623, 
+                    0.44675682609705886, 
+                    0.44675682609705886, 
+                    0.4103865608523814, 
+                    0.4103865608523814, 
+                    0.3737651847696951, 
+                    0.3737651847696951, 
+                    0.3368310443782822, 
+                    0.3368310443782822, 
+                    0.2996635039693959, 
+                    0.2996635039693959, 
+                    0.26227103764768184, 
+                    0.26227103764768184, 
+                    0.22463999391443581, 
+                    0.22463999391443581, 
+                    0.186650872022876, 
+                    0.186650872022876, 
+                    0.14796641906477925, 
+                    0.14796641906477925, 
+                    0.10393995072317172, 
+                    0.10393995072317172
+                ], 
+                0.5001109838485718
+            ], 
+            [
+                1.0771877765655518, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999995570856279, 
+                    0.9999995570856279, 
+                    0.9996942851524059, 
+                    0.9996942851524059, 
+                    0.9996824721424484, 
+                    0.9996824721424484, 
+                    0.9996554730142336, 
+                    0.9996554730142336, 
+                    0.9734353346154679, 
+                    0.9734353346154679, 
+                    0.9167326650805715, 
+                    0.9167326650805715, 
+                    0.8641678556230147, 
+                    0.8641678556230147, 
+                    0.8119422905600439, 
+                    0.8119422905600439, 
+                    0.7630411093807692, 
+                    0.7630411093807692, 
+                    0.7159923154579249, 
+                    0.7159923154579249, 
+                    0.6718708350498055, 
+                    0.6718708350498055, 
+                    0.6305343157162749, 
+                    0.6305343157162749, 
+                    0.5909899830347224, 
+                    0.5909899830347224, 
+                    0.5536873370671603, 
+                    0.5536873370671603, 
+                    0.5179547907322551, 
+                    0.5179547907322551, 
+                    0.4823086049446703, 
+                    0.4823086049446703, 
+                    0.446879789239933, 
+                    0.446879789239933, 
+                    0.41095042779306634, 
+                    0.41095042779306634, 
+                    0.3746557610773119, 
+                    0.3746557610773119, 
+                    0.3379338737750829, 
+                    0.3379338737750829, 
+                    0.3008910361123383, 
+                    0.3008910361123383, 
+                    0.2635514058161139, 
+                    0.2635514058161139, 
+                    0.2259138601499842, 
+                    0.2259138601499842, 
+                    0.18785927211881825, 
+                    0.18785927211881825, 
+                    0.14902656123569386, 
+                    0.14902656123569386, 
+                    0.10501317794076274, 
+                    0.10501317794076274
+                ], 
+                0.4998055100440979
+            ], 
+            [
+                1.0886906385421753, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994952284041347, 
+                    0.9994952284041347, 
+                    0.9994952284041347, 
+                    0.9994952284041347, 
+                    0.9994952284041347, 
+                    0.9994952284041347, 
+                    0.973135041245098, 
+                    0.973135041245098, 
+                    0.9165134089190488, 
+                    0.9165134089190488, 
+                    0.8640936289270228, 
+                    0.8640936289270228, 
+                    0.8115331407465028, 
+                    0.8115331407465028, 
+                    0.7624791082780161, 
+                    0.7624791082780161, 
+                    0.7151888982478648, 
+                    0.7151888982478648, 
+                    0.6708531688685503, 
+                    0.6708531688685503, 
+                    0.6293526062371662, 
+                    0.6293526062371662, 
+                    0.5898170108395304, 
+                    0.5898170108395304, 
+                    0.5526853075108645, 
+                    0.5526853075108645, 
+                    0.5172992964542229, 
+                    0.5172992964542229, 
+                    0.4820594766979561, 
+                    0.4820594766979561, 
+                    0.44703061502464914, 
+                    0.44703061502464914, 
+                    0.4114214920809149, 
+                    0.4114214920809149, 
+                    0.37536495306407125, 
+                    0.37536495306407125, 
+                    0.33880082734367667, 
+                    0.33880082734367667, 
+                    0.3018515837597334, 
+                    0.3018515837597334, 
+                    0.26455278255081466, 
+                    0.26455278255081466, 
+                    0.22691111058412536, 
+                    0.22691111058412536, 
+                    0.18880679293214753, 
+                    0.18880679293214753, 
+                    0.1498596617619308, 
+                    0.1498596617619308, 
+                    0.10588520596797926, 
+                    0.10588520596797926
+                ], 
+                0.49997830390930176
+            ], 
+            [
+                1.1003162860870361, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993968848252617, 
+                    0.9993968848252617, 
+                    0.9991934145750768, 
+                    0.9991934145750768, 
+                    0.9988766159909782, 
+                    0.9988766159909782, 
+                    0.998256892882703, 
+                    0.998256892882703, 
+                    0.9455588030627622, 
+                    0.9455588030627622, 
+                    0.8827105452429672, 
+                    0.8827105452429672, 
+                    0.8204750465222709, 
+                    0.8204750465222709, 
+                    0.7649596037801579, 
+                    0.7649596037801579, 
+                    0.7128751700799498, 
+                    0.7128751700799498, 
+                    0.6660180993791394, 
+                    0.6660180993791394, 
+                    0.6238309857231817, 
+                    0.6238309857231817, 
+                    0.5843989521065703, 
+                    0.5843989521065703, 
+                    0.5484503005544462, 
+                    0.5484503005544462, 
+                    0.5147958301346862, 
+                    0.5147958301346862, 
+                    0.4809942880393953, 
+                    0.4809942880393953, 
+                    0.44732173451726837, 
+                    0.44732173451726837, 
+                    0.41266091566876, 
+                    0.41266091566876, 
+                    0.3772895768569564, 
+                    0.3772895768569564, 
+                    0.3411588781142938, 
+                    0.3411588781142938, 
+                    0.30447557975959966, 
+                    0.30447557975959966, 
+                    0.2673124668964414, 
+                    0.2673124668964414, 
+                    0.22970291035628404, 
+                    0.22970291035628404, 
+                    0.1915146181880222, 
+                    0.1915146181880222, 
+                    0.15229686181261937, 
+                    0.15229686181261937, 
+                    0.10603076987544353, 
+                    0.10603076987544353
+                ], 
+                0.5006961226463318
+            ], 
+            [
+                1.1120661497116089, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9972942835201479, 
+                    0.9972942835201479, 
+                    0.9970726574469146, 
+                    0.9970726574469146, 
+                    0.9970348400437927, 
+                    0.9970348400437927, 
+                    0.9969559569456601, 
+                    0.9969559569456601, 
+                    0.9394987122589122, 
+                    0.9394987122589122, 
+                    0.8759052297251757, 
+                    0.8759052297251757, 
+                    0.8138601548495902, 
+                    0.8138601548495902, 
+                    0.7606695634919904, 
+                    0.7606695634919904, 
+                    0.7106680929853335, 
+                    0.7106680929853335, 
+                    0.6650212421083701, 
+                    0.6650212421083701, 
+                    0.6228719189978286, 
+                    0.6228719189978286, 
+                    0.5833933660885671, 
+                    0.5833933660885671, 
+                    0.5471518175650446, 
+                    0.5471518175650446, 
+                    0.5136486433121716, 
+                    0.5136486433121716, 
+                    0.48051744296128934, 
+                    0.48051744296128934, 
+                    0.4476310784757906, 
+                    0.4476310784757906, 
+                    0.4136843557967879, 
+                    0.4136843557967879, 
+                    0.3788718022060364, 
+                    0.3788718022060364, 
+                    0.3431288289818342, 
+                    0.3431288289818342, 
+                    0.3066847900608843, 
+                    0.3066847900608843, 
+                    0.26963318979048007, 
+                    0.26963318979048007, 
+                    0.23202342813364749, 
+                    0.23202342813364749, 
+                    0.19372327283878063, 
+                    0.19372327283878063, 
+                    0.1542410504205408, 
+                    0.1542410504205408, 
+                    0.10821381382587268, 
+                    0.10821381382587268
+                ], 
+                0.5003149509429932
+            ]
+        ]
+    }, 
+    {
+        "block_size": 56, 
+        "preprocessing_block_sizes": [
+            36
+        ], 
+        "pruning_parameters": [
+            [
+                0.9008905291557312, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999977928371137, 
+                    0.999977928371137, 
+                    0.999977928371137, 
+                    0.999977928371137, 
+                    0.999977928371137, 
+                    0.999977928371137, 
+                    0.999977928371137, 
+                    0.999977928371137, 
+                    0.9561618847539366, 
+                    0.9561618847539366, 
+                    0.9073083814778096, 
+                    0.9073083814778096, 
+                    0.8618013154910286, 
+                    0.8618013154910286, 
+                    0.818517532492342, 
+                    0.818517532492342, 
+                    0.7766016526431044, 
+                    0.7766016526431044, 
+                    0.7352650040917525, 
+                    0.7352650040917525, 
+                    0.6948608833521838, 
+                    0.6948608833521838, 
+                    0.6550498149714303, 
+                    0.6550498149714303, 
+                    0.6156466016194141, 
+                    0.6156466016194141, 
+                    0.577586746561179, 
+                    0.577586746561179, 
+                    0.5401102247773384, 
+                    0.5401102247773384, 
+                    0.5033371400194945, 
+                    0.5033371400194945, 
+                    0.46749798052999586, 
+                    0.46749798052999586, 
+                    0.43194567259623873, 
+                    0.43194567259623873, 
+                    0.3965020961084732, 
+                    0.3965020961084732, 
+                    0.36097821332573277, 
+                    0.36097821332573277, 
+                    0.3252475495365435, 
+                    0.3252475495365435, 
+                    0.2893625800656951, 
+                    0.2893625800656951, 
+                    0.2533284829413874, 
+                    0.2533284829413874, 
+                    0.21710586314270996, 
+                    0.21710586314270996, 
+                    0.1806031833298044, 
+                    0.1806031833298044, 
+                    0.1435703469185365, 
+                    0.1435703469185365, 
+                    0.10242701765715129, 
+                    0.10242701765715129
+                ], 
+                0.5005461573600769
+            ], 
+            [
+                0.9103425145149231, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999751605537698, 
+                    0.9999751605537698, 
+                    0.9999751605537698, 
+                    0.9999751605537698, 
+                    0.9999751605537698, 
+                    0.9999751605537698, 
+                    0.9999751605537698, 
+                    0.9999751605537698, 
+                    0.9562785762838938, 
+                    0.9562785762838938, 
+                    0.9073862946584604, 
+                    0.9073862946584604, 
+                    0.8618432209079466, 
+                    0.8618432209079466, 
+                    0.818522656741749, 
+                    0.818522656741749, 
+                    0.7765664475980014, 
+                    0.7765664475980014, 
+                    0.7351814875497684, 
+                    0.7351814875497684, 
+                    0.6947575388360122, 
+                    0.6947575388360122, 
+                    0.6549428698975078, 
+                    0.6549428698975078, 
+                    0.6155495430485036, 
+                    0.6155495430485036, 
+                    0.5775254040562875, 
+                    0.5775254040562875, 
+                    0.5400852579663904, 
+                    0.5400852579663904, 
+                    0.503347592508117, 
+                    0.503347592508117, 
+                    0.46753946545242375, 
+                    0.46753946545242375, 
+                    0.43200261574642734, 
+                    0.43200261574642734, 
+                    0.39656113021842115, 
+                    0.39656113021842115, 
+                    0.3610302045125991, 
+                    0.3610302045125991, 
+                    0.3252902046693177, 
+                    0.3252902046693177, 
+                    0.2893963151727115, 
+                    0.2893963151727115, 
+                    0.2533544204155378, 
+                    0.2533544204155378, 
+                    0.21712579102313723, 
+                    0.21712579102313723, 
+                    0.18061839681129785, 
+                    0.18061839681129785, 
+                    0.14358159087421024, 
+                    0.14358159087421024, 
+                    0.10244588692781559, 
+                    0.10244588692781559
+                ], 
+                0.5005435943603516
+            ], 
+            [
+                0.9198936820030212, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999755117470911, 
+                    0.9999755117470911, 
+                    0.9999755117470911, 
+                    0.9999755117470911, 
+                    0.9999755117470911, 
+                    0.9999755117470911, 
+                    0.9999755117470911, 
+                    0.9999755117470911, 
+                    0.9564205334338584, 
+                    0.9564205334338584, 
+                    0.9074928116556711, 
+                    0.9074928116556711, 
+                    0.86191948706019, 
+                    0.86191948706019, 
+                    0.8185713434727169, 
+                    0.8185713434727169, 
+                    0.7765887549717346, 
+                    0.7765887549717346, 
+                    0.7351776886144794, 
+                    0.7351776886144794, 
+                    0.6947481832097837, 
+                    0.6947481832097837, 
+                    0.6549464802906532, 
+                    0.6549464802906532, 
+                    0.615586349995551, 
+                    0.615586349995551, 
+                    0.5776079913055752, 
+                    0.5776079913055752, 
+                    0.5402154565987523, 
+                    0.5402154565987523, 
+                    0.5035177867181655, 
+                    0.5035177867181655, 
+                    0.4677187549566056, 
+                    0.4677187549566056, 
+                    0.4321698836769244, 
+                    0.4321698836769244, 
+                    0.3967023956992556, 
+                    0.3967023956992556, 
+                    0.36114200336162516, 
+                    0.36114200336162516, 
+                    0.32537889564400085, 
+                    0.32537889564400085, 
+                    0.28946659251269885, 
+                    0.28946659251269885, 
+                    0.2534100471072268, 
+                    0.2534100471072268, 
+                    0.21717041984539703, 
+                    0.21717041984539703, 
+                    0.18065403408384006, 
+                    0.18065403408384006, 
+                    0.14360871700599062, 
+                    0.14360871700599062, 
+                    0.10247881062504238, 
+                    0.10247881062504238
+                ], 
+                0.5009507536888123
+            ], 
+            [
+                0.929544985294342, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999740549332629, 
+                    0.9999740549332629, 
+                    0.9999740549332629, 
+                    0.9999740549332629, 
+                    0.9999740549332629, 
+                    0.9999740549332629, 
+                    0.9999740549332629, 
+                    0.9999740549332629, 
+                    0.9565761274309407, 
+                    0.9565761274309407, 
+                    0.9075964588014505, 
+                    0.9075964588014505, 
+                    0.8619728912158376, 
+                    0.8619728912158376, 
+                    0.8185698970003678, 
+                    0.8185698970003678, 
+                    0.7765208101706694, 
+                    0.7765208101706694, 
+                    0.7350175243713858, 
+                    0.7350175243713858, 
+                    0.6945259239203919, 
+                    0.6945259239203919, 
+                    0.6546813231450685, 
+                    0.6546813231450685, 
+                    0.6152966259964566, 
+                    0.6152966259964566, 
+                    0.5773499860905993, 
+                    0.5773499860905993, 
+                    0.5400015647002244, 
+                    0.5400015647002244, 
+                    0.5033590656157202, 
+                    0.5033590656157202, 
+                    0.46761666695273724, 
+                    0.46761666695273724, 
+                    0.4321077626467202, 
+                    0.4321077626467202, 
+                    0.396664811176656, 
+                    0.396664811176656, 
+                    0.36111722903630306, 
+                    0.36111722903630306, 
+                    0.32536117515273466, 
+                    0.32536117515273466, 
+                    0.2894527584376916, 
+                    0.2894527584376916, 
+                    0.25339833170796644, 
+                    0.25339833170796644, 
+                    0.2171604444542221, 
+                    0.2171604444542221, 
+                    0.18064574808237796, 
+                    0.18064574808237796, 
+                    0.14360233766578703, 
+                    0.14360233766578703, 
+                    0.10248805058601156, 
+                    0.10248805058601156
+                ], 
+                0.5004851818084717
+            ], 
+            [
+                0.939297616481781, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999750241718453, 
+                    0.9999750241718453, 
+                    0.9999750241718453, 
+                    0.9999750241718453, 
+                    0.9999750241718453, 
+                    0.9999750241718453, 
+                    0.9999750241718453, 
+                    0.9999750241718453, 
+                    0.9567637784643899, 
+                    0.9567637784643899, 
+                    0.9077357500922205, 
+                    0.9077357500922205, 
+                    0.8620691037924422, 
+                    0.8620691037924422, 
+                    0.8186240366645834, 
+                    0.8186240366645834, 
+                    0.7765296857990863, 
+                    0.7765296857990863, 
+                    0.7349714297507678, 
+                    0.7349714297507678, 
+                    0.6944490138142001, 
+                    0.6944490138142001, 
+                    0.6545934078917972, 
+                    0.6545934078917972, 
+                    0.6152180597781308, 
+                    0.6152180597781308, 
+                    0.5773106494818807, 
+                    0.5773106494818807, 
+                    0.540007355866898, 
+                    0.540007355866898, 
+                    0.5034090764170815, 
+                    0.5034090764170815, 
+                    0.4676916634375708, 
+                    0.4676916634375708, 
+                    0.4321890517012519, 
+                    0.4321890517012519, 
+                    0.39673888817177955, 
+                    0.39673888817177955, 
+                    0.36117835498225376, 
+                    0.36117835498225376, 
+                    0.32541126398863857, 
+                    0.32541126398863857, 
+                    0.28949343678235867, 
+                    0.28949343678235867, 
+                    0.25343112771033094, 
+                    0.25343112771033094, 
+                    0.2171872250805162, 
+                    0.2171872250805162, 
+                    0.1806675173904364, 
+                    0.1806675173904364, 
+                    0.14361922207248026, 
+                    0.14361922207248026, 
+                    0.10251717195874216, 
+                    0.10251717195874216
+                ], 
+                0.5006040930747986
+            ], 
+            [
+                0.9491525292396545, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999764973329635, 
+                    0.9999764973329635, 
+                    0.9999764973329635, 
+                    0.9999764973329635, 
+                    0.9999764973329635, 
+                    0.9999764973329635, 
+                    0.9999764973329635, 
+                    0.9999764973329635, 
+                    0.9569788211189549, 
+                    0.9569788211189549, 
+                    0.9078944928253584, 
+                    0.9078944928253584, 
+                    0.8621766648059546, 
+                    0.8621766648059546, 
+                    0.8186801726752505, 
+                    0.8186801726752505, 
+                    0.7765282127295247, 
+                    0.7765282127295247, 
+                    0.7348960795439312, 
+                    0.7348960795439312, 
+                    0.6943265983229684, 
+                    0.6943265983229684, 
+                    0.6544450787721162, 
+                    0.6544450787721162, 
+                    0.6150649133319749, 
+                    0.6150649133319749, 
+                    0.5771939863023148, 
+                    0.5771939863023148, 
+                    0.5399358297229262, 
+                    0.5399358297229262, 
+                    0.5033859397177693, 
+                    0.5033859397177693, 
+                    0.46770422822760055, 
+                    0.46770422822760055, 
+                    0.4322195225491401, 
+                    0.4322195225491401, 
+                    0.39677353667976345, 
+                    0.39677353667976345, 
+                    0.3612097662323251, 
+                    0.3612097662323251, 
+                    0.32543867608936466, 
+                    0.32543867608936466, 
+                    0.28951664441862884, 
+                    0.28951664441862884, 
+                    0.2534503392842412, 
+                    0.2534503392842412, 
+                    0.2172033013136957, 
+                    0.2172033013136957, 
+                    0.18068090746148885, 
+                    0.18068090746148885, 
+                    0.14362987838255956, 
+                    0.14362987838255956, 
+                    0.10254399047201831, 
+                    0.10254399047201831
+                ], 
+                0.5005426406860352
+            ], 
+            [
+                0.9591108560562134, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999799141745258, 
+                    0.9999799141745258, 
+                    0.9999799141745258, 
+                    0.9999799141745258, 
+                    0.9999799141745258, 
+                    0.9999799141745258, 
+                    0.9999799141745258, 
+                    0.9999799141745258, 
+                    0.9572379347619738, 
+                    0.9572379347619738, 
+                    0.9081057537003236, 
+                    0.9081057537003236, 
+                    0.8623503782617878, 
+                    0.8623503782617878, 
+                    0.8188247951249328, 
+                    0.8188247951249328, 
+                    0.7766505603057202, 
+                    0.7766505603057202, 
+                    0.7350046825082692, 
+                    0.7350046825082692, 
+                    0.6944360071466738, 
+                    0.6944360071466738, 
+                    0.6545727005351534, 
+                    0.6545727005351534, 
+                    0.6152285159161173, 
+                    0.6152285159161173, 
+                    0.5773935879065902, 
+                    0.5773935879065902, 
+                    0.5401691733741675, 
+                    0.5401691733741675, 
+                    0.5036408327956473, 
+                    0.5036408327956473, 
+                    0.46794896108517375, 
+                    0.46794896108517375, 
+                    0.4324374235012895, 
+                    0.4324374235012895, 
+                    0.39695557664091907, 
+                    0.39695557664091907, 
+                    0.3613564317525779, 
+                    0.3613564317525779, 
+                    0.3255580173711987, 
+                    0.3255580173711987, 
+                    0.2896144133083538, 
+                    0.2896144133083538, 
+                    0.2535308893833803, 
+                    0.2535308893833803, 
+                    0.21727021817637135, 
+                    0.21727021817637135, 
+                    0.18073595120921748, 
+                    0.18073595120921748, 
+                    0.1436728713176119, 
+                    0.1436728713176119, 
+                    0.10259817203580379, 
+                    0.10259817203580379
+                ], 
+                0.5013185739517212
+            ], 
+            [
+                0.9691736698150635, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999825159602889, 
+                    0.9999825159602889, 
+                    0.9999825159602889, 
+                    0.9999825159602889, 
+                    0.9999825159602889, 
+                    0.9999825159602889, 
+                    0.9999825159602889, 
+                    0.9999825159602889, 
+                    0.9575176765308826, 
+                    0.9575176765308826, 
+                    0.9083099377996245, 
+                    0.9083099377996245, 
+                    0.8624831189883866, 
+                    0.8624831189883866, 
+                    0.8188821960992743, 
+                    0.8188821960992743, 
+                    0.7766183336548353, 
+                    0.7766183336548353, 
+                    0.7348493825731413, 
+                    0.7348493825731413, 
+                    0.6941919438201789, 
+                    0.6941919438201789, 
+                    0.6542657041124337, 
+                    0.6542657041124337, 
+                    0.6148831587831535, 
+                    0.6148831587831535, 
+                    0.577081124819172, 
+                    0.577081124819172, 
+                    0.5399056339450907, 
+                    0.5399056339450907, 
+                    0.5034397145205488, 
+                    0.5034397145205488, 
+                    0.4678118825682155, 
+                    0.4678118825682155, 
+                    0.4323473318816673, 
+                    0.4323473318816673, 
+                    0.3968970464169606, 
+                    0.3968970464169606, 
+                    0.36131744139097555, 
+                    0.36131744139097555, 
+                    0.32553148592453524, 
+                    0.32553148592453524, 
+                    0.2895957967364114, 
+                    0.2895957967364114, 
+                    0.25351729271778095, 
+                    0.25351729271778095, 
+                    0.21726023099177508, 
+                    0.21726023099177508, 
+                    0.18072878844721016, 
+                    0.18072878844721016, 
+                    0.1436681527368456, 
+                    0.1436681527368456, 
+                    0.10261929415797996, 
+                    0.10261929415797996
+                ], 
+                0.5008042454719543
+            ], 
+            [
+                0.9793420433998108, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999894353329196, 
+                    0.9999894353329196, 
+                    0.9999894353329196, 
+                    0.9999894353329196, 
+                    0.9999894353329196, 
+                    0.9999894353329196, 
+                    0.9999894353329196, 
+                    0.9999894353329196, 
+                    0.9578539787181998, 
+                    0.9578539787181998, 
+                    0.9085832054892027, 
+                    0.9085832054892027, 
+                    0.8627026514527131, 
+                    0.8627026514527131, 
+                    0.8190534799218651, 
+                    0.8190534799218651, 
+                    0.7767410115836693, 
+                    0.7767410115836693, 
+                    0.7349169804610836, 
+                    0.7349169804610836, 
+                    0.6942213003965202, 
+                    0.6942213003965202, 
+                    0.6542797685520445, 
+                    0.6542797685520445, 
+                    0.6149055765614009, 
+                    0.6149055765614009, 
+                    0.5771357089209751, 
+                    0.5771357089209751, 
+                    0.5399976341438371, 
+                    0.5399976341438371, 
+                    0.503564856931743, 
+                    0.503564856931743, 
+                    0.46794591501287786, 
+                    0.46794591501287786, 
+                    0.432474710273788, 
+                    0.432474710273788, 
+                    0.3970081773970037, 
+                    0.3970081773970037, 
+                    0.3614102826108906, 
+                    0.3614102826108906, 
+                    0.325610008871594, 
+                    0.325610008871594, 
+                    0.289662477932296, 
+                    0.289662477932296, 
+                    0.2535740133729165, 
+                    0.2535740133729165, 
+                    0.21730871005338676, 
+                    0.21730871005338676, 
+                    0.1807696818422663, 
+                    0.1807696818422663, 
+                    0.14370082538990928, 
+                    0.14370082538990928, 
+                    0.10267261832566513, 
+                    0.10267261832566513
+                ], 
+                0.5012728571891785
+            ], 
+            [
+                0.989617109298706, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999951645159433, 
+                    0.9999951645159433, 
+                    0.9999951645159433, 
+                    0.9999951645159433, 
+                    0.9999951645159433, 
+                    0.9999951645159433, 
+                    0.9999951645159433, 
+                    0.9999951645159433, 
+                    0.9582185984963677, 
+                    0.9582185984963677, 
+                    0.9088572985090618, 
+                    0.9088572985090618, 
+                    0.8628902357606716, 
+                    0.8628902357606716, 
+                    0.8191495800099465, 
+                    0.8191495800099465, 
+                    0.776727438634537, 
+                    0.776727438634537, 
+                    0.7347520925089116, 
+                    0.7347520925089116, 
+                    0.6939433732048167, 
+                    0.6939433732048167, 
+                    0.6539217332599849, 
+                    0.6539217332599849, 
+                    0.6144987230157651, 
+                    0.6144987230157651, 
+                    0.5767645259533736, 
+                    0.5767645259533736, 
+                    0.5396812950271268, 
+                    0.5396812950271268, 
+                    0.5033189720709296, 
+                    0.5033189720709296, 
+                    0.4677726459198309, 
+                    0.4677726459198309, 
+                    0.4323564137130748, 
+                    0.4323564137130748, 
+                    0.39692869960482624, 
+                    0.39692869960482624, 
+                    0.3613565052172244, 
+                    0.3613565052172244, 
+                    0.32557332715379117, 
+                    0.32557332715379117, 
+                    0.28963706470289785, 
+                    0.28963706470289785, 
+                    0.25355600065195, 
+                    0.25355600065195, 
+                    0.2172959316113581, 
+                    0.2172959316113581, 
+                    0.18076086751777623, 
+                    0.18076086751777623, 
+                    0.14369529559679234, 
+                    0.14369529559679234, 
+                    0.10270107253194385, 
+                    0.10270107253194385
+                ], 
+                0.5006730556488037
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999971063857492, 
+                    0.9999971063857492, 
+                    0.9999971063857492, 
+                    0.9999971063857492, 
+                    0.9999971063857492, 
+                    0.9999971063857492, 
+                    0.9586646818332252, 
+                    0.9586646818332252, 
+                    0.9093910569945416, 
+                    0.9093910569945416, 
+                    0.8634492797385975, 
+                    0.8634492797385975, 
+                    0.8196290730604062, 
+                    0.8196290730604062, 
+                    0.7770342677311225, 
+                    0.7770342677311225, 
+                    0.7347867995635365, 
+                    0.7347867995635365, 
+                    0.6937578016308815, 
+                    0.6937578016308815, 
+                    0.6535577474659213, 
+                    0.6535577474659213, 
+                    0.6140031788409065, 
+                    0.6140031788409065, 
+                    0.5762789929741194, 
+                    0.5762789929741194, 
+                    0.5392473514095001, 
+                    0.5392473514095001, 
+                    0.502977392074908, 
+                    0.502977392074908, 
+                    0.4675545616796852, 
+                    0.4675545616796852, 
+                    0.4322458987290494, 
+                    0.4322458987290494, 
+                    0.3969040150519865, 
+                    0.3969040150519865, 
+                    0.361393232164686, 
+                    0.361393232164686, 
+                    0.32564963070604663, 
+                    0.32564963070604663, 
+                    0.28973753321151624, 
+                    0.28973753321151624, 
+                    0.25366927144394, 
+                    0.25366927144394, 
+                    0.21741341394783617, 
+                    0.21741341394783617, 
+                    0.18087509445862548, 
+                    0.18087509445862548, 
+                    0.14379697895793642, 
+                    0.14379697895793642, 
+                    0.10282541506240056, 
+                    0.10282541506240056
+                ], 
+                0.5005415081977844
+            ], 
+            [
+                1.0104918479919434, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999934803317485, 
+                    0.9999934803317485, 
+                    0.9999763948918776, 
+                    0.9999763948918776, 
+                    0.9999763948918776, 
+                    0.9999763948918776, 
+                    0.9999763948918776, 
+                    0.9999763948918776, 
+                    0.9592006840266589, 
+                    0.9592006840266589, 
+                    0.9104502788906257, 
+                    0.9104502788906257, 
+                    0.8648051409948786, 
+                    0.8648051409948786, 
+                    0.8209119624979456, 
+                    0.8209119624979456, 
+                    0.7779503139058667, 
+                    0.7779503139058667, 
+                    0.7350819771625555, 
+                    0.7350819771625555, 
+                    0.6935416941713769, 
+                    0.6935416941713769, 
+                    0.6528935289906438, 
+                    0.6528935289906438, 
+                    0.6129771729041762, 
+                    0.6129771729041762, 
+                    0.5752023203777283, 
+                    0.5752023203777283, 
+                    0.5382282804121286, 
+                    0.5382282804121286, 
+                    0.5021343154770053, 
+                    0.5021343154770053, 
+                    0.4670144302938187, 
+                    0.4670144302938187, 
+                    0.43199401290677003, 
+                    0.43199401290677003, 
+                    0.39689696296828814, 
+                    0.39689696296828814, 
+                    0.3615678277642126, 
+                    0.3615678277642126, 
+                    0.3259410577615425, 
+                    0.3259410577615425, 
+                    0.2901005493954086, 
+                    0.2901005493954086, 
+                    0.2540698701704796, 
+                    0.2540698701704796, 
+                    0.21782437987728653, 
+                    0.21782437987728653, 
+                    0.18127200994478299, 
+                    0.18127200994478299, 
+                    0.14414845784055028, 
+                    0.14414845784055028, 
+                    0.10316940656207857, 
+                    0.10316940656207857
+                ], 
+                0.5007057785987854
+            ], 
+            [
+                1.021093726158142, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999940935824035, 
+                    0.9999940935824035, 
+                    0.9999557054428082, 
+                    0.9999557054428082, 
+                    0.9999555188705386, 
+                    0.9999555188705386, 
+                    0.9999551564587962, 
+                    0.9999551564587962, 
+                    0.9597324514807212, 
+                    0.9597324514807212, 
+                    0.9114181694040622, 
+                    0.9114181694040622, 
+                    0.866020795702464, 
+                    0.866020795702464, 
+                    0.8220380390647499, 
+                    0.8220380390647499, 
+                    0.7787189551691142, 
+                    0.7787189551691142, 
+                    0.7352803297887854, 
+                    0.7352803297887854, 
+                    0.6932790646144383, 
+                    0.6932790646144383, 
+                    0.6522383435783846, 
+                    0.6522383435783846, 
+                    0.6120260188153035, 
+                    0.6120260188153035, 
+                    0.5742170764524512, 
+                    0.5742170764524512, 
+                    0.5373142562841398, 
+                    0.5373142562841398, 
+                    0.5013948806564132, 
+                    0.5013948806564132, 
+                    0.4665510731617896, 
+                    0.4665510731617896, 
+                    0.43179149367916736, 
+                    0.43179149367916736, 
+                    0.3969133966619841, 
+                    0.3969133966619841, 
+                    0.36174563953087463, 
+                    0.36174563953087463, 
+                    0.32622320852861547, 
+                    0.32622320852861547, 
+                    0.2904465909237516, 
+                    0.2904465909237516, 
+                    0.25444924365700966, 
+                    0.25444924365700966, 
+                    0.2182125656223065, 
+                    0.2182125656223065, 
+                    0.18164656693256356, 
+                    0.18164656693256356, 
+                    0.14448009416232102, 
+                    0.14448009416232102, 
+                    0.10350123881106875, 
+                    0.10350123881106875
+                ], 
+                0.5007836222648621
+            ], 
+            [
+                1.0318068265914917, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999905161282028, 
+                    0.999905161282028, 
+                    0.9999049845361506, 
+                    0.9999049845361506, 
+                    0.9999039114240454, 
+                    0.9999039114240454, 
+                    0.999900495189615, 
+                    0.999900495189615, 
+                    0.9905573086968398, 
+                    0.9905573086968398, 
+                    0.9339738277866223, 
+                    0.9339738277866223, 
+                    0.8821135669581815, 
+                    0.8821135669581815, 
+                    0.833146698177368, 
+                    0.833146698177368, 
+                    0.785539801584082, 
+                    0.785539801584082, 
+                    0.737475638456665, 
+                    0.737475638456665, 
+                    0.6922469048196653, 
+                    0.6922469048196653, 
+                    0.6486282865055205, 
+                    0.6486282865055205, 
+                    0.6062231902713185, 
+                    0.6062231902713185, 
+                    0.5683999024967356, 
+                    0.5683999024967356, 
+                    0.5318643387243933, 
+                    0.5318643387243933, 
+                    0.4968811934662468, 
+                    0.4968811934662468, 
+                    0.4636818877700499, 
+                    0.4636818877700499, 
+                    0.43034993266318794, 
+                    0.43034993266318794, 
+                    0.3966383482700902, 
+                    0.3966383482700902, 
+                    0.3623128904272606, 
+                    0.3623128904272606, 
+                    0.3273188581928818, 
+                    0.3273188581928818, 
+                    0.291878488861193, 
+                    0.291878488861193, 
+                    0.2560812209477752, 
+                    0.2560812209477752, 
+                    0.21993551219861673, 
+                    0.21993551219861673, 
+                    0.1833549936901056, 
+                    0.1833549936901056, 
+                    0.14602502010711954, 
+                    0.14602502010711954, 
+                    0.10329168841594849, 
+                    0.10329168841594849
+                ], 
+                0.5009549260139465
+            ], 
+            [
+                1.0426323413848877, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999394277221598, 
+                    0.9999394277221598, 
+                    0.9999394277221598, 
+                    0.9999394277221598, 
+                    0.9999394277221598, 
+                    0.9999394277221598, 
+                    0.9999394277221598, 
+                    0.9999394277221598, 
+                    0.9914341833169933, 
+                    0.9914341833169933, 
+                    0.9346635744450631, 
+                    0.9346635744450631, 
+                    0.8826207480926397, 
+                    0.8826207480926397, 
+                    0.8334511281502847, 
+                    0.8334511281502847, 
+                    0.7855948913715123, 
+                    0.7855948913715123, 
+                    0.7371942813939466, 
+                    0.7371942813939466, 
+                    0.6917243295856832, 
+                    0.6917243295856832, 
+                    0.6479890866926781, 
+                    0.6479890866926781, 
+                    0.6055887887895347, 
+                    0.6055887887895347, 
+                    0.5679063144257221, 
+                    0.5679063144257221, 
+                    0.531538624281337, 
+                    0.531538624281337, 
+                    0.49671601292689055, 
+                    0.49671601292689055, 
+                    0.4636012629618172, 
+                    0.4636012629618172, 
+                    0.43031380153887216, 
+                    0.43031380153887216, 
+                    0.3966196944630392, 
+                    0.3966196944630392, 
+                    0.36230106355300773, 
+                    0.36230106355300773, 
+                    0.3273141824586514, 
+                    0.3273141824586514, 
+                    0.29187775713798586, 
+                    0.29187775713798586, 
+                    0.25608207831376417, 
+                    0.25608207831376417, 
+                    0.21993724862791095, 
+                    0.21993724862791095, 
+                    0.18335716104034408, 
+                    0.18335716104034408, 
+                    0.1460275653146662, 
+                    0.1460275653146662, 
+                    0.10339931199625287, 
+                    0.10339931199625287
+                ], 
+                0.5001430511474609
+            ], 
+            [
+                1.0535714626312256, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999906979022898, 
+                    0.9999906979022898, 
+                    0.9999906979022898, 
+                    0.9999906979022898, 
+                    0.9999906979022898, 
+                    0.9999906979022898, 
+                    0.9999906979022898, 
+                    0.9999906979022898, 
+                    0.9924265406739231, 
+                    0.9924265406739231, 
+                    0.9354954982849535, 
+                    0.9354954982849535, 
+                    0.8832868244114611, 
+                    0.8832868244114611, 
+                    0.8339209779676245, 
+                    0.8339209779676245, 
+                    0.7858149860013031, 
+                    0.7858149860013031, 
+                    0.7370794978718145, 
+                    0.7370794978718145, 
+                    0.6913567039532729, 
+                    0.6913567039532729, 
+                    0.6475204565021326, 
+                    0.6475204565021326, 
+                    0.6051712257250971, 
+                    0.6051712257250971, 
+                    0.5676244099546159, 
+                    0.5676244099546159, 
+                    0.5314197560261158, 
+                    0.5314197560261158, 
+                    0.4967367869705112, 
+                    0.4967367869705112, 
+                    0.46365439249456375, 
+                    0.46365439249456375, 
+                    0.43037189127932973, 
+                    0.43037189127932973, 
+                    0.39666608047746127, 
+                    0.39666608047746127, 
+                    0.3623357123199613, 
+                    0.3623357123199613, 
+                    0.32734583633720166, 
+                    0.32734583633720166, 
+                    0.29190673904746023, 
+                    0.29190673904746023, 
+                    0.2561079439002669, 
+                    0.2561079439002669, 
+                    0.21996028577252294, 
+                    0.21996028577252294, 
+                    0.18337720837001065, 
+                    0.18337720837001065, 
+                    0.1460443253833826, 
+                    0.1460443253833826, 
+                    0.10353323234799326, 
+                    0.10353323234799326
+                ], 
+                0.4999132454395294
+            ], 
+            [
+                1.0646252632141113, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999999326125791, 
+                    0.9999999326125791, 
+                    0.9998266525594596, 
+                    0.9998266525594596, 
+                    0.9998081778191673, 
+                    0.9998081778191673, 
+                    0.9997629664904472, 
+                    0.9997629664904472, 
+                    0.9921098720132225, 
+                    0.9921098720132225, 
+                    0.93486114087185, 
+                    0.93486114087185, 
+                    0.8834227480907112, 
+                    0.8834227480907112, 
+                    0.8344214041224249, 
+                    0.8344214041224249, 
+                    0.7859697724410464, 
+                    0.7859697724410464, 
+                    0.7365617472034972, 
+                    0.7365617472034972, 
+                    0.6904142175049672, 
+                    0.6904142175049672, 
+                    0.6461543364769801, 
+                    0.6461543364769801, 
+                    0.6036235738029898, 
+                    0.6036235738029898, 
+                    0.5658326938306033, 
+                    0.5658326938306033, 
+                    0.5297014857566815, 
+                    0.5297014857566815, 
+                    0.4953243720632661, 
+                    0.4953243720632661, 
+                    0.46281110383803853, 
+                    0.46281110383803853, 
+                    0.4301869081816703, 
+                    0.4301869081816703, 
+                    0.3970731065626031, 
+                    0.3970731065626031, 
+                    0.363194397757805, 
+                    0.363194397757805, 
+                    0.32850391192464473, 
+                    0.32850391192464473, 
+                    0.2932475260334906, 
+                    0.2932475260334906, 
+                    0.25753875446402236, 
+                    0.25753875446402236, 
+                    0.22140282999297997, 
+                    0.22140282999297997, 
+                    0.18475649550472148, 
+                    0.18475649550472148, 
+                    0.14726041816374252, 
+                    0.14726041816374252, 
+                    0.10477261720863648, 
+                    0.10477261720863648
+                ], 
+                0.49973148107528687
+            ], 
+            [
+                1.0757951736450195, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999003551623844, 
+                    0.9999003551623844, 
+                    0.9999003551623844, 
+                    0.9999003551623844, 
+                    0.9999003551623844, 
+                    0.9999003551623844, 
+                    0.9999003551623844, 
+                    0.9999003551623844, 
+                    0.9713339964882821, 
+                    0.9713339964882821, 
+                    0.9108215312020612, 
+                    0.9108215312020612, 
+                    0.854145457500395, 
+                    0.854145457500395, 
+                    0.7988481402056928, 
+                    0.7988481402056928, 
+                    0.7418706009574224, 
+                    0.7418706009574224, 
+                    0.6903854781086483, 
+                    0.6903854781086483, 
+                    0.6422025612300986, 
+                    0.6422025612300986, 
+                    0.5966964810831956, 
+                    0.5966964810831956, 
+                    0.5593405848094978, 
+                    0.5593405848094978, 
+                    0.5241232089025595, 
+                    0.5241232089025595, 
+                    0.4912917612877371, 
+                    0.4912917612877371, 
+                    0.4608892715101026, 
+                    0.4608892715101026, 
+                    0.4299445959959697, 
+                    0.4299445959959697, 
+                    0.39811977262936243, 
+                    0.39811977262936243, 
+                    0.3651327949551345, 
+                    0.3651327949551345, 
+                    0.33098184951830356, 
+                    0.33098184951830356, 
+                    0.2960423367091767, 
+                    0.2960423367091767, 
+                    0.2604910135230912, 
+                    0.2604910135230912, 
+                    0.22438133388481382, 
+                    0.22438133388481382, 
+                    0.1876215246693987, 
+                    0.1876215246693987, 
+                    0.14979539374187006, 
+                    0.14979539374187006, 
+                    0.1049925905614481, 
+                    0.1049925905614481
+                ], 
+                0.5001453161239624
+            ], 
+            [
+                1.0870821475982666, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983246885731641, 
+                    0.9983246885731641, 
+                    0.9981429172697127, 
+                    0.9981429172697127, 
+                    0.9981072538495149, 
+                    0.9981072538495149, 
+                    0.9980191725217966, 
+                    0.9980191725217966, 
+                    0.963212685295049, 
+                    0.963212685295049, 
+                    0.902461117678614, 
+                    0.902461117678614, 
+                    0.8461310018041487, 
+                    0.8461310018041487, 
+                    0.791438625200612, 
+                    0.791438625200612, 
+                    0.7362541695498209, 
+                    0.7362541695498209, 
+                    0.6873550613272469, 
+                    0.6873550613272469, 
+                    0.6411792907993814, 
+                    0.6411792907993814, 
+                    0.5982118966263503, 
+                    0.5982118966263503, 
+                    0.5592335732197525, 
+                    0.5592335732197525, 
+                    0.523169994120418, 
+                    0.523169994120418, 
+                    0.4897330298330375, 
+                    0.4897330298330375, 
+                    0.45935187189310783, 
+                    0.45935187189310783, 
+                    0.4293717655479032, 
+                    0.4293717655479032, 
+                    0.39867229330532244, 
+                    0.39867229330532244, 
+                    0.3666360852267208, 
+                    0.3666360852267208, 
+                    0.33315898983225306, 
+                    0.33315898983225306, 
+                    0.29865677740597235, 
+                    0.29865677740597235, 
+                    0.2633445590817236, 
+                    0.2633445590817236, 
+                    0.22730111509173148, 
+                    0.22730111509173148, 
+                    0.19044303026772447, 
+                    0.19044303026772447, 
+                    0.1523071055598771, 
+                    0.1523071055598771, 
+                    0.10777604119310848, 
+                    0.10777604119310848
+                ], 
+                0.5005009770393372
+            ], 
+            [
+                1.0984876155853271, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990866741400614, 
+                    0.9990866741400614, 
+                    0.9983075492682316, 
+                    0.9983075492682316, 
+                    0.997964813374751, 
+                    0.997964813374751, 
+                    0.983180853357648, 
+                    0.983180853357648, 
+                    0.9235260248245062, 
+                    0.9235260248245062, 
+                    0.876157885204028, 
+                    0.876157885204028, 
+                    0.8297627597678783, 
+                    0.8297627597678783, 
+                    0.7813830544400159, 
+                    0.7813830544400159, 
+                    0.7332692379279935, 
+                    0.7332692379279935, 
+                    0.6883572801883787, 
+                    0.6883572801883787, 
+                    0.644301704161386, 
+                    0.644301704161386, 
+                    0.6027013181534082, 
+                    0.6027013181534082, 
+                    0.5608777927146468, 
+                    0.5608777927146468, 
+                    0.5229905837929735, 
+                    0.5229905837929735, 
+                    0.48834883031749854, 
+                    0.48834883031749854, 
+                    0.4576233173587782, 
+                    0.4576233173587782, 
+                    0.4282709865217659, 
+                    0.4282709865217659, 
+                    0.3984562065425697, 
+                    0.3984562065425697, 
+                    0.36721326253425013, 
+                    0.36721326253425013, 
+                    0.33432856155797336, 
+                    0.33432856155797336, 
+                    0.3002359496021616, 
+                    0.3002359496021616, 
+                    0.26517151401522454, 
+                    0.26517151401522454, 
+                    0.22923151744420098, 
+                    0.22923151744420098, 
+                    0.19234605282674377, 
+                    0.19234605282674377, 
+                    0.1540352207376408, 
+                    0.1540352207376408, 
+                    0.11132423923936292, 
+                    0.11132423923936292
+                ], 
+                0.5002368688583374
+            ], 
+            [
+                1.1100127696990967, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997885037898973, 
+                    0.9997885037898973, 
+                    0.9997695267458243, 
+                    0.9997695267458243, 
+                    0.9997128865196308, 
+                    0.9997128865196308, 
+                    0.9595999938065544, 
+                    0.9595999938065544, 
+                    0.9117904565399575, 
+                    0.9117904565399575, 
+                    0.8743647340601046, 
+                    0.8743647340601046, 
+                    0.8291301065274104, 
+                    0.8291301065274104, 
+                    0.7830158488568614, 
+                    0.7830158488568614, 
+                    0.7255325395355604, 
+                    0.7255325395355604, 
+                    0.6753741723229498, 
+                    0.6753741723229498, 
+                    0.6306644633941836, 
+                    0.6306644633941836, 
+                    0.582660567371004, 
+                    0.582660567371004, 
+                    0.5555745401676058, 
+                    0.5555745401676058, 
+                    0.5216525707442656, 
+                    0.5216525707442656, 
+                    0.48914524690745836, 
+                    0.48914524690745836, 
+                    0.4586860846159673, 
+                    0.4586860846159673, 
+                    0.43119154678772603, 
+                    0.43119154678772603, 
+                    0.4050854628813001, 
+                    0.4050854628813001, 
+                    0.3774394707748913, 
+                    0.3774394707748913, 
+                    0.3471831907414585, 
+                    0.3471831907414585, 
+                    0.3148159000482347, 
+                    0.3148159000482347, 
+                    0.2806797471033325, 
+                    0.2806797471033325, 
+                    0.244934522671737, 
+                    0.244934522671737, 
+                    0.20752158228859474, 
+                    0.20752158228859474, 
+                    0.1678179549305842, 
+                    0.1678179549305842, 
+                    0.12351877119009601, 
+                    0.12351877119009601
+                ], 
+                0.5000461935997009
+            ]
+        ]
+    }, 
+    {
+        "block_size": 57, 
+        "preprocessing_block_sizes": [
+            38
+        ], 
+        "pruning_parameters": [
+            [
+                0.9024999737739563, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999975377112729, 
+                    0.9999975377112729, 
+                    0.9999800762355263, 
+                    0.9999800762355263, 
+                    0.9999800762355263, 
+                    0.9999800762355263, 
+                    0.9999800762355263, 
+                    0.9999800762355263, 
+                    0.9572640211251099, 
+                    0.9572640211251099, 
+                    0.9085734498981693, 
+                    0.9085734498981693, 
+                    0.8629653446220859, 
+                    0.8629653446220859, 
+                    0.8193519579222971, 
+                    0.8193519579222971, 
+                    0.7767781598317499, 
+                    0.7767781598317499, 
+                    0.7350319090984161, 
+                    0.7350319090984161, 
+                    0.6945287562651039, 
+                    0.6945287562651039, 
+                    0.6537473686896204, 
+                    0.6537473686896204, 
+                    0.6144389095032111, 
+                    0.6144389095032111, 
+                    0.5765889186357003, 
+                    0.5765889186357003, 
+                    0.5393913148461066, 
+                    0.5393913148461066, 
+                    0.5031378466817459, 
+                    0.5031378466817459, 
+                    0.4675504308029608, 
+                    0.4675504308029608, 
+                    0.4320076012992239, 
+                    0.4320076012992239, 
+                    0.39659700931669606, 
+                    0.39659700931669606, 
+                    0.3610715638238212, 
+                    0.3610715638238212, 
+                    0.325393762511657, 
+                    0.325393762511657, 
+                    0.28955971693967564, 
+                    0.28955971693967564, 
+                    0.25354430805726696, 
+                    0.25354430805726696, 
+                    0.21732884226694368, 
+                    0.21732884226694368, 
+                    0.18081808401787705, 
+                    0.18081808401787705, 
+                    0.1437595332045924, 
+                    0.1437595332045924, 
+                    0.1026773781258493, 
+                    0.1026773781258493
+                ], 
+                0.5003405809402466
+            ], 
+            [
+                0.9118061065673828, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999870155779885, 
+                    0.9999870155779885, 
+                    0.9999870155779885, 
+                    0.9999870155779885, 
+                    0.9999870155779885, 
+                    0.9999870155779885, 
+                    0.9999870155779885, 
+                    0.9999870155779885, 
+                    0.9574354508621731, 
+                    0.9574354508621731, 
+                    0.9083532490403732, 
+                    0.9083532490403732, 
+                    0.8625080390729577, 
+                    0.8625080390729577, 
+                    0.8188305675813915, 
+                    0.8188305675813915, 
+                    0.7763278112282482, 
+                    0.7763278112282482, 
+                    0.7347184870416829, 
+                    0.7347184870416829, 
+                    0.6943619146554038, 
+                    0.6943619146554038, 
+                    0.6538062897720999, 
+                    0.6538062897720999, 
+                    0.6146769654565065, 
+                    0.6146769654565065, 
+                    0.5769332951812203, 
+                    0.5769332951812203, 
+                    0.5398060659860379, 
+                    0.5398060659860379, 
+                    0.5035437608382715, 
+                    0.5035437608382715, 
+                    0.4678746580369873, 
+                    0.4678746580369873, 
+                    0.4322434588475631, 
+                    0.4322434588475631, 
+                    0.396726766841821, 
+                    0.396726766841821, 
+                    0.3611087137201568, 
+                    0.3611087137201568, 
+                    0.3253581241829787, 
+                    0.3253581241829787, 
+                    0.2894709320079075, 
+                    0.2894709320079075, 
+                    0.2534229611476832, 
+                    0.2534229611476832, 
+                    0.21719085582576447, 
+                    0.21719085582576447, 
+                    0.1806771027267605, 
+                    0.1806771027267605, 
+                    0.14363055185978588, 
+                    0.14363055185978588, 
+                    0.10258539611829386, 
+                    0.10258539611829386
+                ], 
+                0.5002586841583252
+            ], 
+            [
+                0.9212081432342529, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999909811626465, 
+                    0.9999909811626465, 
+                    0.9999909811626465, 
+                    0.9999909811626465, 
+                    0.9999909811626465, 
+                    0.9999909811626465, 
+                    0.9999909811626465, 
+                    0.9999909811626465, 
+                    0.9577428744898997, 
+                    0.9577428744898997, 
+                    0.9086047385842597, 
+                    0.9086047385842597, 
+                    0.8627153560676404, 
+                    0.8627153560676404, 
+                    0.818997270144585, 
+                    0.818997270144585, 
+                    0.7764554002426478, 
+                    0.7764554002426478, 
+                    0.7348098481986114, 
+                    0.7348098481986114, 
+                    0.6944344388284733, 
+                    0.6944344388284733, 
+                    0.6538750565950948, 
+                    0.6538750565950948, 
+                    0.6147685037903193, 
+                    0.6147685037903193, 
+                    0.5770581756393539, 
+                    0.5770581756393539, 
+                    0.5399663299277749, 
+                    0.5399663299277749, 
+                    0.5037252656221562, 
+                    0.5037252656221562, 
+                    0.4680544562058476, 
+                    0.4680544562058476, 
+                    0.43241395979420244, 
+                    0.43241395979420244, 
+                    0.3968759597398629, 
+                    0.3968759597398629, 
+                    0.3612347844744892, 
+                    0.3612347844744892, 
+                    0.3254626795427043, 
+                    0.3254626795427043, 
+                    0.28955668711922505, 
+                    0.28955668711922505, 
+                    0.2534940966155494, 
+                    0.2534940966155494, 
+                    0.2172501955902089, 
+                    0.2172501955902089, 
+                    0.1807261887455469, 
+                    0.1807261887455469, 
+                    0.1436691489526554, 
+                    0.1436691489526554, 
+                    0.10264130118233712, 
+                    0.10264130118233712
+                ], 
+                0.5008875131607056
+            ], 
+            [
+                0.9307071566581726, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999922146499212, 
+                    0.9999922146499212, 
+                    0.9999922146499212, 
+                    0.9999922146499212, 
+                    0.9999922146499212, 
+                    0.9999922146499212, 
+                    0.9581304920472267, 
+                    0.9581304920472267, 
+                    0.9091080242601925, 
+                    0.9091080242601925, 
+                    0.8632603032440729, 
+                    0.8632603032440729, 
+                    0.8194854655802867, 
+                    0.8194854655802867, 
+                    0.7767980243565608, 
+                    0.7767980243565608, 
+                    0.7349713368881393, 
+                    0.7349713368881393, 
+                    0.6944556249603935, 
+                    0.6944556249603935, 
+                    0.6537170924564676, 
+                    0.6537170924564676, 
+                    0.61453306225904, 
+                    0.61453306225904, 
+                    0.5768294095067543, 
+                    0.5768294095067543, 
+                    0.5397749342201071, 
+                    0.5397749342201071, 
+                    0.5036041608905297, 
+                    0.5036041608905297, 
+                    0.46801109494219595, 
+                    0.46801109494219595, 
+                    0.43243444850963025, 
+                    0.43243444850963025, 
+                    0.3969471996186343, 
+                    0.3969471996186343, 
+                    0.3613405876735235, 
+                    0.3613405876735235, 
+                    0.32558968946803984, 
+                    0.32558968946803984, 
+                    0.2896945554844716, 
+                    0.2896945554844716, 
+                    0.2536352889903019, 
+                    0.2536352889903019, 
+                    0.21738867057339908, 
+                    0.21738867057339908, 
+                    0.18085597608009202, 
+                    0.18085597608009202, 
+                    0.14378165702236909, 
+                    0.14378165702236909, 
+                    0.10276640165416816, 
+                    0.10276640165416816
+                ], 
+                0.5013265013694763
+            ], 
+            [
+                0.9403041005134583, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9584640725706943, 
+                    0.9584640725706943, 
+                    0.9091751458488031, 
+                    0.9091751458488031, 
+                    0.8631389640828192, 
+                    0.8631389640828192, 
+                    0.8192576750678427, 
+                    0.8192576750678427, 
+                    0.7765109101895038, 
+                    0.7765109101895038, 
+                    0.7346427745069225, 
+                    0.7346427745069225, 
+                    0.6941238066102693, 
+                    0.6941238066102693, 
+                    0.6533912287556333, 
+                    0.6533912287556333, 
+                    0.6142560203156867, 
+                    0.6142560203156867, 
+                    0.5766202382517208, 
+                    0.5766202382517208, 
+                    0.5396303969197221, 
+                    0.5396303969197221, 
+                    0.5035049469626258, 
+                    0.5035049469626258, 
+                    0.46792755413562487, 
+                    0.46792755413562487, 
+                    0.43235508029336694, 
+                    0.43235508029336694, 
+                    0.3968580101115421, 
+                    0.3968580101115421, 
+                    0.36123913188116197, 
+                    0.36123913188116197, 
+                    0.32547766736828554, 
+                    0.32547766736828554, 
+                    0.2895752425733196, 
+                    0.2895752425733196, 
+                    0.2535138699021549, 
+                    0.2535138699021549, 
+                    0.21726988070006595, 
+                    0.21726988070006595, 
+                    0.18074498543541495, 
+                    0.18074498543541495, 
+                    0.1436859414172404, 
+                    0.1436859414172404, 
+                    0.10271948663536243, 
+                    0.10271948663536243
+                ], 
+                0.5004618167877197
+            ], 
+            [
+                0.949999988079071, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999950919516578, 
+                    0.9999950919516578, 
+                    0.9999950919516578, 
+                    0.9999950919516578, 
+                    0.9999950919516578, 
+                    0.9999950919516578, 
+                    0.9589836798033948, 
+                    0.9589836798033948, 
+                    0.9100768535992955, 
+                    0.9100768535992955, 
+                    0.8642140060392135, 
+                    0.8642140060392135, 
+                    0.8202439071847283, 
+                    0.8202439071847283, 
+                    0.7771776277166315, 
+                    0.7771776277166315, 
+                    0.7349061067500954, 
+                    0.7349061067500954, 
+                    0.6940676015542648, 
+                    0.6940676015542648, 
+                    0.6529090747339622, 
+                    0.6529090747339622, 
+                    0.6135671414060948, 
+                    0.6135671414060948, 
+                    0.5759144270589791, 
+                    0.5759144270589791, 
+                    0.5389806589443439, 
+                    0.5389806589443439, 
+                    0.5030078914422641, 
+                    0.5030078914422641, 
+                    0.46762818468846457, 
+                    0.46762818468846457, 
+                    0.43222685271358935, 
+                    0.43222685271358935, 
+                    0.396881532747002, 
+                    0.396881532747002, 
+                    0.3613755978954192, 
+                    0.3613755978954192, 
+                    0.32569159581121415, 
+                    0.32569159581121415, 
+                    0.28983755416843393, 
+                    0.28983755416843393, 
+                    0.25380079874341616, 
+                    0.25380079874341616, 
+                    0.21756287287785342, 
+                    0.21756287287785342, 
+                    0.18102695318369794, 
+                    0.18102695318369794, 
+                    0.1439349394317054, 
+                    0.1439349394317054, 
+                    0.10297212655290253, 
+                    0.10297212655290253
+                ], 
+                0.5008139610290527
+            ], 
+            [
+                0.9597958922386169, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999883167338732, 
+                    0.9999883167338732, 
+                    0.9999883167338732, 
+                    0.9999883167338732, 
+                    0.9999883167338732, 
+                    0.9999883167338732, 
+                    0.9595011322449011, 
+                    0.9595011322449011, 
+                    0.9108949834224178, 
+                    0.9108949834224178, 
+                    0.8651327115568321, 
+                    0.8651327115568321, 
+                    0.8210160148863619, 
+                    0.8210160148863619, 
+                    0.7775736129566109, 
+                    0.7775736129566109, 
+                    0.7348568456071433, 
+                    0.7348568456071433, 
+                    0.6936802710474536, 
+                    0.6936802710474536, 
+                    0.6520747434855378, 
+                    0.6520747434855378, 
+                    0.6125335138133483, 
+                    0.6125335138133483, 
+                    0.5748901290568442, 
+                    0.5748901290568442, 
+                    0.538045418793772, 
+                    0.538045418793772, 
+                    0.502264809196927, 
+                    0.502264809196927, 
+                    0.46712274762340317, 
+                    0.46712274762340317, 
+                    0.4319257534637041, 
+                    0.4319257534637041, 
+                    0.3967597416083602, 
+                    0.3967597416083602, 
+                    0.36138797506507087, 
+                    0.36138797506507087, 
+                    0.3257978166560078, 
+                    0.3257978166560078, 
+                    0.29000518081139576, 
+                    0.29000518081139576, 
+                    0.25400399146963776, 
+                    0.25400399146963776, 
+                    0.2177821360259982, 
+                    0.2177821360259982, 
+                    0.18124536722900284, 
+                    0.18124536722900284, 
+                    0.14413248994413486, 
+                    0.14413248994413486, 
+                    0.10318883997510529, 
+                    0.10318883997510529
+                ], 
+                0.5001058578491211
+            ], 
+            [
+                0.9696927666664124, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999749745443086, 
+                    0.9999749745443086, 
+                    0.9999749745443086, 
+                    0.9999749745443086, 
+                    0.9999749745443086, 
+                    0.9999749745443086, 
+                    0.9600690718123749, 
+                    0.9600690718123749, 
+                    0.9119542906854399, 
+                    0.9119542906854399, 
+                    0.8663983467590687, 
+                    0.8663983467590687, 
+                    0.8221333226463662, 
+                    0.8221333226463662, 
+                    0.7782364816613675, 
+                    0.7782364816613675, 
+                    0.7349871307832638, 
+                    0.7349871307832638, 
+                    0.6933853828036222, 
+                    0.6933853828036222, 
+                    0.6512571056682334, 
+                    0.6512571056682334, 
+                    0.6114660885275017, 
+                    0.6114660885275017, 
+                    0.5738075860108454, 
+                    0.5738075860108454, 
+                    0.5370557910392281, 
+                    0.5370557910392281, 
+                    0.5014951624563608, 
+                    0.5014951624563608, 
+                    0.4666351284567974, 
+                    0.4666351284567974, 
+                    0.4316856172847491, 
+                    0.4316856172847491, 
+                    0.39673765559804536, 
+                    0.39673765559804536, 
+                    0.36152922793882264, 
+                    0.36152922793882264, 
+                    0.3260523906128787, 
+                    0.3260523906128787, 
+                    0.29033225944682656, 
+                    0.29033225944682656, 
+                    0.2543704462528668, 
+                    0.2543704462528668, 
+                    0.21816204638664657, 
+                    0.21816204638664657, 
+                    0.1816149293836098, 
+                    0.1816149293836098, 
+                    0.14446150790152934, 
+                    0.14446150790152934, 
+                    0.10352219946231728, 
+                    0.10352219946231728
+                ], 
+                0.49995166063308716
+            ], 
+            [
+                0.979691743850708, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999725385394268, 
+                    0.9999725385394268, 
+                    0.9999718377557418, 
+                    0.9999718377557418, 
+                    0.9999708525414411, 
+                    0.9999708525414411, 
+                    0.9911171886938936, 
+                    0.9911171886938936, 
+                    0.934989575564643, 
+                    0.934989575564643, 
+                    0.88291110446465, 
+                    0.88291110446465, 
+                    0.8334947800539714, 
+                    0.8334947800539714, 
+                    0.7847348495067256, 
+                    0.7847348495067256, 
+                    0.7371710284596897, 
+                    0.7371710284596897, 
+                    0.6928496673959674, 
+                    0.6928496673959674, 
+                    0.6469171336624548, 
+                    0.6469171336624548, 
+                    0.6054574332216951, 
+                    0.6054574332216951, 
+                    0.5678699687224009, 
+                    0.5678699687224009, 
+                    0.5315714181072387, 
+                    0.5315714181072387, 
+                    0.4972638891171951, 
+                    0.4972638891171951, 
+                    0.46399702382066105, 
+                    0.46399702382066105, 
+                    0.4303094548230119, 
+                    0.4303094548230119, 
+                    0.3964914689689175, 
+                    0.3964914689689175, 
+                    0.3621081339376645, 
+                    0.3621081339376645, 
+                    0.3272028445949675, 
+                    0.3272028445949675, 
+                    0.29185981674110195, 
+                    0.29185981674110195, 
+                    0.2561173932108464, 
+                    0.2561173932108464, 
+                    0.2200096314813838, 
+                    0.2200096314813838, 
+                    0.18344616824705104, 
+                    0.18344616824705104, 
+                    0.14611554600789747, 
+                    0.14611554600789747, 
+                    0.10344088880801129, 
+                    0.10344088880801129
+                ], 
+                0.5002008676528931
+            ], 
+            [
+                0.9897937774658203, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999757833801217, 
+                    0.9999757833801217, 
+                    0.9999757833801217, 
+                    0.9999757833801217, 
+                    0.9999757833801217, 
+                    0.9999757833801217, 
+                    0.9999757833801217, 
+                    0.9999757833801217, 
+                    0.9920506445854146, 
+                    0.9920506445854146, 
+                    0.9357443854382381, 
+                    0.9357443854382381, 
+                    0.8834592854478537, 
+                    0.8834592854478537, 
+                    0.8338155406174531, 
+                    0.8338155406174531, 
+                    0.784846923596361, 
+                    0.784846923596361, 
+                    0.7370298675928757, 
+                    0.7370298675928757, 
+                    0.692586961953814, 
+                    0.692586961953814, 
+                    0.6465840970766918, 
+                    0.6465840970766918, 
+                    0.605232775004841, 
+                    0.605232775004841, 
+                    0.5678170420064274, 
+                    0.5678170420064274, 
+                    0.5316796290665263, 
+                    0.5316796290665263, 
+                    0.49745252723705313, 
+                    0.49745252723705313, 
+                    0.4641634151402404, 
+                    0.4641634151402404, 
+                    0.43043959189020214, 
+                    0.43043959189020214, 
+                    0.39655358393549117, 
+                    0.39655358393549117, 
+                    0.36210921704083565, 
+                    0.36210921704083565, 
+                    0.32715575050879775, 
+                    0.32715575050879775, 
+                    0.29177730718287215, 
+                    0.29177730718287215, 
+                    0.25601385739870025, 
+                    0.25601385739870025, 
+                    0.21989577582872946, 
+                    0.21989577582872946, 
+                    0.18333172568156558, 
+                    0.18333172568156558, 
+                    0.14601202914932393, 
+                    0.14601202914932393, 
+                    0.10345365399892915, 
+                    0.10345365399892915
+                ], 
+                0.5000434517860413
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999700154606567, 
+                    0.9999700154606567, 
+                    0.9999700154606567, 
+                    0.9999700154606567, 
+                    0.9999700154606567, 
+                    0.9999700154606567, 
+                    0.9926811666671197, 
+                    0.9926811666671197, 
+                    0.9362988355187317, 
+                    0.9362988355187317, 
+                    0.8841653292135924, 
+                    0.8841653292135924, 
+                    0.8345005848306913, 
+                    0.8345005848306913, 
+                    0.7852096954651956, 
+                    0.7852096954651956, 
+                    0.7370296773531074, 
+                    0.7370296773531074, 
+                    0.6922622122894431, 
+                    0.6922622122894431, 
+                    0.6460733780518017, 
+                    0.6460733780518017, 
+                    0.6046736946574004, 
+                    0.6046736946574004, 
+                    0.5672549130196929, 
+                    0.5672549130196929, 
+                    0.5312449206342573, 
+                    0.5312449206342573, 
+                    0.49718104804404883, 
+                    0.49718104804404883, 
+                    0.46408126371161135, 
+                    0.46408126371161135, 
+                    0.43055791221883527, 
+                    0.43055791221883527, 
+                    0.3968362862152881, 
+                    0.3968362862152881, 
+                    0.3625174040542663, 
+                    0.3625174040542663, 
+                    0.32764897323514136, 
+                    0.32764897323514136, 
+                    0.292320052776073, 
+                    0.292320052776073, 
+                    0.2565772657677077, 
+                    0.2565772657677077, 
+                    0.22045420306009747, 
+                    0.22045420306009747, 
+                    0.18385938395054577, 
+                    0.18385938395054577, 
+                    0.14647298286290297, 
+                    0.14647298286290297, 
+                    0.10399627909053283, 
+                    0.10399627909053283
+                ], 
+                0.5006515383720398
+            ], 
+            [
+                1.010311484336853, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998380915788527, 
+                    0.9998380915788527, 
+                    0.9998250308120508, 
+                    0.9998250308120508, 
+                    0.999798426455584, 
+                    0.999798426455584, 
+                    0.9924873039476454, 
+                    0.9924873039476454, 
+                    0.9360313746591385, 
+                    0.9360313746591385, 
+                    0.8843661614946291, 
+                    0.8843661614946291, 
+                    0.8348829476273864, 
+                    0.8348829476273864, 
+                    0.7850922834831431, 
+                    0.7850922834831431, 
+                    0.7365662792394716, 
+                    0.7365662792394716, 
+                    0.691287852568243, 
+                    0.691287852568243, 
+                    0.6449079312014346, 
+                    0.6449079312014346, 
+                    0.6032304080190817, 
+                    0.6032304080190817, 
+                    0.5654869765453313, 
+                    0.5654869765453313, 
+                    0.5295148663779313, 
+                    0.5295148663779313, 
+                    0.4957559684811308, 
+                    0.4957559684811308, 
+                    0.4632496783097693, 
+                    0.4632496783097693, 
+                    0.43037308224840726, 
+                    0.43037308224840726, 
+                    0.397257988899849, 
+                    0.397257988899849, 
+                    0.36341818171708967, 
+                    0.36341818171708967, 
+                    0.3288894806107923, 
+                    0.3288894806107923, 
+                    0.29377747070928034, 
+                    0.29377747070928034, 
+                    0.25814600913600577, 
+                    0.25814600913600577, 
+                    0.22204566320998143, 
+                    0.22204566320998143, 
+                    0.18538774393773885, 
+                    0.18538774393773885, 
+                    0.14782548459058387, 
+                    0.14782548459058387, 
+                    0.10536128794600927, 
+                    0.10536128794600927
+                ], 
+                0.5007498860359192
+            ], 
+            [
+                1.0207293033599854, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994779688277714, 
+                    0.9994779688277714, 
+                    0.9994779688277714, 
+                    0.9994779688277714, 
+                    0.9994779688277714, 
+                    0.9994779688277714, 
+                    0.9994779688277714, 
+                    0.9994779688277714, 
+                    0.9708492781967829, 
+                    0.9708492781967829, 
+                    0.9091553947176243, 
+                    0.9091553947176243, 
+                    0.8515614078403512, 
+                    0.8515614078403512, 
+                    0.794346267622753, 
+                    0.794346267622753, 
+                    0.7397161371728203, 
+                    0.7397161371728203, 
+                    0.6907817388419015, 
+                    0.6907817388419015, 
+                    0.6400843216763845, 
+                    0.6400843216763845, 
+                    0.5968951468031082, 
+                    0.5968951468031082, 
+                    0.5593011307455671, 
+                    0.5593011307455671, 
+                    0.5240810662609873, 
+                    0.5240810662609873, 
+                    0.49185035290306506, 
+                    0.49185035290306506, 
+                    0.46126489124348047, 
+                    0.46126489124348047, 
+                    0.4300097679077591, 
+                    0.4300097679077591, 
+                    0.3983032344526457, 
+                    0.3983032344526457, 
+                    0.36548544277735073, 
+                    0.36548544277735073, 
+                    0.33164705773547426, 
+                    0.33164705773547426, 
+                    0.2969662275787942, 
+                    0.2969662275787942, 
+                    0.26155685565731984, 
+                    0.26155685565731984, 
+                    0.22551086308793586, 
+                    0.22551086308793586, 
+                    0.18873177251711198, 
+                    0.18873177251711198, 
+                    0.1507909044897601, 
+                    0.1507909044897601, 
+                    0.10613287190766035, 
+                    0.10613287190766035
+                ], 
+                0.500717282295227
+            ], 
+            [
+                1.0312544107437134, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.998874941403234, 
+                    0.998874941403234, 
+                    0.9980446857861341, 
+                    0.9980446857861341, 
+                    0.9978487257865882, 
+                    0.9978487257865882, 
+                    0.9973059626454567, 
+                    0.9973059626454567, 
+                    0.9631499431536532, 
+                    0.9631499431536532, 
+                    0.8991029012328076, 
+                    0.8991029012328076, 
+                    0.8414390202616902, 
+                    0.8414390202616902, 
+                    0.7850696395037216, 
+                    0.7850696395037216, 
+                    0.7338263302265365, 
+                    0.7338263302265365, 
+                    0.6866803102308205, 
+                    0.6866803102308205, 
+                    0.6408246306222457, 
+                    0.6408246306222457, 
+                    0.5989261935141792, 
+                    0.5989261935141792, 
+                    0.5592014569859874, 
+                    0.5592014569859874, 
+                    0.5226997788057628, 
+                    0.5226997788057628, 
+                    0.4893636331088864, 
+                    0.4893636331088864, 
+                    0.4590206958740824, 
+                    0.4590206958740824, 
+                    0.42892240653456537, 
+                    0.42892240653456537, 
+                    0.3985728850423637, 
+                    0.3985728850423637, 
+                    0.36695999983126176, 
+                    0.36695999983126176, 
+                    0.334032328301895, 
+                    0.334032328301895, 
+                    0.29997194151447343, 
+                    0.29997194151447343, 
+                    0.2649184498374824, 
+                    0.2649184498374824, 
+                    0.22900334909499448, 
+                    0.22900334909499448, 
+                    0.19214236655170425, 
+                    0.19214236655170425, 
+                    0.15385479729677337, 
+                    0.15385479729677337, 
+                    0.10945209228369969, 
+                    0.10945209228369969
+                ], 
+                0.5005356073379517
+            ], 
+            [
+                1.0418882369995117, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993746130516442, 
+                    0.9993746130516442, 
+                    0.9988968473216776, 
+                    0.9988968473216776, 
+                    0.9987493971816227, 
+                    0.9987493971816227, 
+                    0.986381476698563, 
+                    0.986381476698563, 
+                    0.9289692414463009, 
+                    0.9289692414463009, 
+                    0.8783570971399718, 
+                    0.8783570971399718, 
+                    0.8299680209222083, 
+                    0.8299680209222083, 
+                    0.7802454699885618, 
+                    0.7802454699885618, 
+                    0.7335151735973818, 
+                    0.7335151735973818, 
+                    0.6879288228878778, 
+                    0.6879288228878778, 
+                    0.6444751891812719, 
+                    0.6444751891812719, 
+                    0.6019197062299606, 
+                    0.6019197062299606, 
+                    0.5605743555375892, 
+                    0.5605743555375892, 
+                    0.5229602266688426, 
+                    0.5229602266688426, 
+                    0.48891717133939117, 
+                    0.48891717133939117, 
+                    0.4582494690382817, 
+                    0.4582494690382817, 
+                    0.4282027977844259, 
+                    0.4282027977844259, 
+                    0.3980605398764921, 
+                    0.3980605398764921, 
+                    0.3667129546812674, 
+                    0.3667129546812674, 
+                    0.33402820695927865, 
+                    0.33402820695927865, 
+                    0.3001604054633305, 
+                    0.3001604054633305, 
+                    0.2652426283883787, 
+                    0.2652426283883787, 
+                    0.22940803997465284, 
+                    0.22940803997465284, 
+                    0.19258106712825854, 
+                    0.19258106712825854, 
+                    0.15429083801121316, 
+                    0.15429083801121316, 
+                    0.11163167783721885, 
+                    0.11163167783721885
+                ], 
+                0.5004609823226929
+            ], 
+            [
+                1.0526316165924072, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999999004830509, 
+                    0.9999999004830509, 
+                    0.9994607789603805, 
+                    0.9994607789603805, 
+                    0.9989753670333215, 
+                    0.9989753670333215, 
+                    0.9986883227882661, 
+                    0.9986883227882661, 
+                    0.9704518517630409, 
+                    0.9704518517630409, 
+                    0.9221813981383233, 
+                    0.9221813981383233, 
+                    0.8757012613056568, 
+                    0.8757012613056568, 
+                    0.8271931186568431, 
+                    0.8271931186568431, 
+                    0.7751878206971241, 
+                    0.7751878206971241, 
+                    0.7284120442491309, 
+                    0.7284120442491309, 
+                    0.6794756924772286, 
+                    0.6794756924772286, 
+                    0.6364662073645847, 
+                    0.6364662073645847, 
+                    0.5924483165116554, 
+                    0.5924483165116554, 
+                    0.5534741366211685, 
+                    0.5534741366211685, 
+                    0.5180543863500879, 
+                    0.5180543863500879, 
+                    0.48546522873324144, 
+                    0.48546522873324144, 
+                    0.4559217498587257, 
+                    0.4559217498587257, 
+                    0.4278721895044702, 
+                    0.4278721895044702, 
+                    0.4010329901727659, 
+                    0.4010329901727659, 
+                    0.3731687577653331, 
+                    0.3731687577653331, 
+                    0.3433234582243263, 
+                    0.3433234582243263, 
+                    0.31146637364901514, 
+                    0.31146637364901514, 
+                    0.27772800193138014, 
+                    0.27772800193138014, 
+                    0.2423554426960467, 
+                    0.2423554426960467, 
+                    0.20530990636042035, 
+                    0.20530990636042035, 
+                    0.1660346326270811, 
+                    0.1660346326270811, 
+                    0.12211467568235515, 
+                    0.12211467568235515
+                ], 
+                0.4990636706352234
+            ], 
+            [
+                1.0634857416152954, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997419420327446, 
+                    0.9997419420327446, 
+                    0.996118618059867, 
+                    0.996118618059867, 
+                    0.9853487480938892, 
+                    0.9853487480938892, 
+                    0.9575187090038322, 
+                    0.9575187090038322, 
+                    0.9191790254319165, 
+                    0.9191790254319165, 
+                    0.8723858189734773, 
+                    0.8723858189734773, 
+                    0.8232832165056218, 
+                    0.8232832165056218, 
+                    0.7728309278491629, 
+                    0.7728309278491629, 
+                    0.722489954524948, 
+                    0.722489954524948, 
+                    0.6785832334127756, 
+                    0.6785832334127756, 
+                    0.6302820749915877, 
+                    0.6302820749915877, 
+                    0.5897344182761709, 
+                    0.5897344182761709, 
+                    0.5510143461982663, 
+                    0.5510143461982663, 
+                    0.5152959314201071, 
+                    0.5152959314201071, 
+                    0.4824765756614349, 
+                    0.4824765756614349, 
+                    0.45284494629718525, 
+                    0.45284494629718525, 
+                    0.42514371784302596, 
+                    0.42514371784302596, 
+                    0.4000510864891823, 
+                    0.4000510864891823, 
+                    0.3763811439459547, 
+                    0.3763811439459547, 
+                    0.35168917950524564, 
+                    0.35168917950524564, 
+                    0.3242431139415029, 
+                    0.3242431139415029, 
+                    0.2934897757061405, 
+                    0.2934897757061405, 
+                    0.2598360812740495, 
+                    0.2598360812740495, 
+                    0.2234006999502574, 
+                    0.2234006999502574, 
+                    0.1836633808755751, 
+                    0.1836633808755751, 
+                    0.13821444998389887, 
+                    0.13821444998389887
+                ], 
+                0.5004664659500122
+            ], 
+            [
+                1.0744518041610718, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997120483741974, 
+                    0.9997120483741974, 
+                    0.9957412978125882, 
+                    0.9957412978125882, 
+                    0.9826454479545171, 
+                    0.9826454479545171, 
+                    0.9555425250095406, 
+                    0.9555425250095406, 
+                    0.9163546092942466, 
+                    0.9163546092942466, 
+                    0.8687490840376357, 
+                    0.8687490840376357, 
+                    0.8193145712965644, 
+                    0.8193145712965644, 
+                    0.7677052564350771, 
+                    0.7677052564350771, 
+                    0.7189234475287789, 
+                    0.7189234475287789, 
+                    0.6726821722803324, 
+                    0.6726821722803324, 
+                    0.6265400991142362, 
+                    0.6265400991142362, 
+                    0.584308325293018, 
+                    0.584308325293018, 
+                    0.5465682727385897, 
+                    0.5465682727385897, 
+                    0.5107482811064962, 
+                    0.5107482811064962, 
+                    0.4781504404658393, 
+                    0.4781504404658393, 
+                    0.44868455808118063, 
+                    0.44868455808118063, 
+                    0.4211491983089712, 
+                    0.4211491983089712, 
+                    0.3962452027145606, 
+                    0.3962452027145606, 
+                    0.3735844103670187, 
+                    0.3735844103670187, 
+                    0.35303401417466485, 
+                    0.35303401417466485, 
+                    0.3346109946136999, 
+                    0.3346109946136999, 
+                    0.3132184086292442, 
+                    0.3132184086292442, 
+                    0.28601551222029203, 
+                    0.28601551222029203, 
+                    0.25337114973953495, 
+                    0.25337114973953495, 
+                    0.21515865951352692, 
+                    0.21515865951352692, 
+                    0.16894474883756364, 
+                    0.16894474883756364
+                ], 
+                0.4896923005580902
+            ], 
+            [
+                1.0855309963226318, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996752367892138, 
+                    0.9996752367892138, 
+                    0.995413851493046, 
+                    0.995413851493046, 
+                    0.9816217368089168, 
+                    0.9816217368089168, 
+                    0.9533933685091265, 
+                    0.9533933685091265, 
+                    0.9131395172860663, 
+                    0.9131395172860663, 
+                    0.8646516442048978, 
+                    0.8646516442048978, 
+                    0.814722235127465, 
+                    0.814722235127465, 
+                    0.7623676345006941, 
+                    0.7623676345006941, 
+                    0.7139795219078603, 
+                    0.7139795219078603, 
+                    0.6668971474071751, 
+                    0.6668971474071751, 
+                    0.6213456562997217, 
+                    0.6213456562997217, 
+                    0.5787353507138654, 
+                    0.5787353507138654, 
+                    0.5413176130293058, 
+                    0.5413176130293058, 
+                    0.5055844605764441, 
+                    0.5055844605764441, 
+                    0.4731708143868252, 
+                    0.4731708143868252, 
+                    0.4438881758341349, 
+                    0.4438881758341349, 
+                    0.4165448251767914, 
+                    0.4165448251767914, 
+                    0.39183243430226233, 
+                    0.39183243430226233, 
+                    0.3693597941965484, 
+                    0.3693597941965484, 
+                    0.3489718160334215, 
+                    0.3489718160334215, 
+                    0.33043456629386025, 
+                    0.33043456629386025, 
+                    0.3088065406443467, 
+                    0.3088065406443467, 
+                    0.2815742294112906, 
+                    0.2815742294112906, 
+                    0.24908794152484504, 
+                    0.24908794152484504, 
+                    0.21119896255980947, 
+                    0.21119896255980947, 
+                    0.16550773613683756, 
+                    0.16550773613683756
+                ], 
+                0.4654068052768707
+            ], 
+            [
+                1.0967243909835815, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996333051388088, 
+                    0.9996333051388088, 
+                    0.9950642824639364, 
+                    0.9950642824639364, 
+                    0.980546717791448, 
+                    0.980546717791448, 
+                    0.9511776122039489, 
+                    0.9511776122039489, 
+                    0.9098630057274977, 
+                    0.9098630057274977, 
+                    0.8605376706444495, 
+                    0.8605376706444495, 
+                    0.8099745630053459, 
+                    0.8099745630053459, 
+                    0.7574503810702437, 
+                    0.7574503810702437, 
+                    0.7083405772332838, 
+                    0.7083405772332838, 
+                    0.6618105642686379, 
+                    0.6618105642686379, 
+                    0.6156005749273823, 
+                    0.6156005749273823, 
+                    0.5735583505259361, 
+                    0.5735583505259361, 
+                    0.5360109945369944, 
+                    0.5360109945369944, 
+                    0.5005065952906828, 
+                    0.5005065952906828, 
+                    0.4682560496990379, 
+                    0.4682560496990379, 
+                    0.4391622283326654, 
+                    0.4391622283326654, 
+                    0.4120120599160706, 
+                    0.4120120599160706, 
+                    0.3874905348388348, 
+                    0.3874905348388348, 
+                    0.3652034982708422, 
+                    0.3652034982708422, 
+                    0.34499633978087035, 
+                    0.34499633978087035, 
+                    0.3265668033885708, 
+                    0.3265668033885708, 
+                    0.3049384177470199, 
+                    0.3049384177470199, 
+                    0.27777709697785696, 
+                    0.27777709697785696, 
+                    0.24546929477643822, 
+                    0.24546929477643822, 
+                    0.2078679164469371, 
+                    0.2078679164469371, 
+                    0.1626076326613484, 
+                    0.1626076326613484
+                ], 
+                0.4415479004383087
+            ], 
+            [
+                1.108033299446106, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995892121592146, 
+                    0.9995892121592146, 
+                    0.9946946472955198, 
+                    0.9946946472955198, 
+                    0.979416469093142, 
+                    0.979416469093142, 
+                    0.9488890408567714, 
+                    0.9488890408567714, 
+                    0.9065172820260959, 
+                    0.9065172820260959, 
+                    0.8564048676832774, 
+                    0.8564048676832774, 
+                    0.8050671201228562, 
+                    0.8050671201228562, 
+                    0.7528508768893164, 
+                    0.7528508768893164, 
+                    0.7022425890461222, 
+                    0.7022425890461222, 
+                    0.6570777238398161, 
+                    0.6570777238398161, 
+                    0.6096636661253879, 
+                    0.6096636661253879, 
+                    0.568513723304463, 
+                    0.568513723304463, 
+                    0.5307240732153142, 
+                    0.5307240732153142, 
+                    0.4954826503771104, 
+                    0.4954826503771104, 
+                    0.463394930107369, 
+                    0.463394930107369, 
+                    0.4344930505779593, 
+                    0.4344930505779593, 
+                    0.407538211900817, 
+                    0.407538211900817, 
+                    0.3832097130033982, 
+                    0.3832097130033982, 
+                    0.3611116259968391, 
+                    0.3611116259968391, 
+                    0.3410779811915458, 
+                    0.3410779811915458, 
+                    0.3225854036050763, 
+                    0.3225854036050763, 
+                    0.30069318422479974, 
+                    0.30069318422479974, 
+                    0.2734373665389097, 
+                    0.2734373665389097, 
+                    0.2412250591888342, 
+                    0.2412250591888342, 
+                    0.20389068483064512, 
+                    0.20389068483064512, 
+                    0.15910236547817208, 
+                    0.15910236547817208
+                ], 
+                0.41792577505111694
+            ]
+        ]
+    }, 
+    {
+        "block_size": 58, 
+        "preprocessing_block_sizes": [
+            40
+        ], 
+        "pruning_parameters": [
+            [
+                0.904058039188385, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.999995643059762, 
+                    0.999995643059762, 
+                    0.999995643059762, 
+                    0.999995643059762, 
+                    0.999995643059762, 
+                    0.999995643059762, 
+                    0.999995643059762, 
+                    0.999995643059762, 
+                    0.9701378267541204, 
+                    0.9701378267541204, 
+                    0.9221402146708434, 
+                    0.9221402146708434, 
+                    0.8772990922033286, 
+                    0.8772990922033286, 
+                    0.8346982070734722, 
+                    0.8346982070734722, 
+                    0.7933003360038493, 
+                    0.7933003360038493, 
+                    0.7521590615273491, 
+                    0.7521590615273491, 
+                    0.7114460606950757, 
+                    0.7114460606950757, 
+                    0.6701062998311603, 
+                    0.6701062998311603, 
+                    0.6298624670195663, 
+                    0.6298624670195663, 
+                    0.5889888145648797, 
+                    0.5889888145648797, 
+                    0.5516971260543316, 
+                    0.5516971260543316, 
+                    0.5173960545798748, 
+                    0.5173960545798748, 
+                    0.48314237738474886, 
+                    0.48314237738474886, 
+                    0.44990092721731983, 
+                    0.44990092721731983, 
+                    0.4173271322397968, 
+                    0.4173271322397968, 
+                    0.38397550553416593, 
+                    0.38397550553416593, 
+                    0.35040707185152475, 
+                    0.35040707185152475, 
+                    0.3164436313889259, 
+                    0.3164436313889259, 
+                    0.28214645653251236, 
+                    0.28214645653251236, 
+                    0.2475699883410982, 
+                    0.2475699883410982, 
+                    0.212724324320471, 
+                    0.212724324320471, 
+                    0.17753921790963706, 
+                    0.17753921790963706, 
+                    0.14179070775608954, 
+                    0.14179070775608954, 
+                    0.10229201448208518, 
+                    0.10229201448208518
+                ], 
+                0.5005848407745361
+            ], 
+            [
+                0.9132226705551147, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999967695373487, 
+                    0.9999967695373487, 
+                    0.9999967695373487, 
+                    0.9999967695373487, 
+                    0.9999967695373487, 
+                    0.9999967695373487, 
+                    0.9999967695373487, 
+                    0.9999967695373487, 
+                    0.9705175837713094, 
+                    0.9705175837713094, 
+                    0.9224515585753384, 
+                    0.9224515585753384, 
+                    0.8775539065967777, 
+                    0.8775539065967777, 
+                    0.8348996000760504, 
+                    0.8348996000760504, 
+                    0.7934357497585348, 
+                    0.7934357497585348, 
+                    0.7521952913905393, 
+                    0.7521952913905393, 
+                    0.711372015506486, 
+                    0.711372015506486, 
+                    0.6698925896776132, 
+                    0.6698925896776132, 
+                    0.6295697879818414, 
+                    0.6295697879818414, 
+                    0.5886541223784885, 
+                    0.5886541223784885, 
+                    0.5514496533910395, 
+                    0.5514496533910395, 
+                    0.5172547699969994, 
+                    0.5172547699969994, 
+                    0.48309329256273326, 
+                    0.48309329256273326, 
+                    0.4499159154779478, 
+                    0.4499159154779478, 
+                    0.41735395366605804, 
+                    0.41735395366605804, 
+                    0.3840131518091644, 
+                    0.3840131518091644, 
+                    0.35044095031476136, 
+                    0.35044095031476136, 
+                    0.31647113368112684, 
+                    0.31647113368112684, 
+                    0.2821680729748464, 
+                    0.2821680729748464, 
+                    0.2475870122294484, 
+                    0.2475870122294484, 
+                    0.2127379660411251, 
+                    0.2127379660411251, 
+                    0.17755042142803917, 
+                    0.17755042142803917, 
+                    0.141799943268582, 
+                    0.141799943268582, 
+                    0.10235112878503268, 
+                    0.10235112878503268
+                ], 
+                0.5003985166549683
+            ], 
+            [
+                0.9224802255630493, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999991869091801, 
+                    0.9999991869091801, 
+                    0.9999906021612743, 
+                    0.9999906021612743, 
+                    0.9999906021612743, 
+                    0.9999906021612743, 
+                    0.9999906021612743, 
+                    0.9999906021612743, 
+                    0.9709991286942335, 
+                    0.9709991286942335, 
+                    0.9239140415031152, 
+                    0.9239140415031152, 
+                    0.8799044308945185, 
+                    0.8799044308945185, 
+                    0.8375813512408053, 
+                    0.8375813512408053, 
+                    0.7958881108891204, 
+                    0.7958881108891204, 
+                    0.7539505914597006, 
+                    0.7539505914597006, 
+                    0.7122700134300545, 
+                    0.7122700134300545, 
+                    0.6697312234068222, 
+                    0.6697312234068222, 
+                    0.6285217947539796, 
+                    0.6285217947539796, 
+                    0.5867316780252375, 
+                    0.5867316780252375, 
+                    0.5491977839827469, 
+                    0.5491977839827469, 
+                    0.5151819669235704, 
+                    0.5151819669235704, 
+                    0.48131502636664436, 
+                    0.48131502636664436, 
+                    0.44863610714048147, 
+                    0.44863610714048147, 
+                    0.4167000095125636, 
+                    0.4167000095125636, 
+                    0.38379954946963707, 
+                    0.38379954946963707, 
+                    0.35058267853047415, 
+                    0.35058267853047415, 
+                    0.31685700830026226, 
+                    0.31685700830026226, 
+                    0.2827085471911327, 
+                    0.2827085471911327, 
+                    0.24821423430964812, 
+                    0.24821423430964812, 
+                    0.21339906780826323, 
+                    0.21339906780826323, 
+                    0.1781983754512664, 
+                    0.1781983754512664, 
+                    0.14237767983228802, 
+                    0.14237767983228802, 
+                    0.10290099660625941, 
+                    0.10290099660625941
+                ], 
+                0.4999973177909851
+            ], 
+            [
+                0.9318315982818604, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999559985175892, 
+                    0.9999559985175892, 
+                    0.9999506861060136, 
+                    0.9999506861060136, 
+                    0.9999489878395901, 
+                    0.9999489878395901, 
+                    0.9717063249116067, 
+                    0.9717063249116067, 
+                    0.928186264662128, 
+                    0.928186264662128, 
+                    0.8869680192256276, 
+                    0.8869680192256276, 
+                    0.845642981305575, 
+                    0.845642981305575, 
+                    0.8032599804912253, 
+                    0.8032599804912253, 
+                    0.7593305812910358, 
+                    0.7593305812910358, 
+                    0.7153393525547269, 
+                    0.7153393525547269, 
+                    0.6701392693832119, 
+                    0.6701392693832119, 
+                    0.6266735437173667, 
+                    0.6266735437173667, 
+                    0.5828160208131598, 
+                    0.5828160208131598, 
+                    0.5441055178798105, 
+                    0.5441055178798105, 
+                    0.5099710697446899, 
+                    0.5099710697446899, 
+                    0.4765906387036653, 
+                    0.4765906387036653, 
+                    0.4451471806119488, 
+                    0.4451471806119488, 
+                    0.4151110002331546, 
+                    0.4151110002331546, 
+                    0.3836196993879872, 
+                    0.3836196993879872, 
+                    0.35158239763381105, 
+                    0.35158239763381105, 
+                    0.3186821607850133, 
+                    0.3186821607850133, 
+                    0.28505737141757753, 
+                    0.28505737141757753, 
+                    0.25085027459847503, 
+                    0.25085027459847503, 
+                    0.21613208513989143, 
+                    0.21613208513989143, 
+                    0.18085363988048098, 
+                    0.18085363988048098, 
+                    0.14474023472377842, 
+                    0.14474023472377842, 
+                    0.10495995715243298, 
+                    0.10495995715243298
+                ], 
+                0.5012825727462769
+            ], 
+            [
+                0.9412777423858643, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999959708784361, 
+                    0.9999959708784361, 
+                    0.9999697381970453, 
+                    0.9999697381970453, 
+                    0.9999692664398667, 
+                    0.9999692664398667, 
+                    0.9999691254807539, 
+                    0.9999691254807539, 
+                    0.9999690570734278, 
+                    0.9999690570734278, 
+                    0.9504537604156833, 
+                    0.9504537604156833, 
+                    0.9007932671449403, 
+                    0.9007932671449403, 
+                    0.8541541765088858, 
+                    0.8541541765088858, 
+                    0.8086280625399459, 
+                    0.8086280625399459, 
+                    0.7625703454032559, 
+                    0.7625703454032559, 
+                    0.7170279514590854, 
+                    0.7170279514590854, 
+                    0.6698409015829745, 
+                    0.6698409015829745, 
+                    0.6251633064221451, 
+                    0.6251633064221451, 
+                    0.5792329442179294, 
+                    0.5792329442179294, 
+                    0.540947091848674, 
+                    0.540947091848674, 
+                    0.5086000640218138, 
+                    0.5086000640218138, 
+                    0.47602126671229805, 
+                    0.47602126671229805, 
+                    0.44519621082508865, 
+                    0.44519621082508865, 
+                    0.41530195925180136, 
+                    0.41530195925180136, 
+                    0.38365327533681537, 
+                    0.38365327533681537, 
+                    0.3514140085073371, 
+                    0.3514140085073371, 
+                    0.31832599688490265, 
+                    0.31832599688490265, 
+                    0.284568086027336, 
+                    0.284568086027336, 
+                    0.2502877249812703, 
+                    0.2502877249812703, 
+                    0.21554915115090173, 
+                    0.21554915115090173, 
+                    0.18028967455238382, 
+                    0.18028967455238382, 
+                    0.1442251718482603, 
+                    0.1442251718482603, 
+                    0.10314070797795298, 
+                    0.10314070797795298
+                ], 
+                0.4997711479663849
+            ], 
+            [
+                0.9508196711540222, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999959573736756, 
+                    0.9999959573736756, 
+                    0.9999600220226971, 
+                    0.9999600220226971, 
+                    0.9999599900318998, 
+                    0.9999599900318998, 
+                    0.9999599251602953, 
+                    0.9999599251602953, 
+                    0.9999598980552138, 
+                    0.9999598980552138, 
+                    0.950888230146336, 
+                    0.950888230146336, 
+                    0.9013243948870795, 
+                    0.9013243948870795, 
+                    0.8547615002167434, 
+                    0.8547615002167434, 
+                    0.809175359040939, 
+                    0.809175359040939, 
+                    0.7628905574669659, 
+                    0.7628905574669659, 
+                    0.7170353996600671, 
+                    0.7170353996600671, 
+                    0.6694944635980956, 
+                    0.6694944635980956, 
+                    0.6246006104627764, 
+                    0.6246006104627764, 
+                    0.5787470677450213, 
+                    0.5787470677450213, 
+                    0.540644136595836, 
+                    0.540644136595836, 
+                    0.5083442178987624, 
+                    0.5083442178987624, 
+                    0.47593450236814167, 
+                    0.47593450236814167, 
+                    0.4452125909577817, 
+                    0.4452125909577817, 
+                    0.4153364129482111, 
+                    0.4153364129482111, 
+                    0.38375622038438006, 
+                    0.38375622038438006, 
+                    0.3515522642775438, 
+                    0.3515522642775438, 
+                    0.31848941442038403, 
+                    0.31848941442038403, 
+                    0.28474719913781577, 
+                    0.28474719913781577, 
+                    0.2504739438216804, 
+                    0.2504739438216804, 
+                    0.21573441897031098, 
+                    0.21573441897031098, 
+                    0.18046586603248815, 
+                    0.18046586603248815, 
+                    0.1443808828033095, 
+                    0.1443808828033095, 
+                    0.10341796932581743, 
+                    0.10341796932581743
+                ], 
+                0.49970534443855286
+            ], 
+            [
+                0.9604583382606506, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999958128187916, 
+                    0.9999958128187916, 
+                    0.9999542734510299, 
+                    0.9999542734510299, 
+                    0.9999542258045823, 
+                    0.9999542258045823, 
+                    0.9999541019651715, 
+                    0.9999541019651715, 
+                    0.9999538924593204, 
+                    0.9999538924593204, 
+                    0.951255175432732, 
+                    0.951255175432732, 
+                    0.9020245334506318, 
+                    0.9020245334506318, 
+                    0.8557409357877152, 
+                    0.8557409357877152, 
+                    0.8101000774404716, 
+                    0.8101000774404716, 
+                    0.763447581724633, 
+                    0.763447581724633, 
+                    0.7171256951672527, 
+                    0.7171256951672527, 
+                    0.669160872620215, 
+                    0.669160872620215, 
+                    0.6239745095410542, 
+                    0.6239745095410542, 
+                    0.5783975364569933, 
+                    0.5783975364569933, 
+                    0.5403320933787344, 
+                    0.5403320933787344, 
+                    0.5078224972039709, 
+                    0.5078224972039709, 
+                    0.475570752616376, 
+                    0.475570752616376, 
+                    0.44499792867899146, 
+                    0.44499792867899146, 
+                    0.4152652323284046, 
+                    0.4152652323284046, 
+                    0.38387848358128807, 
+                    0.38387848358128807, 
+                    0.3518156499831489, 
+                    0.3518156499831489, 
+                    0.31885566112744357, 
+                    0.31885566112744357, 
+                    0.28518003639950046, 
+                    0.28518003639950046, 
+                    0.25094239473066304, 
+                    0.25094239473066304, 
+                    0.216211442288023, 
+                    0.216211442288023, 
+                    0.18092516351078128, 
+                    0.18092516351078128, 
+                    0.14478777152009242, 
+                    0.14478777152009242, 
+                    0.10393354009959027, 
+                    0.10393354009959027
+                ], 
+                0.5000268816947937
+            ], 
+            [
+                0.9701946973800659, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999285690557735, 
+                    0.9999285690557735, 
+                    0.999927593389117, 
+                    0.999927593389117, 
+                    0.9999266195387561, 
+                    0.9999266195387561, 
+                    0.9999249751409013, 
+                    0.9999249751409013, 
+                    0.9899053920641986, 
+                    0.9899053920641986, 
+                    0.9332259813839819, 
+                    0.9332259813839819, 
+                    0.8809895274144202, 
+                    0.8809895274144202, 
+                    0.829891678991347, 
+                    0.829891678991347, 
+                    0.777222428553151, 
+                    0.777222428553151, 
+                    0.7252681216597554, 
+                    0.7252681216597554, 
+                    0.6708662681971475, 
+                    0.6708662681971475, 
+                    0.6210483982808338, 
+                    0.6210483982808338, 
+                    0.5712614813846502, 
+                    0.5712614813846502, 
+                    0.5323998397208055, 
+                    0.5323998397208055, 
+                    0.5010122583163416, 
+                    0.5010122583163416, 
+                    0.470236825811049, 
+                    0.470236825811049, 
+                    0.4418168972773588, 
+                    0.4418168972773588, 
+                    0.4145996851179246, 
+                    0.4145996851179246, 
+                    0.384966456165711, 
+                    0.384966456165711, 
+                    0.3542752484882554, 
+                    0.3542752484882554, 
+                    0.322224318969307, 
+                    0.322224318969307, 
+                    0.2890967155230045, 
+                    0.2890967155230045, 
+                    0.25513390942688036, 
+                    0.25513390942688036, 
+                    0.2204533238509728, 
+                    0.2204533238509728, 
+                    0.18498760210767048, 
+                    0.18498760210767048, 
+                    0.1483470484894288, 
+                    0.1483470484894288, 
+                    0.10528139935597197, 
+                    0.10528139935597197
+                ], 
+                0.4999852180480957
+            ], 
+            [
+                0.9800297617912292, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997320726440101, 
+                    0.9997320726440101, 
+                    0.9997178001523986, 
+                    0.9997178001523986, 
+                    0.9997051649280375, 
+                    0.9997051649280375, 
+                    0.9996699520498811, 
+                    0.9996699520498811, 
+                    0.9888495379528751, 
+                    0.9888495379528751, 
+                    0.9315993594990924, 
+                    0.9315993594990924, 
+                    0.8792606397002962, 
+                    0.8792606397002962, 
+                    0.8274436718021342, 
+                    0.8274436718021342, 
+                    0.7736911616780076, 
+                    0.7736911616780076, 
+                    0.7214349368432854, 
+                    0.7214349368432854, 
+                    0.6681267296989057, 
+                    0.6681267296989057, 
+                    0.6194683909775001, 
+                    0.6194683909775001, 
+                    0.5743253006732945, 
+                    0.5743253006732945, 
+                    0.535006154041066, 
+                    0.535006154041066, 
+                    0.4999365758611017, 
+                    0.4999365758611017, 
+                    0.4682983677699891, 
+                    0.4682983677699891, 
+                    0.43945553590873215, 
+                    0.43945553590873215, 
+                    0.41281997492472217, 
+                    0.41281997492472217, 
+                    0.38414963139484876, 
+                    0.38414963139484876, 
+                    0.35432121205674, 
+                    0.35432121205674, 
+                    0.32293826774373197, 
+                    0.32293826774373197, 
+                    0.29027442222638516, 
+                    0.29027442222638516, 
+                    0.25660275847925756, 
+                    0.25660275847925756, 
+                    0.22206963305243668, 
+                    0.22206963305243668, 
+                    0.18662277783940512, 
+                    0.18662277783940512, 
+                    0.14985215156749396, 
+                    0.14985215156749396, 
+                    0.10707121168293769, 
+                    0.10707121168293769
+                ], 
+                0.5002225637435913
+            ], 
+            [
+                0.9899645447731018, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995792015214096, 
+                    0.9995792015214096, 
+                    0.9993324212633369, 
+                    0.9993324212633369, 
+                    0.9992599951009783, 
+                    0.9992599951009783, 
+                    0.9989932734666443, 
+                    0.9989932734666443, 
+                    0.9504803989299748, 
+                    0.9504803989299748, 
+                    0.9050260074396782, 
+                    0.9050260074396782, 
+                    0.8610504666844312, 
+                    0.8610504666844312, 
+                    0.8139608966995093, 
+                    0.8139608966995093, 
+                    0.7640867716695865, 
+                    0.7640867716695865, 
+                    0.7155178467004535, 
+                    0.7155178467004535, 
+                    0.6667645678723255, 
+                    0.6667645678723255, 
+                    0.621462547209687, 
+                    0.621462547209687, 
+                    0.5774801794136597, 
+                    0.5774801794136597, 
+                    0.537987533236817, 
+                    0.537987533236817, 
+                    0.5021454289337755, 
+                    0.5021454289337755, 
+                    0.4690900262305771, 
+                    0.4690900262305771, 
+                    0.43922579613781615, 
+                    0.43922579613781615, 
+                    0.4120628358375516, 
+                    0.4120628358375516, 
+                    0.38346922829869867, 
+                    0.38346922829869867, 
+                    0.3538571822284815, 
+                    0.3538571822284815, 
+                    0.3227292624585099, 
+                    0.3227292624585099, 
+                    0.29028541930577106, 
+                    0.29028541930577106, 
+                    0.2567786741514607, 
+                    0.2567786741514607, 
+                    0.2223556809430269, 
+                    0.2223556809430269, 
+                    0.18697837699853487, 
+                    0.18697837699853487, 
+                    0.15026090602764702, 
+                    0.15026090602764702, 
+                    0.10928029049600464, 
+                    0.10928029049600464
+                ], 
+                0.5004075765609741
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998295914152436, 
+                    0.9998295914152436, 
+                    0.9987544279250349, 
+                    0.9987544279250349, 
+                    0.9985367383498673, 
+                    0.9985367383498673, 
+                    0.9978414252490816, 
+                    0.9978414252490816, 
+                    0.9487965981037588, 
+                    0.9487965981037588, 
+                    0.9065314204902265, 
+                    0.9065314204902265, 
+                    0.8636386203383404, 
+                    0.8636386203383404, 
+                    0.8154722259826492, 
+                    0.8154722259826492, 
+                    0.7643131261552911, 
+                    0.7643131261552911, 
+                    0.7162426915511146, 
+                    0.7162426915511146, 
+                    0.6643904979977118, 
+                    0.6643904979977118, 
+                    0.6216601644067968, 
+                    0.6216601644067968, 
+                    0.5663350773452165, 
+                    0.5663350773452165, 
+                    0.5320596905444216, 
+                    0.5320596905444216, 
+                    0.5022901122670898, 
+                    0.5022901122670898, 
+                    0.46800060993594095, 
+                    0.46800060993594095, 
+                    0.4380225691036364, 
+                    0.4380225691036364, 
+                    0.41147510774901214, 
+                    0.41147510774901214, 
+                    0.38459547006738626, 
+                    0.38459547006738626, 
+                    0.35676005939117544, 
+                    0.35676005939117544, 
+                    0.32706009113532625, 
+                    0.32706009113532625, 
+                    0.29560266792782963, 
+                    0.29560266792782963, 
+                    0.2626812109552456, 
+                    0.2626812109552456, 
+                    0.22848640911648913, 
+                    0.22848640911648913, 
+                    0.19298724891349642, 
+                    0.19298724891349642, 
+                    0.15572136334078565, 
+                    0.15572136334078565, 
+                    0.11417986303345687, 
+                    0.11417986303345687
+                ], 
+                0.4999949634075165
+            ], 
+            [
+                1.0101372003555298, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999433767393404, 
+                    0.9999433767393404, 
+                    0.9984742600085101, 
+                    0.9984742600085101, 
+                    0.9972164398316414, 
+                    0.9972164398316414, 
+                    0.9936326457713055, 
+                    0.9936326457713055, 
+                    0.9461723633998191, 
+                    0.9461723633998191, 
+                    0.9060978633551151, 
+                    0.9060978633551151, 
+                    0.8623348218163771, 
+                    0.8623348218163771, 
+                    0.8126237254474513, 
+                    0.8126237254474513, 
+                    0.7604620755849492, 
+                    0.7604620755849492, 
+                    0.7106206489320922, 
+                    0.7106206489320922, 
+                    0.6621690666684793, 
+                    0.6621690666684793, 
+                    0.6144313322160571, 
+                    0.6144313322160571, 
+                    0.5726733662190331, 
+                    0.5726733662190331, 
+                    0.5301447497567238, 
+                    0.5301447497567238, 
+                    0.49680091131472304, 
+                    0.49680091131472304, 
+                    0.4639292035145325, 
+                    0.4639292035145325, 
+                    0.4345817725979781, 
+                    0.4345817725979781, 
+                    0.40918661620614155, 
+                    0.40918661620614155, 
+                    0.3842952606309398, 
+                    0.3842952606309398, 
+                    0.35925734092070555, 
+                    0.35925734092070555, 
+                    0.332105382739744, 
+                    0.332105382739744, 
+                    0.3025182273368224, 
+                    0.3025182273368224, 
+                    0.2708027333765823, 
+                    0.2708027333765823, 
+                    0.23723477340311172, 
+                    0.23723477340311172, 
+                    0.20183240546885609, 
+                    0.20183240546885609, 
+                    0.16410256754973984, 
+                    0.16410256754973984, 
+                    0.12170974219513458, 
+                    0.12170974219513458
+                ], 
+                0.5006662011146545
+            ], 
+            [
+                1.0203771591186523, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999600492167844, 
+                    0.9999600492167844, 
+                    0.9979869456342216, 
+                    0.9979869456342216, 
+                    0.9907811582783468, 
+                    0.9907811582783468, 
+                    0.9737228441753699, 
+                    0.9737228441753699, 
+                    0.9431576742706286, 
+                    0.9431576742706286, 
+                    0.9042162998913498, 
+                    0.9042162998913498, 
+                    0.8596522481645493, 
+                    0.8596522481645493, 
+                    0.8091723055052895, 
+                    0.8091723055052895, 
+                    0.7565399044046995, 
+                    0.7565399044046995, 
+                    0.7067421044084223, 
+                    0.7067421044084223, 
+                    0.6570368641865546, 
+                    0.6570368641865546, 
+                    0.6110688496466087, 
+                    0.6110688496466087, 
+                    0.5663296883622966, 
+                    0.5663296883622966, 
+                    0.5272137371378611, 
+                    0.5272137371378611, 
+                    0.49284143312497775, 
+                    0.49284143312497775, 
+                    0.460310439901953, 
+                    0.460310439901953, 
+                    0.43103729285168946, 
+                    0.43103729285168946, 
+                    0.40585884119088184, 
+                    0.40585884119088184, 
+                    0.382156506827235, 
+                    0.382156506827235, 
+                    0.36102943269739657, 
+                    0.36102943269739657, 
+                    0.341265919815819, 
+                    0.341265919815819, 
+                    0.31925725552102924, 
+                    0.31925725552102924, 
+                    0.2930563101163257, 
+                    0.2930563101163257, 
+                    0.26287643169926, 
+                    0.26287643169926, 
+                    0.2290324806505197, 
+                    0.2290324806505197, 
+                    0.191119636133772, 
+                    0.191119636133772, 
+                    0.14675452781334364, 
+                    0.14675452781334364
+                ], 
+                0.5004416108131409
+            ], 
+            [
+                1.0307209491729736, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999479183610277, 
+                    0.9999479183610277, 
+                    0.9977991858534296, 
+                    0.9977991858534296, 
+                    0.9891399155679802, 
+                    0.9891399155679802, 
+                    0.9707546331854826, 
+                    0.9707546331854826, 
+                    0.9409203173693317, 
+                    0.9409203173693317, 
+                    0.9013005502812231, 
+                    0.9013005502812231, 
+                    0.8561194415131128, 
+                    0.8561194415131128, 
+                    0.8051367925312115, 
+                    0.8051367925312115, 
+                    0.7521887730690265, 
+                    0.7521887730690265, 
+                    0.7020975517897434, 
+                    0.7020975517897434, 
+                    0.6526264544405145, 
+                    0.6526264544405145, 
+                    0.6059888685927897, 
+                    0.6059888685927897, 
+                    0.5621826053842042, 
+                    0.5621826053842042, 
+                    0.5223733694021035, 
+                    0.5223733694021035, 
+                    0.4885487586913054, 
+                    0.4885487586913054, 
+                    0.45607918324117985, 
+                    0.45607918324117985, 
+                    0.4269962540502559, 
+                    0.4269962540502559, 
+                    0.4019636549890869, 
+                    0.4019636549890869, 
+                    0.37837869295164817, 
+                    0.37837869295164817, 
+                    0.3573271170656892, 
+                    0.3573271170656892, 
+                    0.3386953304215384, 
+                    0.3386953304215384, 
+                    0.32159843566723484, 
+                    0.32159843566723484, 
+                    0.30089531321943425, 
+                    0.30089531321943425, 
+                    0.2745505534586694, 
+                    0.2745505534586694, 
+                    0.243084151323725, 
+                    0.243084151323725, 
+                    0.206346898895428, 
+                    0.206346898895428, 
+                    0.16197171879306937, 
+                    0.16197171879306937
+                ], 
+                0.4835576117038727
+            ], 
+            [
+                1.0411696434020996, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999442743701983, 
+                    0.9999442743701983, 
+                    0.9976476368870029, 
+                    0.9976476368870029, 
+                    0.9889436740687451, 
+                    0.9889436740687451, 
+                    0.9693207323930884, 
+                    0.9693207323930884, 
+                    0.9386462295209805, 
+                    0.9386462295209805, 
+                    0.8981688627562536, 
+                    0.8981688627562536, 
+                    0.8523265905071173, 
+                    0.8523265905071173, 
+                    0.800813105183232, 
+                    0.800813105183232, 
+                    0.7474370262845423, 
+                    0.7474370262845423, 
+                    0.6972650500902255, 
+                    0.6972650500902255, 
+                    0.6471944717999085, 
+                    0.6471944717999085, 
+                    0.6015515910345752, 
+                    0.6015515910345752, 
+                    0.5564413549109128, 
+                    0.5564413549109128, 
+                    0.5180538153116105, 
+                    0.5180538153116105, 
+                    0.4836657270874837, 
+                    0.4836657270874837, 
+                    0.4516087124314258, 
+                    0.4516087124314258, 
+                    0.42267521280137293, 
+                    0.42267521280137293, 
+                    0.3977997565181106, 
+                    0.3977997565181106, 
+                    0.3743647682640122, 
+                    0.3743647682640122, 
+                    0.3534528778669167, 
+                    0.3534528778669167, 
+                    0.33510627991322456, 
+                    0.33510627991322456, 
+                    0.31927767404298935, 
+                    0.31927767404298935, 
+                    0.29939314661475547, 
+                    0.29939314661475547, 
+                    0.2736838995596276, 
+                    0.2736838995596276, 
+                    0.24274603499418085, 
+                    0.24274603499418085, 
+                    0.2064428164502843, 
+                    0.2064428164502843, 
+                    0.16241052669190756, 
+                    0.16241052669190756
+                ], 
+                0.46195992827415466
+            ], 
+            [
+                1.0517241954803467, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999004659707162, 
+                    0.9999004659707162, 
+                    0.9974445378745981, 
+                    0.9974445378745981, 
+                    0.9879325462820788, 
+                    0.9879325462820788, 
+                    0.9679171306146847, 
+                    0.9679171306146847, 
+                    0.9362650647964464, 
+                    0.9362650647964464, 
+                    0.89497668462143, 
+                    0.89497668462143, 
+                    0.8484800544821417, 
+                    0.8484800544821417, 
+                    0.796426506989264, 
+                    0.796426506989264, 
+                    0.7427966351049122, 
+                    0.7427966351049122, 
+                    0.6922402273263423, 
+                    0.6922402273263423, 
+                    0.6427581709915401, 
+                    0.6427581709915401, 
+                    0.5958235804806388, 
+                    0.5958235804806388, 
+                    0.5524145547643867, 
+                    0.5524145547643867, 
+                    0.5126331058231949, 
+                    0.5126331058231949, 
+                    0.4791540949559595, 
+                    0.4791540949559595, 
+                    0.4469793230317997, 
+                    0.4469793230317997, 
+                    0.4182490569005414, 
+                    0.4182490569005414, 
+                    0.3935630442354256, 
+                    0.3935630442354256, 
+                    0.37033038993309025, 
+                    0.37033038993309025, 
+                    0.3496240869670131, 
+                    0.3496240869670131, 
+                    0.33119265021572586, 
+                    0.33119265021572586, 
+                    0.3137468263439546, 
+                    0.3137468263439546, 
+                    0.29289485664511383, 
+                    0.29289485664511383, 
+                    0.266788763580204, 
+                    0.266788763580204, 
+                    0.23582773906454482, 
+                    0.23582773906454482, 
+                    0.19983829318045587, 
+                    0.19983829318045587, 
+                    0.15653327348281232, 
+                    0.15653327348281232
+                ], 
+                0.43948429822921753
+            ], 
+            [
+                1.0623856782913208, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998762637450583, 
+                    0.9998762637450583, 
+                    0.9972506695851631, 
+                    0.9972506695851631, 
+                    0.987272915705883, 
+                    0.987272915705883, 
+                    0.96642023814745, 
+                    0.96642023814745, 
+                    0.933850199425056, 
+                    0.933850199425056, 
+                    0.8917382247640162, 
+                    0.8917382247640162, 
+                    0.8446041355994836, 
+                    0.8446041355994836, 
+                    0.7920443155676047, 
+                    0.7920443155676047, 
+                    0.7380621907305374, 
+                    0.7380621907305374, 
+                    0.6874176671921673, 
+                    0.6874176671921673, 
+                    0.6376194028861036, 
+                    0.6376194028861036, 
+                    0.5911379122429495, 
+                    0.5911379122429495, 
+                    0.5471760041014699, 
+                    0.5471760041014699, 
+                    0.50806841673616, 
+                    0.50806841673616, 
+                    0.47446727837577585, 
+                    0.47446727837577585, 
+                    0.44251711098314045, 
+                    0.44251711098314045, 
+                    0.4139561078611512, 
+                    0.4139561078611512, 
+                    0.38944557791206696, 
+                    0.38944557791206696, 
+                    0.36638869638199445, 
+                    0.36638869638199445, 
+                    0.3458534157955766, 
+                    0.3458534157955766, 
+                    0.3276091109903903, 
+                    0.3276091109903903, 
+                    0.3102277014579635, 
+                    0.3102277014579635, 
+                    0.28912253596445625, 
+                    0.28912253596445625, 
+                    0.2628628485291941, 
+                    0.2628628485291941, 
+                    0.23191841815993622, 
+                    0.23191841815993622, 
+                    0.19610723687498835, 
+                    0.19610723687498835, 
+                    0.15317197856112327, 
+                    0.15317197856112327
+                ], 
+                0.4178988039493561
+            ], 
+            [
+                1.0731552839279175, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998561634835407, 
+                    0.9998561634835407, 
+                    0.9970377000294259, 
+                    0.9970377000294259, 
+                    0.986544388551895, 
+                    0.986544388551895, 
+                    0.9648679534328108, 
+                    0.9648679534328108, 
+                    0.9313818840387492, 
+                    0.9313818840387492, 
+                    0.8884544776976844, 
+                    0.8884544776976844, 
+                    0.8406932258861405, 
+                    0.8406932258861405, 
+                    0.7876371567326854, 
+                    0.7876371567326854, 
+                    0.7333526005733265, 
+                    0.7333526005733265, 
+                    0.6825111905945256, 
+                    0.6825111905945256, 
+                    0.6327259674931964, 
+                    0.6327259674931964, 
+                    0.5861471663134936, 
+                    0.5861471663134936, 
+                    0.5423683516123086, 
+                    0.5423683516123086, 
+                    0.5033180983824567, 
+                    0.5033180983824567, 
+                    0.4698898743133986, 
+                    0.4698898743133986, 
+                    0.43809881012887325, 
+                    0.43809881012887325, 
+                    0.4097194136335219, 
+                    0.4097194136335219, 
+                    0.38538432564845826, 
+                    0.38538432564845826, 
+                    0.3625040006840485, 
+                    0.3625040006840485, 
+                    0.34213900896777694, 
+                    0.34213900896777694, 
+                    0.32402432595394887, 
+                    0.32402432595394887, 
+                    0.3066927879869546, 
+                    0.3066927879869546, 
+                    0.28582092367715567, 
+                    0.28582092367715567, 
+                    0.25987576340146834, 
+                    0.25987576340146834, 
+                    0.22928518370609532, 
+                    0.22928518370609532, 
+                    0.19387554094596268, 
+                    0.19387554094596268, 
+                    0.15143021734101064, 
+                    0.15143021734101064
+                ], 
+                0.39688700437545776
+            ], 
+            [
+                1.0840340852737427, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998367814203893, 
+                    0.9998367814203893, 
+                    0.9967981923794386, 
+                    0.9967981923794386, 
+                    0.985799026541406, 
+                    0.985799026541406, 
+                    0.9632785098502097, 
+                    0.9632785098502097, 
+                    0.928870118868752, 
+                    0.928870118868752, 
+                    0.8851597516856486, 
+                    0.8851597516856486, 
+                    0.8367816887411297, 
+                    0.8367816887411297, 
+                    0.7832591771544725, 
+                    0.7832591771544725, 
+                    0.7286258313537414, 
+                    0.7286258313537414, 
+                    0.6778084419682552, 
+                    0.6778084419682552, 
+                    0.6275287918900218, 
+                    0.6275287918900218, 
+                    0.5816413535907016, 
+                    0.5816413535907016, 
+                    0.5371379275412188, 
+                    0.5371379275412188, 
+                    0.4989199015992267, 
+                    0.4989199015992267, 
+                    0.46537175529240404, 
+                    0.46537175529240404, 
+                    0.4338133021514255, 
+                    0.4338133021514255, 
+                    0.4055963915939237, 
+                    0.4055963915939237, 
+                    0.38142101773185333, 
+                    0.38142101773185333, 
+                    0.3586978656737194, 
+                    0.3586978656737194, 
+                    0.3384382534932219, 
+                    0.3384382534932219, 
+                    0.3205289473097482, 
+                    0.3205289473097482, 
+                    0.3061065488098642, 
+                    0.3061065488098642, 
+                    0.2899565540967792, 
+                    0.2899565540967792, 
+                    0.267602791121168, 
+                    0.267602791121168, 
+                    0.23938921415841077, 
+                    0.23938921415841077, 
+                    0.20534699780699334, 
+                    0.20534699780699334, 
+                    0.16325352298357357, 
+                    0.16325352298357357
+                ], 
+                0.37790051102638245
+            ], 
+            [
+                1.0950231552124023, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998152657772909, 
+                    0.9998152657772909, 
+                    0.9965769414715648, 
+                    0.9965769414715648, 
+                    0.9850324180703102, 
+                    0.9850324180703102, 
+                    0.9616110992097314, 
+                    0.9616110992097314, 
+                    0.9262868362544662, 
+                    0.9262868362544662, 
+                    0.8817552204747029, 
+                    0.8817552204747029, 
+                    0.832785898871755, 
+                    0.832785898871755, 
+                    0.7787996361229262, 
+                    0.7787996361229262, 
+                    0.723882850522431, 
+                    0.723882850522431, 
+                    0.6729158180936249, 
+                    0.6729158180936249, 
+                    0.6226494862056827, 
+                    0.6226494862056827, 
+                    0.5767437644435846, 
+                    0.5767437644435846, 
+                    0.5323949352624151, 
+                    0.5323949352624151, 
+                    0.494228918264325, 
+                    0.494228918264325, 
+                    0.4608421362309117, 
+                    0.4608421362309117, 
+                    0.4294550958586944, 
+                    0.4294550958586944, 
+                    0.40142842490718694, 
+                    0.40142842490718694, 
+                    0.3774371481255496, 
+                    0.3774371481255496, 
+                    0.3548946762548855, 
+                    0.3548946762548855, 
+                    0.33481984157445327, 
+                    0.33481984157445327, 
+                    0.31718606982878933, 
+                    0.31718606982878933, 
+                    0.30218715911024036, 
+                    0.30218715911024036, 
+                    0.28425474516258314, 
+                    0.28425474516258314, 
+                    0.2605868884043978, 
+                    0.2605868884043978, 
+                    0.2316616054630156, 
+                    0.2316616054630156, 
+                    0.19741918559132393, 
+                    0.19741918559132393, 
+                    0.1556614806306863, 
+                    0.1556614806306863
+                ], 
+                0.3572613596916199
+            ], 
+            [
+                1.106123685836792, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997875877791609, 
+                    0.9997875877791609, 
+                    0.9963018385580388, 
+                    0.9963018385580388, 
+                    0.9840419859968881, 
+                    0.9840419859968881, 
+                    0.9598754916683792, 
+                    0.9598754916683792, 
+                    0.9236388907363142, 
+                    0.9236388907363142, 
+                    0.8783194875028292, 
+                    0.8783194875028292, 
+                    0.8287643009187391, 
+                    0.8287643009187391, 
+                    0.7743206366833765, 
+                    0.7743206366833765, 
+                    0.7191546057332431, 
+                    0.7191546057332431, 
+                    0.6679818038511028, 
+                    0.6679818038511028, 
+                    0.6179724964048418, 
+                    0.6179724964048418, 
+                    0.5716291118114236, 
+                    0.5716291118114236, 
+                    0.5279791554690133, 
+                    0.5279791554690133, 
+                    0.4894699968128146, 
+                    0.4894699968128146, 
+                    0.45639418173324453, 
+                    0.45639418173324453, 
+                    0.4251523118405532, 
+                    0.4251523118405532, 
+                    0.39732430922138035, 
+                    0.39732430922138035, 
+                    0.37351393824134227, 
+                    0.37351393824134227, 
+                    0.3511379819766325, 
+                    0.3511379819766325, 
+                    0.33127083193154594, 
+                    0.33127083193154594, 
+                    0.31347249789439063, 
+                    0.31347249789439063, 
+                    0.2988494411537666, 
+                    0.2988494411537666, 
+                    0.2812441306707959, 
+                    0.2812441306707959, 
+                    0.2577857878776283, 
+                    0.2577857878776283, 
+                    0.22907163054219332, 
+                    0.22907163054219332, 
+                    0.19507117728708442, 
+                    0.19507117728708442, 
+                    0.15360385225354095, 
+                    0.15360385225354095
+                ], 
+                0.3376072645187378
+            ]
+        ]
+    }, 
+    {
+        "block_size": 59, 
+        "preprocessing_block_sizes": [
+            44
+        ], 
+        "pruning_parameters": [
+            [
+                0.9055671095848083, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999543831185962, 
+                    0.9999543831185962, 
+                    0.999954303905991, 
+                    0.999954303905991, 
+                    0.9999540941076059, 
+                    0.9999540941076059, 
+                    0.9999537793184136, 
+                    0.9999537793184136, 
+                    0.9677303505490955, 
+                    0.9677303505490955, 
+                    0.9199192775809982, 
+                    0.9199192775809982, 
+                    0.874980702533132, 
+                    0.874980702533132, 
+                    0.8322167199734589, 
+                    0.8322167199734589, 
+                    0.7908317960989502, 
+                    0.7908317960989502, 
+                    0.7500914532650028, 
+                    0.7500914532650028, 
+                    0.7099202538504163, 
+                    0.7099202538504163, 
+                    0.6696375116513185, 
+                    0.6696375116513185, 
+                    0.6298542966655508, 
+                    0.6298542966655508, 
+                    0.5914321621913867, 
+                    0.5914321621913867, 
+                    0.5545610030209609, 
+                    0.5545610030209609, 
+                    0.5185458985626171, 
+                    0.5185458985626171, 
+                    0.48427994626616305, 
+                    0.48427994626616305, 
+                    0.4503543705333929, 
+                    0.4503543705333929, 
+                    0.4172505294404261, 
+                    0.4172505294404261, 
+                    0.3839746445047639, 
+                    0.3839746445047639, 
+                    0.35037025262196914, 
+                    0.35037025262196914, 
+                    0.31638549187245885, 
+                    0.31638549187245885, 
+                    0.28207140923014856, 
+                    0.28207140923014856, 
+                    0.2474941098707851, 
+                    0.2474941098707851, 
+                    0.21264737704421663, 
+                    0.21264737704421663, 
+                    0.17746583586272552, 
+                    0.17746583586272552, 
+                    0.141725002652072, 
+                    0.141725002652072, 
+                    0.10196559897619786, 
+                    0.10196559897619786
+                ], 
+                0.5004328489303589
+            ], 
+            [
+                0.9145944714546204, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999523183099404, 
+                    0.9999523183099404, 
+                    0.999952242217357, 
+                    0.999952242217357, 
+                    0.9999520335706568, 
+                    0.9999520335706568, 
+                    0.9999516814173219, 
+                    0.9999516814173219, 
+                    0.9679092351052362, 
+                    0.9679092351052362, 
+                    0.9200468537896695, 
+                    0.9200468537896695, 
+                    0.8750501308169424, 
+                    0.8750501308169424, 
+                    0.8322315762203046, 
+                    0.8322315762203046, 
+                    0.7907926140005016, 
+                    0.7907926140005016, 
+                    0.7499947030191605, 
+                    0.7499947030191605, 
+                    0.7097818495903756, 
+                    0.7097818495903756, 
+                    0.6694693496264776, 
+                    0.6694693496264776, 
+                    0.6296975618774513, 
+                    0.6296975618774513, 
+                    0.5913339758372057, 
+                    0.5913339758372057, 
+                    0.5545463230938609, 
+                    0.5545463230938609, 
+                    0.518621865875114, 
+                    0.518621865875114, 
+                    0.4844231369752336, 
+                    0.4844231369752336, 
+                    0.45053873347934587, 
+                    0.45053873347934587, 
+                    0.4174281389609377, 
+                    0.4174281389609377, 
+                    0.38412498968820175, 
+                    0.38412498968820175, 
+                    0.35048816103987973, 
+                    0.35048816103987973, 
+                    0.3164753605041987, 
+                    0.3164753605041987, 
+                    0.2821400201261977, 
+                    0.2821400201261977, 
+                    0.24754650071073933, 
+                    0.24754650071073933, 
+                    0.21268820967614996, 
+                    0.21268820967614996, 
+                    0.17749768264255203, 
+                    0.17749768264255203, 
+                    0.14174880215172952, 
+                    0.14174880215172952, 
+                    0.10199762075246094, 
+                    0.10199762075246094
+                ], 
+                0.5005965232849121
+            ], 
+            [
+                0.9237118363380432, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999502733268268, 
+                    0.9999502733268268, 
+                    0.9999501834175537, 
+                    0.9999501834175537, 
+                    0.9999498917975765, 
+                    0.9999498917975765, 
+                    0.999949163023408, 
+                    0.999949163023408, 
+                    0.9681136803983337, 
+                    0.9681136803983337, 
+                    0.920192869256442, 
+                    0.920192869256442, 
+                    0.8751299240844012, 
+                    0.8751299240844012, 
+                    0.8322489119459564, 
+                    0.8322489119459564, 
+                    0.7907475420442633, 
+                    0.7907475420442633, 
+                    0.7498818880705219, 
+                    0.7498818880705219, 
+                    0.7096171574280621, 
+                    0.7096171574280621, 
+                    0.6692616436307554, 
+                    0.6692616436307554, 
+                    0.629488183975621, 
+                    0.629488183975621, 
+                    0.5911736273416511, 
+                    0.5911736273416511, 
+                    0.5544644320223259, 
+                    0.5544644320223259, 
+                    0.5186261465262288, 
+                    0.5186261465262288, 
+                    0.4844993908405559, 
+                    0.4844993908405559, 
+                    0.45066135387135353, 
+                    0.45066135387135353, 
+                    0.41755636485141956, 
+                    0.41755636485141956, 
+                    0.38423760928441875, 
+                    0.38423760928441875, 
+                    0.35057803600792786, 
+                    0.35057803600792786, 
+                    0.3165443743426766, 
+                    0.3165443743426766, 
+                    0.2821928423309829, 
+                    0.2821928423309829, 
+                    0.24758681520196188, 
+                    0.24758681520196188, 
+                    0.21271962736396186, 
+                    0.21271962736396186, 
+                    0.17752223713121906, 
+                    0.17752223713121906, 
+                    0.14176727302479272, 
+                    0.14176727302479272, 
+                    0.10202772109483316, 
+                    0.10202772109483316
+                ], 
+                0.5005873441696167
+            ], 
+            [
+                0.9329200983047485, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999484379212397, 
+                    0.9999484379212397, 
+                    0.999948362473789, 
+                    0.999948362473789, 
+                    0.9999481130877024, 
+                    0.9999481130877024, 
+                    0.9999474750714504, 
+                    0.9999474750714504, 
+                    0.9683471573497352, 
+                    0.9683471573497352, 
+                    0.9203602461159895, 
+                    0.9203602461159895, 
+                    0.8752223725353407, 
+                    0.8752223725353407, 
+                    0.8322698289387283, 
+                    0.8322698289387283, 
+                    0.7906957203645283, 
+                    0.7906957203645283, 
+                    0.7497488173710366, 
+                    0.7497488173710366, 
+                    0.7094174791374975, 
+                    0.7094174791374975, 
+                    0.6690002773933463, 
+                    0.6690002773933463, 
+                    0.6292081913435605, 
+                    0.6292081913435605, 
+                    0.5909334250486286, 
+                    0.5909334250486286, 
+                    0.5543014213807106, 
+                    0.5543014213807106, 
+                    0.5185518361091059, 
+                    0.5185518361091059, 
+                    0.4845053409307204, 
+                    0.4845053409307204, 
+                    0.4507226036840999, 
+                    0.4507226036840999, 
+                    0.4176343091899506, 
+                    0.4176343091899506, 
+                    0.3843105402419394, 
+                    0.3843105402419394, 
+                    0.3506374126761734, 
+                    0.3506374126761734, 
+                    0.316590110112812, 
+                    0.316590110112812, 
+                    0.282227754818729, 
+                    0.282227754818729, 
+                    0.24761324868738996, 
+                    0.24761324868738996, 
+                    0.21274018438457712, 
+                    0.21274018438457712, 
+                    0.177538381314679, 
+                    0.177538381314679, 
+                    0.14177957259996365, 
+                    0.14177957259996365, 
+                    0.10205566202051958, 
+                    0.10205566202051958
+                ], 
+                0.5003784894943237
+            ], 
+            [
+                0.942220151424408, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999484568207349, 
+                    0.9999484568207349, 
+                    0.999948415337978, 
+                    0.999948415337978, 
+                    0.9999482704733262, 
+                    0.9999482704733262, 
+                    0.9999478686653964, 
+                    0.9999478686653964, 
+                    0.9686183557617668, 
+                    0.9686183557617668, 
+                    0.9205623145725097, 
+                    0.9205623145725097, 
+                    0.875350896900052, 
+                    0.875350896900052, 
+                    0.8323300714835402, 
+                    0.8323300714835402, 
+                    0.7906892001622755, 
+                    0.7906892001622755, 
+                    0.7496712351075442, 
+                    0.7496712351075442, 
+                    0.7092849032942841, 
+                    0.7092849032942841, 
+                    0.6688228717972223, 
+                    0.6688228717972223, 
+                    0.6290288565046388, 
+                    0.6290288565046388, 
+                    0.5908044689060999, 
+                    0.5908044689060999, 
+                    0.5542519298227787, 
+                    0.5542519298227787, 
+                    0.5185893372550419, 
+                    0.5185893372550419, 
+                    0.48460869782206956, 
+                    0.48460869782206956, 
+                    0.45086658880204805, 
+                    0.45086658880204805, 
+                    0.4177762272551576, 
+                    0.4177762272551576, 
+                    0.38443263852786563, 
+                    0.38443263852786563, 
+                    0.3507351063288519, 
+                    0.3507351063288519, 
+                    0.31666657480596655, 
+                    0.31666657480596655, 
+                    0.28228800668963333, 
+                    0.28228800668963333, 
+                    0.24766095954271564, 
+                    0.24766095954271564, 
+                    0.21277871056243602, 
+                    0.21277871056243602, 
+                    0.1775694720304102, 
+                    0.1775694720304102, 
+                    0.141803578948542, 
+                    0.141803578948542, 
+                    0.10209519699209932, 
+                    0.10209519699209932
+                ], 
+                0.5004851818084717
+            ], 
+            [
+                0.9516128897666931, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999668592143367, 
+                    0.9999668592143367, 
+                    0.9999666280750508, 
+                    0.9999666280750508, 
+                    0.9999664742404671, 
+                    0.9999664742404671, 
+                    0.9689345533538946, 
+                    0.9689345533538946, 
+                    0.9209404620139586, 
+                    0.9209404620139586, 
+                    0.8757696440937174, 
+                    0.8757696440937174, 
+                    0.8327278922684699, 
+                    0.8327278922684699, 
+                    0.7910125252638436, 
+                    0.7910125252638436, 
+                    0.7498794926852079, 
+                    0.7498794926852079, 
+                    0.7093754267944129, 
+                    0.7093754267944129, 
+                    0.6687958249540533, 
+                    0.6687958249540533, 
+                    0.628931529253556, 
+                    0.628931529253556, 
+                    0.5907025991511573, 
+                    0.5907025991511573, 
+                    0.5541920077376318, 
+                    0.5541920077376318, 
+                    0.518596910427187, 
+                    0.518596910427187, 
+                    0.4846868062208896, 
+                    0.4846868062208896, 
+                    0.4510034704091774, 
+                    0.4510034704091774, 
+                    0.4179440120712937, 
+                    0.4179440120712937, 
+                    0.38461313098654076, 
+                    0.38461313098654076, 
+                    0.35091723201778, 
+                    0.35091723201778, 
+                    0.3168450905933678, 
+                    0.3168450905933678, 
+                    0.28246025832327, 
+                    0.28246025832327, 
+                    0.24782449799187292, 
+                    0.24782449799187292, 
+                    0.21293139484871942, 
+                    0.21293139484871942, 
+                    0.17770762050994818, 
+                    0.17770762050994818, 
+                    0.14191988274038358, 
+                    0.14191988274038358, 
+                    0.10221529133935378, 
+                    0.10221529133935378
+                ], 
+                0.5011765360832214
+            ], 
+            [
+                0.9610992670059204, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999443829958022, 
+                    0.9999443829958022, 
+                    0.9999442329426936, 
+                    0.9999442329426936, 
+                    0.9999437620055049, 
+                    0.9999437620055049, 
+                    0.9999426709078097, 
+                    0.9999426709078097, 
+                    0.9692711522034086, 
+                    0.9692711522034086, 
+                    0.9210504957627053, 
+                    0.9210504957627053, 
+                    0.8756657585922745, 
+                    0.8756657585922745, 
+                    0.8324853272820372, 
+                    0.8324853272820372, 
+                    0.7906901660905745, 
+                    0.7906901660905745, 
+                    0.7495091301923371, 
+                    0.7495091301923371, 
+                    0.7089950007017546, 
+                    0.7089950007017546, 
+                    0.6684182070984296, 
+                    0.6684182070984296, 
+                    0.6285896567541356, 
+                    0.6285896567541356, 
+                    0.5904356514617346, 
+                    0.5904356514617346, 
+                    0.5540194628542502, 
+                    0.5540194628542502, 
+                    0.5185053252669637, 
+                    0.5185053252669637, 
+                    0.48466785828015074, 
+                    0.48466785828015074, 
+                    0.45101740360873627, 
+                    0.45101740360873627, 
+                    0.417959308481272, 
+                    0.417959308481272, 
+                    0.38460660957721204, 
+                    0.38460660957721204, 
+                    0.35088310734445266, 
+                    0.35088310734445266, 
+                    0.31678727960123926, 
+                    0.31678727960123926, 
+                    0.28238588989241314, 
+                    0.28238588989241314, 
+                    0.24774019006860679, 
+                    0.24774019006860679, 
+                    0.21284365739706848, 
+                    0.21284365739706848, 
+                    0.17762258883778986, 
+                    0.17762258883778986, 
+                    0.14184539720614675, 
+                    0.14184539720614675, 
+                    0.10217914002861031, 
+                    0.10217914002861031
+                ], 
+                0.5004044771194458
+            ], 
+            [
+                0.9706802368164062, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999512882738577, 
+                    0.9999512882738577, 
+                    0.9999512385523269, 
+                    0.9999512385523269, 
+                    0.9999510827818833, 
+                    0.9999510827818833, 
+                    0.9999507272302631, 
+                    0.9999507272302631, 
+                    0.9696749221873743, 
+                    0.9696749221873743, 
+                    0.9213709461877815, 
+                    0.9213709461877815, 
+                    0.8759090342142538, 
+                    0.8759090342142538, 
+                    0.8326573514550835, 
+                    0.8326573514550835, 
+                    0.790794607692599, 
+                    0.790794607692599, 
+                    0.7495440028680981, 
+                    0.7495440028680981, 
+                    0.7089734424162374, 
+                    0.7089734424162374, 
+                    0.668354174038429, 
+                    0.668354174038429, 
+                    0.6285272254269544, 
+                    0.6285272254269544, 
+                    0.5904268030687406, 
+                    0.5904268030687406, 
+                    0.5540887758221025, 
+                    0.5540887758221025, 
+                    0.5186586756233822, 
+                    0.5186586756233822, 
+                    0.4848669993385112, 
+                    0.4848669993385112, 
+                    0.45123941755506897, 
+                    0.45123941755506897, 
+                    0.4181575801305862, 
+                    0.4181575801305862, 
+                    0.3847711707359616, 
+                    0.3847711707359616, 
+                    0.3510151616921927, 
+                    0.3510151616921927, 
+                    0.31689347343312135, 
+                    0.31689347343312135, 
+                    0.2824728170178909, 
+                    0.2824728170178909, 
+                    0.24781212473115768, 
+                    0.24781212473115768, 
+                    0.2129039739294939, 
+                    0.2129039739294939, 
+                    0.17767276441447868, 
+                    0.17767276441447868, 
+                    0.14188503863614937, 
+                    0.14188503863614937, 
+                    0.10224151222790648, 
+                    0.10224151222790648
+                ], 
+                0.5009075403213501
+            ], 
+            [
+                0.9803566932678223, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999688239898995, 
+                    0.9999688239898995, 
+                    0.9999684554151957, 
+                    0.9999684554151957, 
+                    0.9999682238766551, 
+                    0.9999682238766551, 
+                    0.9701014490333768, 
+                    0.9701014490333768, 
+                    0.9218335242191094, 
+                    0.9218335242191094, 
+                    0.8763796242188115, 
+                    0.8763796242188115, 
+                    0.8330632013223692, 
+                    0.8330632013223692, 
+                    0.7910660626706907, 
+                    0.7910660626706907, 
+                    0.7496176016685808, 
+                    0.7496176016685808, 
+                    0.7088407839677945, 
+                    0.7088407839677945, 
+                    0.6679970759556899, 
+                    0.6679970759556899, 
+                    0.6280102911992145, 
+                    0.6280102911992145, 
+                    0.5898632218303349, 
+                    0.5898632218303349, 
+                    0.5535706089548321, 
+                    0.5535706089548321, 
+                    0.5182312400963244, 
+                    0.5182312400963244, 
+                    0.48457230060371836, 
+                    0.48457230060371836, 
+                    0.4510647316789001, 
+                    0.4510647316789001, 
+                    0.4180862267952506, 
+                    0.4180862267952506, 
+                    0.3847733797465855, 
+                    0.3847733797465855, 
+                    0.3510665524268425, 
+                    0.3510665524268425, 
+                    0.31697597123380045, 
+                    0.31697597123380045, 
+                    0.2825737162754923, 
+                    0.2825737162754923, 
+                    0.24792217368904837, 
+                    0.24792217368904837, 
+                    0.21301627661301042, 
+                    0.21301627661301042, 
+                    0.177780894871747, 
+                    0.177780894871747, 
+                    0.14198047661913252, 
+                    0.14198047661913252, 
+                    0.10235917976294011, 
+                    0.10235917976294011
+                ], 
+                0.5005232095718384
+            ], 
+            [
+                0.9901296496391296, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999655275428192, 
+                    0.9999655275428192, 
+                    0.9999655275428192, 
+                    0.9999655275428192, 
+                    0.9999655275428192, 
+                    0.9999655275428192, 
+                    0.9999655275428192, 
+                    0.9999655275428192, 
+                    0.9706143964721957, 
+                    0.9706143964721957, 
+                    0.9221109059667213, 
+                    0.9221109059667213, 
+                    0.8764563195082739, 
+                    0.8764563195082739, 
+                    0.8330162503478389, 
+                    0.8330162503478389, 
+                    0.7909632182573373, 
+                    0.7909632182573373, 
+                    0.7495001956624732, 
+                    0.7495001956624732, 
+                    0.7087372983339046, 
+                    0.7087372983339046, 
+                    0.6679355635863418, 
+                    0.6679355635863418, 
+                    0.6280264653166501, 
+                    0.6280264653166501, 
+                    0.5899880731963231, 
+                    0.5899880731963231, 
+                    0.5538001153780943, 
+                    0.5538001153780943, 
+                    0.5185447361374828, 
+                    0.5185447361374828, 
+                    0.4848954521897812, 
+                    0.4848954521897812, 
+                    0.4513639289688369, 
+                    0.4513639289688369, 
+                    0.4183051578622019, 
+                    0.4183051578622019, 
+                    0.38491126900716993, 
+                    0.38491126900716993, 
+                    0.35113704696620024, 
+                    0.35113704696620024, 
+                    0.31699750287571343, 
+                    0.31699750287571343, 
+                    0.2825622485423512, 
+                    0.2825622485423512, 
+                    0.24788908465985302, 
+                    0.24788908465985302, 
+                    0.21297082511326978, 
+                    0.21297082511326978, 
+                    0.17773033080778336, 
+                    0.17773033080778336, 
+                    0.14193236302340556, 
+                    0.14193236302340556, 
+                    0.10235704376593793, 
+                    0.10235704376593793
+                ], 
+                0.5008714199066162
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999766182838201, 
+                    0.9999766182838201, 
+                    0.9999766182838201, 
+                    0.9999766182838201, 
+                    0.9999766182838201, 
+                    0.9999766182838201, 
+                    0.9999766182838201, 
+                    0.9999766182838201, 
+                    0.9711554410889492, 
+                    0.9711554410889492, 
+                    0.9225402054564487, 
+                    0.9225402054564487, 
+                    0.8767773277302167, 
+                    0.8767773277302167, 
+                    0.833224541142399, 
+                    0.833224541142399, 
+                    0.7910521563535006, 
+                    0.7910521563535006, 
+                    0.7494496591238401, 
+                    0.7494496591238401, 
+                    0.7085532342911457, 
+                    0.7085532342911457, 
+                    0.6676195913478353, 
+                    0.6676195913478353, 
+                    0.627640652851802, 
+                    0.627640652851802, 
+                    0.589626146893495, 
+                    0.589626146893495, 
+                    0.5535204060650291, 
+                    0.5535204060650291, 
+                    0.5183651686774665, 
+                    0.5183651686774665, 
+                    0.48480310778647284, 
+                    0.48480310778647284, 
+                    0.45133606291280964, 
+                    0.45133606291280964, 
+                    0.4183055910155952, 
+                    0.4183055910155952, 
+                    0.3849235452969968, 
+                    0.3849235452969968, 
+                    0.3511533441140637, 
+                    0.3511533441140637, 
+                    0.3170150670760223, 
+                    0.3170150670760223, 
+                    0.2825801050013666, 
+                    0.2825801050013666, 
+                    0.24790639803261932, 
+                    0.24790639803261932, 
+                    0.2129874396945853, 
+                    0.2129874396945853, 
+                    0.17774593638854344, 
+                    0.17774593638854344, 
+                    0.14194633448561159, 
+                    0.14194633448561159, 
+                    0.10241651580612124, 
+                    0.10241651580612124
+                ], 
+                0.5005338191986084
+            ], 
+            [
+                1.0099687576293945, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999941010039671, 
+                    0.9999941010039671, 
+                    0.9999941010039671, 
+                    0.9999941010039671, 
+                    0.9999941010039671, 
+                    0.9999941010039671, 
+                    0.9999941010039671, 
+                    0.9999941010039671, 
+                    0.9717507002678663, 
+                    0.9717507002678663, 
+                    0.9230246435207279, 
+                    0.9230246435207279, 
+                    0.8771604650115182, 
+                    0.8771604650115182, 
+                    0.8334950587762999, 
+                    0.8334950587762999, 
+                    0.7912001724054777, 
+                    0.7912001724054777, 
+                    0.7494525343814618, 
+                    0.7494525343814618, 
+                    0.708413313582579, 
+                    0.708413313582579, 
+                    0.6673444912176173, 
+                    0.6673444912176173, 
+                    0.6273008366881277, 
+                    0.6273008366881277, 
+                    0.5893200506390449, 
+                    0.5893200506390449, 
+                    0.5533019272702862, 
+                    0.5533019272702862, 
+                    0.5182512487571063, 
+                    0.5182512487571063, 
+                    0.484764127203015, 
+                    0.484764127203015, 
+                    0.45135229751572675, 
+                    0.45135229751572675, 
+                    0.4183357911846895, 
+                    0.4183357911846895, 
+                    0.38495652290891164, 
+                    0.38495652290891164, 
+                    0.35118493099650977, 
+                    0.35118493099650977, 
+                    0.31704487397832826, 
+                    0.31704487397832826, 
+                    0.28260838427200896, 
+                    0.28260838427200896, 
+                    0.24793284076339334, 
+                    0.24793284076339334, 
+                    0.21301211104393253, 
+                    0.21301211104393253, 
+                    0.17776852463142254, 
+                    0.17776852463142254, 
+                    0.1419660133000472, 
+                    0.1419660133000472, 
+                    0.10248736213262796, 
+                    0.10248736213262796
+                ], 
+                0.5003822445869446
+            ], 
+            [
+                1.0200368165969849, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999979971689236, 
+                    0.9999979971689236, 
+                    0.9999066947179064, 
+                    0.9999066947179064, 
+                    0.9999007768229423, 
+                    0.9999007768229423, 
+                    0.9998887465795417, 
+                    0.9998887465795417, 
+                    0.9720764736092438, 
+                    0.9720764736092438, 
+                    0.9242756792913139, 
+                    0.9242756792913139, 
+                    0.8791357861445132, 
+                    0.8791357861445132, 
+                    0.8356185152734649, 
+                    0.8356185152734649, 
+                    0.7929321036049858, 
+                    0.7929321036049858, 
+                    0.7503936334835043, 
+                    0.7503936334835043, 
+                    0.7084669761871863, 
+                    0.7084669761871863, 
+                    0.6664087587644464, 
+                    0.6664087587644464, 
+                    0.6255775378390528, 
+                    0.6255775378390528, 
+                    0.5871494675545444, 
+                    0.5871494675545444, 
+                    0.5510292448038392, 
+                    0.5510292448038392, 
+                    0.5161226782097783, 
+                    0.5161226782097783, 
+                    0.4831395845460004, 
+                    0.4831395845460004, 
+                    0.4502840458045939, 
+                    0.4502840458045939, 
+                    0.4179044412178783, 
+                    0.4179044412178783, 
+                    0.3850399339615561, 
+                    0.3850399339615561, 
+                    0.35164221373749127, 
+                    0.35164221373749127, 
+                    0.3177492084688881, 
+                    0.3177492084688881, 
+                    0.28346159591856834, 
+                    0.28346159591856834, 
+                    0.24886232424378266, 
+                    0.24886232424378266, 
+                    0.21395894179708785, 
+                    0.21395894179708785, 
+                    0.1786779592055597, 
+                    0.1786779592055597, 
+                    0.14276668314413146, 
+                    0.14276668314413146, 
+                    0.1032227550775938, 
+                    0.1032227550775938
+                ], 
+                0.4998483955860138
+            ], 
+            [
+                1.0302053689956665, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999256558051273, 
+                    0.9999256558051273, 
+                    0.9999256558051273, 
+                    0.9999256558051273, 
+                    0.9999256558051273, 
+                    0.9999256558051273, 
+                    0.9726227845494333, 
+                    0.9726227845494333, 
+                    0.9248778461631247, 
+                    0.9248778461631247, 
+                    0.879841192931055, 
+                    0.879841192931055, 
+                    0.8362996570792907, 
+                    0.8362996570792907, 
+                    0.7934454262658674, 
+                    0.7934454262658674, 
+                    0.750647720320933, 
+                    0.750647720320933, 
+                    0.708444610007982, 
+                    0.708444610007982, 
+                    0.6661529277475411, 
+                    0.6661529277475411, 
+                    0.6251965715460304, 
+                    0.6251965715460304, 
+                    0.5867345557665866, 
+                    0.5867345557665866, 
+                    0.55064414783687, 
+                    0.55064414783687, 
+                    0.5158425150886963, 
+                    0.5158425150886963, 
+                    0.48296224639956803, 
+                    0.48296224639956803, 
+                    0.4502279166539766, 
+                    0.4502279166539766, 
+                    0.41793784937063866, 
+                    0.41793784937063866, 
+                    0.3851456695038189, 
+                    0.3851456695038189, 
+                    0.3518004102797871, 
+                    0.3518004102797871, 
+                    0.3179430196314295, 
+                    0.3179430196314295, 
+                    0.2836770919655495, 
+                    0.2836770919655495, 
+                    0.2490876278627785, 
+                    0.2490876278627785, 
+                    0.21418389816116093, 
+                    0.21418389816116093, 
+                    0.17889166596572975, 
+                    0.17889166596572975, 
+                    0.14295315933055863, 
+                    0.14295315933055863, 
+                    0.1034468543953366, 
+                    0.1034468543953366
+                ], 
+                0.5001153349876404
+            ], 
+            [
+                1.0404752492904663, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9999362556978572, 
+                    0.9512134219429802, 
+                    0.9512134219429802, 
+                    0.8991614450204393, 
+                    0.8991614450204393, 
+                    0.8501501952099997, 
+                    0.8501501952099997, 
+                    0.8029049556957221, 
+                    0.8029049556957221, 
+                    0.7560205758820899, 
+                    0.7560205758820899, 
+                    0.7102703565581844, 
+                    0.7102703565581844, 
+                    0.6642154209350423, 
+                    0.6642154209350423, 
+                    0.6203330273163709, 
+                    0.6203330273163709, 
+                    0.5807152650310484, 
+                    0.5807152650310484, 
+                    0.5449335949301518, 
+                    0.5449335949301518, 
+                    0.5108545023047613, 
+                    0.5108545023047613, 
+                    0.47958522599003317, 
+                    0.47958522599003317, 
+                    0.4481517426468661, 
+                    0.4481517426468661, 
+                    0.4171952064160253, 
+                    0.4171952064160253, 
+                    0.3853520686849886, 
+                    0.3853520686849886, 
+                    0.35265399979851425, 
+                    0.35265399979851425, 
+                    0.3192063097312259, 
+                    0.3192063097312259, 
+                    0.2851834942818205, 
+                    0.2851834942818205, 
+                    0.2507237060347069, 
+                    0.2507237060347069, 
+                    0.21585805337951403, 
+                    0.21585805337951403, 
+                    0.18050902588742024, 
+                    0.18050902588742024, 
+                    0.14437493941613178, 
+                    0.14437493941613178, 
+                    0.10328892963076106, 
+                    0.10328892963076106
+                ], 
+                0.49993544816970825
+            ], 
+            [
+                1.0508474111557007, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999536138731058, 
+                    0.999536138731058, 
+                    0.9995196677961782, 
+                    0.9995196677961782, 
+                    0.9994989418178728, 
+                    0.9994989418178728, 
+                    0.999443686057312, 
+                    0.999443686057312, 
+                    0.9505102737327316, 
+                    0.9505102737327316, 
+                    0.898544398385382, 
+                    0.898544398385382, 
+                    0.8499561915442171, 
+                    0.8499561915442171, 
+                    0.8027620741447096, 
+                    0.8027620741447096, 
+                    0.7555830987732198, 
+                    0.7555830987732198, 
+                    0.7094788590263957, 
+                    0.7094788590263957, 
+                    0.6632373991066713, 
+                    0.6632373991066713, 
+                    0.6194299265992164, 
+                    0.6194299265992164, 
+                    0.5797277364043576, 
+                    0.5797277364043576, 
+                    0.543701249518738, 
+                    0.543701249518738, 
+                    0.5096448912839503, 
+                    0.5096448912839503, 
+                    0.47850132334493933, 
+                    0.47850132334493933, 
+                    0.4474987894935395, 
+                    0.4474987894935395, 
+                    0.41706697509202906, 
+                    0.41706697509202906, 
+                    0.38571893378490446, 
+                    0.38571893378490446, 
+                    0.3534020549257343, 
+                    0.3534020549257343, 
+                    0.3202169072823649, 
+                    0.3202169072823649, 
+                    0.2863561245189314, 
+                    0.2863561245189314, 
+                    0.2519774186448389, 
+                    0.2519774186448389, 
+                    0.2171237370721736, 
+                    0.2171237370721736, 
+                    0.18171946784786572, 
+                    0.18171946784786572, 
+                    0.1454404831111065, 
+                    0.1454404831111065, 
+                    0.10438971777958898, 
+                    0.10438971777958898
+                ], 
+                0.4996837377548218
+            ], 
+            [
+                1.0613230466842651, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990161286057373, 
+                    0.9990161286057373, 
+                    0.9982615981815292, 
+                    0.9982615981815292, 
+                    0.9980152239457337, 
+                    0.9980152239457337, 
+                    0.9973922575574045, 
+                    0.9973922575574045, 
+                    0.9460722271029988, 
+                    0.9460722271029988, 
+                    0.8944033114232416, 
+                    0.8944033114232416, 
+                    0.8472934915835458, 
+                    0.8472934915835458, 
+                    0.800825468282383, 
+                    0.800825468282383, 
+                    0.7538095201411982, 
+                    0.7538095201411982, 
+                    0.7078042209083097, 
+                    0.7078042209083097, 
+                    0.6621848475782883, 
+                    0.6621848475782883, 
+                    0.6191891321505475, 
+                    0.6191891321505475, 
+                    0.5791197826930937, 
+                    0.5791197826930937, 
+                    0.5418387987041596, 
+                    0.5418387987041596, 
+                    0.5071341412418423, 
+                    0.5071341412418423, 
+                    0.47579341162112826, 
+                    0.47579341162112826, 
+                    0.44564868908435823, 
+                    0.44564868908435823, 
+                    0.41661809353922774, 
+                    0.41661809353922774, 
+                    0.38665459613397296, 
+                    0.38665459613397296, 
+                    0.35541253587495836, 
+                    0.35541253587495836, 
+                    0.322967578063412, 
+                    0.322967578063412, 
+                    0.28956652495976376, 
+                    0.28956652495976376, 
+                    0.25542510122498574, 
+                    0.25542510122498574, 
+                    0.22061679265035453, 
+                    0.22061679265035453, 
+                    0.18507052785958417, 
+                    0.18507052785958417, 
+                    0.14840022454967775, 
+                    0.14840022454967775, 
+                    0.1071758671209224, 
+                    0.1071758671209224
+                ], 
+                0.5006809830665588
+            ], 
+            [
+                1.071903109550476, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993245200877936, 
+                    0.9993245200877936, 
+                    0.9977678591302467, 
+                    0.9977678591302467, 
+                    0.9974858844215883, 
+                    0.9974858844215883, 
+                    0.9967493712855408, 
+                    0.9967493712855408, 
+                    0.9424968874198948, 
+                    0.9424968874198948, 
+                    0.8908733448704823, 
+                    0.8908733448704823, 
+                    0.8445512933894612, 
+                    0.8445512933894612, 
+                    0.7985406090867466, 
+                    0.7985406090867466, 
+                    0.7518800193775484, 
+                    0.7518800193775484, 
+                    0.7062838825712859, 
+                    0.7062838825712859, 
+                    0.6615779356954636, 
+                    0.6615779356954636, 
+                    0.619499788449378, 
+                    0.619499788449378, 
+                    0.5793592520957902, 
+                    0.5793592520957902, 
+                    0.5412094980974617, 
+                    0.5412094980974617, 
+                    0.5059234935125196, 
+                    0.5059234935125196, 
+                    0.47412680218254694, 
+                    0.47412680218254694, 
+                    0.44430125473108406, 
+                    0.44430125473108406, 
+                    0.4159884804711937, 
+                    0.4159884804711937, 
+                    0.38685124413519617, 
+                    0.38685124413519617, 
+                    0.3562929101082601, 
+                    0.3562929101082601, 
+                    0.32434377828986455, 
+                    0.32434377828986455, 
+                    0.29127130166629883, 
+                    0.29127130166629883, 
+                    0.2573213742257293, 
+                    0.2573213742257293, 
+                    0.22258519226033932, 
+                    0.22258519226033932, 
+                    0.1869949430671529, 
+                    0.1869949430671529, 
+                    0.15013197254414612, 
+                    0.15013197254414612, 
+                    0.10886721713280004, 
+                    0.10886721713280004
+                ], 
+                0.5004035830497742
+            ], 
+            [
+                1.0825886726379395, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999329390505139, 
+                    0.999329390505139, 
+                    0.999295497175232, 
+                    0.999295497175232, 
+                    0.9992441800109111, 
+                    0.9992441800109111, 
+                    0.9990869237278657, 
+                    0.9990869237278657, 
+                    0.9313609019230221, 
+                    0.9313609019230221, 
+                    0.8845440192053066, 
+                    0.8845440192053066, 
+                    0.8408227860186724, 
+                    0.8408227860186724, 
+                    0.7959064449788218, 
+                    0.7959064449788218, 
+                    0.7494760281316805, 
+                    0.7494760281316805, 
+                    0.7042736371008523, 
+                    0.7042736371008523, 
+                    0.6577406418146342, 
+                    0.6577406418146342, 
+                    0.6130599583660599, 
+                    0.6130599583660599, 
+                    0.5739937703597705, 
+                    0.5739937703597705, 
+                    0.5385218161250175, 
+                    0.5385218161250175, 
+                    0.5038599160146163, 
+                    0.5038599160146163, 
+                    0.47272364634185743, 
+                    0.47272364634185743, 
+                    0.44305817335440045, 
+                    0.44305817335440045, 
+                    0.4161833934373549, 
+                    0.4161833934373549, 
+                    0.38920790438905345, 
+                    0.38920790438905345, 
+                    0.36059883928756653, 
+                    0.36059883928756653, 
+                    0.33008219902768554, 
+                    0.33008219902768554, 
+                    0.29794396816172064, 
+                    0.29794396816172064, 
+                    0.26450936635222105, 
+                    0.26450936635222105, 
+                    0.22991241948009597, 
+                    0.22991241948009597, 
+                    0.19409147684742994, 
+                    0.19409147684742994, 
+                    0.15653882702751692, 
+                    0.15653882702751692, 
+                    0.11461009332259699, 
+                    0.11461009332259699
+                ], 
+                0.5005600452423096
+            ], 
+            [
+                1.0933806896209717, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999287264692206, 
+                    0.9999287264692206, 
+                    0.9982580480377298, 
+                    0.9982580480377298, 
+                    0.9958522956823899, 
+                    0.9958522956823899, 
+                    0.9594167103851927, 
+                    0.9594167103851927, 
+                    0.9240341997841175, 
+                    0.9240341997841175, 
+                    0.8814480575215752, 
+                    0.8814480575215752, 
+                    0.8373762875808876, 
+                    0.8373762875808876, 
+                    0.7919082101724696, 
+                    0.7919082101724696, 
+                    0.7452203815966938, 
+                    0.7452203815966938, 
+                    0.699230336161729, 
+                    0.699230336161729, 
+                    0.6527376493302532, 
+                    0.6527376493302532, 
+                    0.6091026862098985, 
+                    0.6091026862098985, 
+                    0.5693480398506398, 
+                    0.5693480398506398, 
+                    0.532851749837202, 
+                    0.532851749837202, 
+                    0.49847187565791135, 
+                    0.49847187565791135, 
+                    0.4679713496135797, 
+                    0.4679713496135797, 
+                    0.43974761335095525, 
+                    0.43974761335095525, 
+                    0.4143213842265144, 
+                    0.4143213842265144, 
+                    0.39116576408902487, 
+                    0.39116576408902487, 
+                    0.3676350009201816, 
+                    0.3676350009201816, 
+                    0.3413337764334419, 
+                    0.3413337764334419, 
+                    0.31209395586438504, 
+                    0.31209395586438504, 
+                    0.280444296553169, 
+                    0.280444296553169, 
+                    0.2466585846834168, 
+                    0.2466585846834168, 
+                    0.21077071418551147, 
+                    0.21077071418551147, 
+                    0.17221346927476688, 
+                    0.17221346927476688, 
+                    0.12878612137956869, 
+                    0.12878612137956869
+                ], 
+                0.5003812909126282
+            ], 
+            [
+                1.1042803525924683, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996990729004438, 
+                    0.9996990729004438, 
+                    0.9956874973645335, 
+                    0.9956874973645335, 
+                    0.9826999624479454, 
+                    0.9826999624479454, 
+                    0.9576167142868655, 
+                    0.9576167142868655, 
+                    0.9216872674127815, 
+                    0.9216872674127815, 
+                    0.8784113840509539, 
+                    0.8784113840509539, 
+                    0.8339034034343746, 
+                    0.8339034034343746, 
+                    0.7881438218991663, 
+                    0.7881438218991663, 
+                    0.7412298734444427, 
+                    0.7412298734444427, 
+                    0.6955558645015902, 
+                    0.6955558645015902, 
+                    0.6498857024555098, 
+                    0.6498857024555098, 
+                    0.6072110191007046, 
+                    0.6072110191007046, 
+                    0.5672904090310394, 
+                    0.5672904090310394, 
+                    0.5307758310049384, 
+                    0.5307758310049384, 
+                    0.49631649840871184, 
+                    0.49631649840871184, 
+                    0.4653717193217089, 
+                    0.4653717193217089, 
+                    0.43649069293822007, 
+                    0.43649069293822007, 
+                    0.4111035509864732, 
+                    0.4111035509864732, 
+                    0.38852709629775567, 
+                    0.38852709629775567, 
+                    0.36864096023280774, 
+                    0.36864096023280774, 
+                    0.35026980008924186, 
+                    0.35026980008924186, 
+                    0.32901283670012293, 
+                    0.32901283670012293, 
+                    0.30326625172471317, 
+                    0.30326625172471317, 
+                    0.2731559694621819, 
+                    0.2731559694621819, 
+                    0.23912895052821473, 
+                    0.23912895052821473, 
+                    0.20072304721623044, 
+                    0.20072304721623044, 
+                    0.15544455260604984, 
+                    0.15544455260604984
+                ], 
+                0.5005013942718506
+            ]
+        ]
+    }, 
+    {
+        "block_size": 60, 
+        "preprocessing_block_sizes": [
+            40
+        ], 
+        "pruning_parameters": [
+            [
+                0.9070294499397278, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999947302177825, 
+                    0.9999947302177825, 
+                    0.9999947302177825, 
+                    0.9999947302177825, 
+                    0.9999947302177825, 
+                    0.9999947302177825, 
+                    0.9814489657202798, 
+                    0.9814489657202798, 
+                    0.9347660420716798, 
+                    0.9347660420716798, 
+                    0.8908226141279385, 
+                    0.8908226141279385, 
+                    0.8487386899990113, 
+                    0.8487386899990113, 
+                    0.8077290176678102, 
+                    0.8077290176678102, 
+                    0.7668834732960208, 
+                    0.7668834732960208, 
+                    0.7262863780863359, 
+                    0.7262863780863359, 
+                    0.685156878792651, 
+                    0.685156878792651, 
+                    0.6425451234398267, 
+                    0.6425451234398267, 
+                    0.6019980605035726, 
+                    0.6019980605035726, 
+                    0.5647931521433613, 
+                    0.5647931521433613, 
+                    0.5312762454562525, 
+                    0.5312762454562525, 
+                    0.49860615652795054, 
+                    0.49860615652795054, 
+                    0.4670455425874924, 
+                    0.4670455425874924, 
+                    0.4359917786615339, 
+                    0.4359917786615339, 
+                    0.4048410979045961, 
+                    0.4048410979045961, 
+                    0.3734634711065462, 
+                    0.3734634711065462, 
+                    0.3414429115274639, 
+                    0.3414429115274639, 
+                    0.30886878804274637, 
+                    0.30886878804274637, 
+                    0.27587807753111393, 
+                    0.27587807753111393, 
+                    0.24255026018817555, 
+                    0.24255026018817555, 
+                    0.20890830923992404, 
+                    0.20890830923992404, 
+                    0.1748913309528612, 
+                    0.1748913309528612, 
+                    0.14028935575678245, 
+                    0.14028935575678245, 
+                    0.10216051354279178, 
+                    0.10216051354279178
+                ], 
+                0.5000011920928955
+            ], 
+            [
+                0.9159236550331116, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999971618483673, 
+                    0.9999971618483673, 
+                    0.9999971618483673, 
+                    0.9999971618483673, 
+                    0.9999971618483673, 
+                    0.9999971618483673, 
+                    0.9999971618483673, 
+                    0.9999971618483673, 
+                    0.9818991906118008, 
+                    0.9818991906118008, 
+                    0.9350288015766948, 
+                    0.9350288015766948, 
+                    0.8908754730568351, 
+                    0.8908754730568351, 
+                    0.8486678216976519, 
+                    0.8486678216976519, 
+                    0.807611619792279, 
+                    0.807611619792279, 
+                    0.7667677425737022, 
+                    0.7667677425737022, 
+                    0.7261804833201001, 
+                    0.7261804833201001, 
+                    0.6850739458907956, 
+                    0.6850739458907956, 
+                    0.6424919032978832, 
+                    0.6424919032978832, 
+                    0.6020565077893479, 
+                    0.6020565077893479, 
+                    0.565058494993782, 
+                    0.565058494993782, 
+                    0.5316961157886373, 
+                    0.5316961157886373, 
+                    0.4991168830806244, 
+                    0.4991168830806244, 
+                    0.46756235853674544, 
+                    0.46756235853674544, 
+                    0.43643664066734905, 
+                    0.43643664066734905, 
+                    0.40517819964706214, 
+                    0.40517819964706214, 
+                    0.3736711487423327, 
+                    0.3736711487423327, 
+                    0.3415509792675048, 
+                    0.3415509792675048, 
+                    0.3089079847333891, 
+                    0.3089079847333891, 
+                    0.2758705497209667, 
+                    0.2758705497209667, 
+                    0.24251263662808825, 
+                    0.24251263662808825, 
+                    0.20885324166980268, 
+                    0.20885324166980268, 
+                    0.17482920094691629, 
+                    0.17482920094691629, 
+                    0.1402305567736307, 
+                    0.1402305567736307, 
+                    0.10217654339303635, 
+                    0.10217654339303635
+                ], 
+                0.5006718039512634
+            ], 
+            [
+                0.924905002117157, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999994084110042, 
+                    0.9999994084110042, 
+                    0.9999994084110042, 
+                    0.9999994084110042, 
+                    0.9999994084110042, 
+                    0.9999994084110042, 
+                    0.9999994084110042, 
+                    0.9999994084110042, 
+                    0.9823193284424041, 
+                    0.9823193284424041, 
+                    0.9353823981180343, 
+                    0.9353823981180343, 
+                    0.8911768890483376, 
+                    0.8911768890483376, 
+                    0.8489166244478592, 
+                    0.8489166244478592, 
+                    0.8077869576273774, 
+                    0.8077869576273774, 
+                    0.7668241938193747, 
+                    0.7668241938193747, 
+                    0.726073837243317, 
+                    0.726073837243317, 
+                    0.6847668317592814, 
+                    0.6847668317592814, 
+                    0.6419585059364826, 
+                    0.6419585059364826, 
+                    0.6014681498716069, 
+                    0.6014681498716069, 
+                    0.564602704907837, 
+                    0.564602704907837, 
+                    0.5313995009139287, 
+                    0.5313995009139287, 
+                    0.49896745998845565, 
+                    0.49896745998845565, 
+                    0.4675163027233672, 
+                    0.4675163027233672, 
+                    0.43644135491056696, 
+                    0.43644135491056696, 
+                    0.40520010781615845, 
+                    0.40520010781615845, 
+                    0.37368025255648035, 
+                    0.37368025255648035, 
+                    0.3415500727582002, 
+                    0.3415500727582002, 
+                    0.30890190027100417, 
+                    0.30890190027100417, 
+                    0.2758615993290625, 
+                    0.2758615993290625, 
+                    0.2425025589127467, 
+                    0.2425025589127467, 
+                    0.20884348138260325, 
+                    0.20884348138260325, 
+                    0.17482113175328096, 
+                    0.17482113175328096, 
+                    0.1402254906207904, 
+                    0.1402254906207904, 
+                    0.10225065170470021, 
+                    0.10225065170470021
+                ], 
+                0.5000603795051575
+            ], 
+            [
+                0.9339744448661804, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9999754945134328, 
+                    0.9645757389461758, 
+                    0.9645757389461758, 
+                    0.9155359011699474, 
+                    0.9155359011699474, 
+                    0.8690605844240198, 
+                    0.8690605844240198, 
+                    0.8239880949312897, 
+                    0.8239880949312897, 
+                    0.7788055298158667, 
+                    0.7788055298158667, 
+                    0.7338680074575535, 
+                    0.7338680074575535, 
+                    0.6878710104812326, 
+                    0.6878710104812326, 
+                    0.6392517858970795, 
+                    0.6392517858970795, 
+                    0.5946005438446982, 
+                    0.5946005438446982, 
+                    0.5560241863735779, 
+                    0.5560241863735779, 
+                    0.5237072731178856, 
+                    0.5237072731178856, 
+                    0.49253509367377357, 
+                    0.49253509367377357, 
+                    0.46293482612231973, 
+                    0.46293482612231973, 
+                    0.43385654160492826, 
+                    0.43385654160492826, 
+                    0.404379810700915, 
+                    0.404379810700915, 
+                    0.3743522168506486, 
+                    0.3743522168506486, 
+                    0.34323997814425994, 
+                    0.34323997814425994, 
+                    0.31123748701793585, 
+                    0.31123748701793585, 
+                    0.27857874609821315, 
+                    0.27857874609821315, 
+                    0.24540418040676606, 
+                    0.24540418040676606, 
+                    0.21176708093988972, 
+                    0.21176708093988972, 
+                    0.17759895980882595, 
+                    0.17759895980882595, 
+                    0.14262405867593786, 
+                    0.14262405867593786, 
+                    0.10294333936429274, 
+                    0.10294333936429274
+                ], 
+                0.5004165768623352
+            ], 
+            [
+                0.943132758140564, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999915555078321, 
+                    0.9999915555078321, 
+                    0.9999915555078321, 
+                    0.9999915555078321, 
+                    0.9999915555078321, 
+                    0.9999915555078321, 
+                    0.9999915555078321, 
+                    0.9999915555078321, 
+                    0.964934177077891, 
+                    0.964934177077891, 
+                    0.9159616708905215, 
+                    0.9159616708905215, 
+                    0.8695814699230476, 
+                    0.8695814699230476, 
+                    0.8244851625969708, 
+                    0.8244851625969708, 
+                    0.7791057483078951, 
+                    0.7791057483078951, 
+                    0.7338265547330869, 
+                    0.7338265547330869, 
+                    0.6874170005834821, 
+                    0.6874170005834821, 
+                    0.6385032634950847, 
+                    0.6385032634950847, 
+                    0.5939423373761038, 
+                    0.5939423373761038, 
+                    0.5556493605803496, 
+                    0.5556493605803496, 
+                    0.5233921284139259, 
+                    0.5233921284139259, 
+                    0.49237832401998205, 
+                    0.49237832401998205, 
+                    0.46287806460128755, 
+                    0.46287806460128755, 
+                    0.4338591312032338, 
+                    0.4338591312032338, 
+                    0.4044295802853391, 
+                    0.4044295802853391, 
+                    0.3744152821402032, 
+                    0.3744152821402032, 
+                    0.34332797520103675, 
+                    0.34332797520103675, 
+                    0.31135145276615617, 
+                    0.31135145276615617, 
+                    0.2787120006731186, 
+                    0.2787120006731186, 
+                    0.2455491912456799, 
+                    0.2455491912456799, 
+                    0.21191649169287127, 
+                    0.21191649169287127, 
+                    0.17774547396889004, 
+                    0.17774547396889004, 
+                    0.14275755330478435, 
+                    0.14275755330478435, 
+                    0.10322065242353963, 
+                    0.10322065242353963
+                ], 
+                0.4999304413795471
+            ], 
+            [
+                0.9523809552192688, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997359934530574, 
+                    0.9997359934530574, 
+                    0.9997316499270262, 
+                    0.9997316499270262, 
+                    0.9997291742776666, 
+                    0.9997291742776666, 
+                    0.9997202603269045, 
+                    0.9997202603269045, 
+                    0.9996952975392027, 
+                    0.9996952975392027, 
+                    0.9495545485535619, 
+                    0.9495545485535619, 
+                    0.8968563310747509, 
+                    0.8968563310747509, 
+                    0.8460863141205465, 
+                    0.8460863141205465, 
+                    0.7946692992784937, 
+                    0.7946692992784937, 
+                    0.7436590472456419, 
+                    0.7436590472456419, 
+                    0.6910419410850667, 
+                    0.6910419410850667, 
+                    0.6360801001306159, 
+                    0.6360801001306159, 
+                    0.5885221408640853, 
+                    0.5885221408640853, 
+                    0.5489692778783846, 
+                    0.5489692778783846, 
+                    0.5160783478913672, 
+                    0.5160783478913672, 
+                    0.4857743946012888, 
+                    0.4857743946012888, 
+                    0.45788762622443646, 
+                    0.45788762622443646, 
+                    0.4311469924675791, 
+                    0.4311469924675791, 
+                    0.40407488162401284, 
+                    0.40407488162401284, 
+                    0.3761957590521013, 
+                    0.3761957590521013, 
+                    0.346654371048989, 
+                    0.346654371048989, 
+                    0.31568896832556503, 
+                    0.31568896832556503, 
+                    0.283653400975198, 
+                    0.283653400975198, 
+                    0.2507760121917871, 
+                    0.2507760121917871, 
+                    0.21715690826458872, 
+                    0.21715690826458872, 
+                    0.18271640155231403, 
+                    0.18271640155231403, 
+                    0.14706268477939685, 
+                    0.14706268477939685, 
+                    0.10527427142902711, 
+                    0.10527427142902711
+                ], 
+                0.4996997117996216
+            ], 
+            [
+                0.961719810962677, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999723744044116, 
+                    0.999723744044116, 
+                    0.9996971102817845, 
+                    0.9996971102817845, 
+                    0.999679130483887, 
+                    0.999679130483887, 
+                    0.9996148229184513, 
+                    0.9996148229184513, 
+                    0.9640200386332176, 
+                    0.9640200386332176, 
+                    0.9162684097951749, 
+                    0.9162684097951749, 
+                    0.8710219748852367, 
+                    0.8710219748852367, 
+                    0.8257320054887134, 
+                    0.8257320054887134, 
+                    0.7788545776695031, 
+                    0.7788545776695031, 
+                    0.7321870004247995, 
+                    0.7321870004247995, 
+                    0.6846770256595371, 
+                    0.6846770256595371, 
+                    0.637625569756204, 
+                    0.637625569756204, 
+                    0.5952588023981272, 
+                    0.5952588023981272, 
+                    0.5564473116929328, 
+                    0.5564473116929328, 
+                    0.5209689237861745, 
+                    0.5209689237861745, 
+                    0.48852828586846564, 
+                    0.48852828586846564, 
+                    0.45865184183574753, 
+                    0.45865184183574753, 
+                    0.4305166473562104, 
+                    0.4305166473562104, 
+                    0.4027030083929138, 
+                    0.4027030083929138, 
+                    0.3744722372550037, 
+                    0.3744722372550037, 
+                    0.3448364484304466, 
+                    0.3448364484304466, 
+                    0.31389066049402037, 
+                    0.31389066049402037, 
+                    0.2819291688344601, 
+                    0.2819291688344601, 
+                    0.249154128424105, 
+                    0.249154128424105, 
+                    0.21566205738318514, 
+                    0.21566205738318514, 
+                    0.18139549555175308, 
+                    0.18139549555175308, 
+                    0.14601370554968904, 
+                    0.14601370554968904, 
+                    0.10641449077090005, 
+                    0.10641449077090005
+                ], 
+                0.5007124543190002
+            ], 
+            [
+                0.9711502194404602, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996680831557981, 
+                    0.9996680831557981, 
+                    0.9994389960384221, 
+                    0.9994389960384221, 
+                    0.999367340076742, 
+                    0.999367340076742, 
+                    0.9990996259762037, 
+                    0.9990996259762037, 
+                    0.9625864616533744, 
+                    0.9625864616533744, 
+                    0.9156410998026171, 
+                    0.9156410998026171, 
+                    0.8707519020616896, 
+                    0.8707519020616896, 
+                    0.8250796793323113, 
+                    0.8250796793323113, 
+                    0.7774511777264141, 
+                    0.7774511777264141, 
+                    0.730405130634573, 
+                    0.730405130634573, 
+                    0.6832115323329251, 
+                    0.6832115323329251, 
+                    0.6368983154165045, 
+                    0.6368983154165045, 
+                    0.5946179491414432, 
+                    0.5946179491414432, 
+                    0.5557377768098465, 
+                    0.5557377768098465, 
+                    0.5199718039769682, 
+                    0.5199718039769682, 
+                    0.48672643022956547, 
+                    0.48672643022956547, 
+                    0.4564053002170975, 
+                    0.4564053002170975, 
+                    0.4284401489475803, 
+                    0.4284401489475803, 
+                    0.40147554309636624, 
+                    0.40147554309636624, 
+                    0.3744300910191889, 
+                    0.3744300910191889, 
+                    0.3458455067375853, 
+                    0.3458455067375853, 
+                    0.3156734355999413, 
+                    0.3156734355999413, 
+                    0.28423815761478183, 
+                    0.28423815761478183, 
+                    0.25177962046299995, 
+                    0.25177962046299995, 
+                    0.2184220748049373, 
+                    0.2184220748049373, 
+                    0.18411517996982277, 
+                    0.18411517996982277, 
+                    0.14847995202789444, 
+                    0.14847995202789444, 
+                    0.10872487742227646, 
+                    0.10872487742227646
+                ], 
+                0.5001481175422668
+            ], 
+            [
+                0.9806731343269348, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997557907790107, 
+                    0.9997557907790107, 
+                    0.9985935920731558, 
+                    0.9985935920731558, 
+                    0.9983000218434812, 
+                    0.9983000218434812, 
+                    0.9972668909228071, 
+                    0.9972668909228071, 
+                    0.9581532530187894, 
+                    0.9581532530187894, 
+                    0.9142383341239143, 
+                    0.9142383341239143, 
+                    0.8708936326214626, 
+                    0.8708936326214626, 
+                    0.8250792782143404, 
+                    0.8250792782143404, 
+                    0.7771579920816477, 
+                    0.7771579920816477, 
+                    0.730525408180831, 
+                    0.730525408180831, 
+                    0.6865775354190155, 
+                    0.6865775354190155, 
+                    0.6328243375234903, 
+                    0.6328243375234903, 
+                    0.5817698418752179, 
+                    0.5817698418752179, 
+                    0.5446323699702005, 
+                    0.5446323699702005, 
+                    0.5188198014668598, 
+                    0.5188198014668598, 
+                    0.48717493072955054, 
+                    0.48717493072955054, 
+                    0.4568598607153516, 
+                    0.4568598607153516, 
+                    0.4279518108399565, 
+                    0.4279518108399565, 
+                    0.40183684016270127, 
+                    0.40183684016270127, 
+                    0.3772201322247486, 
+                    0.3772201322247486, 
+                    0.3511654717094777, 
+                    0.3511654717094777, 
+                    0.32291469158706676, 
+                    0.32291469158706676, 
+                    0.29277747807778004, 
+                    0.29277747807778004, 
+                    0.26105732230221634, 
+                    0.26105732230221634, 
+                    0.22792862537695635, 
+                    0.22792862537695635, 
+                    0.19334014116384984, 
+                    0.19334014116384984, 
+                    0.15678802443407408, 
+                    0.15678802443407408, 
+                    0.11597425810577336, 
+                    0.11597425810577336
+                ], 
+                0.5004343390464783
+            ], 
+            [
+                0.9902894496917725, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999992128627616, 
+                    0.9999992128627616, 
+                    0.9993064820898929, 
+                    0.9993064820898929, 
+                    0.9980095799108384, 
+                    0.9980095799108384, 
+                    0.977224174672385, 
+                    0.977224174672385, 
+                    0.9482644760547527, 
+                    0.9482644760547527, 
+                    0.9117482705979413, 
+                    0.9117482705979413, 
+                    0.8677996533884681, 
+                    0.8677996533884681, 
+                    0.8210468157993361, 
+                    0.8210468157993361, 
+                    0.7725009429803477, 
+                    0.7725009429803477, 
+                    0.7244719590072726, 
+                    0.7244719590072726, 
+                    0.678189574882732, 
+                    0.678189574882732, 
+                    0.6293364330644928, 
+                    0.6293364330644928, 
+                    0.587228105244504, 
+                    0.587228105244504, 
+                    0.5486307304941936, 
+                    0.5486307304941936, 
+                    0.513793744121861, 
+                    0.513793744121861, 
+                    0.4811970209660729, 
+                    0.4811970209660729, 
+                    0.4513276937806805, 
+                    0.4513276937806805, 
+                    0.4238738073430602, 
+                    0.4238738073430602, 
+                    0.3987246955584033, 
+                    0.3987246955584033, 
+                    0.3763167940463375, 
+                    0.3763167940463375, 
+                    0.3539610029321748, 
+                    0.3539610029321748, 
+                    0.3290193222255337, 
+                    0.3290193222255337, 
+                    0.3012906904500575, 
+                    0.3012906904500575, 
+                    0.27113557410489186, 
+                    0.27113557410489186, 
+                    0.2388432869393732, 
+                    0.2388432869393732, 
+                    0.2044420696545138, 
+                    0.2044420696545138, 
+                    0.1674264023081082, 
+                    0.1674264023081082, 
+                    0.12570076128817792, 
+                    0.12570076128817792
+                ], 
+                0.5004326105117798
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999988601898114, 
+                    0.9999988601898114, 
+                    0.9983631998165786, 
+                    0.9983631998165786, 
+                    0.9911343231724663, 
+                    0.9911343231724663, 
+                    0.9743428034138897, 
+                    0.9743428034138897, 
+                    0.9471234111754581, 
+                    0.9471234111754581, 
+                    0.9094364430134813, 
+                    0.9094364430134813, 
+                    0.8647550536107351, 
+                    0.8647550536107351, 
+                    0.8175477812371024, 
+                    0.8175477812371024, 
+                    0.7684522208467316, 
+                    0.7684522208467316, 
+                    0.7207823121724501, 
+                    0.7207823121724501, 
+                    0.6729860536267931, 
+                    0.6729860536267931, 
+                    0.6260790219565434, 
+                    0.6260790219565434, 
+                    0.5828120349176531, 
+                    0.5828120349176531, 
+                    0.5445856188441456, 
+                    0.5445856188441456, 
+                    0.5097407758919589, 
+                    0.5097407758919589, 
+                    0.4774412226829166, 
+                    0.4774412226829166, 
+                    0.4476591399496123, 
+                    0.4476591399496123, 
+                    0.42035562076952193, 
+                    0.42035562076952193, 
+                    0.3953110898887287, 
+                    0.3953110898887287, 
+                    0.37328597928055784, 
+                    0.37328597928055784, 
+                    0.35377960923809715, 
+                    0.35377960923809715, 
+                    0.3361559727498181, 
+                    0.3361559727498181, 
+                    0.3186559907504839, 
+                    0.3186559907504839, 
+                    0.29727537373170204, 
+                    0.29727537373170204, 
+                    0.2707735070250696, 
+                    0.2707735070250696, 
+                    0.23952173781298808, 
+                    0.23952173781298808, 
+                    0.20330525765887283, 
+                    0.20330525765887283, 
+                    0.15971973571844045, 
+                    0.15971973571844045
+                ], 
+                0.4960443377494812
+            ], 
+            [
+                1.0098057985305786, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999965840424461, 
+                    0.9999965840424461, 
+                    0.9982363062308663, 
+                    0.9982363062308663, 
+                    0.9905727987629749, 
+                    0.9905727987629749, 
+                    0.9731124879224203, 
+                    0.9731124879224203, 
+                    0.945035721197269, 
+                    0.945035721197269, 
+                    0.906497166662792, 
+                    0.906497166662792, 
+                    0.8611173198251573, 
+                    0.8611173198251573, 
+                    0.8133991264444803, 
+                    0.8133991264444803, 
+                    0.7639265305634877, 
+                    0.7639265305634877, 
+                    0.7160845406134734, 
+                    0.7160845406134734, 
+                    0.6679589808284527, 
+                    0.6679589808284527, 
+                    0.6214865559011931, 
+                    0.6214865559011931, 
+                    0.57753553984873, 
+                    0.57753553984873, 
+                    0.5400054759297872, 
+                    0.5400054759297872, 
+                    0.5049815477616549, 
+                    0.5049815477616549, 
+                    0.47289653597486986, 
+                    0.47289653597486986, 
+                    0.4432593631418493, 
+                    0.4432593631418493, 
+                    0.4161268722956485, 
+                    0.4161268722956485, 
+                    0.3912542736892104, 
+                    0.3912542736892104, 
+                    0.36939313274702706, 
+                    0.36939313274702706, 
+                    0.35004257739760075, 
+                    0.35004257739760075, 
+                    0.3325261791037732, 
+                    0.3325261791037732, 
+                    0.3149848317273828, 
+                    0.3149848317273828, 
+                    0.2936386365528619, 
+                    0.2936386365528619, 
+                    0.26730826336875524, 
+                    0.26730826336875524, 
+                    0.23633166615553824, 
+                    0.23633166615553824, 
+                    0.20048668230253408, 
+                    0.20048668230253408, 
+                    0.15740594723965262, 
+                    0.15740594723965262
+                ], 
+                0.4739665389060974
+            ], 
+            [
+                1.0197077989578247, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999882243204768, 
+                    0.9999882243204768, 
+                    0.9980868465882211, 
+                    0.9980868465882211, 
+                    0.9900251870248538, 
+                    0.9900251870248538, 
+                    0.9718353401456379, 
+                    0.9718353401456379, 
+                    0.9429040803785564, 
+                    0.9429040803785564, 
+                    0.90350566762824, 
+                    0.90350566762824, 
+                    0.8574338897812541, 
+                    0.8574338897812541, 
+                    0.8092210032389142, 
+                    0.8092210032389142, 
+                    0.7594222107536047, 
+                    0.7594222107536047, 
+                    0.7112297054884033, 
+                    0.7112297054884033, 
+                    0.6634611617092261, 
+                    0.6634611617092261, 
+                    0.6157467873543191, 
+                    0.6157467873543191, 
+                    0.5736695950824501, 
+                    0.5736695950824501, 
+                    0.5346580049959483, 
+                    0.5346580049959483, 
+                    0.5005002071365712, 
+                    0.5005002071365712, 
+                    0.4683519758344283, 
+                    0.4683519758344283, 
+                    0.43891180274676306, 
+                    0.43891180274676306, 
+                    0.4119468991109116, 
+                    0.4119468991109116, 
+                    0.38724756311041664, 
+                    0.38724756311041664, 
+                    0.3655513696246744, 
+                    0.3655513696246744, 
+                    0.34635758290609775, 
+                    0.34635758290609775, 
+                    0.32896621834087914, 
+                    0.32896621834087914, 
+                    0.3113781191694749, 
+                    0.3113781191694749, 
+                    0.28995509720698875, 
+                    0.28995509720698875, 
+                    0.2636693586549809, 
+                    0.2636693586549809, 
+                    0.23286028139463372, 
+                    0.23286028139463372, 
+                    0.19729923091547716, 
+                    0.19729923091547716, 
+                    0.15465523210947507, 
+                    0.15465523210947507
+                ], 
+                0.4520905911922455
+            ], 
+            [
+                1.0297068357467651, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999635425433558, 
+                    0.9999635425433558, 
+                    0.9979317304661885, 
+                    0.9979317304661885, 
+                    0.9894159106654452, 
+                    0.9894159106654452, 
+                    0.9705155404798647, 
+                    0.9705155404798647, 
+                    0.9407056981634799, 
+                    0.9407056981634799, 
+                    0.9004635232640071, 
+                    0.9004635232640071, 
+                    0.8537138519239441, 
+                    0.8537138519239441, 
+                    0.8050277148927698, 
+                    0.8050277148927698, 
+                    0.7548627368636212, 
+                    0.7548627368636212, 
+                    0.7065850382492057, 
+                    0.7065850382492057, 
+                    0.6583160766024356, 
+                    0.6583160766024356, 
+                    0.6115106924311974, 
+                    0.6115106924311974, 
+                    0.5681235767642828, 
+                    0.5681235767642828, 
+                    0.5303407899130362, 
+                    0.5303407899130362, 
+                    0.4957699145236708, 
+                    0.4957699145236708, 
+                    0.46390870267506495, 
+                    0.46390870267506495, 
+                    0.4346097497431568, 
+                    0.4346097497431568, 
+                    0.40782023048256033, 
+                    0.40782023048256033, 
+                    0.38329434005736396, 
+                    0.38329434005736396, 
+                    0.3617611246309004, 
+                    0.3617611246309004, 
+                    0.34271967781410395, 
+                    0.34271967781410395, 
+                    0.3255563199153325, 
+                    0.3255563199153325, 
+                    0.3081273265178702, 
+                    0.3081273265178702, 
+                    0.2866508421821434, 
+                    0.2866508421821434, 
+                    0.26034263436323457, 
+                    0.26034263436323457, 
+                    0.2296053785524617, 
+                    0.2296053785524617, 
+                    0.19421268544076462, 
+                    0.19421268544076462, 
+                    0.15185928981012053, 
+                    0.15185928981012053
+                ], 
+                0.43055447936058044
+            ], 
+            [
+                1.0398038625717163, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999493021473906, 
+                    0.9999493021473906, 
+                    0.9977748420785513, 
+                    0.9977748420785513, 
+                    0.9888377749768185, 
+                    0.9888377749768185, 
+                    0.9691363757375242, 
+                    0.9691363757375242, 
+                    0.9384545319582094, 
+                    0.9384545319582094, 
+                    0.8973714590069631, 
+                    0.8973714590069631, 
+                    0.8499530147486235, 
+                    0.8499530147486235, 
+                    0.8007966146612269, 
+                    0.8007966146612269, 
+                    0.7503425009565703, 
+                    0.7503425009565703, 
+                    0.7017161147051414, 
+                    0.7017161147051414, 
+                    0.6538455256823532, 
+                    0.6538455256823532, 
+                    0.6058682877664943, 
+                    0.6058682877664943, 
+                    0.5641873367788076, 
+                    0.5641873367788076, 
+                    0.5251659465608717, 
+                    0.5251659465608717, 
+                    0.49133616588949514, 
+                    0.49133616588949514, 
+                    0.45946206473719925, 
+                    0.45946206473719925, 
+                    0.43035701775768265, 
+                    0.43035701775768265, 
+                    0.4037395470242573, 
+                    0.4037395470242573, 
+                    0.37938949008987866, 
+                    0.37938949008987866, 
+                    0.35802359716988047, 
+                    0.35802359716988047, 
+                    0.33914266423652367, 
+                    0.33914266423652367, 
+                    0.3220150168938759, 
+                    0.3220150168938759, 
+                    0.3044024067983625, 
+                    0.3044024067983625, 
+                    0.28288506605892405, 
+                    0.28288506605892405, 
+                    0.2567102175778844, 
+                    0.2567102175778844, 
+                    0.2262341064018602, 
+                    0.2262341064018602, 
+                    0.19122320234428364, 
+                    0.19122320234428364, 
+                    0.14942111310833708, 
+                    0.14942111310833708
+                ], 
+                0.4092849791049957
+            ], 
+            [
+                1.0499999523162842, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999232637281664, 
+                    0.9999232637281664, 
+                    0.9975235020054811, 
+                    0.9975235020054811, 
+                    0.9878670481017158, 
+                    0.9878670481017158, 
+                    0.9676863687445117, 
+                    0.9676863687445117, 
+                    0.9361514945138004, 
+                    0.9361514945138004, 
+                    0.8942349891434189, 
+                    0.8942349891434189, 
+                    0.8461653604209097, 
+                    0.8461653604209097, 
+                    0.7965605841407881, 
+                    0.7965605841407881, 
+                    0.7457705763378168, 
+                    0.7457705763378168, 
+                    0.6970871860222285, 
+                    0.6970871860222285, 
+                    0.6487021085488143, 
+                    0.6487021085488143, 
+                    0.601759954394398, 
+                    0.601759954394398, 
+                    0.5586046507278469, 
+                    0.5586046507278469, 
+                    0.5210001416362262, 
+                    0.5210001416362262, 
+                    0.48667458367163363, 
+                    0.48667458367163363, 
+                    0.45512384168828907, 
+                    0.45512384168828907, 
+                    0.4261583173406293, 
+                    0.4261583173406293, 
+                    0.3997187502479435, 
+                    0.3997187502479435, 
+                    0.37553957448944353, 
+                    0.37553957448944353, 
+                    0.3543284172739371, 
+                    0.3543284172739371, 
+                    0.3356807703903587, 
+                    0.3356807703903587, 
+                    0.31951000839413735, 
+                    0.31951000839413735, 
+                    0.3020759726209461, 
+                    0.3020759726209461, 
+                    0.2800665828209596, 
+                    0.2800665828209596, 
+                    0.2534800737863475, 
+                    0.2534800737863475, 
+                    0.2227663991494632, 
+                    0.2227663991494632, 
+                    0.18765234998135222, 
+                    0.18765234998135222, 
+                    0.14586925433938136, 
+                    0.14586925433938136
+                ], 
+                0.38858819007873535
+            ], 
+            [
+                1.0602960586547852, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998942295987787, 
+                    0.9998942295987787, 
+                    0.9971852495401762, 
+                    0.9971852495401762, 
+                    0.9859796658088128, 
+                    0.9859796658088128, 
+                    0.9661220893726303, 
+                    0.9661220893726303, 
+                    0.9337923581859953, 
+                    0.9337923581859953, 
+                    0.891059187471773, 
+                    0.891059187471773, 
+                    0.8423571525501558, 
+                    0.8423571525501558, 
+                    0.792326422950344, 
+                    0.792326422950344, 
+                    0.7412132577623973, 
+                    0.7412132577623973, 
+                    0.6923435772402621, 
+                    0.6923435772402621, 
+                    0.6442475093025438, 
+                    0.6442475093025438, 
+                    0.5962363400529996, 
+                    0.5962363400529996, 
+                    0.5546436816404741, 
+                    0.5546436816404741, 
+                    0.5160076902780292, 
+                    0.5160076902780292, 
+                    0.48240647307770096, 
+                    0.48240647307770096, 
+                    0.45077469646977264, 
+                    0.45077469646977264, 
+                    0.42204922365598213, 
+                    0.42204922365598213, 
+                    0.39576803303744346, 
+                    0.39576803303744346, 
+                    0.37175325704699047, 
+                    0.37175325704699047, 
+                    0.3506755512325832, 
+                    0.3506755512325832, 
+                    0.332237859129284, 
+                    0.332237859129284, 
+                    0.3178024339856728, 
+                    0.3178024339856728, 
+                    0.3021713646816897, 
+                    0.3021713646816897, 
+                    0.28147901507251916, 
+                    0.28147901507251916, 
+                    0.25583376766950955, 
+                    0.25583376766950955, 
+                    0.2257412529538973, 
+                    0.2257412529538973, 
+                    0.19093539592343187, 
+                    0.19093539592343187, 
+                    0.14907144235387415, 
+                    0.14907144235387415
+                ], 
+                0.36934518814086914
+            ], 
+            [
+                1.0706931352615356, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999875233583515, 
+                    0.999875233583515, 
+                    0.9970887952182435, 
+                    0.9970887952182435, 
+                    0.985903659710448, 
+                    0.985903659710448, 
+                    0.9646461356034062, 
+                    0.9646461356034062, 
+                    0.9313680881675869, 
+                    0.9313680881675869, 
+                    0.8878026151799454, 
+                    0.8878026151799454, 
+                    0.838467727144271, 
+                    0.838467727144271, 
+                    0.7879955642796838, 
+                    0.7879955642796838, 
+                    0.7366604849451798, 
+                    0.7366604849451798, 
+                    0.6874849173046708, 
+                    0.6874849173046708, 
+                    0.6394864803964097, 
+                    0.6394864803964097, 
+                    0.591336061901675, 
+                    0.591336061901675, 
+                    0.5500939401189682, 
+                    0.5500939401189682, 
+                    0.5112712434211144, 
+                    0.5112712434211144, 
+                    0.4778984964064205, 
+                    0.4778984964064205, 
+                    0.4464787116298666, 
+                    0.4464787116298666, 
+                    0.4178907307442181, 
+                    0.4178907307442181, 
+                    0.39180347626730966, 
+                    0.39180347626730966, 
+                    0.3679766263493457, 
+                    0.3679766263493457, 
+                    0.3470940304806498, 
+                    0.3470940304806498, 
+                    0.32871710921172737, 
+                    0.32871710921172737, 
+                    0.313122767092358, 
+                    0.313122767092358, 
+                    0.29580463382671873, 
+                    0.29580463382671873, 
+                    0.27390364393307104, 
+                    0.27390364393307104, 
+                    0.247597666583832, 
+                    0.247597666583832, 
+                    0.21732072311770492, 
+                    0.21732072311770492, 
+                    0.1827923087034568, 
+                    0.1827923087034568, 
+                    0.14180075867644892, 
+                    0.14180075867644892
+                ], 
+                0.3484489917755127
+            ], 
+            [
+                1.081192135810852, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998604723022254, 
+                    0.9998604723022254, 
+                    0.9970240228248358, 
+                    0.9970240228248358, 
+                    0.9861819507132935, 
+                    0.9861819507132935, 
+                    0.9631375345795723, 
+                    0.9631375345795723, 
+                    0.9289031255304788, 
+                    0.9289031255304788, 
+                    0.8845126131555308, 
+                    0.8845126131555308, 
+                    0.8345589658888034, 
+                    0.8345589658888034, 
+                    0.7836713438838652, 
+                    0.7836713438838652, 
+                    0.732078550978847, 
+                    0.732078550978847, 
+                    0.6827162474404865, 
+                    0.6827162474404865, 
+                    0.6347284199604881, 
+                    0.6347284199604881, 
+                    0.5865304084475258, 
+                    0.5865304084475258, 
+                    0.5453993748567225, 
+                    0.5453993748567225, 
+                    0.5067316821360008, 
+                    0.5067316821360008, 
+                    0.47347083920168437, 
+                    0.47347083920168437, 
+                    0.44222586985528, 
+                    0.44222586985528, 
+                    0.41381253638251075, 
+                    0.41381253638251075, 
+                    0.3879083061197888, 
+                    0.3879083061197888, 
+                    0.3642654611491732, 
+                    0.3642654611491732, 
+                    0.3435622815568205, 
+                    0.3435622815568205, 
+                    0.32530424442545425, 
+                    0.32530424442545425, 
+                    0.3087644154151318, 
+                    0.3087644154151318, 
+                    0.2912432411899273, 
+                    0.2912432411899273, 
+                    0.2696746117422485, 
+                    0.2696746117422485, 
+                    0.24378575048876477, 
+                    0.24378575048876477, 
+                    0.21398017676451805, 
+                    0.21398017676451805, 
+                    0.18003143445589487, 
+                    0.18003143445589487, 
+                    0.13983695478600017, 
+                    0.13983695478600017
+                ], 
+                0.3288789391517639
+            ], 
+            [
+                1.0917941331863403, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998571938898488, 
+                    0.9998571938898488, 
+                    0.9966856551528098, 
+                    0.9966856551528098, 
+                    0.9844619150188961, 
+                    0.9844619150188961, 
+                    0.9614166621661876, 
+                    0.9614166621661876, 
+                    0.9263688663733677, 
+                    0.9263688663733677, 
+                    0.8811805767700676, 
+                    0.8811805767700676, 
+                    0.8306208877291579, 
+                    0.8306208877291579, 
+                    0.7793997505429657, 
+                    0.7793997505429657, 
+                    0.7273006483444076, 
+                    0.7273006483444076, 
+                    0.6784707814100064, 
+                    0.6784707814100064, 
+                    0.629164473444083, 
+                    0.629164473444083, 
+                    0.5828087946898761, 
+                    0.5828087946898761, 
+                    0.540091887815224, 
+                    0.540091887815224, 
+                    0.5024375536338835, 
+                    0.5024375536338835, 
+                    0.46908083631107444, 
+                    0.46908083631107444, 
+                    0.4380359215197686, 
+                    0.4380359215197686, 
+                    0.40979739583767627, 
+                    0.40979739583767627, 
+                    0.3840725457587815, 
+                    0.3840725457587815, 
+                    0.36060622531434955, 
+                    0.36060622531434955, 
+                    0.34007524956410623, 
+                    0.34007524956410623, 
+                    0.32170877564494466, 
+                    0.32170877564494466, 
+                    0.30659309399009516, 
+                    0.30659309399009516, 
+                    0.28981750790110766, 
+                    0.28981750790110766, 
+                    0.26842338159180523, 
+                    0.26842338159180523, 
+                    0.24264810399373676, 
+                    0.24264810399373676, 
+                    0.2129450223428359, 
+                    0.2129450223428359, 
+                    0.1790518376340006, 
+                    0.1790518376340006, 
+                    0.1388088302287822, 
+                    0.1388088302287822
+                ], 
+                0.31048741936683655
+            ], 
+            [
+                1.1024999618530273, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999818972392761, 
+                    0.999818972392761, 
+                    0.9965834108754436, 
+                    0.9965834108754436, 
+                    0.9846739089406779, 
+                    0.9846739089406779, 
+                    0.9598194450326772, 
+                    0.9598194450326772, 
+                    0.9237992634634115, 
+                    0.9237992634634115, 
+                    0.8778053616408806, 
+                    0.8778053616408806, 
+                    0.8266673578912396, 
+                    0.8266673578912396, 
+                    0.774981964887238, 
+                    0.774981964887238, 
+                    0.7229246189978634, 
+                    0.7229246189978634, 
+                    0.6733347419863056, 
+                    0.6733347419863056, 
+                    0.6248693920218098, 
+                    0.6248693920218098, 
+                    0.5779619409622143, 
+                    0.5779619409622143, 
+                    0.5351208055907625, 
+                    0.5351208055907625, 
+                    0.49830642611155307, 
+                    0.49830642611155307, 
+                    0.4646334051986498, 
+                    0.4646334051986498, 
+                    0.43390324686405957, 
+                    0.43390324686405957, 
+                    0.4058137436261221, 
+                    0.4058137436261221, 
+                    0.3802726213495035, 
+                    0.3802726213495035, 
+                    0.35697710512501873, 
+                    0.35697710512501873, 
+                    0.3365820776584649, 
+                    0.3365820776584649, 
+                    0.31857477489710107, 
+                    0.31857477489710107, 
+                    0.3025261244352073, 
+                    0.3025261244352073, 
+                    0.2873259282387083, 
+                    0.2873259282387083, 
+                    0.26846273318210984, 
+                    0.26846273318210984, 
+                    0.2446823468181094, 
+                    0.2446823468181094, 
+                    0.2164217284274265, 
+                    0.2164217284274265, 
+                    0.18356566595535886, 
+                    0.18356566595535886, 
+                    0.1440124340388037, 
+                    0.1440124340388037
+                ], 
+                0.2929435968399048
+            ]
+        ]
+    }, 
+    {
+        "block_size": 61, 
+        "preprocessing_block_sizes": [
+            40
+        ], 
+        "pruning_parameters": [
+            [
+                0.908447265625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999944720964496, 
+                    0.9999944720964496, 
+                    0.9999944720964496, 
+                    0.9999944720964496, 
+                    0.9999944720964496, 
+                    0.9999944720964496, 
+                    0.9825335530818945, 
+                    0.9825335530818945, 
+                    0.9359744247459464, 
+                    0.9359744247459464, 
+                    0.892344371780125, 
+                    0.892344371780125, 
+                    0.8505899377721989, 
+                    0.8505899377721989, 
+                    0.8095012590312783, 
+                    0.8095012590312783, 
+                    0.7684774081983466, 
+                    0.7684774081983466, 
+                    0.7268359017883976, 
+                    0.7268359017883976, 
+                    0.684927094756719, 
+                    0.684927094756719, 
+                    0.6428702013188013, 
+                    0.6428702013188013, 
+                    0.601950544681696, 
+                    0.601950544681696, 
+                    0.564976629613999, 
+                    0.564976629613999, 
+                    0.5306894748166938, 
+                    0.5306894748166938, 
+                    0.4972203250560627, 
+                    0.4972203250560627, 
+                    0.46613438230341786, 
+                    0.46613438230341786, 
+                    0.43539084976212555, 
+                    0.43539084976212555, 
+                    0.40447454429178464, 
+                    0.40447454429178464, 
+                    0.37335355196041453, 
+                    0.37335355196041453, 
+                    0.34147077827282835, 
+                    0.34147077827282835, 
+                    0.3090689349663447, 
+                    0.3090689349663447, 
+                    0.2761793566808943, 
+                    0.2761793566808943, 
+                    0.24290916755011, 
+                    0.24290916755011, 
+                    0.2092904511604803, 
+                    0.2092904511604803, 
+                    0.1752690052262502, 
+                    0.1752690052262502, 
+                    0.1406288475449126, 
+                    0.1406288475449126, 
+                    0.10266502064902458, 
+                    0.10266502064902458
+                ], 
+                0.5006799101829529
+            ], 
+            [
+                0.9172120690345764, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999770292635034, 
+                    0.9999770292635034, 
+                    0.9999770292635034, 
+                    0.9999770292635034, 
+                    0.9999770292635034, 
+                    0.9999770292635034, 
+                    0.9999770292635034, 
+                    0.9999770292635034, 
+                    0.9646792898336283, 
+                    0.9646792898336283, 
+                    0.9156016770240422, 
+                    0.9156016770240422, 
+                    0.8695635910666023, 
+                    0.8695635910666023, 
+                    0.8246378392538912, 
+                    0.8246378392538912, 
+                    0.7798054718025464, 
+                    0.7798054718025464, 
+                    0.7339032751445108, 
+                    0.7339032751445108, 
+                    0.6875487372404866, 
+                    0.6875487372404866, 
+                    0.6409139878255492, 
+                    0.6409139878255492, 
+                    0.5961153820749473, 
+                    0.5961153820749473, 
+                    0.5578658284159843, 
+                    0.5578658284159843, 
+                    0.523866971361208, 
+                    0.523866971361208, 
+                    0.49095373337770043, 
+                    0.49095373337770043, 
+                    0.46171764283116523, 
+                    0.46171764283116523, 
+                    0.4328007567296573, 
+                    0.4328007567296573, 
+                    0.4034710447650162, 
+                    0.4034710447650162, 
+                    0.37372957554182046, 
+                    0.37372957554182046, 
+                    0.34276430820594894, 
+                    0.34276430820594894, 
+                    0.31098627937999807, 
+                    0.31098627937999807, 
+                    0.2784655371039547, 
+                    0.2784655371039547, 
+                    0.24538145639760497, 
+                    0.24538145639760497, 
+                    0.21179974025829162, 
+                    0.21179974025829162, 
+                    0.17766454466269463, 
+                    0.17766454466269463, 
+                    0.14270311325814808, 
+                    0.14270311325814808, 
+                    0.10316070451412482, 
+                    0.10316070451412482
+                ], 
+                0.5008359551429749
+            ], 
+            [
+                0.9260613918304443, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998178946748414, 
+                    0.9998178946748414, 
+                    0.9998157673541163, 
+                    0.9998157673541163, 
+                    0.9998124397888584, 
+                    0.9998124397888584, 
+                    0.9998018694822569, 
+                    0.9998018694822569, 
+                    0.9997726614264154, 
+                    0.9997726614264154, 
+                    0.9496443456907059, 
+                    0.9496443456907059, 
+                    0.8978682545560381, 
+                    0.8978682545560381, 
+                    0.8475524789282614, 
+                    0.8475524789282614, 
+                    0.7972232552167052, 
+                    0.7972232552167052, 
+                    0.7451549616845337, 
+                    0.7451549616845337, 
+                    0.6925503348558072, 
+                    0.6925503348558072, 
+                    0.6398744496395415, 
+                    0.6398744496395415, 
+                    0.5905762772597045, 
+                    0.5905762772597045, 
+                    0.5506686558275871, 
+                    0.5506686558275871, 
+                    0.5166070519697027, 
+                    0.5166070519697027, 
+                    0.48432379704321116, 
+                    0.48432379704321116, 
+                    0.45702179530519776, 
+                    0.45702179530519776, 
+                    0.43038131961990184, 
+                    0.43038131961990184, 
+                    0.4032027540169678, 
+                    0.4032027540169678, 
+                    0.37538913220173614, 
+                    0.37538913220173614, 
+                    0.34575845148665213, 
+                    0.34575845148665213, 
+                    0.31488835793167386, 
+                    0.31488835793167386, 
+                    0.282896823308449, 
+                    0.282896823308449, 
+                    0.25005658199854297, 
+                    0.25005658199854297, 
+                    0.21647662612536575, 
+                    0.21647662612536575, 
+                    0.1820909509263658, 
+                    0.1820909509263658, 
+                    0.146523209426222, 
+                    0.146523209426222, 
+                    0.10470971489786748, 
+                    0.10470971489786748
+                ], 
+                0.5008252263069153
+            ], 
+            [
+                0.9349961280822754, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999999939244755, 
+                    0.9999999939244755, 
+                    0.9996752151829026, 
+                    0.9996752151829026, 
+                    0.9996134274030353, 
+                    0.9996134274030353, 
+                    0.9995746039250262, 
+                    0.9995746039250262, 
+                    0.9994710658781344, 
+                    0.9994710658781344, 
+                    0.963446218429856, 
+                    0.963446218429856, 
+                    0.9154992368702475, 
+                    0.9154992368702475, 
+                    0.8713012354461452, 
+                    0.8713012354461452, 
+                    0.8262323240802637, 
+                    0.8262323240802637, 
+                    0.7799920403128441, 
+                    0.7799920403128441, 
+                    0.7322556323891833, 
+                    0.7322556323891833, 
+                    0.6850537017740417, 
+                    0.6850537017740417, 
+                    0.6389893768381995, 
+                    0.6389893768381995, 
+                    0.5963495756620333, 
+                    0.5963495756620333, 
+                    0.5572043636442878, 
+                    0.5572043636442878, 
+                    0.5209801937388572, 
+                    0.5209801937388572, 
+                    0.4872327980684276, 
+                    0.4872327980684276, 
+                    0.45709396115401923, 
+                    0.45709396115401923, 
+                    0.42905435482775983, 
+                    0.42905435482775983, 
+                    0.4013434839221235, 
+                    0.4013434839221235, 
+                    0.37342758862377007, 
+                    0.37342758862377007, 
+                    0.34392846854052106, 
+                    0.34392846854052106, 
+                    0.31323285813504925, 
+                    0.31323285813504925, 
+                    0.2814232227458109, 
+                    0.2814232227458109, 
+                    0.24875110869810846, 
+                    0.24875110869810846, 
+                    0.2153304241039926, 
+                    0.2153304241039926, 
+                    0.18112122375116316, 
+                    0.18112122375116316, 
+                    0.14579277129380194, 
+                    0.14579277129380194, 
+                    0.1062041364868121, 
+                    0.1062041364868121
+                ], 
+                0.4992619454860687
+            ], 
+            [
+                0.9440170526504517, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995457758045375, 
+                    0.9995457758045375, 
+                    0.999396776642312, 
+                    0.999396776642312, 
+                    0.9993515189738278, 
+                    0.9993515189738278, 
+                    0.9992285533707662, 
+                    0.9992285533707662, 
+                    0.9623930692641839, 
+                    0.9623930692641839, 
+                    0.9147925815705024, 
+                    0.9147925815705024, 
+                    0.8711366977661071, 
+                    0.8711366977661071, 
+                    0.8258207947012289, 
+                    0.8258207947012289, 
+                    0.779064866747914, 
+                    0.779064866747914, 
+                    0.7309913090813682, 
+                    0.7309913090813682, 
+                    0.6841082163190757, 
+                    0.6841082163190757, 
+                    0.6391539634971826, 
+                    0.6391539634971826, 
+                    0.5980865363039768, 
+                    0.5980865363039768, 
+                    0.5586610890661519, 
+                    0.5586610890661519, 
+                    0.5212000740174102, 
+                    0.5212000740174102, 
+                    0.4867833246982224, 
+                    0.4867833246982224, 
+                    0.4557454705396413, 
+                    0.4557454705396413, 
+                    0.42764868684490115, 
+                    0.42764868684490115, 
+                    0.4003843055327341, 
+                    0.4003843055327341, 
+                    0.3731132443620858, 
+                    0.3731132443620858, 
+                    0.3442031648816971, 
+                    0.3442031648816971, 
+                    0.31396637312832426, 
+                    0.31396637312832426, 
+                    0.28247690180437196, 
+                    0.28247690180437196, 
+                    0.2500061876108982, 
+                    0.2500061876108982, 
+                    0.2166841267711693, 
+                    0.2166841267711693, 
+                    0.1824756592765057, 
+                    0.1824756592765057, 
+                    0.14702803746890744, 
+                    0.14702803746890744, 
+                    0.10745104872995899, 
+                    0.10745104872995899
+                ], 
+                0.5004453063011169
+            ], 
+            [
+                0.953125, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.998973562502227, 
+                    0.998973562502227, 
+                    0.9987682825605441, 
+                    0.9987682825605441, 
+                    0.9981110855411549, 
+                    0.9981110855411549, 
+                    0.9584685647579221, 
+                    0.9584685647579221, 
+                    0.9128972186869383, 
+                    0.9128972186869383, 
+                    0.8710971166568977, 
+                    0.8710971166568977, 
+                    0.8254559263998986, 
+                    0.8254559263998986, 
+                    0.7781057564842191, 
+                    0.7781057564842191, 
+                    0.7300739088699163, 
+                    0.7300739088699163, 
+                    0.6835821949946135, 
+                    0.6835821949946135, 
+                    0.6376908346337498, 
+                    0.6376908346337498, 
+                    0.5909953307576838, 
+                    0.5909953307576838, 
+                    0.5540131798645966, 
+                    0.5540131798645966, 
+                    0.5194900211233624, 
+                    0.5194900211233624, 
+                    0.4849830415904997, 
+                    0.4849830415904997, 
+                    0.45475986088166354, 
+                    0.45475986088166354, 
+                    0.4261028641643119, 
+                    0.4261028641643119, 
+                    0.3995595352170097, 
+                    0.3995595352170097, 
+                    0.37397124706959234, 
+                    0.37397124706959234, 
+                    0.34675620455853506, 
+                    0.34675620455853506, 
+                    0.3178748595924707, 
+                    0.3178748595924707, 
+                    0.28731090237739876, 
+                    0.28731090237739876, 
+                    0.25538672424923975, 
+                    0.25538672424923975, 
+                    0.22227410777140577, 
+                    0.22227410777140577, 
+                    0.1879466218855567, 
+                    0.1879466218855567, 
+                    0.15197824853080655, 
+                    0.15197824853080655, 
+                    0.11186499336143961, 
+                    0.11186499336143961
+                ], 
+                0.5002219080924988
+            ], 
+            [
+                0.962320864200592, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999530249215549, 
+                    0.9999530249215549, 
+                    0.9991529638556584, 
+                    0.9991529638556584, 
+                    0.9980866568651696, 
+                    0.9980866568651696, 
+                    0.9768422103276084, 
+                    0.9768422103276084, 
+                    0.9452895548341983, 
+                    0.9452895548341983, 
+                    0.9097091660909826, 
+                    0.9097091660909826, 
+                    0.8695428832643554, 
+                    0.8695428832643554, 
+                    0.8232337177213732, 
+                    0.8232337177213732, 
+                    0.7751751281068665, 
+                    0.7751751281068665, 
+                    0.7263705681487943, 
+                    0.7263705681487943, 
+                    0.6792362950724781, 
+                    0.6792362950724781, 
+                    0.6349862638328269, 
+                    0.6349862638328269, 
+                    0.5880445898910295, 
+                    0.5880445898910295, 
+                    0.5525569630136381, 
+                    0.5525569630136381, 
+                    0.5158533086748109, 
+                    0.5158533086748109, 
+                    0.48179291151812537, 
+                    0.48179291151812537, 
+                    0.4515152272279702, 
+                    0.4515152272279702, 
+                    0.423730587572133, 
+                    0.423730587572133, 
+                    0.39807598866044036, 
+                    0.39807598866044036, 
+                    0.37480584348581264, 
+                    0.37480584348581264, 
+                    0.35058113041989714, 
+                    0.35058113041989714, 
+                    0.3243076700300646, 
+                    0.3243076700300646, 
+                    0.29557363807309966, 
+                    0.29557363807309966, 
+                    0.26477406137511106, 
+                    0.26477406137511106, 
+                    0.2321725311488114, 
+                    0.2321725311488114, 
+                    0.1977890461388631, 
+                    0.1977890461388631, 
+                    0.16114391451216703, 
+                    0.16114391451216703, 
+                    0.12023296248566677, 
+                    0.12023296248566677
+                ], 
+                0.5003566741943359
+            ], 
+            [
+                0.9716054201126099, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999748859796423, 
+                    0.9999748859796423, 
+                    0.9980506652875849, 
+                    0.9980506652875849, 
+                    0.9904396857268198, 
+                    0.9904396857268198, 
+                    0.9724542248751559, 
+                    0.9724542248751559, 
+                    0.9442615143159087, 
+                    0.9442615143159087, 
+                    0.9075303180868028, 
+                    0.9075303180868028, 
+                    0.8665877365954903, 
+                    0.8665877365954903, 
+                    0.8198618991303133, 
+                    0.8198618991303133, 
+                    0.7715215363374297, 
+                    0.7715215363374297, 
+                    0.722581242021667, 
+                    0.722581242021667, 
+                    0.6751728211360617, 
+                    0.6751728211360617, 
+                    0.6296610311062876, 
+                    0.6296610311062876, 
+                    0.5861364383096475, 
+                    0.5861364383096475, 
+                    0.5479011110268392, 
+                    0.5479011110268392, 
+                    0.5120553173976831, 
+                    0.5120553173976831, 
+                    0.47833346207505906, 
+                    0.47833346207505906, 
+                    0.44814802184816654, 
+                    0.44814802184816654, 
+                    0.4204742086448827, 
+                    0.4204742086448827, 
+                    0.3950062593768077, 
+                    0.3950062593768077, 
+                    0.37263769938799063, 
+                    0.37263769938799063, 
+                    0.35229961555389655, 
+                    0.35229961555389655, 
+                    0.3338870234060286, 
+                    0.3338870234060286, 
+                    0.3134533037985029, 
+                    0.3134533037985029, 
+                    0.288681369150125, 
+                    0.288681369150125, 
+                    0.2597574467092026, 
+                    0.2597574467092026, 
+                    0.2270706534839083, 
+                    0.2270706534839083, 
+                    0.19023495022120213, 
+                    0.19023495022120213, 
+                    0.14692830027750506, 
+                    0.14692830027750506
+                ], 
+                0.5005061626434326
+            ], 
+            [
+                0.9809795022010803, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999623934160164, 
+                    0.9999623934160164, 
+                    0.9978567695581771, 
+                    0.9978567695581771, 
+                    0.9893060297086957, 
+                    0.9893060297086957, 
+                    0.9711565566066985, 
+                    0.9711565566066985, 
+                    0.9421289861138712, 
+                    0.9421289861138712, 
+                    0.9046348740919979, 
+                    0.9046348740919979, 
+                    0.8631028392867719, 
+                    0.8631028392867719, 
+                    0.815869922414749, 
+                    0.815869922414749, 
+                    0.7672092026919117, 
+                    0.7672092026919117, 
+                    0.7179488001805006, 
+                    0.7179488001805006, 
+                    0.670720525861164, 
+                    0.670720525861164, 
+                    0.6244990003966855, 
+                    0.6244990003966855, 
+                    0.5819511550946582, 
+                    0.5819511550946582, 
+                    0.5429754655299642, 
+                    0.5429754655299642, 
+                    0.5076859437978999, 
+                    0.5076859437978999, 
+                    0.47397135953150743, 
+                    0.47397135953150743, 
+                    0.4439673650199241, 
+                    0.4439673650199241, 
+                    0.4164468691712883, 
+                    0.4164468691712883, 
+                    0.39113680910351295, 
+                    0.39113680910351295, 
+                    0.3688978513608225, 
+                    0.3688978513608225, 
+                    0.3486596753203921, 
+                    0.3486596753203921, 
+                    0.33102291882695245, 
+                    0.33102291882695245, 
+                    0.3141699025595195, 
+                    0.3141699025595195, 
+                    0.2931602234162359, 
+                    0.2931602234162359, 
+                    0.26688205374053336, 
+                    0.26688205374053336, 
+                    0.23590465060485524, 
+                    0.23590465060485524, 
+                    0.20000122499567416, 
+                    0.20000122499567416, 
+                    0.1568317976493892, 
+                    0.1568317976493892
+                ], 
+                0.48175686597824097
+            ], 
+            [
+                0.9904441237449646, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999465947223595, 
+                    0.9999465947223595, 
+                    0.9976953266489604, 
+                    0.9976953266489604, 
+                    0.9888317643979975, 
+                    0.9888317643979975, 
+                    0.9697985620228098, 
+                    0.9697985620228098, 
+                    0.9398943520539924, 
+                    0.9398943520539924, 
+                    0.9016261107398813, 
+                    0.9016261107398813, 
+                    0.8594906284739328, 
+                    0.8594906284739328, 
+                    0.8117580885759189, 
+                    0.8117580885759189, 
+                    0.7627248167557693, 
+                    0.7627248167557693, 
+                    0.7134128365182469, 
+                    0.7134128365182469, 
+                    0.6655326447896562, 
+                    0.6655326447896562, 
+                    0.6204285747246577, 
+                    0.6204285747246577, 
+                    0.5762896663746212, 
+                    0.5762896663746212, 
+                    0.5387976397875636, 
+                    0.5387976397875636, 
+                    0.5029392099789601, 
+                    0.5029392099789601, 
+                    0.4695714202469018, 
+                    0.4695714202469018, 
+                    0.43968685211105724, 
+                    0.43968685211105724, 
+                    0.4123377419149981, 
+                    0.4123377419149981, 
+                    0.387197445554528, 
+                    0.387197445554528, 
+                    0.36512239720843476, 
+                    0.36512239720843476, 
+                    0.34503821969074805, 
+                    0.34503821969074805, 
+                    0.327365596602865, 
+                    0.327365596602865, 
+                    0.3105159402022925, 
+                    0.3105159402022925, 
+                    0.2898231448237615, 
+                    0.2898231448237615, 
+                    0.2639191770236537, 
+                    0.2639191770236537, 
+                    0.23333426429119394, 
+                    0.23333426429119394, 
+                    0.19785737421617466, 
+                    0.19785737421617466, 
+                    0.1551911561310343, 
+                    0.1551911561310343
+                ], 
+                0.46027377247810364
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999136614981138, 
+                    0.9999136614981138, 
+                    0.9975166386825364, 
+                    0.9975166386825364, 
+                    0.9881842093049057, 
+                    0.9881842093049057, 
+                    0.9683776188556069, 
+                    0.9683776188556069, 
+                    0.9376082823337236, 
+                    0.9376082823337236, 
+                    0.8985643635656078, 
+                    0.8985643635656078, 
+                    0.8558452767513919, 
+                    0.8558452767513919, 
+                    0.8076182248667982, 
+                    0.8076182248667982, 
+                    0.7583130988636333, 
+                    0.7583130988636333, 
+                    0.7085399285190163, 
+                    0.7085399285190163, 
+                    0.6612457726358326, 
+                    0.6612457726358326, 
+                    0.6145938628780845, 
+                    0.6145938628780845, 
+                    0.5727277293550413, 
+                    0.5727277293550413, 
+                    0.5334634518885574, 
+                    0.5334634518885574, 
+                    0.4985738561638155, 
+                    0.4985738561638155, 
+                    0.4651730797999301, 
+                    0.4651730797999301, 
+                    0.43547588392023234, 
+                    0.43547588392023234, 
+                    0.4082814685555787, 
+                    0.4082814685555787, 
+                    0.3833100916262981, 
+                    0.3833100916262981, 
+                    0.36139413670936005, 
+                    0.36139413670936005, 
+                    0.3414638844183703, 
+                    0.3414638844183703, 
+                    0.32415235645717705, 
+                    0.32415235645717705, 
+                    0.30764838695209296, 
+                    0.30764838695209296, 
+                    0.2869469031465034, 
+                    0.2869469031465034, 
+                    0.2610834277164159, 
+                    0.2610834277164159, 
+                    0.2306305786429746, 
+                    0.2306305786429746, 
+                    0.19536934365382008, 
+                    0.19536934365382008, 
+                    0.15301996138927185, 
+                    0.15301996138927185
+                ], 
+                0.43915626406669617
+            ], 
+            [
+                1.009648084640503, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998826853216585, 
+                    0.9998826853216585, 
+                    0.9973395696538179, 
+                    0.9973395696538179, 
+                    0.9875351697163212, 
+                    0.9875351697163212, 
+                    0.9669180474537089, 
+                    0.9669180474537089, 
+                    0.9352670011759092, 
+                    0.9352670011759092, 
+                    0.8954396625900369, 
+                    0.8954396625900369, 
+                    0.852162052823064, 
+                    0.852162052823064, 
+                    0.803486293024324, 
+                    0.803486293024324, 
+                    0.7538307913461418, 
+                    0.7538307913461418, 
+                    0.7036429395142767, 
+                    0.7036429395142767, 
+                    0.6565750249279831, 
+                    0.6565750249279831, 
+                    0.6096238841185997, 
+                    0.6096238841185997, 
+                    0.5681778195796068, 
+                    0.5681778195796068, 
+                    0.5286600536272518, 
+                    0.5286600536272518, 
+                    0.49414023471772656, 
+                    0.49414023471772656, 
+                    0.4608051213815414, 
+                    0.4608051213815414, 
+                    0.43134122282133897, 
+                    0.43134122282133897, 
+                    0.4042976102963362, 
+                    0.4042976102963362, 
+                    0.3794834940511272, 
+                    0.3794834940511272, 
+                    0.35772223310999357, 
+                    0.35772223310999357, 
+                    0.3379386357604927, 
+                    0.3379386357604927, 
+                    0.3206088172852082, 
+                    0.3206088172852082, 
+                    0.3046067950872545, 
+                    0.3046067950872545, 
+                    0.28473468506600086, 
+                    0.28473468506600086, 
+                    0.2595667923213453, 
+                    0.2595667923213453, 
+                    0.22968428532646915, 
+                    0.22968428532646915, 
+                    0.19490855070600657, 
+                    0.19490855070600657, 
+                    0.1529937902007835, 
+                    0.1529937902007835
+                ], 
+                0.4184437692165375
+            ], 
+            [
+                1.019389271736145, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998654675810642, 
+                    0.9998654675810642, 
+                    0.9971274422456513, 
+                    0.9971274422456513, 
+                    0.9868279810941325, 
+                    0.9868279810941325, 
+                    0.9653908488876869, 
+                    0.9653908488876869, 
+                    0.9328454748775024, 
+                    0.9328454748775024, 
+                    0.8922776602490786, 
+                    0.8922776602490786, 
+                    0.8484119422148628, 
+                    0.8484119422148628, 
+                    0.7992452850650501, 
+                    0.7992452850650501, 
+                    0.7492692430850142, 
+                    0.7492692430850142, 
+                    0.6993431653938481, 
+                    0.6993431653938481, 
+                    0.6513147180439476, 
+                    0.6513147180439476, 
+                    0.6058692893841995, 
+                    0.6058692893841995, 
+                    0.5623924012479985, 
+                    0.5623924012479985, 
+                    0.5247158348182845, 
+                    0.5247158348182845, 
+                    0.4894799646656397, 
+                    0.4894799646656397, 
+                    0.45648841158890346, 
+                    0.45648841158890346, 
+                    0.4271191672774421, 
+                    0.4271191672774421, 
+                    0.40028097504048077, 
+                    0.40028097504048077, 
+                    0.3756585143362512, 
+                    0.3756585143362512, 
+                    0.35407791860531135, 
+                    0.35407791860531135, 
+                    0.3344736123852426, 
+                    0.3344736123852426, 
+                    0.3171976179585885, 
+                    0.3171976179585885, 
+                    0.3000567054093826, 
+                    0.3000567054093826, 
+                    0.2789504250780089, 
+                    0.2789504250780089, 
+                    0.2530433827836903, 
+                    0.2530433827836903, 
+                    0.22284720467848879, 
+                    0.22284720467848879, 
+                    0.18813447719986048, 
+                    0.18813447719986048, 
+                    0.14671744496147512, 
+                    0.14671744496147512
+                ], 
+                0.39724043011665344
+            ], 
+            [
+                1.0292243957519531, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999846635126163, 
+                    0.999846635126163, 
+                    0.9969144152819415, 
+                    0.9969144152819415, 
+                    0.9861072987326116, 
+                    0.9861072987326116, 
+                    0.9638159209158479, 
+                    0.9638159209158479, 
+                    0.9303832366526832, 
+                    0.9303832366526832, 
+                    0.8890703241920866, 
+                    0.8890703241920866, 
+                    0.8446463483657835, 
+                    0.8446463483657835, 
+                    0.795022281341237, 
+                    0.795022281341237, 
+                    0.74480508728449, 
+                    0.74480508728449, 
+                    0.6944976418144955, 
+                    0.6944976418144955, 
+                    0.6469871627851922, 
+                    0.6469871627851922, 
+                    0.6004463977989997, 
+                    0.6004463977989997, 
+                    0.5584521103775385, 
+                    0.5584521103775385, 
+                    0.5197561143448032, 
+                    0.5197561143448032, 
+                    0.48517933462033036, 
+                    0.48517933462033036, 
+                    0.4521975430153535, 
+                    0.4521975430153535, 
+                    0.42302850579019774, 
+                    0.42302850579019774, 
+                    0.3963606891908978, 
+                    0.3963606891908978, 
+                    0.37191164784371095, 
+                    0.37191164784371095, 
+                    0.35049296992675016, 
+                    0.35049296992675016, 
+                    0.3310421359179481, 
+                    0.3310421359179481, 
+                    0.3139706246635221, 
+                    0.3139706246635221, 
+                    0.29714982588143923, 
+                    0.29714982588143923, 
+                    0.2762600227704617, 
+                    0.2762600227704617, 
+                    0.25054134670291556, 
+                    0.25054134670291556, 
+                    0.2205479012841542, 
+                    0.2205479012841542, 
+                    0.186062187391249, 
+                    0.186062187391249, 
+                    0.1449153507901238, 
+                    0.1449153507901238
+                ], 
+                0.3771820664405823
+            ], 
+            [
+                1.0391545295715332, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998228202508748, 
+                    0.9998228202508748, 
+                    0.9966623423445408, 
+                    0.9966623423445408, 
+                    0.9853510700381095, 
+                    0.9853510700381095, 
+                    0.962178399654479, 
+                    0.962178399654479, 
+                    0.9278766888925031, 
+                    0.9278766888925031, 
+                    0.8858688763147136, 
+                    0.8858688763147136, 
+                    0.8409288921520351, 
+                    0.8409288921520351, 
+                    0.7908450565922301, 
+                    0.7908450565922301, 
+                    0.7403336224129394, 
+                    0.7403336224129394, 
+                    0.6899416830996261, 
+                    0.6899416830996261, 
+                    0.6420542238724438, 
+                    0.6420542238724438, 
+                    0.5960653218894418, 
+                    0.5960653218894418, 
+                    0.5534469730844971, 
+                    0.5534469730844971, 
+                    0.5155097616547094, 
+                    0.5155097616547094, 
+                    0.48081919174227, 
+                    0.48081919174227, 
+                    0.44807498496781606, 
+                    0.44807498496781606, 
+                    0.4190538817077522, 
+                    0.4190538817077522, 
+                    0.39255035985026515, 
+                    0.39255035985026515, 
+                    0.3682568461458241, 
+                    0.3682568461458241, 
+                    0.3469573690460187, 
+                    0.3469573690460187, 
+                    0.32756582670042056, 
+                    0.32756582670042056, 
+                    0.31081628918342624, 
+                    0.31081628918342624, 
+                    0.2987225418972364, 
+                    0.2987225418972364, 
+                    0.28470285255701167, 
+                    0.28470285255701167, 
+                    0.2640897743078068, 
+                    0.2640897743078068, 
+                    0.23744749154956837, 
+                    0.23744749154956837, 
+                    0.20482786390284902, 
+                    0.20482786390284902, 
+                    0.1640055908110796, 
+                    0.1640055908110796
+                ], 
+                0.35960304737091064
+            ], 
+            [
+                1.049180269241333, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998047608730586, 
+                    0.9998047608730586, 
+                    0.9964428982860835, 
+                    0.9964428982860835, 
+                    0.9845483946736285, 
+                    0.9845483946736285, 
+                    0.9604917301771176, 
+                    0.9604917301771176, 
+                    0.9252699372241227, 
+                    0.9252699372241227, 
+                    0.8825049325279153, 
+                    0.8825049325279153, 
+                    0.8370204356879714, 
+                    0.8370204356879714, 
+                    0.7865457888683498, 
+                    0.7865457888683498, 
+                    0.7357689525330408, 
+                    0.7357689525330408, 
+                    0.6852292913153298, 
+                    0.6852292913153298, 
+                    0.6373235011146785, 
+                    0.6373235011146785, 
+                    0.5913345567271772, 
+                    0.5913345567271772, 
+                    0.5488206570749979, 
+                    0.5488206570749979, 
+                    0.5109838860992431, 
+                    0.5109838860992431, 
+                    0.4764411359268198, 
+                    0.4764411359268198, 
+                    0.44386257672389645, 
+                    0.44386257672389645, 
+                    0.41501507181415537, 
+                    0.41501507181415537, 
+                    0.38869033659194807, 
+                    0.38869033659194807, 
+                    0.3645760440503379, 
+                    0.3645760440503379, 
+                    0.3434484790014062, 
+                    0.3434484790014062, 
+                    0.32423470317807523, 
+                    0.32423470317807523, 
+                    0.30766189548956807, 
+                    0.30766189548956807, 
+                    0.29456045111717133, 
+                    0.29456045111717133, 
+                    0.2784865641044179, 
+                    0.2784865641044179, 
+                    0.2564169474856656, 
+                    0.2564169474856656, 
+                    0.22896997435945163, 
+                    0.22896997435945163, 
+                    0.19610480166142966, 
+                    0.19610480166142966, 
+                    0.15563312315249123, 
+                    0.15563312315249123
+                ], 
+                0.3398529291152954
+            ], 
+            [
+                1.0593029260635376, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997775107954789, 
+                    0.9997775107954789, 
+                    0.9961864484570715, 
+                    0.9961864484570715, 
+                    0.9837256728219155, 
+                    0.9837256728219155, 
+                    0.9587474413901065, 
+                    0.9587474413901065, 
+                    0.9226437792238279, 
+                    0.9226437792238279, 
+                    0.8791339916358972, 
+                    0.8791339916358972, 
+                    0.8331162259137246, 
+                    0.8331162259137246, 
+                    0.7822028018556203, 
+                    0.7822028018556203, 
+                    0.7312430841289322, 
+                    0.7312430841289322, 
+                    0.6803700976675433, 
+                    0.6803700976675433, 
+                    0.6329384540356517, 
+                    0.6329384540356517, 
+                    0.5862535339658278, 
+                    0.5862535339658278, 
+                    0.5446144783845136, 
+                    0.5446144783845136, 
+                    0.5062905979857243, 
+                    0.5062905979857243, 
+                    0.4721081821583879, 
+                    0.4721081821583879, 
+                    0.4396417212905983, 
+                    0.4396417212905983, 
+                    0.4109940698950296, 
+                    0.4109940698950296, 
+                    0.38485770304859807, 
+                    0.38485770304859807, 
+                    0.36093596075349516, 
+                    0.36093596075349516, 
+                    0.34001383856947787, 
+                    0.34001383856947787, 
+                    0.3210391615750707, 
+                    0.3210391615750707, 
+                    0.3043196606039639, 
+                    0.3043196606039639, 
+                    0.28739541009806274, 
+                    0.28739541009806274, 
+                    0.2665093083690733, 
+                    0.2665093083690733, 
+                    0.24112986430833552, 
+                    0.24112986430833552, 
+                    0.2117755128908671, 
+                    0.2117755128908671, 
+                    0.17824385706561824, 
+                    0.17824385706561824, 
+                    0.13851001052428408, 
+                    0.13851001052428408
+                ], 
+                0.3193536400794983
+            ], 
+            [
+                1.0695232152938843, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997482262464363, 
+                    0.9997482262464363, 
+                    0.995937268035797, 
+                    0.995937268035797, 
+                    0.9830211475129428, 
+                    0.9830211475129428, 
+                    0.9570335633224591, 
+                    0.9570335633224591, 
+                    0.9199710170507005, 
+                    0.9199710170507005, 
+                    0.8757678639306588, 
+                    0.8757678639306588, 
+                    0.8292333366973146, 
+                    0.8292333366973146, 
+                    0.7780138520325749, 
+                    0.7780138520325749, 
+                    0.726603057190207, 
+                    0.726603057190207, 
+                    0.6760208014861724, 
+                    0.6760208014861724, 
+                    0.6277890632201862, 
+                    0.6277890632201862, 
+                    0.582334523952916, 
+                    0.582334523952916, 
+                    0.5396595904540206, 
+                    0.5396595904540206, 
+                    0.5023016377040225, 
+                    0.5023016377040225, 
+                    0.467726129061245, 
+                    0.467726129061245, 
+                    0.4355988715526955, 
+                    0.4355988715526955, 
+                    0.40714287034393354, 
+                    0.40714287034393354, 
+                    0.38116723741886466, 
+                    0.38116723741886466, 
+                    0.35738894712716424, 
+                    0.35738894712716424, 
+                    0.33655077683533924, 
+                    0.33655077683533924, 
+                    0.3172263698143837, 
+                    0.3172263698143837, 
+                    0.3032279957841648, 
+                    0.3032279957841648, 
+                    0.29369866824951796, 
+                    0.29369866824951796, 
+                    0.2779423128055348, 
+                    0.2779423128055348, 
+                    0.2557339003812784, 
+                    0.2557339003812784, 
+                    0.22803939993356917, 
+                    0.22803939993356917, 
+                    0.19466496935419408, 
+                    0.19466496935419408, 
+                    0.15308333845871339, 
+                    0.15308333845871339
+                ], 
+                0.3034679889678955
+            ], 
+            [
+                1.0798419713974, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997225010975915, 
+                    0.9997225010975915, 
+                    0.9956321484836644, 
+                    0.9956321484836644, 
+                    0.9819427423546145, 
+                    0.9819427423546145, 
+                    0.955082980216734, 
+                    0.955082980216734, 
+                    0.9171968050010842, 
+                    0.9171968050010842, 
+                    0.8722797740798094, 
+                    0.8722797740798094, 
+                    0.8252569826213197, 
+                    0.8252569826213197, 
+                    0.7735764387740004, 
+                    0.7735764387740004, 
+                    0.7220739309659752, 
+                    0.7220739309659752, 
+                    0.671235622826769, 
+                    0.671235622826769, 
+                    0.6231659454163512, 
+                    0.6231659454163512, 
+                    0.5775148786539865, 
+                    0.5775148786539865, 
+                    0.5350516692907805, 
+                    0.5350516692907805, 
+                    0.49770973327880413, 
+                    0.49770973327880413, 
+                    0.46353172461555775, 
+                    0.46353172461555775, 
+                    0.43149174577444777, 
+                    0.43149174577444777, 
+                    0.4031879433613946, 
+                    0.4031879433613946, 
+                    0.3774087844948853, 
+                    0.3774087844948853, 
+                    0.3538326903739838, 
+                    0.3538326903739838, 
+                    0.333217556398572, 
+                    0.333217556398572, 
+                    0.314507129144068, 
+                    0.314507129144068, 
+                    0.29818421693485136, 
+                    0.29818421693485136, 
+                    0.28345491940546397, 
+                    0.28345491940546397, 
+                    0.26522579124180523, 
+                    0.26522579124180523, 
+                    0.2418886079502637, 
+                    0.2418886079502637, 
+                    0.21402905018510593, 
+                    0.21402905018510593, 
+                    0.18153474081422674, 
+                    0.18153474081422674, 
+                    0.14237126474662473, 
+                    0.14237126474662473
+                ], 
+                0.2844918668270111
+            ], 
+            [
+                1.09026038646698, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996884716240736, 
+                    0.9996884716240736, 
+                    0.9953175183218379, 
+                    0.9953175183218379, 
+                    0.9804158007632611, 
+                    0.9804158007632611, 
+                    0.9525551631948965, 
+                    0.9525551631948965, 
+                    0.9142586139270884, 
+                    0.9142586139270884, 
+                    0.8687600498888546, 
+                    0.8687600498888546, 
+                    0.8212669272512141, 
+                    0.8212669272512141, 
+                    0.769190708808404, 
+                    0.769190708808404, 
+                    0.7175487817702816, 
+                    0.7175487817702816, 
+                    0.6663550611007196, 
+                    0.6663550611007196, 
+                    0.6189226600371991, 
+                    0.6189226600371991, 
+                    0.5721999051878142, 
+                    0.5721999051878142, 
+                    0.5311688765952255, 
+                    0.5311688765952255, 
+                    0.4930144098910368, 
+                    0.4930144098910368, 
+                    0.4594084592470608, 
+                    0.4594084592470608, 
+                    0.4274370772830129, 
+                    0.4274370772830129, 
+                    0.39933770759497395, 
+                    0.39933770759497395, 
+                    0.3737386262548209, 
+                    0.3737386262548209, 
+                    0.35030821087274294, 
+                    0.35030821087274294, 
+                    0.3297320280141294, 
+                    0.3297320280141294, 
+                    0.31146074270981156, 
+                    0.31146074270981156, 
+                    0.29530620387087164, 
+                    0.29530620387087164, 
+                    0.27913424114207447, 
+                    0.27913424114207447, 
+                    0.25850752892623097, 
+                    0.25850752892623097, 
+                    0.23348834367217416, 
+                    0.23348834367217416, 
+                    0.2046660638200786, 
+                    0.2046660638200786, 
+                    0.17184819582881433, 
+                    0.17184819582881433, 
+                    0.1330741172860715, 
+                    0.1330741172860715
+                ], 
+                0.266567587852478
+            ], 
+            [
+                1.100779414176941, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996521723950139, 
+                    0.9996521723950139, 
+                    0.9950069159843901, 
+                    0.9950069159843901, 
+                    0.9799882347330405, 
+                    0.9799882347330405, 
+                    0.9511773581217147, 
+                    0.9511773581217147, 
+                    0.9115270821197472, 
+                    0.9115270821197472, 
+                    0.8652306113922942, 
+                    0.8652306113922942, 
+                    0.8172431472502124, 
+                    0.8172431472502124, 
+                    0.764829806242503, 
+                    0.764829806242503, 
+                    0.7128998134890838, 
+                    0.7128998134890838, 
+                    0.6618950189496816, 
+                    0.6618950189496816, 
+                    0.6137638759021518, 
+                    0.6137638759021518, 
+                    0.5683006315083452, 
+                    0.5683006315083452, 
+                    0.5260241482583371, 
+                    0.5260241482583371, 
+                    0.48901486286721113, 
+                    0.48901486286721113, 
+                    0.45515995245586655, 
+                    0.45515995245586655, 
+                    0.42347634315524274, 
+                    0.42347634315524274, 
+                    0.39553762153780353, 
+                    0.39553762153780353, 
+                    0.3701219420565613, 
+                    0.3701219420565613, 
+                    0.3469034562348045, 
+                    0.3469034562348045, 
+                    0.3266222114027708, 
+                    0.3266222114027708, 
+                    0.30817966611642, 
+                    0.30817966611642, 
+                    0.2922077726756972, 
+                    0.2922077726756972, 
+                    0.2767510424036226, 
+                    0.2767510424036226, 
+                    0.25711572019947776, 
+                    0.25711572019947776, 
+                    0.23289584180299358, 
+                    0.23289584180299358, 
+                    0.20470536479938814, 
+                    0.20470536479938814, 
+                    0.17239419368937237, 
+                    0.17239419368937237, 
+                    0.13402976031446134, 
+                    0.13402976031446134
+                ], 
+                0.25051042437553406
+            ]
+        ]
+    }, 
+    {
+        "block_size": 62, 
+        "preprocessing_block_sizes": [
+            42
+        ], 
+        "pruning_parameters": [
+            [
+                0.9098224639892578, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999098554977285, 
+                    0.9999098554977285, 
+                    0.9999037158356662, 
+                    0.9999037158356662, 
+                    0.9999006268582242, 
+                    0.9999006268582242, 
+                    0.9998901528721795, 
+                    0.9998901528721795, 
+                    0.9757445684295923, 
+                    0.9757445684295923, 
+                    0.9294038841084985, 
+                    0.9294038841084985, 
+                    0.8871933624445207, 
+                    0.8871933624445207, 
+                    0.8449610555836942, 
+                    0.8449610555836942, 
+                    0.8014792610098003, 
+                    0.8014792610098003, 
+                    0.7546740127417406, 
+                    0.7546740127417406, 
+                    0.7047248523795736, 
+                    0.7047248523795736, 
+                    0.6574380624826363, 
+                    0.6574380624826363, 
+                    0.6142850664826228, 
+                    0.6142850664826228, 
+                    0.5743574097907682, 
+                    0.5743574097907682, 
+                    0.5375018395150493, 
+                    0.5375018395150493, 
+                    0.5018040419260008, 
+                    0.5018040419260008, 
+                    0.47029891737470825, 
+                    0.47029891737470825, 
+                    0.44268978993971136, 
+                    0.44268978993971136, 
+                    0.4169385341935124, 
+                    0.4169385341935124, 
+                    0.3917557445853187, 
+                    0.3917557445853187, 
+                    0.36487618533721283, 
+                    0.36487618533721283, 
+                    0.3364783151570054, 
+                    0.3364783151570054, 
+                    0.30676083137768634, 
+                    0.30676083137768634, 
+                    0.27600480140662215, 
+                    0.27600480140662215, 
+                    0.2443711568162752, 
+                    0.2443711568162752, 
+                    0.21199423074484322, 
+                    0.21199423074484322, 
+                    0.17880921086457174, 
+                    0.17880921086457174, 
+                    0.14448514581187674, 
+                    0.14448514581187674, 
+                    0.10620153137914591, 
+                    0.10620153137914591
+                ], 
+                0.500682532787323
+            ], 
+            [
+                0.9184615612030029, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999997844467357, 
+                    0.9999997844467357, 
+                    0.9999792686786761, 
+                    0.9999792686786761, 
+                    0.9999702385120197, 
+                    0.9999702385120197, 
+                    0.9999702192347488, 
+                    0.9999702192347488, 
+                    0.9904079181712174, 
+                    0.9904079181712174, 
+                    0.9498202930175959, 
+                    0.9498202930175959, 
+                    0.9154173991392925, 
+                    0.9154173991392925, 
+                    0.8797866004062954, 
+                    0.8797866004062954, 
+                    0.84036981971254, 
+                    0.84036981971254, 
+                    0.797776911133931, 
+                    0.797776911133931, 
+                    0.7514405073480365, 
+                    0.7514405073480365, 
+                    0.703194966691828, 
+                    0.703194966691828, 
+                    0.6577431968310444, 
+                    0.6577431968310444, 
+                    0.615165474624456, 
+                    0.615165474624456, 
+                    0.5750793492344138, 
+                    0.5750793492344138, 
+                    0.5366756513371006, 
+                    0.5366756513371006, 
+                    0.5009026725035199, 
+                    0.5009026725035199, 
+                    0.469592500556667, 
+                    0.469592500556667, 
+                    0.4416732916104211, 
+                    0.4416732916104211, 
+                    0.4160221655790215, 
+                    0.4160221655790215, 
+                    0.39124905949171734, 
+                    0.39124905949171734, 
+                    0.3647906052706129, 
+                    0.3647906052706129, 
+                    0.33675232902110175, 
+                    0.33675232902110175, 
+                    0.307314372093504, 
+                    0.307314372093504, 
+                    0.2767586403061491, 
+                    0.2767586403061491, 
+                    0.24525033722481115, 
+                    0.24525033722481115, 
+                    0.2129343218077386, 
+                    0.2129343218077386, 
+                    0.17974935523823635, 
+                    0.17974935523823635, 
+                    0.14535646848251185, 
+                    0.14535646848251185, 
+                    0.10782570821633172, 
+                    0.10782570821633172
+                ], 
+                0.4990130066871643
+            ], 
+            [
+                0.9271827340126038, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999611888858387, 
+                    0.9999611888858387, 
+                    0.9999060239036783, 
+                    0.9999060239036783, 
+                    0.9998509096478483, 
+                    0.9998509096478483, 
+                    0.9889203313118806, 
+                    0.9889203313118806, 
+                    0.9541158418334732, 
+                    0.9541158418334732, 
+                    0.9239036291942485, 
+                    0.9239036291942485, 
+                    0.8891460559455475, 
+                    0.8891460559455475, 
+                    0.8476107001568182, 
+                    0.8476107001568182, 
+                    0.8019647317087589, 
+                    0.8019647317087589, 
+                    0.7524486036703746, 
+                    0.7524486036703746, 
+                    0.7014842403709926, 
+                    0.7014842403709926, 
+                    0.6538205835056409, 
+                    0.6538205835056409, 
+                    0.6098728900383866, 
+                    0.6098728900383866, 
+                    0.5690810699741639, 
+                    0.5690810699741639, 
+                    0.5311576908170293, 
+                    0.5311576908170293, 
+                    0.49717931230951823, 
+                    0.49717931230951823, 
+                    0.46747259627557597, 
+                    0.46747259627557597, 
+                    0.43934465794307154, 
+                    0.43934465794307154, 
+                    0.4137404089471227, 
+                    0.4137404089471227, 
+                    0.3908352565117524, 
+                    0.3908352565117524, 
+                    0.3674019473005886, 
+                    0.3674019473005886, 
+                    0.34217273316666247, 
+                    0.34217273316666247, 
+                    0.31488700645818585, 
+                    0.31488700645818585, 
+                    0.2858056770729421, 
+                    0.2858056770729421, 
+                    0.2551248448841708, 
+                    0.2551248448841708, 
+                    0.2230860745715156, 
+                    0.2230860745715156, 
+                    0.18962805992249587, 
+                    0.18962805992249587, 
+                    0.15429419665050562, 
+                    0.15429419665050562, 
+                    0.11518886723490572, 
+                    0.11518886723490572
+                ], 
+                0.5006794929504395
+            ], 
+            [
+                0.9359866976737976, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997488756609831, 
+                    0.9997488756609831, 
+                    0.9994593498088233, 
+                    0.9994593498088233, 
+                    0.9863799376798436, 
+                    0.9863799376798436, 
+                    0.9576341957214355, 
+                    0.9576341957214355, 
+                    0.9274870474048359, 
+                    0.9274870474048359, 
+                    0.8910013176023444, 
+                    0.8910013176023444, 
+                    0.8466997105419158, 
+                    0.8466997105419158, 
+                    0.7995101923026334, 
+                    0.7995101923026334, 
+                    0.7489280931915736, 
+                    0.7489280931915736, 
+                    0.6980609872808444, 
+                    0.6980609872808444, 
+                    0.6505949646155804, 
+                    0.6505949646155804, 
+                    0.6075434445892977, 
+                    0.6075434445892977, 
+                    0.5658068793117863, 
+                    0.5658068793117863, 
+                    0.5291172865492537, 
+                    0.5291172865492537, 
+                    0.4944200130966521, 
+                    0.4944200130966521, 
+                    0.46420538749633633, 
+                    0.46420538749633633, 
+                    0.43652708665958323, 
+                    0.43652708665958323, 
+                    0.4110928927418629, 
+                    0.4110928927418629, 
+                    0.3887411189946764, 
+                    0.3887411189946764, 
+                    0.3677768369201262, 
+                    0.3677768369201262, 
+                    0.34640832927920495, 
+                    0.34640832927920495, 
+                    0.3226939430626106, 
+                    0.3226939430626106, 
+                    0.29630854847050486, 
+                    0.29630854847050486, 
+                    0.2673313113702326, 
+                    0.2673313113702326, 
+                    0.23618581165630478, 
+                    0.23618581165630478, 
+                    0.20286271572766748, 
+                    0.20286271572766748, 
+                    0.16684850625107736, 
+                    0.16684850625107736, 
+                    0.12607779761374763, 
+                    0.12607779761374763
+                ], 
+                0.5004369020462036
+            ], 
+            [
+                0.9448742270469666, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993634622074867, 
+                    0.9993634622074867, 
+                    0.9966186338059279, 
+                    0.9966186338059279, 
+                    0.9814660924437408, 
+                    0.9814660924437408, 
+                    0.9582685694942233, 
+                    0.9582685694942233, 
+                    0.926697309470019, 
+                    0.926697309470019, 
+                    0.888923298916569, 
+                    0.888923298916569, 
+                    0.84368433418445, 
+                    0.84368433418445, 
+                    0.7959573089913108, 
+                    0.7959573089913108, 
+                    0.7452287986721874, 
+                    0.7452287986721874, 
+                    0.694150078729602, 
+                    0.694150078729602, 
+                    0.6462738444095933, 
+                    0.6462738444095933, 
+                    0.6032839076600892, 
+                    0.6032839076600892, 
+                    0.5617551893863606, 
+                    0.5617551893863606, 
+                    0.5245747705647184, 
+                    0.5245747705647184, 
+                    0.490393457750294, 
+                    0.490393457750294, 
+                    0.46074089715358335, 
+                    0.46074089715358335, 
+                    0.432926613435719, 
+                    0.432926613435719, 
+                    0.4076511639083934, 
+                    0.4076511639083934, 
+                    0.38536915274883937, 
+                    0.38536915274883937, 
+                    0.36479873374460076, 
+                    0.36479873374460076, 
+                    0.34596686113958747, 
+                    0.34596686113958747, 
+                    0.328779037435674, 
+                    0.328779037435674, 
+                    0.3119055346211282, 
+                    0.3119055346211282, 
+                    0.2905758513582872, 
+                    0.2905758513582872, 
+                    0.2645290056729091, 
+                    0.2645290056729091, 
+                    0.23402102603093117, 
+                    0.23402102603093117, 
+                    0.19876759272507483, 
+                    0.19876759272507483, 
+                    0.15640375864458556, 
+                    0.15640375864458556
+                ], 
+                0.49303436279296875
+            ], 
+            [
+                0.9538461565971375, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999275346008535, 
+                    0.999275346008535, 
+                    0.9961894736461411, 
+                    0.9961894736461411, 
+                    0.980592667707622, 
+                    0.980592667707622, 
+                    0.9566235804535113, 
+                    0.9566235804535113, 
+                    0.9243168729248702, 
+                    0.9243168729248702, 
+                    0.8858985512449199, 
+                    0.8858985512449199, 
+                    0.8400888750290151, 
+                    0.8400888750290151, 
+                    0.7919344823273502, 
+                    0.7919344823273502, 
+                    0.7408989397135948, 
+                    0.7408989397135948, 
+                    0.6895663086887245, 
+                    0.6895663086887245, 
+                    0.6418094805993603, 
+                    0.6418094805993603, 
+                    0.5984114215027827, 
+                    0.5984114215027827, 
+                    0.5573958031310732, 
+                    0.5573958031310732, 
+                    0.5199145226305331, 
+                    0.5199145226305331, 
+                    0.4860472132522823, 
+                    0.4860472132522823, 
+                    0.45646431893434253, 
+                    0.45646431893434253, 
+                    0.42880706877081554, 
+                    0.42880706877081554, 
+                    0.40368669720070427, 
+                    0.40368669720070427, 
+                    0.3815578097948644, 
+                    0.3815578097948644, 
+                    0.3611407842171519, 
+                    0.3611407842171519, 
+                    0.34246052432056956, 
+                    0.34246052432056956, 
+                    0.3253276545467125, 
+                    0.3253276545467125, 
+                    0.3081184881915841, 
+                    0.3081184881915841, 
+                    0.28647980486088814, 
+                    0.28647980486088814, 
+                    0.2603289011847701, 
+                    0.2603289011847701, 
+                    0.22990382075910828, 
+                    0.22990382075910828, 
+                    0.1949012528362604, 
+                    0.1949012528362604, 
+                    0.15299598179628945, 
+                    0.15299598179628945
+                ], 
+                0.4718897342681885
+            ], 
+            [
+                0.9629032611846924, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992172052655397, 
+                    0.9992172052655397, 
+                    0.9959755196618629, 
+                    0.9959755196618629, 
+                    0.9796382832091478, 
+                    0.9796382832091478, 
+                    0.9549421885063004, 
+                    0.9549421885063004, 
+                    0.9219064136719937, 
+                    0.9219064136719937, 
+                    0.8828461824206477, 
+                    0.8828461824206477, 
+                    0.8364622472010385, 
+                    0.8364622472010385, 
+                    0.787899413379321, 
+                    0.787899413379321, 
+                    0.7365544026531032, 
+                    0.7365544026531032, 
+                    0.6850503065742747, 
+                    0.6850503065742747, 
+                    0.6371864501265494, 
+                    0.6371864501265494, 
+                    0.593829881703189, 
+                    0.593829881703189, 
+                    0.5528279870088142, 
+                    0.5528279870088142, 
+                    0.515441103234475, 
+                    0.515441103234475, 
+                    0.4816940427493047, 
+                    0.4816940427493047, 
+                    0.45224538506260364, 
+                    0.45224538506260364, 
+                    0.4247361133470736, 
+                    0.4247361133470736, 
+                    0.3997733471566987, 
+                    0.3997733471566987, 
+                    0.37779830963659655, 
+                    0.37779830963659655, 
+                    0.357532587963639, 
+                    0.357532587963639, 
+                    0.33900325184813834, 
+                    0.33900325184813834, 
+                    0.32200351117325915, 
+                    0.32200351117325915, 
+                    0.3046661241091354, 
+                    0.3046661241091354, 
+                    0.2828304883122701, 
+                    0.2828304883122701, 
+                    0.2566104482838692, 
+                    0.2566104482838692, 
+                    0.226258617928509, 
+                    0.226258617928509, 
+                    0.19146428162927503, 
+                    0.19146428162927503, 
+                    0.1499368872188524, 
+                    0.1499368872188524
+                ], 
+                0.4510466456413269
+            ], 
+            [
+                0.972046434879303, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991586917366879, 
+                    0.9991586917366879, 
+                    0.995363970277773, 
+                    0.995363970277773, 
+                    0.9786873149247252, 
+                    0.9786873149247252, 
+                    0.9532204852896495, 
+                    0.9532204852896495, 
+                    0.919441074605288, 
+                    0.919441074605288, 
+                    0.8797588756465891, 
+                    0.8797588756465891, 
+                    0.8328149867670436, 
+                    0.8328149867670436, 
+                    0.7838510025484587, 
+                    0.7838510025484587, 
+                    0.7322049499873631, 
+                    0.7322049499873631, 
+                    0.6805571548138762, 
+                    0.6805571548138762, 
+                    0.6325548606181841, 
+                    0.6325548606181841, 
+                    0.589318386324871, 
+                    0.589318386324871, 
+                    0.5482597065439654, 
+                    0.5482597065439654, 
+                    0.5110240940988847, 
+                    0.5110240940988847, 
+                    0.4773767792531279, 
+                    0.4773767792531279, 
+                    0.4480715848886345, 
+                    0.4480715848886345, 
+                    0.4207126056285155, 
+                    0.4207126056285155, 
+                    0.3959085852550196, 
+                    0.3959085852550196, 
+                    0.37408725496362977, 
+                    0.37408725496362977, 
+                    0.3539735291265678, 
+                    0.3539735291265678, 
+                    0.3355908727386206, 
+                    0.3355908727386206, 
+                    0.3186755139343313, 
+                    0.3186755139343313, 
+                    0.3013175841763339, 
+                    0.3013175841763339, 
+                    0.27953907763184155, 
+                    0.27953907763184155, 
+                    0.25346878961059033, 
+                    0.25346878961059033, 
+                    0.22334928698227563, 
+                    0.22334928698227563, 
+                    0.18887263810919758, 
+                    0.18887263810919758, 
+                    0.14778902190214743, 
+                    0.14778902190214743
+                ], 
+                0.4305810332298279
+            ], 
+            [
+                0.9812763333320618, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986746261374263, 
+                    0.9986746261374263, 
+                    0.992251165318634, 
+                    0.992251165318634, 
+                    0.9775434246665342, 
+                    0.9775434246665342, 
+                    0.9514249836071077, 
+                    0.9514249836071077, 
+                    0.9169274959655325, 
+                    0.9169274959655325, 
+                    0.8766856146847458, 
+                    0.8766856146847458, 
+                    0.8291837519233488, 
+                    0.8291837519233488, 
+                    0.7798281163401343, 
+                    0.7798281163401343, 
+                    0.7279245772055353, 
+                    0.7279245772055353, 
+                    0.6759894018166781, 
+                    0.6759894018166781, 
+                    0.6282995104546175, 
+                    0.6282995104546175, 
+                    0.5844603332822225, 
+                    0.5844603332822225, 
+                    0.544117623504684, 
+                    0.544117623504684, 
+                    0.5065207945506829, 
+                    0.5065207945506829, 
+                    0.47321593378169813, 
+                    0.47321593378169813, 
+                    0.44398781263625203, 
+                    0.44398781263625203, 
+                    0.4167880730604213, 
+                    0.4167880730604213, 
+                    0.39214170996495473, 
+                    0.39214170996495473, 
+                    0.37046057419912254, 
+                    0.37046057419912254, 
+                    0.3504678795933391, 
+                    0.3504678795933391, 
+                    0.33217127301766813, 
+                    0.33217127301766813, 
+                    0.31606910258075227, 
+                    0.31606910258075227, 
+                    0.3023189040957811, 
+                    0.3023189040957811, 
+                    0.2843014776514258, 
+                    0.2843014776514258, 
+                    0.26098067206637954, 
+                    0.26098067206637954, 
+                    0.23265053657751286, 
+                    0.23265053657751286, 
+                    0.19916022479049683, 
+                    0.19916022479049683, 
+                    0.1582157271104788, 
+                    0.1582157271104788
+                ], 
+                0.4121168255805969
+            ], 
+            [
+                0.9905939102172852, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985798847630882, 
+                    0.9985798847630882, 
+                    0.9915627189976527, 
+                    0.9915627189976527, 
+                    0.9766402730589144, 
+                    0.9766402730589144, 
+                    0.9496798783665669, 
+                    0.9496798783665669, 
+                    0.9143653818457588, 
+                    0.9143653818457588, 
+                    0.8734660664598006, 
+                    0.8734660664598006, 
+                    0.8254771137328096, 
+                    0.8254771137328096, 
+                    0.775750256002874, 
+                    0.775750256002874, 
+                    0.7235644406091817, 
+                    0.7235644406091817, 
+                    0.671462858021821, 
+                    0.671462858021821, 
+                    0.6237597572621392, 
+                    0.6237597572621392, 
+                    0.579902003851876, 
+                    0.579902003851876, 
+                    0.5396599319996277, 
+                    0.5396599319996277, 
+                    0.5021388363017489, 
+                    0.5021388363017489, 
+                    0.46898401826190494, 
+                    0.46898401826190494, 
+                    0.43989936880554564, 
+                    0.43989936880554564, 
+                    0.41285364852425654, 
+                    0.41285364852425654, 
+                    0.3883620684952817, 
+                    0.3883620684952817, 
+                    0.3668333515726183, 
+                    0.3668333515726183, 
+                    0.34698429106054735, 
+                    0.34698429106054735, 
+                    0.32883850295715256, 
+                    0.32883850295715256, 
+                    0.3131875026734103, 
+                    0.3131875026734103, 
+                    0.29969334167772904, 
+                    0.29969334167772904, 
+                    0.28157723697325754, 
+                    0.28157723697325754, 
+                    0.2582263091858076, 
+                    0.2582263091858076, 
+                    0.2299733565719884, 
+                    0.2299733565719884, 
+                    0.19664897989070335, 
+                    0.19664897989070335, 
+                    0.15596393046144275, 
+                    0.15596393046144275
+                ], 
+                0.3923654556274414
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.998546565448033, 
+                    0.998546565448033, 
+                    0.9927185747013356, 
+                    0.9927185747013356, 
+                    0.9749991298766653, 
+                    0.9749991298766653, 
+                    0.9487241675916808, 
+                    0.9487241675916808, 
+                    0.9121298380832004, 
+                    0.9121298380832004, 
+                    0.870366549236541, 
+                    0.870366549236541, 
+                    0.8217629346715503, 
+                    0.8217629346715503, 
+                    0.7716900894327089, 
+                    0.7716900894327089, 
+                    0.7192681864165087, 
+                    0.7192681864165087, 
+                    0.6670643370937656, 
+                    0.6670643370937656, 
+                    0.6190434865958572, 
+                    0.6190434865958572, 
+                    0.5759280723313372, 
+                    0.5759280723313372, 
+                    0.5350737526553536, 
+                    0.5350737526553536, 
+                    0.4978410537183131, 
+                    0.4978410537183131, 
+                    0.4648331424103255, 
+                    0.4648331424103255, 
+                    0.43590747847757194, 
+                    0.43590747847757194, 
+                    0.40899944269237004, 
+                    0.40899944269237004, 
+                    0.38466881183989554, 
+                    0.38466881183989554, 
+                    0.36329963198721443, 
+                    0.36329963198721443, 
+                    0.3431858533122203, 
+                    0.3431858533122203, 
+                    0.3270237461264639, 
+                    0.3270237461264639, 
+                    0.31634607758004285, 
+                    0.31634607758004285, 
+                    0.3030453684331454, 
+                    0.3030453684331454, 
+                    0.2834763730771749, 
+                    0.2834763730771749, 
+                    0.2588397045572096, 
+                    0.2588397045572096, 
+                    0.2295041494757079, 
+                    0.2295041494757079, 
+                    0.19506069478703092, 
+                    0.19506069478703092, 
+                    0.15290378084101705, 
+                    0.15290378084101705
+                ], 
+                0.37399280071258545
+            ], 
+            [
+                1.0094953775405884, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987182779333311, 
+                    0.9987182779333311, 
+                    0.9933877429112006, 
+                    0.9933877429112006, 
+                    0.9745203768386627, 
+                    0.9745203768386627, 
+                    0.9458639870808961, 
+                    0.9458639870808961, 
+                    0.9091480603749816, 
+                    0.9091480603749816, 
+                    0.8670227678509775, 
+                    0.8670227678509775, 
+                    0.8179451148460748, 
+                    0.8179451148460748, 
+                    0.7674927575556172, 
+                    0.7674927575556172, 
+                    0.7148404477905987, 
+                    0.7148404477905987, 
+                    0.6623677994339898, 
+                    0.6623677994339898, 
+                    0.6149394221398136, 
+                    0.6149394221398136, 
+                    0.5704993109184653, 
+                    0.5704993109184653, 
+                    0.5310280218104458, 
+                    0.5310280218104458, 
+                    0.4935215449375878, 
+                    0.4935215449375878, 
+                    0.46047248819572034, 
+                    0.46047248819572034, 
+                    0.43182908487553673, 
+                    0.43182908487553673, 
+                    0.4050527055466409, 
+                    0.4050527055466409, 
+                    0.38089837745407285, 
+                    0.38089837745407285, 
+                    0.35970014279664225, 
+                    0.35970014279664225, 
+                    0.3401764244077767, 
+                    0.3401764244077767, 
+                    0.3224186016486277, 
+                    0.3224186016486277, 
+                    0.3068671048424421, 
+                    0.3068671048424421, 
+                    0.29018418656607786, 
+                    0.29018418656607786, 
+                    0.26861281768637824, 
+                    0.26861281768637824, 
+                    0.2429049277239117, 
+                    0.2429049277239117, 
+                    0.21337580257256977, 
+                    0.21337580257256977, 
+                    0.17970832588830934, 
+                    0.17970832588830934, 
+                    0.1397170577308208, 
+                    0.1397170577308208
+                ], 
+                0.3526667058467865
+            ], 
+            [
+                1.0190808773040771, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984605685001573, 
+                    0.9984605685001573, 
+                    0.9912939265219186, 
+                    0.9912939265219186, 
+                    0.9734077922093852, 
+                    0.9734077922093852, 
+                    0.9439291712065124, 
+                    0.9439291712065124, 
+                    0.9064609354223332, 
+                    0.9064609354223332, 
+                    0.8637465551941876, 
+                    0.8637465551941876, 
+                    0.8141751293912974, 
+                    0.8141751293912974, 
+                    0.7633913795263187, 
+                    0.7633913795263187, 
+                    0.7104456024842113, 
+                    0.7104456024842113, 
+                    0.6578620446197688, 
+                    0.6578620446197688, 
+                    0.6103311746458804, 
+                    0.6103311746458804, 
+                    0.5663521471698876, 
+                    0.5663521471698876, 
+                    0.5266069501608085, 
+                    0.5266069501608085, 
+                    0.48920857288464403, 
+                    0.48920857288464403, 
+                    0.45640960715196216, 
+                    0.45640960715196216, 
+                    0.42781716180001916, 
+                    0.42781716180001916, 
+                    0.4012985068944628, 
+                    0.4012985068944628, 
+                    0.3773052878023626, 
+                    0.3773052878023626, 
+                    0.35609148279813624, 
+                    0.35609148279813624, 
+                    0.33675483677868373, 
+                    0.33675483677868373, 
+                    0.31912643515354394, 
+                    0.31912643515354394, 
+                    0.3031191367325469, 
+                    0.3031191367325469, 
+                    0.28812336814820144, 
+                    0.28812336814820144, 
+                    0.26858546688033924, 
+                    0.26858546688033924, 
+                    0.244428617501931, 
+                    0.244428617501931, 
+                    0.21601482231130936, 
+                    0.21601482231130936, 
+                    0.18314127001957403, 
+                    0.18314127001957403, 
+                    0.14365694168755402, 
+                    0.14365694168755402
+                ], 
+                0.3348221778869629
+            ], 
+            [
+                1.0287574529647827, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982651622448635, 
+                    0.9982651622448635, 
+                    0.99108929503326, 
+                    0.99108929503326, 
+                    0.9721486327492428, 
+                    0.9721486327492428, 
+                    0.9420463730173687, 
+                    0.9420463730173687, 
+                    0.9037124281075275, 
+                    0.9037124281075275, 
+                    0.860411830205812, 
+                    0.860411830205812, 
+                    0.8103530835675755, 
+                    0.8103530835675755, 
+                    0.759247649015636, 
+                    0.759247649015636, 
+                    0.7060389082774478, 
+                    0.7060389082774478, 
+                    0.6538357344334311, 
+                    0.6538357344334311, 
+                    0.6052439526483282, 
+                    0.6052439526483282, 
+                    0.5618874110129317, 
+                    0.5618874110129317, 
+                    0.5227701257510134, 
+                    0.5227701257510134, 
+                    0.48469814380418563, 
+                    0.48469814380418563, 
+                    0.45239808201668885, 
+                    0.45239808201668885, 
+                    0.4239068113516604, 
+                    0.4239068113516604, 
+                    0.397502386315326, 
+                    0.397502386315326, 
+                    0.3736957887408429, 
+                    0.3736957887408429, 
+                    0.3529621530609945, 
+                    0.3529621530609945, 
+                    0.3329684003766056, 
+                    0.3329684003766056, 
+                    0.315609398770043, 
+                    0.315609398770043, 
+                    0.30288044272193904, 
+                    0.30288044272193904, 
+                    0.28812395171124083, 
+                    0.28812395171124083, 
+                    0.2678034649842245, 
+                    0.2678034649842245, 
+                    0.24302217103703122, 
+                    0.24302217103703122, 
+                    0.21412592289006502, 
+                    0.21412592289006502, 
+                    0.18074212733556355, 
+                    0.18074212733556355, 
+                    0.14050701775084146, 
+                    0.14050701775084146
+                ], 
+                0.3171022832393646
+            ], 
+            [
+                1.038525938987732, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9980768181005337, 
+                    0.9980768181005337, 
+                    0.9893717574832752, 
+                    0.9893717574832752, 
+                    0.9710295814359144, 
+                    0.9710295814359144, 
+                    0.9398041464984597, 
+                    0.9398041464984597, 
+                    0.9009449156499513, 
+                    0.9009449156499513, 
+                    0.8570718600362467, 
+                    0.8570718600362467, 
+                    0.806503598760714, 
+                    0.806503598760714, 
+                    0.7550734122086474, 
+                    0.7550734122086474, 
+                    0.7016691786222926, 
+                    0.7016691786222926, 
+                    0.649227175569187, 
+                    0.649227175569187, 
+                    0.6008975823241433, 
+                    0.6008975823241433, 
+                    0.5579505292573169, 
+                    0.5579505292573169, 
+                    0.5174972062747958, 
+                    0.5174972062747958, 
+                    0.4808956590446817, 
+                    0.4808956590446817, 
+                    0.4482964462419546, 
+                    0.4482964462419546, 
+                    0.4199969543933148, 
+                    0.4199969543933148, 
+                    0.39374572849386763, 
+                    0.39374572849386763, 
+                    0.37007639640302864, 
+                    0.37007639640302864, 
+                    0.34933164195125255, 
+                    0.34933164195125255, 
+                    0.33024978459258075, 
+                    0.33024978459258075, 
+                    0.312798929290424, 
+                    0.312798929290424, 
+                    0.29744388909542097, 
+                    0.29744388909542097, 
+                    0.282092297005768, 
+                    0.282092297005768, 
+                    0.262082685531095, 
+                    0.262082685531095, 
+                    0.23780065552835794, 
+                    0.23780065552835794, 
+                    0.20957599670874758, 
+                    0.20957599670874758, 
+                    0.17717310021530755, 
+                    0.17717310021530755, 
+                    0.13852552722108993, 
+                    0.13852552722108993
+                ], 
+                0.29923945665359497
+            ], 
+            [
+                1.048387050628662, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999805035568021, 
+                    0.9999805035568021, 
+                    0.9980594788432327, 
+                    0.9980594788432327, 
+                    0.9896487877100871, 
+                    0.9896487877100871, 
+                    0.9697475497056741, 
+                    0.9697475497056741, 
+                    0.9376686349740516, 
+                    0.9376686349740516, 
+                    0.8980794198256492, 
+                    0.8980794198256492, 
+                    0.8537875621132865, 
+                    0.8537875621132865, 
+                    0.8026902546400368, 
+                    0.8026902546400368, 
+                    0.7510349161364868, 
+                    0.7510349161364868, 
+                    0.6973041460437007, 
+                    0.6973041460437007, 
+                    0.6446230015472136, 
+                    0.6446230015472136, 
+                    0.5969228104171163, 
+                    0.5969228104171163, 
+                    0.5533244743609055, 
+                    0.5533244743609055, 
+                    0.5133977157535718, 
+                    0.5133977157535718, 
+                    0.47646419106597515, 
+                    0.47646419106597515, 
+                    0.44429611704360905, 
+                    0.44429611704360905, 
+                    0.41617939737424725, 
+                    0.41617939737424725, 
+                    0.39005909443167186, 
+                    0.39005909443167186, 
+                    0.36656253992333254, 
+                    0.36656253992333254, 
+                    0.3459728359435738, 
+                    0.3459728359435738, 
+                    0.3270731493195353, 
+                    0.3270731493195353, 
+                    0.3097505792850838, 
+                    0.3097505792850838, 
+                    0.29404160968492044, 
+                    0.29404160968492044, 
+                    0.28016224111406673, 
+                    0.28016224111406673, 
+                    0.2629763585304837, 
+                    0.2629763585304837, 
+                    0.2409088998247733, 
+                    0.2409088998247733, 
+                    0.21421358765448012, 
+                    0.21421358765448012, 
+                    0.18280484005496597, 
+                    0.18280484005496597, 
+                    0.14463861889932225, 
+                    0.14463861889932225
+                ], 
+                0.2829795777797699
+            ], 
+            [
+                1.0583419799804688, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999779519361504, 
+                    0.9999779519361504, 
+                    0.9979413633903428, 
+                    0.9979413633903428, 
+                    0.9892166358055374, 
+                    0.9892166358055374, 
+                    0.9684543939634537, 
+                    0.9684543939634537, 
+                    0.9355667155780903, 
+                    0.9355667155780903, 
+                    0.8952772218974863, 
+                    0.8952772218974863, 
+                    0.8501254447799624, 
+                    0.8501254447799624, 
+                    0.7987109762864424, 
+                    0.7987109762864424, 
+                    0.7466238942933947, 
+                    0.7466238942933947, 
+                    0.6929393577429347, 
+                    0.6929393577429347, 
+                    0.640143557573101, 
+                    0.640143557573101, 
+                    0.5925986662155807, 
+                    0.5925986662155807, 
+                    0.5489304523628635, 
+                    0.5489304523628635, 
+                    0.5094178493714308, 
+                    0.5094178493714308, 
+                    0.4726084121928355, 
+                    0.4726084121928355, 
+                    0.44034975584811364, 
+                    0.44034975584811364, 
+                    0.4121664023948703, 
+                    0.4121664023948703, 
+                    0.3864343628395338, 
+                    0.3864343628395338, 
+                    0.36294570777066, 
+                    0.36294570777066, 
+                    0.34232201800541584, 
+                    0.34232201800541584, 
+                    0.32398388103297493, 
+                    0.32398388103297493, 
+                    0.30674109406534106, 
+                    0.30674109406534106, 
+                    0.2912235699097919, 
+                    0.2912235699097919, 
+                    0.2751592170751376, 
+                    0.2751592170751376, 
+                    0.2546344524486097, 
+                    0.2546344524486097, 
+                    0.23015214426295194, 
+                    0.23015214426295194, 
+                    0.20204041713086487, 
+                    0.20204041713086487, 
+                    0.1700685228990497, 
+                    0.1700685228990497, 
+                    0.13228149499521816, 
+                    0.13228149499521816
+                ], 
+                0.26573997735977173
+            ], 
+            [
+                1.0683913230895996, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999574730255674, 
+                    0.9999574730255674, 
+                    0.9976842517725314, 
+                    0.9976842517725314, 
+                    0.987871844608972, 
+                    0.987871844608972, 
+                    0.9655372169800293, 
+                    0.9655372169800293, 
+                    0.9331690221890047, 
+                    0.9331690221890047, 
+                    0.8923267320485682, 
+                    0.8923267320485682, 
+                    0.8467998887333394, 
+                    0.8467998887333394, 
+                    0.7948443012083695, 
+                    0.7948443012083695, 
+                    0.7425081768758134, 
+                    0.7425081768758134, 
+                    0.6886090272393428, 
+                    0.6886090272393428, 
+                    0.6356212053920597, 
+                    0.6356212053920597, 
+                    0.5880637918259521, 
+                    0.5880637918259521, 
+                    0.5443655840690568, 
+                    0.5443655840690568, 
+                    0.505008074447534, 
+                    0.505008074447534, 
+                    0.4683587967035167, 
+                    0.4683587967035167, 
+                    0.43639514011297903, 
+                    0.43639514011297903, 
+                    0.40853291014630416, 
+                    0.40853291014630416, 
+                    0.3827825686308759, 
+                    0.3827825686308759, 
+                    0.35961433893162714, 
+                    0.35961433893162714, 
+                    0.3393422446736155, 
+                    0.3393422446736155, 
+                    0.3206386256457529, 
+                    0.3206386256457529, 
+                    0.30335828778940604, 
+                    0.30335828778940604, 
+                    0.28853280581982077, 
+                    0.28853280581982077, 
+                    0.2720373275072468, 
+                    0.2720373275072468, 
+                    0.25089855156115487, 
+                    0.25089855156115487, 
+                    0.22604421780590145, 
+                    0.22604421780590145, 
+                    0.19780835232760446, 
+                    0.19780835232760446, 
+                    0.16594430831082577, 
+                    0.16594430831082577, 
+                    0.1285613352288091, 
+                    0.1285613352288091
+                ], 
+                0.2496105134487152
+            ], 
+            [
+                1.078536033630371, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999409401797132, 
+                    0.9999409401797132, 
+                    0.9974892122724672, 
+                    0.9974892122724672, 
+                    0.9870808980240702, 
+                    0.9870808980240702, 
+                    0.9639251512464285, 
+                    0.9639251512464285, 
+                    0.9308515359010144, 
+                    0.9308515359010144, 
+                    0.8893572791683655, 
+                    0.8893572791683655, 
+                    0.8433006605614155, 
+                    0.8433006605614155, 
+                    0.790906879635004, 
+                    0.790906879635004, 
+                    0.7382843618367333, 
+                    0.7382843618367333, 
+                    0.6843084204668304, 
+                    0.6843084204668304, 
+                    0.6309683867948991, 
+                    0.6309683867948991, 
+                    0.5840973994014661, 
+                    0.5840973994014661, 
+                    0.5396273057304367, 
+                    0.5396273057304367, 
+                    0.5010555124694042, 
+                    0.5010555124694042, 
+                    0.4642010042110094, 
+                    0.4642010042110094, 
+                    0.43250551274097926, 
+                    0.43250551274097926, 
+                    0.404782798870128, 
+                    0.404782798870128, 
+                    0.3792051748747, 
+                    0.3792051748747, 
+                    0.35620804074247, 
+                    0.35620804074247, 
+                    0.33608684093452335, 
+                    0.33608684093452335, 
+                    0.3173651250314347, 
+                    0.3173651250314347, 
+                    0.300084878302598, 
+                    0.300084878302598, 
+                    0.2856954329418165, 
+                    0.2856954329418165, 
+                    0.2692598407955044, 
+                    0.2692598407955044, 
+                    0.24812656406639608, 
+                    0.24812656406639608, 
+                    0.2233409983536862, 
+                    0.2233409983536862, 
+                    0.19524905371780468, 
+                    0.19524905371780468, 
+                    0.16361143072812384, 
+                    0.16361143072812384, 
+                    0.12657935711575385, 
+                    0.12657935711575385
+                ], 
+                0.2343589812517166
+            ], 
+            [
+                1.0887771844863892, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999072213744657, 
+                    0.9999072213744657, 
+                    0.9973084327516496, 
+                    0.9973084327516496, 
+                    0.9864242472054928, 
+                    0.9864242472054928, 
+                    0.9630826806779922, 
+                    0.9630826806779922, 
+                    0.9285323357050861, 
+                    0.9285323357050861, 
+                    0.8863459637869869, 
+                    0.8863459637869869, 
+                    0.8397741731140351, 
+                    0.8397741731140351, 
+                    0.7869521196968406, 
+                    0.7869521196968406, 
+                    0.7340953304915985, 
+                    0.7340953304915985, 
+                    0.6798204735570851, 
+                    0.6798204735570851, 
+                    0.6269875209340081, 
+                    0.6269875209340081, 
+                    0.5789832207884748, 
+                    0.5789832207884748, 
+                    0.5360864801125702, 
+                    0.5360864801125702, 
+                    0.4964434577151516, 
+                    0.4964434577151516, 
+                    0.4603371084459695, 
+                    0.4603371084459695, 
+                    0.42859048595957916, 
+                    0.42859048595957916, 
+                    0.4010773538158058, 
+                    0.4010773538158058, 
+                    0.37566528592940557, 
+                    0.37566528592940557, 
+                    0.3528382647100349, 
+                    0.3528382647100349, 
+                    0.3328680926068714, 
+                    0.3328680926068714, 
+                    0.3142166977465689, 
+                    0.3142166977465689, 
+                    0.2970589620029968, 
+                    0.2970589620029968, 
+                    0.2828750376403196, 
+                    0.2828750376403196, 
+                    0.2667918781703582, 
+                    0.2667918781703582, 
+                    0.24594912476966435, 
+                    0.24594912476966435, 
+                    0.2214331484940433, 
+                    0.2214331484940433, 
+                    0.19360848171389322, 
+                    0.19360848171389322, 
+                    0.16225226669702097, 
+                    0.16225226669702097, 
+                    0.12554535961280847, 
+                    0.12554535961280847
+                ], 
+                0.21988734602928162
+            ], 
+            [
+                1.0991154909133911, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998869730034062, 
+                    0.9998869730034062, 
+                    0.9972596845831216, 
+                    0.9972596845831216, 
+                    0.9866546193271106, 
+                    0.9866546193271106, 
+                    0.9627945433494013, 
+                    0.9627945433494013, 
+                    0.9262532739406096, 
+                    0.9262532739406096, 
+                    0.8831596405338165, 
+                    0.8831596405338165, 
+                    0.8361618948240237, 
+                    0.8361618948240237, 
+                    0.7829120739933578, 
+                    0.7829120739933578, 
+                    0.7297705605207792, 
+                    0.7297705605207792, 
+                    0.6753695377148541, 
+                    0.6753695377148541, 
+                    0.6225679503902535, 
+                    0.6225679503902535, 
+                    0.5747909961571849, 
+                    0.5747909961571849, 
+                    0.5318061016227869, 
+                    0.5318061016227869, 
+                    0.49233113475992574, 
+                    0.49233113475992574, 
+                    0.4562524132071027, 
+                    0.4562524132071027, 
+                    0.4246799484264931, 
+                    0.4246799484264931, 
+                    0.3974174884350561, 
+                    0.3974174884350561, 
+                    0.3723547354918848, 
+                    0.3723547354918848, 
+                    0.348984754400878, 
+                    0.348984754400878, 
+                    0.329078494849324, 
+                    0.329078494849324, 
+                    0.3115056933399744, 
+                    0.3115056933399744, 
+                    0.2948929513308451, 
+                    0.2948929513308451, 
+                    0.2798673042458742, 
+                    0.2798673042458742, 
+                    0.26626056509225593, 
+                    0.26626056509225593, 
+                    0.24811636343989477, 
+                    0.24811636343989477, 
+                    0.22560174177878098, 
+                    0.22560174177878098, 
+                    0.1991334179362636, 
+                    0.1991334179362636, 
+                    0.1685740351832642, 
+                    0.1685740351832642, 
+                    0.1320208636104689, 
+                    0.1320208636104689
+                ], 
+                0.20656824111938477
+            ]
+        ]
+    }, 
+    {
+        "block_size": 63, 
+        "preprocessing_block_sizes": [
+            44
+        ], 
+        "pruning_parameters": [
+            [
+                0.9111570119857788, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998428780680001, 
+                    0.9998428780680001, 
+                    0.9998381620523352, 
+                    0.9998381620523352, 
+                    0.9998359534270941, 
+                    0.9998359534270941, 
+                    0.9998238710969619, 
+                    0.9998238710969619, 
+                    0.976310177160824, 
+                    0.976310177160824, 
+                    0.9289590114273821, 
+                    0.9289590114273821, 
+                    0.8850730007026024, 
+                    0.8850730007026024, 
+                    0.8416673380046734, 
+                    0.8416673380046734, 
+                    0.7969558780659989, 
+                    0.7969558780659989, 
+                    0.7513885327309681, 
+                    0.7513885327309681, 
+                    0.706420480129972, 
+                    0.706420480129972, 
+                    0.66093509443741, 
+                    0.66093509443741, 
+                    0.6178620944520152, 
+                    0.6178620944520152, 
+                    0.5769102008610546, 
+                    0.5769102008610546, 
+                    0.5380883754544288, 
+                    0.5380883754544288, 
+                    0.5022437460077981, 
+                    0.5022437460077981, 
+                    0.46950078443089505, 
+                    0.46950078443089505, 
+                    0.4419822852154178, 
+                    0.4419822852154178, 
+                    0.4162559266736774, 
+                    0.4162559266736774, 
+                    0.39074874721861047, 
+                    0.39074874721861047, 
+                    0.3640465349427896, 
+                    0.3640465349427896, 
+                    0.3355070723134956, 
+                    0.3355070723134956, 
+                    0.3057010993590549, 
+                    0.3057010993590549, 
+                    0.2748343636573396, 
+                    0.2748343636573396, 
+                    0.24315393935921933, 
+                    0.24315393935921933, 
+                    0.2107729002650554, 
+                    0.2107729002650554, 
+                    0.17764386791378786, 
+                    0.17764386791378786, 
+                    0.1434582505700546, 
+                    0.1434582505700546, 
+                    0.10524051230706928, 
+                    0.10524051230706928
+                ], 
+                0.5001731514930725
+            ], 
+            [
+                0.9196739792823792, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997290091045311, 
+                    0.9997290091045311, 
+                    0.9996575612050109, 
+                    0.9996575612050109, 
+                    0.9996324520558844, 
+                    0.9996324520558844, 
+                    0.9995245072012237, 
+                    0.9995245072012237, 
+                    0.9748566073457613, 
+                    0.9748566073457613, 
+                    0.9278893045263495, 
+                    0.9278893045263495, 
+                    0.8847132224936813, 
+                    0.8847132224936813, 
+                    0.8411566283740477, 
+                    0.8411566283740477, 
+                    0.7956303856922883, 
+                    0.7956303856922883, 
+                    0.7494695151050773, 
+                    0.7494695151050773, 
+                    0.7043840048362183, 
+                    0.7043840048362183, 
+                    0.6594376314974403, 
+                    0.6594376314974403, 
+                    0.617086572383143, 
+                    0.617086572383143, 
+                    0.5768638294162681, 
+                    0.5768638294162681, 
+                    0.5387468882974439, 
+                    0.5387468882974439, 
+                    0.5026603653042323, 
+                    0.5026603653042323, 
+                    0.46871231042191464, 
+                    0.46871231042191464, 
+                    0.439838742649101, 
+                    0.439838742649101, 
+                    0.4140882384436072, 
+                    0.4140882384436072, 
+                    0.38940085195299007, 
+                    0.38940085195299007, 
+                    0.36377050995096144, 
+                    0.36377050995096144, 
+                    0.3361050486116789, 
+                    0.3361050486116789, 
+                    0.30695805504590024, 
+                    0.30695805504590024, 
+                    0.27653997810254777, 
+                    0.27653997810254777, 
+                    0.24513309141725909, 
+                    0.24513309141725909, 
+                    0.21287589460781584, 
+                    0.21287589460781584, 
+                    0.17972721147852871, 
+                    0.17972721147852871, 
+                    0.1453453042122014, 
+                    0.1453453042122014, 
+                    0.10702800511534569, 
+                    0.10702800511534569
+                ], 
+                0.4998186528682709
+            ], 
+            [
+                0.9282705783843994, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998258120018636, 
+                    0.9998258120018636, 
+                    0.9997443169466792, 
+                    0.9997443169466792, 
+                    0.9996761733394748, 
+                    0.9996761733394748, 
+                    0.9894486362855727, 
+                    0.9894486362855727, 
+                    0.9513501378270849, 
+                    0.9513501378270849, 
+                    0.9195397166544939, 
+                    0.9195397166544939, 
+                    0.8828625374955056, 
+                    0.8828625374955056, 
+                    0.8408001256429258, 
+                    0.8408001256429258, 
+                    0.7949573937967569, 
+                    0.7949573937967569, 
+                    0.7482060672661713, 
+                    0.7482060672661713, 
+                    0.7036819231089213, 
+                    0.7036819231089213, 
+                    0.657701451506076, 
+                    0.657701451506076, 
+                    0.6119958719318984, 
+                    0.6119958719318984, 
+                    0.5763648618104273, 
+                    0.5763648618104273, 
+                    0.5287018306283195, 
+                    0.5287018306283195, 
+                    0.49658736393579767, 
+                    0.49658736393579767, 
+                    0.47024209839226877, 
+                    0.47024209839226877, 
+                    0.44047819317168707, 
+                    0.44047819317168707, 
+                    0.4136692620244246, 
+                    0.4136692620244246, 
+                    0.3901219737063431, 
+                    0.3901219737063431, 
+                    0.36655181607070986, 
+                    0.36655181607070986, 
+                    0.34064104836055076, 
+                    0.34064104836055076, 
+                    0.3128234106380519, 
+                    0.3128234106380519, 
+                    0.2832727102189775, 
+                    0.2832727102189775, 
+                    0.25232565846494687, 
+                    0.25232565846494687, 
+                    0.22016036221681365, 
+                    0.22016036221681365, 
+                    0.1867309826751347, 
+                    0.1867309826751347, 
+                    0.15160158578943675, 
+                    0.15160158578943675, 
+                    0.11287840342995335, 
+                    0.11287840342995335
+                ], 
+                0.5000720024108887
+            ], 
+            [
+                0.9369475245475769, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999999764918965, 
+                    0.9999999764918965, 
+                    0.9999928715926434, 
+                    0.9999928715926434, 
+                    0.9995972242578265, 
+                    0.9995972242578265, 
+                    0.9990145086708171, 
+                    0.9990145086708171, 
+                    0.9859316224928261, 
+                    0.9859316224928261, 
+                    0.9524912067393086, 
+                    0.9524912067393086, 
+                    0.9205588865572601, 
+                    0.9205588865572601, 
+                    0.8822118187420948, 
+                    0.8822118187420948, 
+                    0.8381317262185465, 
+                    0.8381317262185465, 
+                    0.791116123341249, 
+                    0.791116123341249, 
+                    0.7442490867665202, 
+                    0.7442490867665202, 
+                    0.6993741607669332, 
+                    0.6993741607669332, 
+                    0.6531991564748043, 
+                    0.6531991564748043, 
+                    0.6136348813256836, 
+                    0.6136348813256836, 
+                    0.5692991487559339, 
+                    0.5692991487559339, 
+                    0.5332729878788501, 
+                    0.5332729878788501, 
+                    0.4951685034935264, 
+                    0.4951685034935264, 
+                    0.4635059798200402, 
+                    0.4635059798200402, 
+                    0.4359017510236703, 
+                    0.4359017510236703, 
+                    0.4101607141483636, 
+                    0.4101607141483636, 
+                    0.3874278738576041, 
+                    0.3874278738576041, 
+                    0.3665402263094824, 
+                    0.3665402263094824, 
+                    0.3439498388432208, 
+                    0.3439498388432208, 
+                    0.3189559818835242, 
+                    0.3189559818835242, 
+                    0.29140356305358855, 
+                    0.29140356305358855, 
+                    0.2617128357907971, 
+                    0.2617128357907971, 
+                    0.23017107831665165, 
+                    0.23017107831665165, 
+                    0.19677887289529813, 
+                    0.19677887289529813, 
+                    0.16103588753406128, 
+                    0.16103588753406128, 
+                    0.1209667548436671, 
+                    0.1209667548436671
+                ], 
+                0.4988282024860382
+            ], 
+            [
+                0.9457055330276489, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987169475339271, 
+                    0.9987169475339271, 
+                    0.9926167344900282, 
+                    0.9926167344900282, 
+                    0.977426942018175, 
+                    0.977426942018175, 
+                    0.9519414580066975, 
+                    0.9519414580066975, 
+                    0.9190347802337593, 
+                    0.9190347802337593, 
+                    0.8796614943608009, 
+                    0.8796614943608009, 
+                    0.8350805226285302, 
+                    0.8350805226285302, 
+                    0.7878174547767731, 
+                    0.7878174547767731, 
+                    0.740790597290479, 
+                    0.740790597290479, 
+                    0.6955718051619761, 
+                    0.6955718051619761, 
+                    0.6507359223256992, 
+                    0.6507359223256992, 
+                    0.608031963854908, 
+                    0.608031963854908, 
+                    0.5684581294288487, 
+                    0.5684581294288487, 
+                    0.5280922411699058, 
+                    0.5280922411699058, 
+                    0.492709662526803, 
+                    0.492709662526803, 
+                    0.4607480393943902, 
+                    0.4607480393943902, 
+                    0.43289451854034094, 
+                    0.43289451854034094, 
+                    0.40731689017580264, 
+                    0.40731689017580264, 
+                    0.3846039065262892, 
+                    0.3846039065262892, 
+                    0.3646121395300377, 
+                    0.3646121395300377, 
+                    0.34608488831133694, 
+                    0.34608488831133694, 
+                    0.32967390289628606, 
+                    0.32967390289628606, 
+                    0.31349914113608646, 
+                    0.31349914113608646, 
+                    0.2927585797667688, 
+                    0.2927585797667688, 
+                    0.2669085835359486, 
+                    0.2669085835359486, 
+                    0.2365163421767142, 
+                    0.2365163421767142, 
+                    0.20127665526010938, 
+                    0.20127665526010938, 
+                    0.1587901706368065, 
+                    0.1587901706368065
+                ], 
+                0.4996556043624878
+            ], 
+            [
+                0.9545454382896423, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985591752594524, 
+                    0.9985591752594524, 
+                    0.9918127698597973, 
+                    0.9918127698597973, 
+                    0.976028017313018, 
+                    0.976028017313018, 
+                    0.9500249098480593, 
+                    0.9500249098480593, 
+                    0.9164132418232107, 
+                    0.9164132418232107, 
+                    0.8764085463717189, 
+                    0.8764085463717189, 
+                    0.8312940367117172, 
+                    0.8312940367117172, 
+                    0.7836605589268965, 
+                    0.7836605589268965, 
+                    0.7363553592161023, 
+                    0.7363553592161023, 
+                    0.6911506624154815, 
+                    0.6911506624154815, 
+                    0.6458267160261669, 
+                    0.6458267160261669, 
+                    0.6038971108699239, 
+                    0.6038971108699239, 
+                    0.5633365594406856, 
+                    0.5633365594406856, 
+                    0.5242834617600731, 
+                    0.5242834617600731, 
+                    0.48787435925978284, 
+                    0.48787435925978284, 
+                    0.45672416582291187, 
+                    0.45672416582291187, 
+                    0.4288097991799327, 
+                    0.4288097991799327, 
+                    0.40340760020361566, 
+                    0.40340760020361566, 
+                    0.38084077069220607, 
+                    0.38084077069220607, 
+                    0.3609925886460364, 
+                    0.3609925886460364, 
+                    0.34268664281714895, 
+                    0.34268664281714895, 
+                    0.32731351546377374, 
+                    0.32731351546377374, 
+                    0.31097387178444746, 
+                    0.31097387178444746, 
+                    0.2895636272864895, 
+                    0.2895636272864895, 
+                    0.2632937126196232, 
+                    0.2632937126196232, 
+                    0.23270343155082235, 
+                    0.23270343155082235, 
+                    0.197439591779015, 
+                    0.197439591779015, 
+                    0.1550992036292039, 
+                    0.1550992036292039
+                ], 
+                0.4787614941596985
+            ], 
+            [
+                0.9634680151939392, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999980744704371, 
+                    0.9999980744704371, 
+                    0.998513074934164, 
+                    0.998513074934164, 
+                    0.9918675574846142, 
+                    0.9918675574846142, 
+                    0.9752309993801184, 
+                    0.9752309993801184, 
+                    0.9481284389048572, 
+                    0.9481284389048572, 
+                    0.9137549573985632, 
+                    0.9137549573985632, 
+                    0.8731223483929913, 
+                    0.8731223483929913, 
+                    0.827489009622594, 
+                    0.827489009622594, 
+                    0.7794638041693199, 
+                    0.7794638041693199, 
+                    0.7319864335060733, 
+                    0.7319864335060733, 
+                    0.6863996058448872, 
+                    0.6863996058448872, 
+                    0.6416611919559122, 
+                    0.6416611919559122, 
+                    0.5985674821544977, 
+                    0.5985674821544977, 
+                    0.5595717805783456, 
+                    0.5595717805783456, 
+                    0.5189119846341821, 
+                    0.5189119846341821, 
+                    0.4841967284864476, 
+                    0.4841967284864476, 
+                    0.45232542685829213, 
+                    0.45232542685829213, 
+                    0.4248090103730954, 
+                    0.4248090103730954, 
+                    0.39952091638482384, 
+                    0.39952091638482384, 
+                    0.3771127626822302, 
+                    0.3771127626822302, 
+                    0.3574135680704339, 
+                    0.3574135680704339, 
+                    0.33919335436867026, 
+                    0.33919335436867026, 
+                    0.3229172363156262, 
+                    0.3229172363156262, 
+                    0.30622337952582884, 
+                    0.30622337952582884, 
+                    0.2851149944397282, 
+                    0.2851149944397282, 
+                    0.2592251556509645, 
+                    0.2592251556509645, 
+                    0.22906250115346083, 
+                    0.22906250115346083, 
+                    0.19430750619147186, 
+                    0.19430750619147186, 
+                    0.15263427262185653, 
+                    0.15263427262185653
+                ], 
+                0.4576750695705414
+            ], 
+            [
+                0.9724739193916321, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982707767955458, 
+                    0.9982707767955458, 
+                    0.99093177194712, 
+                    0.99093177194712, 
+                    0.9736425541381505, 
+                    0.9736425541381505, 
+                    0.9461283719300766, 
+                    0.9461283719300766, 
+                    0.9110667417582511, 
+                    0.9110667417582511, 
+                    0.8698098642439538, 
+                    0.8698098642439538, 
+                    0.8236740788295318, 
+                    0.8236740788295318, 
+                    0.7753109221629925, 
+                    0.7753109221629925, 
+                    0.7275017668179262, 
+                    0.7275017668179262, 
+                    0.6821474388366525, 
+                    0.6821474388366525, 
+                    0.6365071657710419, 
+                    0.6365071657710419, 
+                    0.5948763134846153, 
+                    0.5948763134846153, 
+                    0.5541884468499613, 
+                    0.5541884468499613, 
+                    0.5154971513941261, 
+                    0.5154971513941261, 
+                    0.47929600276968487, 
+                    0.47929600276968487, 
+                    0.4484404041500382, 
+                    0.4484404041500382, 
+                    0.42082484948025317, 
+                    0.42082484948025317, 
+                    0.3957220917063772, 
+                    0.3957220917063772, 
+                    0.3734513221972911, 
+                    0.3734513221972911, 
+                    0.3538755023185502, 
+                    0.3538755023185502, 
+                    0.3361133122926938, 
+                    0.3361133122926938, 
+                    0.3217192046483996, 
+                    0.3217192046483996, 
+                    0.3056279339915802, 
+                    0.3056279339915802, 
+                    0.28422244865921636, 
+                    0.28422244865921636, 
+                    0.2580523542390328, 
+                    0.2580523542390328, 
+                    0.22767529940441475, 
+                    0.22767529940441475, 
+                    0.19272554038182604, 
+                    0.19272554038182604, 
+                    0.15082430415315534, 
+                    0.15082430415315534
+                ], 
+                0.43774479627609253
+            ], 
+            [
+                0.9815640449523926, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982406448295477, 
+                    0.9982406448295477, 
+                    0.9907765510735811, 
+                    0.9907765510735811, 
+                    0.9728577447521736, 
+                    0.9728577447521736, 
+                    0.9440665607647112, 
+                    0.9440665607647112, 
+                    0.9083470015311133, 
+                    0.9083470015311133, 
+                    0.8664307199716518, 
+                    0.8664307199716518, 
+                    0.8197635033683487, 
+                    0.8197635033683487, 
+                    0.7710782129424423, 
+                    0.7710782129424423, 
+                    0.7231743467762638, 
+                    0.7231743467762638, 
+                    0.6774005819297809, 
+                    0.6774005819297809, 
+                    0.6324040063575754, 
+                    0.6324040063575754, 
+                    0.589652247891468, 
+                    0.589652247891468, 
+                    0.550358033489938, 
+                    0.550358033489938, 
+                    0.5104213439221447, 
+                    0.5104213439221447, 
+                    0.47550623808534825, 
+                    0.47550623808534825, 
+                    0.44419051073603066, 
+                    0.44419051073603066, 
+                    0.4168895744000337, 
+                    0.4168895744000337, 
+                    0.3919193913530859, 
+                    0.3919193913530859, 
+                    0.36981165090894597, 
+                    0.36981165090894597, 
+                    0.3503976680283034, 
+                    0.3503976680283034, 
+                    0.33244720694174285, 
+                    0.33244720694174285, 
+                    0.31654155857764144, 
+                    0.31654155857764144, 
+                    0.30029602371427544, 
+                    0.30029602371427544, 
+                    0.2794647963397883, 
+                    0.2794647963397883, 
+                    0.25393236753553783, 
+                    0.25393236753553783, 
+                    0.2242302134716881, 
+                    0.2242302134716881, 
+                    0.19004983852043683, 
+                    0.19004983852043683, 
+                    0.14912329493793272, 
+                    0.14912329493793272
+                ], 
+                0.4171350598335266
+            ], 
+            [
+                0.9907391667366028, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999945764541519, 
+                    0.9999945764541519, 
+                    0.9981364170877278, 
+                    0.9981364170877278, 
+                    0.9902535267964426, 
+                    0.9902535267964426, 
+                    0.9716362797376353, 
+                    0.9716362797376353, 
+                    0.9420307153703535, 
+                    0.9420307153703535, 
+                    0.905497728269004, 
+                    0.905497728269004, 
+                    0.8630102177310313, 
+                    0.8630102177310313, 
+                    0.8158874730662632, 
+                    0.8158874730662632, 
+                    0.7668187182652835, 
+                    0.7668187182652835, 
+                    0.718707701102107, 
+                    0.718707701102107, 
+                    0.672782579592681, 
+                    0.672782579592681, 
+                    0.6278333446754745, 
+                    0.6278333446754745, 
+                    0.5850237622887828, 
+                    0.5850237622887828, 
+                    0.5458958238061923, 
+                    0.5458958238061923, 
+                    0.5060335933743734, 
+                    0.5060335933743734, 
+                    0.4712778197896102, 
+                    0.4712778197896102, 
+                    0.44012942022988405, 
+                    0.44012942022988405, 
+                    0.41298706476662833, 
+                    0.41298706476662833, 
+                    0.38817326561265975, 
+                    0.38817326561265975, 
+                    0.3662222824548182, 
+                    0.3662222824548182, 
+                    0.34696034277283155, 
+                    0.34696034277283155, 
+                    0.3291707405084125, 
+                    0.3291707405084125, 
+                    0.31322166788251954, 
+                    0.31322166788251954, 
+                    0.29633470378612975, 
+                    0.29633470378612975, 
+                    0.27506518678517566, 
+                    0.27506518678517566, 
+                    0.24935899680734044, 
+                    0.24935899680734044, 
+                    0.21969150599323922, 
+                    0.21969150599323922, 
+                    0.18574249402704904, 
+                    0.18574249402704904, 
+                    0.1453001369012116, 
+                    0.1453001369012116
+                ], 
+                0.3968656063079834
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999849784781962, 
+                    0.9999849784781962, 
+                    0.9979856352465557, 
+                    0.9979856352465557, 
+                    0.989729275318665, 
+                    0.989729275318665, 
+                    0.9703497107510758, 
+                    0.9703497107510758, 
+                    0.9398938681671622, 
+                    0.9398938681671622, 
+                    0.9026424595645762, 
+                    0.9026424595645762, 
+                    0.8595566928281642, 
+                    0.8595566928281642, 
+                    0.8119651150794862, 
+                    0.8119651150794862, 
+                    0.7625671729927292, 
+                    0.7625671729927292, 
+                    0.7142821503969614, 
+                    0.7142821503969614, 
+                    0.6682145130805509, 
+                    0.6682145130805509, 
+                    0.6233169795381529, 
+                    0.6233169795381529, 
+                    0.5804551922033875, 
+                    0.5804551922033875, 
+                    0.5414778017065431, 
+                    0.5414778017065431, 
+                    0.5017065652782148, 
+                    0.5017065652782148, 
+                    0.4671071386274218, 
+                    0.4671071386274218, 
+                    0.43612079348325394, 
+                    0.43612079348325394, 
+                    0.4091312898877722, 
+                    0.4091312898877722, 
+                    0.3844749300669495, 
+                    0.3844749300669495, 
+                    0.362678584391372, 
+                    0.362678584391372, 
+                    0.3435645581252328, 
+                    0.3435645581252328, 
+                    0.32592182707036477, 
+                    0.32592182707036477, 
+                    0.3100215119717889, 
+                    0.3100215119717889, 
+                    0.29287502117762004, 
+                    0.29287502117762004, 
+                    0.27138451515298234, 
+                    0.27138451515298234, 
+                    0.24562473441251492, 
+                    0.24562473441251492, 
+                    0.21605022041759336, 
+                    0.21605022041759336, 
+                    0.18233713539309565, 
+                    0.18233713539309565, 
+                    0.14232071562739407, 
+                    0.14232071562739407
+                ], 
+                0.37717512249946594
+            ], 
+            [
+                1.0093474388122559, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999607363564078, 
+                    0.9999607363564078, 
+                    0.997819761461354, 
+                    0.997819761461354, 
+                    0.9890398139649983, 
+                    0.9890398139649983, 
+                    0.9690096397781366, 
+                    0.9690096397781366, 
+                    0.9377039096407228, 
+                    0.9377039096407228, 
+                    0.8997456367809613, 
+                    0.8997456367809613, 
+                    0.856076107486658, 
+                    0.856076107486658, 
+                    0.8080198793091047, 
+                    0.8080198793091047, 
+                    0.7583056623603069, 
+                    0.7583056623603069, 
+                    0.709861096969457, 
+                    0.709861096969457, 
+                    0.6636652625003941, 
+                    0.6636652625003941, 
+                    0.6188065594052683, 
+                    0.6188065594052683, 
+                    0.5759365083035938, 
+                    0.5759365083035938, 
+                    0.5370725224997739, 
+                    0.5370725224997739, 
+                    0.4974439684847849, 
+                    0.4974439684847849, 
+                    0.4629657035266302, 
+                    0.4629657035266302, 
+                    0.43216384064298263, 
+                    0.43216384064298263, 
+                    0.4053222893422668, 
+                    0.4053222893422668, 
+                    0.38082457213159315, 
+                    0.38082457213159315, 
+                    0.35918014258489495, 
+                    0.35918014258489495, 
+                    0.34020557377967897, 
+                    0.34020557377967897, 
+                    0.322697126698272, 
+                    0.322697126698272, 
+                    0.3071416362134939, 
+                    0.3071416362134939, 
+                    0.2904392967462205, 
+                    0.2904392967462205, 
+                    0.2692419986932208, 
+                    0.2692419986932208, 
+                    0.2437247291714164, 
+                    0.2437247291714164, 
+                    0.21437656472255523, 
+                    0.21437656472255523, 
+                    0.1808818042853538, 
+                    0.1808818042853538, 
+                    0.14108032954169555, 
+                    0.14108032954169555
+                ], 
+                0.35822999477386475
+            ], 
+            [
+                1.0187822580337524, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999429376986105, 
+                    0.9999429376986105, 
+                    0.9976703450731085, 
+                    0.9976703450731085, 
+                    0.9885441580432976, 
+                    0.9885441580432976, 
+                    0.9676278532466457, 
+                    0.9676278532466457, 
+                    0.9354609992796954, 
+                    0.9354609992796954, 
+                    0.8967974497805, 
+                    0.8967974497805, 
+                    0.8525471053024555, 
+                    0.8525471053024555, 
+                    0.8040313835010627, 
+                    0.8040313835010627, 
+                    0.7540784810544793, 
+                    0.7540784810544793, 
+                    0.7052295835372777, 
+                    0.7052295835372777, 
+                    0.6595321182458119, 
+                    0.6595321182458119, 
+                    0.613628624583677, 
+                    0.613628624583677, 
+                    0.5721666256310027, 
+                    0.5721666256310027, 
+                    0.5321339991619215, 
+                    0.5321339991619215, 
+                    0.493617913263122, 
+                    0.493617913263122, 
+                    0.4586317234969499, 
+                    0.4586317234969499, 
+                    0.4282960610646658, 
+                    0.4282960610646658, 
+                    0.40153600944109846, 
+                    0.40153600944109846, 
+                    0.37720862571026137, 
+                    0.37720862571026137, 
+                    0.35571985688087376, 
+                    0.35571985688087376, 
+                    0.3368957726790981, 
+                    0.3368957726790981, 
+                    0.319535424890698, 
+                    0.319535424890698, 
+                    0.3038922824057003, 
+                    0.3038922824057003, 
+                    0.28690784675141917, 
+                    0.28690784675141917, 
+                    0.26561585780939556, 
+                    0.26561585780939556, 
+                    0.24016756548505155, 
+                    0.24016756548505155, 
+                    0.21102201876849777, 
+                    0.21102201876849777, 
+                    0.17787346905362295, 
+                    0.17787346905362295, 
+                    0.13863603771314142, 
+                    0.13863603771314142
+                ], 
+                0.3394339978694916
+            ], 
+            [
+                1.028305172920227, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999226061575388, 
+                    0.9999226061575388, 
+                    0.9974968328920737, 
+                    0.9974968328920737, 
+                    0.9879248698134206, 
+                    0.9879248698134206, 
+                    0.9661891629544131, 
+                    0.9661891629544131, 
+                    0.9331615942966696, 
+                    0.9331615942966696, 
+                    0.8938061266627784, 
+                    0.8938061266627784, 
+                    0.8489838818510776, 
+                    0.8489838818510776, 
+                    0.8000275952478314, 
+                    0.8000275952478314, 
+                    0.7497949351481684, 
+                    0.7497949351481684, 
+                    0.7007733064825578, 
+                    0.7007733064825578, 
+                    0.6550173004310699, 
+                    0.6550173004310699, 
+                    0.609125191033907, 
+                    0.609125191033907, 
+                    0.56767109447227, 
+                    0.56767109447227, 
+                    0.5278179797921723, 
+                    0.5278179797921723, 
+                    0.4893534025293214, 
+                    0.4893534025293214, 
+                    0.4546032766238432, 
+                    0.4546032766238432, 
+                    0.4243961506958969, 
+                    0.4243961506958969, 
+                    0.3978059802586405, 
+                    0.3978059802586405, 
+                    0.37363643587265744, 
+                    0.37363643587265744, 
+                    0.352302113414132, 
+                    0.352302113414132, 
+                    0.333622353152958, 
+                    0.333622353152958, 
+                    0.31640215012480594, 
+                    0.31640215012480594, 
+                    0.3008962199928195, 
+                    0.3008962199928195, 
+                    0.28403162334121795, 
+                    0.28403162334121795, 
+                    0.2628756317563871, 
+                    0.2628756317563871, 
+                    0.23760588833412555, 
+                    0.23760588833412555, 
+                    0.2086862637978188, 
+                    0.2086862637978188, 
+                    0.17582129073733116, 
+                    0.17582129073733116, 
+                    0.13696342589501811, 
+                    0.13696342589501811
+                ], 
+                0.3212711811065674
+            ], 
+            [
+                1.0379172563552856, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999034398813171, 
+                    0.9999034398813171, 
+                    0.9973162160435651, 
+                    0.9973162160435651, 
+                    0.9872945742874478, 
+                    0.9872945742874478, 
+                    0.9647045387420272, 
+                    0.9647045387420272, 
+                    0.9308129174154666, 
+                    0.9308129174154666, 
+                    0.890767918706989, 
+                    0.890767918706989, 
+                    0.8453855937322937, 
+                    0.8453855937322937, 
+                    0.7959972243958485, 
+                    0.7959972243958485, 
+                    0.7455022738715013, 
+                    0.7455022738715013, 
+                    0.696295988819184, 
+                    0.696295988819184, 
+                    0.65054091884945, 
+                    0.65054091884945, 
+                    0.6045896083984905, 
+                    0.6045896083984905, 
+                    0.5632443422394823, 
+                    0.5632443422394823, 
+                    0.5234913080721648, 
+                    0.5234913080721648, 
+                    0.4851499149603615, 
+                    0.4851499149603615, 
+                    0.4505908254048717, 
+                    0.4505908254048717, 
+                    0.42053720082265716, 
+                    0.42053720082265716, 
+                    0.39411261106184453, 
+                    0.39411261106184453, 
+                    0.37010375420025826, 
+                    0.37010375420025826, 
+                    0.34892497206517714, 
+                    0.34892497206517714, 
+                    0.33039171865303874, 
+                    0.33039171865303874, 
+                    0.3133177470871556, 
+                    0.3133177470871556, 
+                    0.29791452755437947, 
+                    0.29791452755437947, 
+                    0.28093411363869086, 
+                    0.28093411363869086, 
+                    0.2596694901805857, 
+                    0.2596694901805857, 
+                    0.23440536022177874, 
+                    0.23440536022177874, 
+                    0.20560182703669197, 
+                    0.20560182703669197, 
+                    0.17296828245962806, 
+                    0.17296828245962806, 
+                    0.13450597105211126, 
+                    0.13450597105211126
+                ], 
+                0.3035002052783966
+            ], 
+            [
+                1.047619104385376, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998914701504723, 
+                    0.9998914701504723, 
+                    0.9970970537217582, 
+                    0.9970970537217582, 
+                    0.9871407983001184, 
+                    0.9871407983001184, 
+                    0.963301702370974, 
+                    0.963301702370974, 
+                    0.9287668111702584, 
+                    0.9287668111702584, 
+                    0.8878847122093695, 
+                    0.8878847122093695, 
+                    0.8418432714126436, 
+                    0.8418432714126436, 
+                    0.7920237210033289, 
+                    0.7920237210033289, 
+                    0.7411081980167854, 
+                    0.7411081980167854, 
+                    0.6922036863541503, 
+                    0.6922036863541503, 
+                    0.6454635302313175, 
+                    0.6454635302313175, 
+                    0.6008733685291823, 
+                    0.6008733685291823, 
+                    0.5583170810978286, 
+                    0.5583170810978286, 
+                    0.5194092052325426, 
+                    0.5194092052325426, 
+                    0.4809524062110954, 
+                    0.4809524062110954, 
+                    0.4466006064987242, 
+                    0.4466006064987242, 
+                    0.41677202097069416, 
+                    0.41677202097069416, 
+                    0.390455475851774, 
+                    0.390455475851774, 
+                    0.366651070102776, 
+                    0.366651070102776, 
+                    0.3459037512882237, 
+                    0.3459037512882237, 
+                    0.32714830362838837, 
+                    0.32714830362838837, 
+                    0.3100945768990077, 
+                    0.3100945768990077, 
+                    0.29572826477684055, 
+                    0.29572826477684055, 
+                    0.2799334752354746, 
+                    0.2799334752354746, 
+                    0.25938290469839587, 
+                    0.25938290469839587, 
+                    0.2346130086686746, 
+                    0.2346130086686746, 
+                    0.20613322150051983, 
+                    0.20613322150051983, 
+                    0.173634270890336, 
+                    0.173634270890336, 
+                    0.13502097627651255, 
+                    0.13502097627651255
+                ], 
+                0.28695645928382874
+            ], 
+            [
+                1.057411551475525, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998580140313907, 
+                    0.9998580140313907, 
+                    0.9969830389159284, 
+                    0.9969830389159284, 
+                    0.9882754962246655, 
+                    0.9882754962246655, 
+                    0.9628330365514737, 
+                    0.9628330365514737, 
+                    0.9261137681056907, 
+                    0.9261137681056907, 
+                    0.8845594320338462, 
+                    0.8845594320338462, 
+                    0.8380793969581875, 
+                    0.8380793969581875, 
+                    0.7878529014457386, 
+                    0.7878529014457386, 
+                    0.7369273241268256, 
+                    0.7369273241268256, 
+                    0.6872589182929044, 
+                    0.6872589182929044, 
+                    0.64170795039805, 
+                    0.64170795039805, 
+                    0.5955187413668849, 
+                    0.5955187413668849, 
+                    0.554454893520028, 
+                    0.554454893520028, 
+                    0.5149741869065473, 
+                    0.5149741869065473, 
+                    0.47677558486523425, 
+                    0.47677558486523425, 
+                    0.44272695872281614, 
+                    0.44272695872281614, 
+                    0.4129188395470699, 
+                    0.4129188395470699, 
+                    0.38684693867991166, 
+                    0.38684693867991166, 
+                    0.36315075253779533, 
+                    0.36315075253779533, 
+                    0.3422565114527022, 
+                    0.3422565114527022, 
+                    0.32418457405099754, 
+                    0.32418457405099754, 
+                    0.30737805045720085, 
+                    0.30737805045720085, 
+                    0.29234726922447113, 
+                    0.29234726922447113, 
+                    0.2762717347631547, 
+                    0.2762717347631547, 
+                    0.25566793106477465, 
+                    0.25566793106477465, 
+                    0.23097487309687972, 
+                    0.23097487309687972, 
+                    0.20270027140995447, 
+                    0.20270027140995447, 
+                    0.1705653576896077, 
+                    0.1705653576896077, 
+                    0.13257078422281793, 
+                    0.13257078422281793
+                ], 
+                0.27008500695228577
+            ], 
+            [
+                1.0672956705093384, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998356320772294, 
+                    0.9998356320772294, 
+                    0.9966965574383568, 
+                    0.9966965574383568, 
+                    0.987005679066639, 
+                    0.987005679066639, 
+                    0.9599624586080037, 
+                    0.9599624586080037, 
+                    0.9235366468946637, 
+                    0.9235366468946637, 
+                    0.8813914120847907, 
+                    0.8813914120847907, 
+                    0.8343850142458635, 
+                    0.8343850142458635, 
+                    0.7837247533563748, 
+                    0.7837247533563748, 
+                    0.7326667620216885, 
+                    0.7326667620216885, 
+                    0.6827692449448909, 
+                    0.6827692449448909, 
+                    0.6370307779508528, 
+                    0.6370307779508528, 
+                    0.5914721413183602, 
+                    0.5914721413183602, 
+                    0.5495934339625118, 
+                    0.5495934339625118, 
+                    0.511184754986328, 
+                    0.511184754986328, 
+                    0.4721753605781184, 
+                    0.4721753605781184, 
+                    0.43912355903967476, 
+                    0.43912355903967476, 
+                    0.40907593177487944, 
+                    0.40907593177487944, 
+                    0.38327644710540765, 
+                    0.38327644710540765, 
+                    0.3597277012668387, 
+                    0.3597277012668387, 
+                    0.3389552597253782, 
+                    0.3389552597253782, 
+                    0.32097404828237397, 
+                    0.32097404828237397, 
+                    0.3039105337616174, 
+                    0.3039105337616174, 
+                    0.2897833882361508, 
+                    0.2897833882361508, 
+                    0.2745068687899685, 
+                    0.2745068687899685, 
+                    0.254417918426293, 
+                    0.254417918426293, 
+                    0.23011993651298554, 
+                    0.23011993651298554, 
+                    0.2021434609205077, 
+                    0.2021434609205077, 
+                    0.1701927617539899, 
+                    0.1701927617539899, 
+                    0.13221943076808618, 
+                    0.13221943076808618
+                ], 
+                0.25415489077568054
+            ], 
+            [
+                1.0772720575332642, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998208257220166, 
+                    0.9998208257220166, 
+                    0.996482086091657, 
+                    0.996482086091657, 
+                    0.9844417951651371, 
+                    0.9844417951651371, 
+                    0.9582312201700114, 
+                    0.9582312201700114, 
+                    0.9208755499529098, 
+                    0.9208755499529098, 
+                    0.8781561576935895, 
+                    0.8781561576935895, 
+                    0.8306363653051824, 
+                    0.8306363653051824, 
+                    0.77965535969785, 
+                    0.77965535969785, 
+                    0.7281408038789873, 
+                    0.7281408038789873, 
+                    0.6785811881211755, 
+                    0.6785811881211755, 
+                    0.6323679809939537, 
+                    0.6323679809939537, 
+                    0.5870435727929554, 
+                    0.5870435727929554, 
+                    0.5453864487910248, 
+                    0.5453864487910248, 
+                    0.5066620292365823, 
+                    0.5066620292365823, 
+                    0.4685515715621951, 
+                    0.4685515715621951, 
+                    0.4349240459143475, 
+                    0.4349240459143475, 
+                    0.4054622307787084, 
+                    0.4054622307787084, 
+                    0.37972104007751745, 
+                    0.37972104007751745, 
+                    0.3563603717602106, 
+                    0.3563603717602106, 
+                    0.3358037826086701, 
+                    0.3358037826086701, 
+                    0.3178434323994783, 
+                    0.3178434323994783, 
+                    0.3013427980525516, 
+                    0.3013427980525516, 
+                    0.28655771185321816, 
+                    0.28655771185321816, 
+                    0.26963508495046423, 
+                    0.26963508495046423, 
+                    0.2484273883909105, 
+                    0.2484273883909105, 
+                    0.22350512660768743, 
+                    0.22350512660768743, 
+                    0.19533847502222243, 
+                    0.19533847502222243, 
+                    0.16366507168791478, 
+                    0.16366507168791478, 
+                    0.1266398190383561, 
+                    0.1266398190383561
+                ], 
+                0.23818379640579224
+            ], 
+            [
+                1.0873417854309082, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998020751607801, 
+                    0.9998020751607801, 
+                    0.9962555173510711, 
+                    0.9962555173510711, 
+                    0.983679859153724, 
+                    0.983679859153724, 
+                    0.9564879842770778, 
+                    0.9564879842770778, 
+                    0.9182587920004102, 
+                    0.9182587920004102, 
+                    0.8748875655416283, 
+                    0.8748875655416283, 
+                    0.8268557896494394, 
+                    0.8268557896494394, 
+                    0.7755148762354858, 
+                    0.7755148762354858, 
+                    0.7237275735589704, 
+                    0.7237275735589704, 
+                    0.6741934401670053, 
+                    0.6741934401670053, 
+                    0.6277387280711473, 
+                    0.6277387280711473, 
+                    0.5827425295774602, 
+                    0.5827425295774602, 
+                    0.540927814807318, 
+                    0.540927814807318, 
+                    0.502526437443589, 
+                    0.502526437443589, 
+                    0.4644830548395573, 
+                    0.4644830548395573, 
+                    0.4310805388098703, 
+                    0.4310805388098703, 
+                    0.4017760732868726, 
+                    0.4017760732868726, 
+                    0.37620231011693633, 
+                    0.37620231011693633, 
+                    0.3530010447675026, 
+                    0.3530010447675026, 
+                    0.3325961086449013, 
+                    0.3325961086449013, 
+                    0.3148101399311223, 
+                    0.3148101399311223, 
+                    0.29831622874176905, 
+                    0.29831622874176905, 
+                    0.28388467993207855, 
+                    0.28388467993207855, 
+                    0.26893861915623124, 
+                    0.26893861915623124, 
+                    0.24950087969736082, 
+                    0.24950087969736082, 
+                    0.2258581011541026, 
+                    0.2258581011541026, 
+                    0.19857699569878756, 
+                    0.19857699569878756, 
+                    0.1674344646972324, 
+                    0.1674344646972324, 
+                    0.1305213085375239, 
+                    0.1305213085375239
+                ], 
+                0.22393007576465607
+            ], 
+            [
+                1.0975056886672974, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997747699707139, 
+                    0.9997747699707139, 
+                    0.9959704517788325, 
+                    0.9959704517788325, 
+                    0.9824829271194117, 
+                    0.9824829271194117, 
+                    0.9539182871248368, 
+                    0.9539182871248368, 
+                    0.9154088191861152, 
+                    0.9154088191861152, 
+                    0.8715340787354108, 
+                    0.8715340787354108, 
+                    0.8230400700776168, 
+                    0.8230400700776168, 
+                    0.7713259547528394, 
+                    0.7713259547528394, 
+                    0.7194101194976484, 
+                    0.7194101194976484, 
+                    0.6696134494807595, 
+                    0.6696134494807595, 
+                    0.623456814851289, 
+                    0.623456814851289, 
+                    0.5781495073356004, 
+                    0.5781495073356004, 
+                    0.5367544845054382, 
+                    0.5367544845054382, 
+                    0.4982641943396436, 
+                    0.4982641943396436, 
+                    0.46050215389807314, 
+                    0.46050215389807314, 
+                    0.42723412305322145, 
+                    0.42723412305322145, 
+                    0.39813051007240885, 
+                    0.39813051007240885, 
+                    0.3727260308433732, 
+                    0.3727260308433732, 
+                    0.3496855660117409, 
+                    0.3496855660117409, 
+                    0.32934867289118236, 
+                    0.32934867289118236, 
+                    0.31143139575119744, 
+                    0.31143139575119744, 
+                    0.2954552836313136, 
+                    0.2954552836313136, 
+                    0.281156203610853, 
+                    0.281156203610853, 
+                    0.2661315897739341, 
+                    0.2661315897739341, 
+                    0.24649105446457145, 
+                    0.24649105446457145, 
+                    0.2227699691975097, 
+                    0.2227699691975097, 
+                    0.1955351327609969, 
+                    0.1955351327609969, 
+                    0.16456361404968955, 
+                    0.16456361404968955, 
+                    0.12798838171273064, 
+                    0.12798838171273064
+                ], 
+                0.20946478843688965
+            ]
+        ]
+    }, 
+    {
+        "block_size": 64, 
+        "preprocessing_block_sizes": [
+            42
+        ], 
+        "pruning_parameters": [
+            [
+                0.9124526381492615, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999937024965165, 
+                    0.9999937024965165, 
+                    0.9998874463498167, 
+                    0.9998874463498167, 
+                    0.9997930845306782, 
+                    0.9997930845306782, 
+                    0.9966087379404823, 
+                    0.9966087379404823, 
+                    0.9607635459683895, 
+                    0.9607635459683895, 
+                    0.9315715110192151, 
+                    0.9315715110192151, 
+                    0.8955118564691559, 
+                    0.8955118564691559, 
+                    0.8534922713400226, 
+                    0.8534922713400226, 
+                    0.8091139714583121, 
+                    0.8091139714583121, 
+                    0.762426215802318, 
+                    0.762426215802318, 
+                    0.7157412892734637, 
+                    0.7157412892734637, 
+                    0.6707162202607813, 
+                    0.6707162202607813, 
+                    0.6279793408628611, 
+                    0.6279793408628611, 
+                    0.5857624241212174, 
+                    0.5857624241212174, 
+                    0.5486107731249381, 
+                    0.5486107731249381, 
+                    0.5126629063121938, 
+                    0.5126629063121938, 
+                    0.4811404050428238, 
+                    0.4811404050428238, 
+                    0.4523907220518794, 
+                    0.4523907220518794, 
+                    0.4257215445578412, 
+                    0.4257215445578412, 
+                    0.4019510705201269, 
+                    0.4019510705201269, 
+                    0.3803018692169995, 
+                    0.3803018692169995, 
+                    0.35960452932361625, 
+                    0.35960452932361625, 
+                    0.33738397384664065, 
+                    0.33738397384664065, 
+                    0.3128238048489593, 
+                    0.3128238048489593, 
+                    0.2858645867860852, 
+                    0.2858645867860852, 
+                    0.2569336719347336, 
+                    0.2569336719347336, 
+                    0.2262156820792172, 
+                    0.2262156820792172, 
+                    0.19369712892243526, 
+                    0.19369712892243526, 
+                    0.158885843794132, 
+                    0.158885843794132, 
+                    0.11985484188032848, 
+                    0.11985484188032848
+                ], 
+                0.49909669160842896
+            ], 
+            [
+                0.9208508729934692, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996500886615686, 
+                    0.9996500886615686, 
+                    0.9979462310917117, 
+                    0.9979462310917117, 
+                    0.9869455780971873, 
+                    0.9869455780971873, 
+                    0.9629448914586978, 
+                    0.9629448914586978, 
+                    0.9324048347360703, 
+                    0.9324048347360703, 
+                    0.8939832653548541, 
+                    0.8939832653548541, 
+                    0.8507592817092879, 
+                    0.8507592817092879, 
+                    0.8059300685403643, 
+                    0.8059300685403643, 
+                    0.7591152805385633, 
+                    0.7591152805385633, 
+                    0.7124961381566027, 
+                    0.7124961381566027, 
+                    0.6675580285824687, 
+                    0.6675580285824687, 
+                    0.6251183273932847, 
+                    0.6251183273932847, 
+                    0.5825455401918266, 
+                    0.5825455401918266, 
+                    0.5459638879395762, 
+                    0.5459638879395762, 
+                    0.5099361615040513, 
+                    0.5099361615040513, 
+                    0.4788232479560067, 
+                    0.4788232479560067, 
+                    0.4501427023323698, 
+                    0.4501427023323698, 
+                    0.42337675236434086, 
+                    0.42337675236434086, 
+                    0.39936901636059585, 
+                    0.39936901636059585, 
+                    0.3775157706382007, 
+                    0.3775157706382007, 
+                    0.35778102000632483, 
+                    0.35778102000632483, 
+                    0.3398132411889387, 
+                    0.3398132411889387, 
+                    0.3243772189080482, 
+                    0.3243772189080482, 
+                    0.30760390277935573, 
+                    0.30760390277935573, 
+                    0.2863551358740887, 
+                    0.2863551358740887, 
+                    0.2603663847221679, 
+                    0.2603663847221679, 
+                    0.23016255042013772, 
+                    0.23016255042013772, 
+                    0.1953844668247531, 
+                    0.1953844668247531, 
+                    0.15365514349997167, 
+                    0.15365514349997167
+                ], 
+                0.5001748204231262
+            ], 
+            [
+                0.9293264150619507, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995129231929666, 
+                    0.9995129231929666, 
+                    0.9971399740206174, 
+                    0.9971399740206174, 
+                    0.9819784043572369, 
+                    0.9819784043572369, 
+                    0.9620290194096527, 
+                    0.9620290194096527, 
+                    0.9302545215610268, 
+                    0.9302545215610268, 
+                    0.8911076325226756, 
+                    0.8911076325226756, 
+                    0.8473562016763029, 
+                    0.8473562016763029, 
+                    0.8020773412550932, 
+                    0.8020773412550932, 
+                    0.7549949167903516, 
+                    0.7549949167903516, 
+                    0.7081654457169849, 
+                    0.7081654457169849, 
+                    0.663532240643455, 
+                    0.663532240643455, 
+                    0.620229927240417, 
+                    0.620229927240417, 
+                    0.5784387769468204, 
+                    0.5784387769468204, 
+                    0.541829464216481, 
+                    0.541829464216481, 
+                    0.5053657916831731, 
+                    0.5053657916831731, 
+                    0.47482249573278074, 
+                    0.47482249573278074, 
+                    0.4461724904706203, 
+                    0.4461724904706203, 
+                    0.41953457575774494, 
+                    0.41953457575774494, 
+                    0.39567622709602834, 
+                    0.39567622709602834, 
+                    0.3739447457422341, 
+                    0.3739447457422341, 
+                    0.35429812060098376, 
+                    0.35429812060098376, 
+                    0.33652533043431343, 
+                    0.33652533043431343, 
+                    0.32443590965687374, 
+                    0.32443590965687374, 
+                    0.31304186690292496, 
+                    0.31304186690292496, 
+                    0.2956162124900356, 
+                    0.2956162124900356, 
+                    0.2719506342272348, 
+                    0.2719506342272348, 
+                    0.24300824340475494, 
+                    0.24300824340475494, 
+                    0.208555751673123, 
+                    0.208555751673123, 
+                    0.1660568893227717, 
+                    0.1660568893227717
+                ], 
+                0.4815651774406433
+            ], 
+            [
+                0.9378799200057983, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994584220547348, 
+                    0.9994584220547348, 
+                    0.9975492182189362, 
+                    0.9975492182189362, 
+                    0.9836677868356654, 
+                    0.9836677868356654, 
+                    0.9598656385923537, 
+                    0.9598656385923537, 
+                    0.9278569352083752, 
+                    0.9278569352083752, 
+                    0.8880906324224774, 
+                    0.8880906324224774, 
+                    0.8437474438929825, 
+                    0.8437474438929825, 
+                    0.7981055775036965, 
+                    0.7981055775036965, 
+                    0.750689113319802, 
+                    0.750689113319802, 
+                    0.7037447791556687, 
+                    0.7037447791556687, 
+                    0.6584217491181465, 
+                    0.6584217491181465, 
+                    0.6163494279942721, 
+                    0.6163494279942721, 
+                    0.573107891214946, 
+                    0.573107891214946, 
+                    0.5374199995151434, 
+                    0.5374199995151434, 
+                    0.5011245370377935, 
+                    0.5011245370377935, 
+                    0.4704615476693544, 
+                    0.4704615476693544, 
+                    0.4420025714482922, 
+                    0.4420025714482922, 
+                    0.4155378363863295, 
+                    0.4155378363863295, 
+                    0.3918292145506358, 
+                    0.3918292145506358, 
+                    0.370274504474347, 
+                    0.370274504474347, 
+                    0.3508327604985991, 
+                    0.3508327604985991, 
+                    0.33305458703107826, 
+                    0.33305458703107826, 
+                    0.31721596845310374, 
+                    0.31721596845310374, 
+                    0.30011908325147496, 
+                    0.30011908325147496, 
+                    0.27884663135235394, 
+                    0.27884663135235394, 
+                    0.2530521639463478, 
+                    0.2530521639463478, 
+                    0.22323173868795518, 
+                    0.22323173868795518, 
+                    0.18903927521545288, 
+                    0.18903927521545288, 
+                    0.14818650087957985, 
+                    0.14818650087957985
+                ], 
+                0.45843812823295593
+            ], 
+            [
+                0.9465121626853943, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999982271662977, 
+                    0.9999982271662977, 
+                    0.9994722918335438, 
+                    0.9994722918335438, 
+                    0.996912920310829, 
+                    0.996912920310829, 
+                    0.9820259739171345, 
+                    0.9820259739171345, 
+                    0.9582319651327365, 
+                    0.9582319651327365, 
+                    0.9255242901942469, 
+                    0.9255242901942469, 
+                    0.885079908059302, 
+                    0.885079908059302, 
+                    0.8402093393482456, 
+                    0.8402093393482456, 
+                    0.7941719420949096, 
+                    0.7941719420949096, 
+                    0.7464772487278888, 
+                    0.7464772487278888, 
+                    0.699258086755405, 
+                    0.699258086755405, 
+                    0.6542297289352773, 
+                    0.6542297289352773, 
+                    0.611259851058061, 
+                    0.611259851058061, 
+                    0.5695692033373384, 
+                    0.5695692033373384, 
+                    0.5323432455209346, 
+                    0.5323432455209346, 
+                    0.4972011328981205, 
+                    0.4972011328981205, 
+                    0.4662067734737188, 
+                    0.4662067734737188, 
+                    0.4380108008304658, 
+                    0.4380108008304658, 
+                    0.4116793652575758, 
+                    0.4116793652575758, 
+                    0.3881255025798784, 
+                    0.3881255025798784, 
+                    0.36672175942404966, 
+                    0.36672175942404966, 
+                    0.3474263010640914, 
+                    0.3474263010640914, 
+                    0.32975427611078084, 
+                    0.32975427611078084, 
+                    0.3137246060354277, 
+                    0.3137246060354277, 
+                    0.2965318927417867, 
+                    0.2965318927417867, 
+                    0.27545649667848077, 
+                    0.27545649667848077, 
+                    0.24997920580803604, 
+                    0.24997920580803604, 
+                    0.2205430027615411, 
+                    0.2205430027615411, 
+                    0.1868127329924108, 
+                    0.1868127329924108, 
+                    0.14655629873945228, 
+                    0.14655629873945228
+                ], 
+                0.43811506032943726
+            ], 
+            [
+                0.9552238583564758, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999350296148642, 
+                    0.999350296148642, 
+                    0.9966189033510895, 
+                    0.9966189033510895, 
+                    0.9810498662154796, 
+                    0.9810498662154796, 
+                    0.9566274437703348, 
+                    0.9566274437703348, 
+                    0.9231578496447667, 
+                    0.9231578496447667, 
+                    0.8820376583904944, 
+                    0.8820376583904944, 
+                    0.8366371181676742, 
+                    0.8366371181676742, 
+                    0.7902199711396154, 
+                    0.7902199711396154, 
+                    0.7422320467639808, 
+                    0.7422320467639808, 
+                    0.694942173950354, 
+                    0.694942173950354, 
+                    0.6495373445079304, 
+                    0.6495373445079304, 
+                    0.6072124874398034, 
+                    0.6072124874398034, 
+                    0.5644899883836206, 
+                    0.5644899883836206, 
+                    0.5284653678656422, 
+                    0.5284653678656422, 
+                    0.4927325519585854, 
+                    0.4927325519585854, 
+                    0.4621698325892601, 
+                    0.4621698325892601, 
+                    0.4340388064991208, 
+                    0.4340388064991208, 
+                    0.4078704511982577, 
+                    0.4078704511982577, 
+                    0.38446684459784747, 
+                    0.38446684459784747, 
+                    0.3632126823989948, 
+                    0.3632126823989948, 
+                    0.3440623788009696, 
+                    0.3440623788009696, 
+                    0.3265330272389765, 
+                    0.3265330272389765, 
+                    0.3105170778740051, 
+                    0.3105170778740051, 
+                    0.2930556343767076, 
+                    0.2930556343767076, 
+                    0.2717511938043649, 
+                    0.2717511938043649, 
+                    0.2462221348939284, 
+                    0.2462221348939284, 
+                    0.21688571357662342, 
+                    0.21688571357662342, 
+                    0.18339995459174044, 
+                    0.18339995459174044, 
+                    0.14357893751274806, 
+                    0.14357893751274806
+                ], 
+                0.4178426265716553
+            ], 
+            [
+                0.964015781879425, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999331240521066, 
+                    0.999331240521066, 
+                    0.9961973882177529, 
+                    0.9961973882177529, 
+                    0.9799885731664052, 
+                    0.9799885731664052, 
+                    0.9549771283211905, 
+                    0.9549771283211905, 
+                    0.9207462104470635, 
+                    0.9207462104470635, 
+                    0.8789495611731121, 
+                    0.8789495611731121, 
+                    0.8330332176567186, 
+                    0.8330332176567186, 
+                    0.7862467556277315, 
+                    0.7862467556277315, 
+                    0.738020205434786, 
+                    0.738020205434786, 
+                    0.6904491114698922, 
+                    0.6904491114698922, 
+                    0.6453709302644597, 
+                    0.6453709302644597, 
+                    0.6022107556898179, 
+                    0.6022107556898179, 
+                    0.5608586100273869, 
+                    0.5608586100273869, 
+                    0.5235899473251733, 
+                    0.5235899473251733, 
+                    0.48879508737711297, 
+                    0.48879508737711297, 
+                    0.45802427953164243, 
+                    0.45802427953164243, 
+                    0.4301263168565071, 
+                    0.4301263168565071, 
+                    0.4040988546644756, 
+                    0.4040988546644756, 
+                    0.3808499603595875, 
+                    0.3808499603595875, 
+                    0.35974594134592297, 
+                    0.35974594134592297, 
+                    0.3407403295088883, 
+                    0.3407403295088883, 
+                    0.323350394388989, 
+                    0.323350394388989, 
+                    0.3074265839379254, 
+                    0.3074265839379254, 
+                    0.2899404926876047, 
+                    0.2899404926876047, 
+                    0.2686286161908448, 
+                    0.2686286161908448, 
+                    0.24318522964300926, 
+                    0.24318522964300926, 
+                    0.21402274823052117, 
+                    0.21402274823052117, 
+                    0.18080303223819152, 
+                    0.18080303223819152, 
+                    0.14138147150714522, 
+                    0.14138147150714522
+                ], 
+                0.39812806248664856
+            ], 
+            [
+                0.9728885889053345, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992286757821004, 
+                    0.9992286757821004, 
+                    0.9957204149680439, 
+                    0.9957204149680439, 
+                    0.9790028857485285, 
+                    0.9790028857485285, 
+                    0.9532781108205519, 
+                    0.9532781108205519, 
+                    0.9182918673572334, 
+                    0.9182918673572334, 
+                    0.8758300533708192, 
+                    0.8758300533708192, 
+                    0.8294035621496375, 
+                    0.8294035621496375, 
+                    0.7822585675343011, 
+                    0.7822585675343011, 
+                    0.7337812283922955, 
+                    0.7337812283922955, 
+                    0.6860627421698112, 
+                    0.6860627421698112, 
+                    0.6409253068914369, 
+                    0.6409253068914369, 
+                    0.5977855072105609, 
+                    0.5977855072105609, 
+                    0.5564354664176931, 
+                    0.5564354664176931, 
+                    0.5193350675680396, 
+                    0.5193350675680396, 
+                    0.4846081110032647, 
+                    0.4846081110032647, 
+                    0.4540029942730635, 
+                    0.4540029942730635, 
+                    0.4262447742135498, 
+                    0.4262447742135498, 
+                    0.40037247390644604, 
+                    0.40037247390644604, 
+                    0.377277194995229, 
+                    0.377277194995229, 
+                    0.35632285727368346, 
+                    0.35632285727368346, 
+                    0.33746039839076797, 
+                    0.33746039839076797, 
+                    0.3202093388218953, 
+                    0.3202093388218953, 
+                    0.3043845440402521, 
+                    0.3043845440402521, 
+                    0.28689784676802954, 
+                    0.28689784676802954, 
+                    0.26560151382870095, 
+                    0.26560151382870095, 
+                    0.24025537650163645, 
+                    0.24025537650163645, 
+                    0.21127008238205763, 
+                    0.21127008238205763, 
+                    0.17831306038519878, 
+                    0.17831306038519878, 
+                    0.13928098747610973, 
+                    0.13928098747610973
+                ], 
+                0.3787420392036438
+            ], 
+            [
+                0.9818430542945862, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991389187120029, 
+                    0.9991389187120029, 
+                    0.9953080534527615, 
+                    0.9953080534527615, 
+                    0.9780089861983592, 
+                    0.9780089861983592, 
+                    0.9515396418852367, 
+                    0.9515396418852367, 
+                    0.91579316370856, 
+                    0.91579316370856, 
+                    0.8726729517858474, 
+                    0.8726729517858474, 
+                    0.8257456855125149, 
+                    0.8257456855125149, 
+                    0.7782622055942165, 
+                    0.7782622055942165, 
+                    0.7294770297777108, 
+                    0.7294770297777108, 
+                    0.6818918735747029, 
+                    0.6818918735747029, 
+                    0.6359536846444381, 
+                    0.6359536846444381, 
+                    0.5942784937244341, 
+                    0.5942784937244341, 
+                    0.5508677491997058, 
+                    0.5508677491997058, 
+                    0.5158909281191706, 
+                    0.5158909281191706, 
+                    0.48011216034685006, 
+                    0.48011216034685006, 
+                    0.45011604158552593, 
+                    0.45011604158552593, 
+                    0.42239061112809945, 
+                    0.42239061112809945, 
+                    0.39669070060933204, 
+                    0.39669070060933204, 
+                    0.373747018930257, 
+                    0.373747018930257, 
+                    0.3529418666064282, 
+                    0.3529418666064282, 
+                    0.33422236979955394, 
+                    0.33422236979955394, 
+                    0.3171107453070881, 
+                    0.3171107453070881, 
+                    0.301377020866577, 
+                    0.301377020866577, 
+                    0.2838541456222041, 
+                    0.2838541456222041, 
+                    0.26253505258970244, 
+                    0.26253505258970244, 
+                    0.23725751752933524, 
+                    0.23725751752933524, 
+                    0.20842968132631337, 
+                    0.20842968132631337, 
+                    0.17572383602105227, 
+                    0.17572383602105227, 
+                    0.13707990354339802, 
+                    0.13707990354339802
+                ], 
+                0.35965004563331604
+            ], 
+            [
+                0.9908799529075623, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985977723136689, 
+                    0.9985977723136689, 
+                    0.991605961004152, 
+                    0.991605961004152, 
+                    0.9767184434142427, 
+                    0.9767184434142427, 
+                    0.9497623363397363, 
+                    0.9497623363397363, 
+                    0.913229036924879, 
+                    0.913229036924879, 
+                    0.8695797236960553, 
+                    0.8695797236960553, 
+                    0.8220732759838588, 
+                    0.8220732759838588, 
+                    0.7742746673517329, 
+                    0.7742746673517329, 
+                    0.7253370536901229, 
+                    0.7253370536901229, 
+                    0.6774025942513869, 
+                    0.6774025942513869, 
+                    0.6319244596398575, 
+                    0.6319244596398575, 
+                    0.5891824011297936, 
+                    0.5891824011297936, 
+                    0.5473687496065287, 
+                    0.5473687496065287, 
+                    0.5110933086083402, 
+                    0.5110933086083402, 
+                    0.4763121075554943, 
+                    0.4763121075554943, 
+                    0.4461446826967076, 
+                    0.4461446826967076, 
+                    0.4186409325801852, 
+                    0.4186409325801852, 
+                    0.39307981699834943, 
+                    0.39307981699834943, 
+                    0.3702793215392807, 
+                    0.3702793215392807, 
+                    0.34960184248774817, 
+                    0.34960184248774817, 
+                    0.3309733546324388, 
+                    0.3309733546324388, 
+                    0.31391463036757367, 
+                    0.31391463036757367, 
+                    0.2997877656602941, 
+                    0.2997877656602941, 
+                    0.2864189746324386, 
+                    0.2864189746324386, 
+                    0.26894468094983504, 
+                    0.26894468094983504, 
+                    0.24632502504731174, 
+                    0.24632502504731174, 
+                    0.2191735910577013, 
+                    0.2191735910577013, 
+                    0.18726581144860888, 
+                    0.18726581144860888, 
+                    0.14839024665228107, 
+                    0.14839024665228107
+                ], 
+                0.3428530693054199
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988652469171604, 
+                    0.9988652469171604, 
+                    0.9940264584505719, 
+                    0.9940264584505719, 
+                    0.9750818947284261, 
+                    0.9750818947284261, 
+                    0.9479909821272386, 
+                    0.9479909821272386, 
+                    0.9106996974708066, 
+                    0.9106996974708066, 
+                    0.8662653823060694, 
+                    0.8662653823060694, 
+                    0.8183791788167631, 
+                    0.8183791788167631, 
+                    0.7702458024556007, 
+                    0.7702458024556007, 
+                    0.7209763442662268, 
+                    0.7209763442662268, 
+                    0.6730540876119756, 
+                    0.6730540876119756, 
+                    0.6275924167943548, 
+                    0.6275924167943548, 
+                    0.5850225867292657, 
+                    0.5850225867292657, 
+                    0.542502689618707, 
+                    0.542502689618707, 
+                    0.5072590869267967, 
+                    0.5072590869267967, 
+                    0.47226226992518944, 
+                    0.47226226992518944, 
+                    0.4421758749264056, 
+                    0.4421758749264056, 
+                    0.41484829109780513, 
+                    0.41484829109780513, 
+                    0.38948531614424187, 
+                    0.38948531614424187, 
+                    0.3668526851272078, 
+                    0.3668526851272078, 
+                    0.3458447479931574, 
+                    0.3458447479931574, 
+                    0.3281327995021706, 
+                    0.3281327995021706, 
+                    0.3108619773159518, 
+                    0.3108619773159518, 
+                    0.2981689334814214, 
+                    0.2981689334814214, 
+                    0.2830855336249958, 
+                    0.2830855336249958, 
+                    0.2632006968538047, 
+                    0.2632006968538047, 
+                    0.2388343936585269, 
+                    0.2388343936585269, 
+                    0.21050993903278206, 
+                    0.21050993903278206, 
+                    0.17783965976344532, 
+                    0.17783965976344532, 
+                    0.1385188918068804, 
+                    0.1385188918068804
+                ], 
+                0.3242640495300293
+            ], 
+            [
+                1.0092040300369263, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984642623115856, 
+                    0.9984642623115856, 
+                    0.9917907884624914, 
+                    0.9917907884624914, 
+                    0.9726449236911336, 
+                    0.9726449236911336, 
+                    0.9463706185009443, 
+                    0.9463706185009443, 
+                    0.9080160393842835, 
+                    0.9080160393842835, 
+                    0.8630120645848807, 
+                    0.8630120645848807, 
+                    0.8146512792304141, 
+                    0.8146512792304141, 
+                    0.7661839152708566, 
+                    0.7661839152708566, 
+                    0.7167701823783496, 
+                    0.7167701823783496, 
+                    0.6686715818950545, 
+                    0.6686715818950545, 
+                    0.6231148863108176, 
+                    0.6231148863108176, 
+                    0.5805763573718392, 
+                    0.5805763573718392, 
+                    0.5387644796881439, 
+                    0.5387644796881439, 
+                    0.5028088107309994, 
+                    0.5028088107309994, 
+                    0.46818307882847343, 
+                    0.46818307882847343, 
+                    0.4383213318627486, 
+                    0.4383213318627486, 
+                    0.4111208262779542, 
+                    0.4111208262779542, 
+                    0.38588081791486095, 
+                    0.38588081791486095, 
+                    0.36347596781552666, 
+                    0.36347596781552666, 
+                    0.34376795919648245, 
+                    0.34376795919648245, 
+                    0.3233161524899157, 
+                    0.3233161524899157, 
+                    0.30692750655719564, 
+                    0.30692750655719564, 
+                    0.2977601239585411, 
+                    0.2977601239585411, 
+                    0.2859864501499695, 
+                    0.2859864501499695, 
+                    0.268452885805959, 
+                    0.268452885805959, 
+                    0.2456189376836509, 
+                    0.2456189376836509, 
+                    0.21811761132700994, 
+                    0.21811761132700994, 
+                    0.18550141147358076, 
+                    0.18550141147358076, 
+                    0.14511619122599795, 
+                    0.14511619122599795
+                ], 
+                0.30754920840263367
+            ], 
+            [
+                1.0184926986694336, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985642832069488, 
+                    0.9985642832069488, 
+                    0.9918590643155053, 
+                    0.9918590643155053, 
+                    0.9738116242588946, 
+                    0.9738116242588946, 
+                    0.9441818294484474, 
+                    0.9441818294484474, 
+                    0.9052714923347936, 
+                    0.9052714923347936, 
+                    0.8597121695633985, 
+                    0.8597121695633985, 
+                    0.810906040235134, 
+                    0.810906040235134, 
+                    0.7621209584172587, 
+                    0.7621209584172587, 
+                    0.7125029911362323, 
+                    0.7125029911362323, 
+                    0.6642756157345512, 
+                    0.6642756157345512, 
+                    0.6187829963910438, 
+                    0.6187829963910438, 
+                    0.5760873422515997, 
+                    0.5760873422515997, 
+                    0.5345855725689642, 
+                    0.5345855725689642, 
+                    0.4985943295075035, 
+                    0.4985943295075035, 
+                    0.46421535305815, 
+                    0.46421535305815, 
+                    0.4344561287531183, 
+                    0.4344561287531183, 
+                    0.4074088019821809, 
+                    0.4074088019821809, 
+                    0.382298673782579, 
+                    0.382298673782579, 
+                    0.3600671382987412, 
+                    0.3600671382987412, 
+                    0.34129186268033285, 
+                    0.34129186268033285, 
+                    0.3208857912500888, 
+                    0.3208857912500888, 
+                    0.3050091311701981, 
+                    0.3050091311701981, 
+                    0.29025568675555363, 
+                    0.29025568675555363, 
+                    0.2751471402393184, 
+                    0.2751471402393184, 
+                    0.2559837239262399, 
+                    0.2559837239262399, 
+                    0.2323884987012596, 
+                    0.2323884987012596, 
+                    0.20492588451102992, 
+                    0.20492588451102992, 
+                    0.17332806269103457, 
+                    0.17332806269103457, 
+                    0.1355237650621564, 
+                    0.1355237650621564
+                ], 
+                0.2897208034992218
+            ], 
+            [
+                1.0278669595718384, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983544314001933, 
+                    0.9983544314001933, 
+                    0.9902914778449871, 
+                    0.9902914778449871, 
+                    0.972675849792701, 
+                    0.972675849792701, 
+                    0.9421591203692781, 
+                    0.9421591203692781, 
+                    0.9026062587165593, 
+                    0.9026062587165593, 
+                    0.8563288156521791, 
+                    0.8563288156521791, 
+                    0.8070744190164835, 
+                    0.8070744190164835, 
+                    0.7580019001695828, 
+                    0.7580019001695828, 
+                    0.7082084394675778, 
+                    0.7082084394675778, 
+                    0.6598573586971443, 
+                    0.6598573586971443, 
+                    0.6144075806250856, 
+                    0.6144075806250856, 
+                    0.5717504159255788, 
+                    0.5717504159255788, 
+                    0.5303595368109828, 
+                    0.5303595368109828, 
+                    0.4944335366584117, 
+                    0.4944335366584117, 
+                    0.4602029110287039, 
+                    0.4602029110287039, 
+                    0.43061171306023216, 
+                    0.43061171306023216, 
+                    0.4037413638133509, 
+                    0.4037413638133509, 
+                    0.3788245132675601, 
+                    0.3788245132675601, 
+                    0.3566562072781752, 
+                    0.3566562072781752, 
+                    0.3365983169765316, 
+                    0.3365983169765316, 
+                    0.31861360638432007, 
+                    0.31861360638432007, 
+                    0.3020555542156327, 
+                    0.3020555542156327, 
+                    0.28761968308016206, 
+                    0.28761968308016206, 
+                    0.272431301034506, 
+                    0.272431301034506, 
+                    0.2532503840907123, 
+                    0.2532503840907123, 
+                    0.2297974055513889, 
+                    0.2297974055513889, 
+                    0.20259566434145482, 
+                    0.20259566434145482, 
+                    0.17138864236247742, 
+                    0.17138864236247742, 
+                    0.13418466918735739, 
+                    0.13418466918735739
+                ], 
+                0.27296292781829834
+            ], 
+            [
+                1.0373274087905884, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982710675079409, 
+                    0.9982710675079409, 
+                    0.9903246806451776, 
+                    0.9903246806451776, 
+                    0.970013477505529, 
+                    0.970013477505529, 
+                    0.9400507623866955, 
+                    0.9400507623866955, 
+                    0.8998391790746526, 
+                    0.8998391790746526, 
+                    0.8529533977690195, 
+                    0.8529533977690195, 
+                    0.8032601613647051, 
+                    0.8032601613647051, 
+                    0.7539281227387968, 
+                    0.7539281227387968, 
+                    0.7038530104418372, 
+                    0.7038530104418372, 
+                    0.6557242444394203, 
+                    0.6557242444394203, 
+                    0.6096154161865285, 
+                    0.6096154161865285, 
+                    0.5679971372240512, 
+                    0.5679971372240512, 
+                    0.5255769711824717, 
+                    0.5255769711824717, 
+                    0.49067329277877136, 
+                    0.49067329277877136, 
+                    0.4561310564210935, 
+                    0.4561310564210935, 
+                    0.4268585507067372, 
+                    0.4268585507067372, 
+                    0.40011348944062275, 
+                    0.40011348944062275, 
+                    0.3753659356703729, 
+                    0.3753659356703729, 
+                    0.35335747525866207, 
+                    0.35335747525866207, 
+                    0.33344879782814757, 
+                    0.33344879782814757, 
+                    0.31554772050234353, 
+                    0.31554772050234353, 
+                    0.29910621787081315, 
+                    0.29910621787081315, 
+                    0.28468655265488046, 
+                    0.28468655265488046, 
+                    0.2685183025042243, 
+                    0.2685183025042243, 
+                    0.2483906446629521, 
+                    0.2483906446629521, 
+                    0.22437390274191205, 
+                    0.22437390274191205, 
+                    0.19695466377192, 
+                    0.19695466377192, 
+                    0.1658713474185065, 
+                    0.1658713474185065, 
+                    0.12924293705696746, 
+                    0.12924293705696746
+                ], 
+                0.2565987706184387
+            ], 
+            [
+                1.046875, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999842664990389, 
+                    0.9999842664990389, 
+                    0.998145777471885, 
+                    0.998145777471885, 
+                    0.9896653577619977, 
+                    0.9896653577619977, 
+                    0.9681214294546794, 
+                    0.9681214294546794, 
+                    0.9379374746339307, 
+                    0.9379374746339307, 
+                    0.8970265993010695, 
+                    0.8970265993010695, 
+                    0.8495354030912216, 
+                    0.8495354030912216, 
+                    0.7994230778869986, 
+                    0.7994230778869986, 
+                    0.7498048661236989, 
+                    0.7498048661236989, 
+                    0.6996221837786556, 
+                    0.6996221837786556, 
+                    0.6512180274132602, 
+                    0.6512180274132602, 
+                    0.6055576680375798, 
+                    0.6055576680375798, 
+                    0.5633232989612653, 
+                    0.5633232989612653, 
+                    0.5217752329484239, 
+                    0.5217752329484239, 
+                    0.4863896990567746, 
+                    0.4863896990567746, 
+                    0.4523103702472842, 
+                    0.4523103702472842, 
+                    0.4230835084425154, 
+                    0.4230835084425154, 
+                    0.39652352511908723, 
+                    0.39652352511908723, 
+                    0.37193679443629357, 
+                    0.37193679443629357, 
+                    0.35008768690615427, 
+                    0.35008768690615427, 
+                    0.33032884570527826, 
+                    0.33032884570527826, 
+                    0.3125244261071263, 
+                    0.3125244261071263, 
+                    0.296080656010341, 
+                    0.296080656010341, 
+                    0.2819858162780332, 
+                    0.2819858162780332, 
+                    0.2657441018418682, 
+                    0.2657441018418682, 
+                    0.2454821672904868, 
+                    0.2454821672904868, 
+                    0.22143621389573317, 
+                    0.22143621389573317, 
+                    0.19409719915344187, 
+                    0.19409719915344187, 
+                    0.16320835108652182, 
+                    0.16320835108652182, 
+                    0.12693767323385244, 
+                    0.12693767323385244
+                ], 
+                0.24117596447467804
+            ], 
+            [
+                1.0565104484558105, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999649354690159, 
+                    0.9999649354690159, 
+                    0.9980026858438096, 
+                    0.9980026858438096, 
+                    0.9889976063343975, 
+                    0.9889976063343975, 
+                    0.966054766498369, 
+                    0.966054766498369, 
+                    0.9358023186182113, 
+                    0.9358023186182113, 
+                    0.8941729521609795, 
+                    0.8941729521609795, 
+                    0.8460931026142916, 
+                    0.8460931026142916, 
+                    0.7955699873565064, 
+                    0.7955699873565064, 
+                    0.7456745999136999, 
+                    0.7456745999136999, 
+                    0.6953734253140369, 
+                    0.6953734253140369, 
+                    0.6467665212012893, 
+                    0.6467665212012893, 
+                    0.6014001271916377, 
+                    0.6014001271916377, 
+                    0.5588303632255287, 
+                    0.5588303632255287, 
+                    0.517817378277493, 
+                    0.517817378277493, 
+                    0.48223992527889736, 
+                    0.48223992527889736, 
+                    0.44847848464676193, 
+                    0.44847848464676193, 
+                    0.41935698953568423, 
+                    0.41935698953568423, 
+                    0.3929698476249709, 
+                    0.3929698476249709, 
+                    0.36854623922803154, 
+                    0.36854623922803154, 
+                    0.3468572797462528, 
+                    0.3468572797462528, 
+                    0.3272418077894492, 
+                    0.3272418077894492, 
+                    0.30952344934747944, 
+                    0.30952344934747944, 
+                    0.29302404737145127, 
+                    0.29302404737145127, 
+                    0.2793216738320776, 
+                    0.2793216738320776, 
+                    0.26306181471346823, 
+                    0.26306181471346823, 
+                    0.24273682763367696, 
+                    0.24273682763367696, 
+                    0.21871201130075796, 
+                    0.21871201130075796, 
+                    0.1914826556120842, 
+                    0.1914826556120842, 
+                    0.160796690414818, 
+                    0.160796690414818, 
+                    0.12486496029722055, 
+                    0.12486496029722055
+                ], 
+                0.2263386994600296
+            ], 
+            [
+                1.0662345886230469, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999712727830234, 
+                    0.9999712727830234, 
+                    0.9978510580659052, 
+                    0.9978510580659052, 
+                    0.9881204388260971, 
+                    0.9881204388260971, 
+                    0.9642352025509091, 
+                    0.9642352025509091, 
+                    0.9335068716507152, 
+                    0.9335068716507152, 
+                    0.8912435476864736, 
+                    0.8912435476864736, 
+                    0.842602980091767, 
+                    0.842602980091767, 
+                    0.7916855871790816, 
+                    0.7916855871790816, 
+                    0.7415358307653012, 
+                    0.7415358307653012, 
+                    0.6910861519501936, 
+                    0.6910861519501936, 
+                    0.6424148456259934, 
+                    0.6424148456259934, 
+                    0.5970776982399449, 
+                    0.5970776982399449, 
+                    0.5545673269653563, 
+                    0.5545673269653563, 
+                    0.5136687553833625, 
+                    0.5136687553833625, 
+                    0.47823783944285314, 
+                    0.47823783944285314, 
+                    0.4446300765290108, 
+                    0.4446300765290108, 
+                    0.41567242735373994, 
+                    0.41567242735373994, 
+                    0.38944816759273615, 
+                    0.38944816759273615, 
+                    0.36519013918351767, 
+                    0.36519013918351767, 
+                    0.34366290112038816, 
+                    0.34366290112038816, 
+                    0.3241913910653106, 
+                    0.3241913910653106, 
+                    0.3063328993214825, 
+                    0.3063328993214825, 
+                    0.2898524710994705, 
+                    0.2898524710994705, 
+                    0.2767050134943271, 
+                    0.2767050134943271, 
+                    0.26057689818089197, 
+                    0.26057689818089197, 
+                    0.24031119514626298, 
+                    0.24031119514626298, 
+                    0.2163843195200647, 
+                    0.2163843195200647, 
+                    0.18931155044322792, 
+                    0.18931155044322792, 
+                    0.15885498634903278, 
+                    0.15885498634903278, 
+                    0.12327407044579947, 
+                    0.12327407044579947
+                ], 
+                0.21207906305789948
+            ], 
+            [
+                1.0760482549667358, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999565994280454, 
+                    0.9999565994280454, 
+                    0.9977795360360693, 
+                    0.9977795360360693, 
+                    0.9887509376434176, 
+                    0.9887509376434176, 
+                    0.9647915648009154, 
+                    0.9647915648009154, 
+                    0.9317309920131996, 
+                    0.9317309920131996, 
+                    0.8884621793311095, 
+                    0.8884621793311095, 
+                    0.839158866662155, 
+                    0.839158866662155, 
+                    0.7878192446603118, 
+                    0.7878192446603118, 
+                    0.7374404539416499, 
+                    0.7374404539416499, 
+                    0.6867671097042516, 
+                    0.6867671097042516, 
+                    0.6382590324097446, 
+                    0.6382590324097446, 
+                    0.5925615934173916, 
+                    0.5925615934173916, 
+                    0.5506257377213959, 
+                    0.5506257377213959, 
+                    0.5093440947676378, 
+                    0.5093440947676378, 
+                    0.47441202694527707, 
+                    0.47441202694527707, 
+                    0.440793007938186, 
+                    0.440793007938186, 
+                    0.41204829370918244, 
+                    0.41204829370918244, 
+                    0.3859764068784279, 
+                    0.3859764068784279, 
+                    0.36188271342528083, 
+                    0.36188271342528083, 
+                    0.34053343004345993, 
+                    0.34053343004345993, 
+                    0.3214348522527233, 
+                    0.3214348522527233, 
+                    0.3038210209843861, 
+                    0.3038210209843861, 
+                    0.28777488428080966, 
+                    0.28777488428080966, 
+                    0.27432028136484615, 
+                    0.27432028136484615, 
+                    0.25726690477204595, 
+                    0.25726690477204595, 
+                    0.2362935519734942, 
+                    0.2362935519734942, 
+                    0.21196160368208694, 
+                    0.21196160368208694, 
+                    0.1847552596659793, 
+                    0.1847552596659793, 
+                    0.1544482729498508, 
+                    0.1544482729498508, 
+                    0.11942503635187347, 
+                    0.11942503635187347
+                ], 
+                0.19847454130649567
+            ], 
+            [
+                1.0859521627426147, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999406071597157, 
+                    0.9999406071597157, 
+                    0.9975980211632401, 
+                    0.9975980211632401, 
+                    0.98787119067432, 
+                    0.98787119067432, 
+                    0.9631498187313331, 
+                    0.9631498187313331, 
+                    0.9290886381795275, 
+                    0.9290886381795275, 
+                    0.8853161121605966, 
+                    0.8853161121605966, 
+                    0.83555790855983, 
+                    0.83555790855983, 
+                    0.7838786208587613, 
+                    0.7838786208587613, 
+                    0.7332499783657626, 
+                    0.7332499783657626, 
+                    0.682547631462611, 
+                    0.682547631462611, 
+                    0.6337412906679899, 
+                    0.6337412906679899, 
+                    0.5885417039822072, 
+                    0.5885417039822072, 
+                    0.5461043377358872, 
+                    0.5461043377358872, 
+                    0.5055045997858042, 
+                    0.5055045997858042, 
+                    0.47032507352995384, 
+                    0.47032507352995384, 
+                    0.43704794932576124, 
+                    0.43704794932576124, 
+                    0.40841433783797737, 
+                    0.40841433783797737, 
+                    0.38252228369365043, 
+                    0.38252228369365043, 
+                    0.3585987070580807, 
+                    0.3585987070580807, 
+                    0.337391365783471, 
+                    0.337391365783471, 
+                    0.3181957288456852, 
+                    0.3181957288456852, 
+                    0.3002638238113009, 
+                    0.3002638238113009, 
+                    0.2849760372577127, 
+                    0.2849760372577127, 
+                    0.2720694990323933, 
+                    0.2720694990323933, 
+                    0.25502533282841067, 
+                    0.25502533282841067, 
+                    0.23403437303469193, 
+                    0.23403437303469193, 
+                    0.20974320032755223, 
+                    0.20974320032755223, 
+                    0.1826558104348894, 
+                    0.1826558104348894, 
+                    0.1525663522791034, 
+                    0.1525663522791034, 
+                    0.11792560831147957, 
+                    0.11792560831147957
+                ], 
+                0.18535080552101135
+            ], 
+            [
+                1.095947265625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999153605153084, 
+                    0.9999153605153084, 
+                    0.9972315276889832, 
+                    0.9972315276889832, 
+                    0.985849390045652, 
+                    0.985849390045652, 
+                    0.9616477886525895, 
+                    0.9616477886525895, 
+                    0.9272472003825503, 
+                    0.9272472003825503, 
+                    0.8825047025648689, 
+                    0.8825047025648689, 
+                    0.8320435037489635, 
+                    0.8320435037489635, 
+                    0.7799582600394851, 
+                    0.7799582600394851, 
+                    0.7290919058110559, 
+                    0.7290919058110559, 
+                    0.6781835651625459, 
+                    0.6781835651625459, 
+                    0.6296454554186597, 
+                    0.6296454554186597, 
+                    0.584051483413584, 
+                    0.584051483413584, 
+                    0.5423246875351218, 
+                    0.5423246875351218, 
+                    0.501208648799339, 
+                    0.501208648799339, 
+                    0.46653221065604167, 
+                    0.46653221065604167, 
+                    0.43317039522863326, 
+                    0.43317039522863326, 
+                    0.40479313512540444, 
+                    0.40479313512540444, 
+                    0.3790834166374416, 
+                    0.3790834166374416, 
+                    0.35540544929256124, 
+                    0.35540544929256124, 
+                    0.3343034664986524, 
+                    0.3343034664986524, 
+                    0.3157884491242758, 
+                    0.3157884491242758, 
+                    0.29782313457749654, 
+                    0.29782313457749654, 
+                    0.2811251979230127, 
+                    0.2811251979230127, 
+                    0.2691131748142071, 
+                    0.2691131748142071, 
+                    0.253517712014124, 
+                    0.253517712014124, 
+                    0.23368408128502055, 
+                    0.23368408128502055, 
+                    0.21024160415779536, 
+                    0.21024160415779536, 
+                    0.18374979057024116, 
+                    0.18374979057024116, 
+                    0.15399921140353673, 
+                    0.15399921140353673, 
+                    0.1193473774378735, 
+                    0.1193473774378735
+                ], 
+                0.1733437329530716
+            ]
+        ]
+    }, 
+    {
+        "block_size": 65, 
+        "preprocessing_block_sizes": [
+            48
+        ], 
+        "pruning_parameters": [
+            [
+                0.9137110710144043, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999998911794018, 
+                    0.9999998911794018, 
+                    0.9999987430649897, 
+                    0.9999987430649897, 
+                    0.999998358519077, 
+                    0.999998358519077, 
+                    0.9916027535478781, 
+                    0.9916027535478781, 
+                    0.9563983364954495, 
+                    0.9563983364954495, 
+                    0.9200415180355495, 
+                    0.9200415180355495, 
+                    0.8840229388913144, 
+                    0.8840229388913144, 
+                    0.848495808669255, 
+                    0.848495808669255, 
+                    0.8133961086964695, 
+                    0.8133961086964695, 
+                    0.7784802085655437, 
+                    0.7784802085655437, 
+                    0.7436991954906839, 
+                    0.7436991954906839, 
+                    0.7089315602627011, 
+                    0.7089315602627011, 
+                    0.6736547581941619, 
+                    0.6736547581941619, 
+                    0.6389962754440729, 
+                    0.6389962754440729, 
+                    0.6044007054723772, 
+                    0.6044007054723772, 
+                    0.5712430123882312, 
+                    0.5712430123882312, 
+                    0.5387376921926917, 
+                    0.5387376921926917, 
+                    0.5076133520766187, 
+                    0.5076133520766187, 
+                    0.47717820174712267, 
+                    0.47717820174712267, 
+                    0.4468313223548173, 
+                    0.4468313223548173, 
+                    0.41661095967634826, 
+                    0.41661095967634826, 
+                    0.3861490642660826, 
+                    0.3861490642660826, 
+                    0.35550251800345545, 
+                    0.35550251800345545, 
+                    0.32458496521125274, 
+                    0.32458496521125274, 
+                    0.29346161231846246, 
+                    0.29346161231846246, 
+                    0.26217014528142785, 
+                    0.26217014528142785, 
+                    0.23073300530243404, 
+                    0.23073300530243404, 
+                    0.1991400716507701, 
+                    0.1991400716507701, 
+                    0.16734071567063716, 
+                    0.16734071567063716, 
+                    0.13520895867713656, 
+                    0.13520895867713656, 
+                    0.1013971626493625, 
+                    0.1013971626493625
+                ], 
+                0.5008209943771362
+            ], 
+            [
+                0.9219937920570374, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999945375261416, 
+                    0.9999945375261416, 
+                    0.9999945375261416, 
+                    0.9999945375261416, 
+                    0.9999945375261416, 
+                    0.9999945375261416, 
+                    0.9745086142575896, 
+                    0.9745086142575896, 
+                    0.9349519242937027, 
+                    0.9349519242937027, 
+                    0.8963837732332257, 
+                    0.8963837732332257, 
+                    0.858722803343926, 
+                    0.858722803343926, 
+                    0.8216838345931853, 
+                    0.8216838345931853, 
+                    0.7847417584591697, 
+                    0.7847417584591697, 
+                    0.7478891605008011, 
+                    0.7478891605008011, 
+                    0.7109395609767959, 
+                    0.7109395609767959, 
+                    0.6728604879660185, 
+                    0.6728604879660185, 
+                    0.6360167449965747, 
+                    0.6360167449965747, 
+                    0.5991838601452177, 
+                    0.5991838601452177, 
+                    0.5650719332602688, 
+                    0.5650719332602688, 
+                    0.5320675259609725, 
+                    0.5320675259609725, 
+                    0.5016825296722235, 
+                    0.5016825296722235, 
+                    0.472551422843975, 
+                    0.472551422843975, 
+                    0.44347997580700327, 
+                    0.44347997580700327, 
+                    0.41458489404447474, 
+                    0.41458489404447474, 
+                    0.385149653305204, 
+                    0.385149653305204, 
+                    0.35532072919880775, 
+                    0.35532072919880775, 
+                    0.3249498709162, 
+                    0.3249498709162, 
+                    0.29418432417860274, 
+                    0.29418432417860274, 
+                    0.2631120458888551, 
+                    0.2631120458888551, 
+                    0.23179369511694561, 
+                    0.23179369511694561, 
+                    0.20023672195318862, 
+                    0.20023672195318862, 
+                    0.1683909118659339, 
+                    0.1683909118659339, 
+                    0.13610601588033852, 
+                    0.13610601588033852, 
+                    0.10149619390540032, 
+                    0.10149619390540032
+                ], 
+                0.5009961724281311
+            ], 
+            [
+                0.9303516149520874, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999999196613001, 
+                    0.999999196613001, 
+                    0.9999929072714391, 
+                    0.9999929072714391, 
+                    0.9999929072714391, 
+                    0.9999929072714391, 
+                    0.9999929072714391, 
+                    0.9999929072714391, 
+                    0.9748923949110734, 
+                    0.9748923949110734, 
+                    0.9353006062517977, 
+                    0.9353006062517977, 
+                    0.8966961544968033, 
+                    0.8966961544968033, 
+                    0.85897960709128, 
+                    0.85897960709128, 
+                    0.8218544729661045, 
+                    0.8218544729661045, 
+                    0.7847861806520008, 
+                    0.7847861806520008, 
+                    0.7477860868736768, 
+                    0.7477860868736768, 
+                    0.7106705385605422, 
+                    0.7106705385605422, 
+                    0.6723793574397507, 
+                    0.6723793574397507, 
+                    0.6354129664996703, 
+                    0.6354129664996703, 
+                    0.5985054122898755, 
+                    0.5985054122898755, 
+                    0.564451480292366, 
+                    0.564451480292366, 
+                    0.5315592236454527, 
+                    0.5315592236454527, 
+                    0.5013262235469976, 
+                    0.5013262235469976, 
+                    0.4723249281520341, 
+                    0.4723249281520341, 
+                    0.4433522134491008, 
+                    0.4433522134491008, 
+                    0.4145182527582589, 
+                    0.4145182527582589, 
+                    0.3851197753870801, 
+                    0.3851197753870801, 
+                    0.3553075385346613, 
+                    0.3553075385346613, 
+                    0.32494656982387243, 
+                    0.32494656982387243, 
+                    0.2941870953751897, 
+                    0.2941870953751897, 
+                    0.26311906289220716, 
+                    0.26311906289220716, 
+                    0.23180371459158927, 
+                    0.23180371459158927, 
+                    0.20024898378585684, 
+                    0.20024898378585684, 
+                    0.1684046824410345, 
+                    0.1684046824410345, 
+                    0.1361201995626232, 
+                    0.1361201995626232, 
+                    0.10154963302203497, 
+                    0.10154963302203497
+                ], 
+                0.5000165104866028
+            ], 
+            [
+                0.938785195350647, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999981495033915, 
+                    0.9999981495033915, 
+                    0.999997018107009, 
+                    0.999997018107009, 
+                    0.999997018107009, 
+                    0.999997018107009, 
+                    0.9752268406388529, 
+                    0.9752268406388529, 
+                    0.9353672428463801, 
+                    0.9353672428463801, 
+                    0.8965109086277632, 
+                    0.8965109086277632, 
+                    0.8586552001300823, 
+                    0.8586552001300823, 
+                    0.8214937314141185, 
+                    0.8214937314141185, 
+                    0.7844554810489833, 
+                    0.7844554810489833, 
+                    0.7475072189068144, 
+                    0.7475072189068144, 
+                    0.710460723148906, 
+                    0.710460723148906, 
+                    0.6722410870246686, 
+                    0.6722410870246686, 
+                    0.6353865777920743, 
+                    0.6353865777920743, 
+                    0.5986473484650738, 
+                    0.5986473484650738, 
+                    0.5648141576917279, 
+                    0.5648141576917279, 
+                    0.5321514559808829, 
+                    0.5321514559808829, 
+                    0.5020116001106287, 
+                    0.5020116001106287, 
+                    0.472954432283248, 
+                    0.472954432283248, 
+                    0.4438806236231967, 
+                    0.4438806236231967, 
+                    0.41488453821219173, 
+                    0.41488453821219173, 
+                    0.3853471164570578, 
+                    0.3853471164570578, 
+                    0.355408855350439, 
+                    0.355408855350439, 
+                    0.3249618510284022, 
+                    0.3249618510284022, 
+                    0.29414458619421957, 
+                    0.29414458619421957, 
+                    0.26304028650346256, 
+                    0.26304028650346256, 
+                    0.23170393429976097, 
+                    0.23170393429976097, 
+                    0.20014023509662937, 
+                    0.20014023509662937, 
+                    0.16829755121829507, 
+                    0.16829755121829507, 
+                    0.13602701593554878, 
+                    0.13602701593554878, 
+                    0.10152658794343776, 
+                    0.10152658794343776
+                ], 
+                0.5005646347999573
+            ], 
+            [
+                0.9472951889038086, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999773614595812, 
+                    0.9999773614595812, 
+                    0.9999770411344294, 
+                    0.9999770411344294, 
+                    0.9999770411344294, 
+                    0.9999770411344294, 
+                    0.9999770411344294, 
+                    0.9999770411344294, 
+                    0.958212341218239, 
+                    0.958212341218239, 
+                    0.9157835265303438, 
+                    0.9157835265303438, 
+                    0.8748004079529539, 
+                    0.8748004079529539, 
+                    0.8347368102049564, 
+                    0.8347368102049564, 
+                    0.7946607185937363, 
+                    0.7946607185937363, 
+                    0.7546461435824989, 
+                    0.7546461435824989, 
+                    0.7144194435756452, 
+                    0.7144194435756452, 
+                    0.6722043556051773, 
+                    0.6722043556051773, 
+                    0.6323413102855487, 
+                    0.6323413102855487, 
+                    0.5926418178078803, 
+                    0.5926418178078803, 
+                    0.5577020699669663, 
+                    0.5577020699669663, 
+                    0.5245857988427668, 
+                    0.5245857988427668, 
+                    0.4955829349762222, 
+                    0.4955829349762222, 
+                    0.46829314149266715, 
+                    0.46829314149266715, 
+                    0.44088247272211856, 
+                    0.44088247272211856, 
+                    0.41353719503914615, 
+                    0.41353719503914615, 
+                    0.3852439705155919, 
+                    0.3852439705155919, 
+                    0.35626270080188316, 
+                    0.35626270080188316, 
+                    0.32643567075541763, 
+                    0.32643567075541763, 
+                    0.29600448200812735, 
+                    0.29600448200812735, 
+                    0.2651142187561261, 
+                    0.2651142187561261, 
+                    0.2338633190128457, 
+                    0.2338633190128457, 
+                    0.20227274854159466, 
+                    0.20227274854159466, 
+                    0.1702814933774951, 
+                    0.1702814933774951, 
+                    0.13769195450786628, 
+                    0.13769195450786628, 
+                    0.1020092297824227, 
+                    0.1020092297824227
+                ], 
+                0.5004661679267883
+            ], 
+            [
+                0.9558823704719543, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999891713000695, 
+                    0.9999891713000695, 
+                    0.9999891713000695, 
+                    0.9999891713000695, 
+                    0.9999891713000695, 
+                    0.9999891713000695, 
+                    0.9999891713000695, 
+                    0.9999891713000695, 
+                    0.9584952282400809, 
+                    0.9584952282400809, 
+                    0.9160950843611676, 
+                    0.9160950843611676, 
+                    0.8751392568640318, 
+                    0.8751392568640318, 
+                    0.8350637015453339, 
+                    0.8350637015453339, 
+                    0.7949152692625832, 
+                    0.7949152692625832, 
+                    0.7547433253951161, 
+                    0.7547433253951161, 
+                    0.7143085455847366, 
+                    0.7143085455847366, 
+                    0.671858119639701, 
+                    0.671858119639701, 
+                    0.631879156683101, 
+                    0.631879156683101, 
+                    0.592266563601701, 
+                    0.592266563601701, 
+                    0.557526659730661, 
+                    0.557526659730661, 
+                    0.5247256166102521, 
+                    0.5247256166102521, 
+                    0.49585476369824755, 
+                    0.49585476369824755, 
+                    0.46856417323178606, 
+                    0.46856417323178606, 
+                    0.44115143420877495, 
+                    0.44115143420877495, 
+                    0.41373490582652167, 
+                    0.41373490582652167, 
+                    0.38539443856398475, 
+                    0.38539443856398475, 
+                    0.35636057700206536, 
+                    0.35636057700206536, 
+                    0.3265056641411234, 
+                    0.3265056641411234, 
+                    0.2960582781145378, 
+                    0.2960582781145378, 
+                    0.2651593162574087, 
+                    0.2651593162574087, 
+                    0.2339033239509869, 
+                    0.2339033239509869, 
+                    0.20230972890381088, 
+                    0.20230972890381088, 
+                    0.1703163923541368, 
+                    0.1703163923541368, 
+                    0.13772456728123483, 
+                    0.13772456728123483, 
+                    0.10213265413553185, 
+                    0.10213265413553185
+                ], 
+                0.5006415247917175
+            ], 
+            [
+                0.964547336101532, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999999945338249, 
+                    0.9999999945338249, 
+                    0.9998365640613309, 
+                    0.9998365640613309, 
+                    0.9998243156310926, 
+                    0.9998243156310926, 
+                    0.9998054373802412, 
+                    0.9998054373802412, 
+                    0.99975396602422, 
+                    0.99975396602422, 
+                    0.9899821491892234, 
+                    0.9899821491892234, 
+                    0.942079693553051, 
+                    0.942079693553051, 
+                    0.8965802862522811, 
+                    0.8965802862522811, 
+                    0.8524883747431131, 
+                    0.8524883747431131, 
+                    0.8079483258769203, 
+                    0.8079483258769203, 
+                    0.7635072083236567, 
+                    0.7635072083236567, 
+                    0.7187121481063163, 
+                    0.7187121481063163, 
+                    0.6717762030190806, 
+                    0.6717762030190806, 
+                    0.6287109734627565, 
+                    0.6287109734627565, 
+                    0.5872995041771304, 
+                    0.5872995041771304, 
+                    0.5510634326896731, 
+                    0.5510634326896731, 
+                    0.5176084213808675, 
+                    0.5176084213808675, 
+                    0.4884649087596659, 
+                    0.4884649087596659, 
+                    0.4623385080630695, 
+                    0.4623385080630695, 
+                    0.4369695255218085, 
+                    0.4369695255218085, 
+                    0.41202792053677956, 
+                    0.41202792053677956, 
+                    0.38584416341427574, 
+                    0.38584416341427574, 
+                    0.3585652188843549, 
+                    0.3585652188843549, 
+                    0.3299040288422744, 
+                    0.3299040288422744, 
+                    0.3002199190554469, 
+                    0.3002199190554469, 
+                    0.26975103166451603, 
+                    0.26975103166451603, 
+                    0.23866415508855462, 
+                    0.23866415508855462, 
+                    0.20700697165798385, 
+                    0.20700697165798385, 
+                    0.174699417288941, 
+                    0.174699417288941, 
+                    0.1414407027901143, 
+                    0.1414407027901143, 
+                    0.10408157538018384, 
+                    0.10408157538018384
+                ], 
+                0.4992746114730835
+            ], 
+            [
+                0.9732909202575684, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999700028491732, 
+                    0.999700028491732, 
+                    0.999685783170516, 
+                    0.999685783170516, 
+                    0.9996791935919377, 
+                    0.9996791935919377, 
+                    0.9996591571946137, 
+                    0.9996591571946137, 
+                    0.9578206411565968, 
+                    0.9578206411565968, 
+                    0.9175886949107147, 
+                    0.9175886949107147, 
+                    0.878457820598528, 
+                    0.878457820598528, 
+                    0.8386726327906627, 
+                    0.8386726327906627, 
+                    0.7973558492188673, 
+                    0.7973558492188673, 
+                    0.7556783279276542, 
+                    0.7556783279276542, 
+                    0.7135456348085508, 
+                    0.7135456348085508, 
+                    0.6709339837336082, 
+                    0.6709339837336082, 
+                    0.6306501330695952, 
+                    0.6306501330695952, 
+                    0.5925693272781226, 
+                    0.5925693272781226, 
+                    0.5561712157125972, 
+                    0.5561712157125972, 
+                    0.5222376155090268, 
+                    0.5222376155090268, 
+                    0.49118346274384106, 
+                    0.49118346274384106, 
+                    0.4635619958850868, 
+                    0.4635619958850868, 
+                    0.4372607067264555, 
+                    0.4372607067264555, 
+                    0.41159701663685533, 
+                    0.41159701663685533, 
+                    0.38498585005471425, 
+                    0.38498585005471425, 
+                    0.3574296345210842, 
+                    0.3574296345210842, 
+                    0.3286349532853896, 
+                    0.3286349532853896, 
+                    0.29890230653005545, 
+                    0.29890230653005545, 
+                    0.2684409435048352, 
+                    0.2684409435048352, 
+                    0.237400423380714, 
+                    0.237400423380714, 
+                    0.20582687375536246, 
+                    0.20582687375536246, 
+                    0.17365304490248182, 
+                    0.17365304490248182, 
+                    0.14060790534284565, 
+                    0.14060790534284565, 
+                    0.10459905383198735, 
+                    0.10459905383198735
+                ], 
+                0.5002915263175964
+            ], 
+            [
+                0.9821137189865112, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996133821987935, 
+                    0.9996133821987935, 
+                    0.9993621108425923, 
+                    0.9993621108425923, 
+                    0.9993158339066266, 
+                    0.9993158339066266, 
+                    0.999121656428779, 
+                    0.999121656428779, 
+                    0.9566261694009334, 
+                    0.9566261694009334, 
+                    0.9180003769923901, 
+                    0.9180003769923901, 
+                    0.8797250572318611, 
+                    0.8797250572318611, 
+                    0.8397293028093543, 
+                    0.8397293028093543, 
+                    0.797568974391686, 
+                    0.797568974391686, 
+                    0.7551584368434427, 
+                    0.7551584368434427, 
+                    0.7126108177676033, 
+                    0.7126108177676033, 
+                    0.6700387508581015, 
+                    0.6700387508581015, 
+                    0.630208863420424, 
+                    0.630208863420424, 
+                    0.5921812915404626, 
+                    0.5921812915404626, 
+                    0.555640354663481, 
+                    0.555640354663481, 
+                    0.5209290836528366, 
+                    0.5209290836528366, 
+                    0.48892207567224905, 
+                    0.48892207567224905, 
+                    0.4606241126981115, 
+                    0.4606241126981115, 
+                    0.43462364768376255, 
+                    0.43462364768376255, 
+                    0.4100269005926949, 
+                    0.4100269005926949, 
+                    0.38472604462221377, 
+                    0.38472604462221377, 
+                    0.3583942762391894, 
+                    0.3583942762391894, 
+                    0.3305118266996842, 
+                    0.3305118266996842, 
+                    0.3014092038323909, 
+                    0.3014092038323909, 
+                    0.271343739234664, 
+                    0.271343739234664, 
+                    0.24050771590919415, 
+                    0.24050771590919415, 
+                    0.20896777156064278, 
+                    0.20896777156064278, 
+                    0.17665181829162233, 
+                    0.17665181829162233, 
+                    0.14323144254454903, 
+                    0.14323144254454903, 
+                    0.10676044285847311, 
+                    0.10676044285847311
+                ], 
+                0.5003583431243896
+            ], 
+            [
+                0.9910165071487427, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999990770922358, 
+                    0.9999990770922358, 
+                    0.9993853962278008, 
+                    0.9993853962278008, 
+                    0.9988631442151245, 
+                    0.9988631442151245, 
+                    0.9968608378643958, 
+                    0.9968608378643958, 
+                    0.9535876190939011, 
+                    0.9535876190939011, 
+                    0.9188895585477135, 
+                    0.9188895585477135, 
+                    0.8808160459891171, 
+                    0.8808160459891171, 
+                    0.8396939759888585, 
+                    0.8396939759888585, 
+                    0.7961963193931291, 
+                    0.7961963193931291, 
+                    0.7529530713977358, 
+                    0.7529530713977358, 
+                    0.7096836020215138, 
+                    0.7096836020215138, 
+                    0.6659408114746792, 
+                    0.6659408114746792, 
+                    0.6252043846439894, 
+                    0.6252043846439894, 
+                    0.5866468029660128, 
+                    0.5866468029660128, 
+                    0.5501255555747201, 
+                    0.5501255555747201, 
+                    0.5163154675557606, 
+                    0.5163154675557606, 
+                    0.485585071831353, 
+                    0.485585071831353, 
+                    0.4578324401207358, 
+                    0.4578324401207358, 
+                    0.43174991349129677, 
+                    0.43174991349129677, 
+                    0.4081556586072199, 
+                    0.4081556586072199, 
+                    0.38555037278562887, 
+                    0.38555037278562887, 
+                    0.36265534384207965, 
+                    0.36265534384207965, 
+                    0.3376393800350444, 
+                    0.3376393800350444, 
+                    0.3105886466201733, 
+                    0.3105886466201733, 
+                    0.28183426349652907, 
+                    0.28183426349652907, 
+                    0.25168666457876077, 
+                    0.25168666457876077, 
+                    0.22027391020610354, 
+                    0.22027391020610354, 
+                    0.18751858491049675, 
+                    0.18751858491049675, 
+                    0.15294559098654495, 
+                    0.15294559098654495, 
+                    0.11465557791399482, 
+                    0.11465557791399482
+                ], 
+                0.5004666447639465
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999875527588029, 
+                    0.9999875527588029, 
+                    0.9988646390073701, 
+                    0.9988646390073701, 
+                    0.9957012613454942, 
+                    0.9957012613454942, 
+                    0.9849279867471379, 
+                    0.9849279867471379, 
+                    0.950886035886805, 
+                    0.950886035886805, 
+                    0.9170296084912682, 
+                    0.9170296084912682, 
+                    0.8782449530262034, 
+                    0.8782449530262034, 
+                    0.8366067318236461, 
+                    0.8366067318236461, 
+                    0.7928101632774592, 
+                    0.7928101632774592, 
+                    0.7493573714598861, 
+                    0.7493573714598861, 
+                    0.7062559312372849, 
+                    0.7062559312372849, 
+                    0.6624006921113531, 
+                    0.6624006921113531, 
+                    0.6222876966085598, 
+                    0.6222876966085598, 
+                    0.5827760482254295, 
+                    0.5827760482254295, 
+                    0.5473235725723056, 
+                    0.5473235725723056, 
+                    0.5132727375119325, 
+                    0.5132727375119325, 
+                    0.48271882684848955, 
+                    0.48271882684848955, 
+                    0.4547844369421106, 
+                    0.4547844369421106, 
+                    0.4288278855912775, 
+                    0.4288278855912775, 
+                    0.4053730979839841, 
+                    0.4053730979839841, 
+                    0.3837614673759694, 
+                    0.3837614673759694, 
+                    0.36450479396180596, 
+                    0.36450479396180596, 
+                    0.3448471348215241, 
+                    0.3448471348215241, 
+                    0.32244394473957744, 
+                    0.32244394473957744, 
+                    0.29697693422054566, 
+                    0.29697693422054566, 
+                    0.2689124145147732, 
+                    0.2689124145147732, 
+                    0.2385350606756397, 
+                    0.2385350606756397, 
+                    0.20585944950907759, 
+                    0.20585944950907759, 
+                    0.17031771458591588, 
+                    0.17031771458591588, 
+                    0.1297572683935817, 
+                    0.1297572683935817
+                ], 
+                0.5004487633705139
+            ], 
+            [
+                1.0090649127960205, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999922191563814, 
+                    0.9999922191563814, 
+                    0.9981855920549368, 
+                    0.9981855920549368, 
+                    0.9885558968508937, 
+                    0.9885558968508937, 
+                    0.9736731523299768, 
+                    0.9736731523299768, 
+                    0.9489095819860143, 
+                    0.9489095819860143, 
+                    0.9146220594757685, 
+                    0.9146220594757685, 
+                    0.8753041126043496, 
+                    0.8753041126043496, 
+                    0.833349316278663, 
+                    0.833349316278663, 
+                    0.7892069642980276, 
+                    0.7892069642980276, 
+                    0.7455762259406892, 
+                    0.7455762259406892, 
+                    0.7022151426271203, 
+                    0.7022151426271203, 
+                    0.6586663709738568, 
+                    0.6586663709738568, 
+                    0.6179466672757206, 
+                    0.6179466672757206, 
+                    0.5792126261043553, 
+                    0.5792126261043553, 
+                    0.5433155638161478, 
+                    0.5433155638161478, 
+                    0.509610308846239, 
+                    0.509610308846239, 
+                    0.479131093333254, 
+                    0.479131093333254, 
+                    0.4513606430235228, 
+                    0.4513606430235228, 
+                    0.42553277962603564, 
+                    0.42553277962603564, 
+                    0.40217921875632184, 
+                    0.40217921875632184, 
+                    0.3805698668520102, 
+                    0.3805698668520102, 
+                    0.36142120959267005, 
+                    0.36142120959267005, 
+                    0.3459545001864345, 
+                    0.3459545001864345, 
+                    0.3352886933858372, 
+                    0.3352886933858372, 
+                    0.3209595412709059, 
+                    0.3209595412709059, 
+                    0.30077977894910873, 
+                    0.30077977894910873, 
+                    0.27531054328676563, 
+                    0.27531054328676563, 
+                    0.2451577055478259, 
+                    0.2451577055478259, 
+                    0.2098673311724453, 
+                    0.2098673311724453, 
+                    0.16679839905558394, 
+                    0.16679839905558394
+                ], 
+                0.49167338013648987
+            ], 
+            [
+                1.018212080001831, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999821221618191, 
+                    0.9999821221618191, 
+                    0.9981427558880654, 
+                    0.9981427558880654, 
+                    0.9905727349759887, 
+                    0.9905727349759887, 
+                    0.9739517331956291, 
+                    0.9739517331956291, 
+                    0.9469024064647369, 
+                    0.9469024064647369, 
+                    0.9118414020263599, 
+                    0.9118414020263599, 
+                    0.8718651546582785, 
+                    0.8718651546582785, 
+                    0.8293157499776147, 
+                    0.8293157499776147, 
+                    0.78485671204085, 
+                    0.78485671204085, 
+                    0.7410179859582482, 
+                    0.7410179859582482, 
+                    0.6975053558566385, 
+                    0.6975053558566385, 
+                    0.6539144997323689, 
+                    0.6539144997323689, 
+                    0.613119511078337, 
+                    0.613119511078337, 
+                    0.5746011885177111, 
+                    0.5746011885177111, 
+                    0.5385859779998342, 
+                    0.5385859779998342, 
+                    0.5051446860673598, 
+                    0.5051446860673598, 
+                    0.4747219817795715, 
+                    0.4747219817795715, 
+                    0.4471170535726917, 
+                    0.4471170535726917, 
+                    0.42144148253925395, 
+                    0.42144148253925395, 
+                    0.39823826244021504, 
+                    0.39823826244021504, 
+                    0.376821253351096, 
+                    0.376821253351096, 
+                    0.3578937301338103, 
+                    0.3578937301338103, 
+                    0.34087213916359876, 
+                    0.34087213916359876, 
+                    0.325150586764547, 
+                    0.325150586764547, 
+                    0.30714524428083195, 
+                    0.30714524428083195, 
+                    0.28476452219808396, 
+                    0.28476452219808396, 
+                    0.25813720606668833, 
+                    0.25813720606668833, 
+                    0.22767481798626352, 
+                    0.22767481798626352, 
+                    0.19292735535940264, 
+                    0.19292735535940264, 
+                    0.1515110127068826, 
+                    0.1515110127068826
+                ], 
+                0.4676700234413147
+            ], 
+            [
+                1.0274420976638794, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999527833949621, 
+                    0.9999527833949621, 
+                    0.9980046994638762, 
+                    0.9980046994638762, 
+                    0.9901139644255249, 
+                    0.9901139644255249, 
+                    0.9727133777349896, 
+                    0.9727133777349896, 
+                    0.9448358622589512, 
+                    0.9448358622589512, 
+                    0.9090245187837259, 
+                    0.9090245187837259, 
+                    0.8684386403629409, 
+                    0.8684386403629409, 
+                    0.8254361975643009, 
+                    0.8254361975643009, 
+                    0.7806469391484939, 
+                    0.7806469391484939, 
+                    0.73661148023792, 
+                    0.73661148023792, 
+                    0.6929494811922561, 
+                    0.6929494811922561, 
+                    0.6490791684857169, 
+                    0.6490791684857169, 
+                    0.6090879958834442, 
+                    0.6090879958834442, 
+                    0.5692521116775393, 
+                    0.5692521116775393, 
+                    0.5346198446341756, 
+                    0.5346198446341756, 
+                    0.5006698975742971, 
+                    0.5006698975742971, 
+                    0.47055279772206826, 
+                    0.47055279772206826, 
+                    0.44306947226148935, 
+                    0.44306947226148935, 
+                    0.41754056553630253, 
+                    0.41754056553630253, 
+                    0.3944865354672827, 
+                    0.3944865354672827, 
+                    0.37321437499600124, 
+                    0.37321437499600124, 
+                    0.3544203872138669, 
+                    0.3544203872138669, 
+                    0.3375513695110151, 
+                    0.3375513695110151, 
+                    0.3223311115589166, 
+                    0.3223311115589166, 
+                    0.3045962659398219, 
+                    0.3045962659398219, 
+                    0.2823688346092199, 
+                    0.2823688346092199, 
+                    0.2559168658517828, 
+                    0.2559168658517828, 
+                    0.22566310631220093, 
+                    0.22566310631220093, 
+                    0.19116066343327112, 
+                    0.19116066343327112, 
+                    0.1500442418641342, 
+                    0.1500442418641342
+                ], 
+                0.4465765655040741
+            ], 
+            [
+                1.0367556810379028, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999314913743141, 
+                    0.9999314913743141, 
+                    0.9978373679974244, 
+                    0.9978373679974244, 
+                    0.9894593142699625, 
+                    0.9894593142699625, 
+                    0.9714380859731703, 
+                    0.9714380859731703, 
+                    0.9427053411127606, 
+                    0.9427053411127606, 
+                    0.9061444224357085, 
+                    0.9061444224357085, 
+                    0.8649686371886964, 
+                    0.8649686371886964, 
+                    0.8215169257312502, 
+                    0.8215169257312502, 
+                    0.7764113971195298, 
+                    0.7764113971195298, 
+                    0.7320846503921372, 
+                    0.7320846503921372, 
+                    0.6885277972988317, 
+                    0.6885277972988317, 
+                    0.6443004823119195, 
+                    0.6443004823119195, 
+                    0.6044469685567796, 
+                    0.6044469685567796, 
+                    0.5649766198317901, 
+                    0.5649766198317901, 
+                    0.530022114479348, 
+                    0.530022114479348, 
+                    0.4963767734986854, 
+                    0.4963767734986854, 
+                    0.4663817208178753, 
+                    0.4663817208178753, 
+                    0.4390322620791221, 
+                    0.4390322620791221, 
+                    0.41366351629742354, 
+                    0.41366351629742354, 
+                    0.3907610950811046, 
+                    0.3907610950811046, 
+                    0.36964181978683064, 
+                    0.36964181978683064, 
+                    0.3509993172092054, 
+                    0.3509993172092054, 
+                    0.33424419080850337, 
+                    0.33424419080850337, 
+                    0.3185210045661854, 
+                    0.3185210045661854, 
+                    0.30020742293514296, 
+                    0.30020742293514296, 
+                    0.2776862250162477, 
+                    0.2776862250162477, 
+                    0.2511768091081674, 
+                    0.2511768091081674, 
+                    0.2210493206354708, 
+                    0.2210493206354708, 
+                    0.1868562234785808, 
+                    0.1868562234785808, 
+                    0.14629872930024637, 
+                    0.14629872930024637
+                ], 
+                0.42529651522636414
+            ], 
+            [
+                1.0461539030075073, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999156251330715, 
+                    0.9999156251330715, 
+                    0.9976606720717822, 
+                    0.9976606720717822, 
+                    0.9888708196062052, 
+                    0.9888708196062052, 
+                    0.9701197212090094, 
+                    0.9701197212090094, 
+                    0.940531511719749, 
+                    0.940531511719749, 
+                    0.9032219607420268, 
+                    0.9032219607420268, 
+                    0.8614587873769225, 
+                    0.8614587873769225, 
+                    0.8175735571436181, 
+                    0.8175735571436181, 
+                    0.7721319248178219, 
+                    0.7721319248178219, 
+                    0.7277037745553013, 
+                    0.7277037745553013, 
+                    0.6837732127366041, 
+                    0.6837732127366041, 
+                    0.6401342792763809, 
+                    0.6401342792763809, 
+                    0.599280477177994, 
+                    0.599280477177994, 
+                    0.5610365377892503, 
+                    0.5610365377892503, 
+                    0.5253060504099948, 
+                    0.5253060504099948, 
+                    0.49222320204325765, 
+                    0.49222320204325765, 
+                    0.4622271293907666, 
+                    0.4622271293907666, 
+                    0.4350569888638966, 
+                    0.4350569888638966, 
+                    0.40983768066564696, 
+                    0.40983768066564696, 
+                    0.387088245906663, 
+                    0.387088245906663, 
+                    0.3661191596332546, 
+                    0.3661191596332546, 
+                    0.3476179866933107, 
+                    0.3476179866933107, 
+                    0.3309960983916688, 
+                    0.3309960983916688, 
+                    0.3152943634719337, 
+                    0.3152943634719337, 
+                    0.29688306261769265, 
+                    0.29688306261769265, 
+                    0.2743301395345099, 
+                    0.2743301395345099, 
+                    0.2478946433308592, 
+                    0.2478946433308592, 
+                    0.21793428847310112, 
+                    0.21793428847310112, 
+                    0.18400547620818833, 
+                    0.18400547620818833, 
+                    0.14385131549855337, 
+                    0.14385131549855337
+                ], 
+                0.40462353825569153
+            ], 
+            [
+                1.0556371212005615, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998880451077591, 
+                    0.9998880451077591, 
+                    0.9974801290604239, 
+                    0.9974801290604239, 
+                    0.9882559541687268, 
+                    0.9882559541687268, 
+                    0.9687390781938101, 
+                    0.9687390781938101, 
+                    0.9382989615091042, 
+                    0.9382989615091042, 
+                    0.9002530918251236, 
+                    0.9002530918251236, 
+                    0.8579149872223335, 
+                    0.8579149872223335, 
+                    0.8135996862836113, 
+                    0.8135996862836113, 
+                    0.7678842628192127, 
+                    0.7678842628192127, 
+                    0.7231633209639786, 
+                    0.7231633209639786, 
+                    0.6794418616375544, 
+                    0.6794418616375544, 
+                    0.6350716345552292, 
+                    0.6350716345552292, 
+                    0.595346243775686, 
+                    0.595346243775686, 
+                    0.5559980140320299, 
+                    0.5559980140320299, 
+                    0.5212584489561481, 
+                    0.5212584489561481, 
+                    0.48788305229772044, 
+                    0.48788305229772044, 
+                    0.458170235379595, 
+                    0.458170235379595, 
+                    0.4311211866392461, 
+                    0.4311211866392461, 
+                    0.40605876757585363, 
+                    0.40605876757585363, 
+                    0.3834612325143274, 
+                    0.3834612325143274, 
+                    0.36264019376144335, 
+                    0.36264019376144335, 
+                    0.34427610601187303, 
+                    0.34427610601187303, 
+                    0.3278311405734936, 
+                    0.3278311405734936, 
+                    0.3123913721929773, 
+                    0.3123913721929773, 
+                    0.2940601026129443, 
+                    0.2940601026129443, 
+                    0.2715541137009371, 
+                    0.2715541137009371, 
+                    0.24521513557689079, 
+                    0.24521513557689079, 
+                    0.21540567017222506, 
+                    0.21540567017222506, 
+                    0.18168486233307024, 
+                    0.18168486233307024, 
+                    0.1418196530173265, 
+                    0.1418196530173265
+                ], 
+                0.38438770174980164
+            ], 
+            [
+                1.0652064085006714, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998664852536336, 
+                    0.9998664852536336, 
+                    0.9972904848265947, 
+                    0.9972904848265947, 
+                    0.9876177823299118, 
+                    0.9876177823299118, 
+                    0.9673151994927374, 
+                    0.9673151994927374, 
+                    0.9360144721493352, 
+                    0.9360144721493352, 
+                    0.897228068822337, 
+                    0.897228068822337, 
+                    0.8543324186609422, 
+                    0.8543324186609422, 
+                    0.8096017181001834, 
+                    0.8096017181001834, 
+                    0.7636019025461162, 
+                    0.7636019025461162, 
+                    0.7186721003126729, 
+                    0.7186721003126729, 
+                    0.6749517026425013, 
+                    0.6749517026425013, 
+                    0.6303738156797748, 
+                    0.6303738156797748, 
+                    0.59095410791765, 
+                    0.59095410791765, 
+                    0.5514417600714836, 
+                    0.5514417600714836, 
+                    0.5169782858781501, 
+                    0.5169782858781501, 
+                    0.4836661354279648, 
+                    0.4836661354279648, 
+                    0.4541226375240493, 
+                    0.4541226375240493, 
+                    0.4272224160870444, 
+                    0.4272224160870444, 
+                    0.40231716900490394, 
+                    0.40231716900490394, 
+                    0.3798730910435307, 
+                    0.3798730910435307, 
+                    0.3592030413697427, 
+                    0.3592030413697427, 
+                    0.34098098523951836, 
+                    0.34098098523951836, 
+                    0.32462144880465793, 
+                    0.32462144880465793, 
+                    0.3091170891857191, 
+                    0.3091170891857191, 
+                    0.2908572282593031, 
+                    0.2908572282593031, 
+                    0.26853305223716034, 
+                    0.26853305223716034, 
+                    0.2424345668093651, 
+                    0.2424345668093651, 
+                    0.21291713870417947, 
+                    0.21291713870417947, 
+                    0.1795544539787196, 
+                    0.1795544539787196, 
+                    0.14016552581306893, 
+                    0.14016552581306893
+                ], 
+                0.3645329475402832
+            ], 
+            [
+                1.0748624801635742, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998559618489998, 
+                    0.9998559618489998, 
+                    0.9971793391873862, 
+                    0.9971793391873862, 
+                    0.9871342807244433, 
+                    0.9871342807244433, 
+                    0.9659363672404806, 
+                    0.9659363672404806, 
+                    0.9336707412190307, 
+                    0.9336707412190307, 
+                    0.8941386961154613, 
+                    0.8941386961154613, 
+                    0.8507043349707132, 
+                    0.8507043349707132, 
+                    0.8056129488109296, 
+                    0.8056129488109296, 
+                    0.7593007088753634, 
+                    0.7593007088753634, 
+                    0.7143203988915844, 
+                    0.7143203988915844, 
+                    0.6702242452381542, 
+                    0.6702242452381542, 
+                    0.6261751996838254, 
+                    0.6261751996838254, 
+                    0.5859388839292784, 
+                    0.5859388839292784, 
+                    0.5474291957661284, 
+                    0.5474291957661284, 
+                    0.5125004264741461, 
+                    0.5125004264741461, 
+                    0.47964419499602085, 
+                    0.47964419499602085, 
+                    0.4501572214599679, 
+                    0.4501572214599679, 
+                    0.42342677161765035, 
+                    0.42342677161765035, 
+                    0.39866746289548977, 
+                    0.39866746289548977, 
+                    0.3763551422888672, 
+                    0.3763551422888672, 
+                    0.35579576446618016, 
+                    0.35579576446618016, 
+                    0.3376311301292966, 
+                    0.3376311301292966, 
+                    0.32131440454862714, 
+                    0.32131440454862714, 
+                    0.3087635631719747, 
+                    0.3087635631719747, 
+                    0.2965680891178984, 
+                    0.2965680891178984, 
+                    0.2793119165043753, 
+                    0.2793119165043753, 
+                    0.2566484289912165, 
+                    0.2566484289912165, 
+                    0.22928538146940708, 
+                    0.22928538146940708, 
+                    0.1969259284528101, 
+                    0.1969259284528101, 
+                    0.15719182983137903, 
+                    0.15719182983137903
+                ], 
+                0.34710144996643066
+            ], 
+            [
+                1.0846060514450073, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998600161240997, 
+                    0.9998600161240997, 
+                    0.996930059809645, 
+                    0.996930059809645, 
+                    0.9862482115480445, 
+                    0.9862482115480445, 
+                    0.9643642156911941, 
+                    0.9643642156911941, 
+                    0.9312327860296931, 
+                    0.9312327860296931, 
+                    0.8910511883164062, 
+                    0.8910511883164062, 
+                    0.8470767449665211, 
+                    0.8470767449665211, 
+                    0.801544261015245, 
+                    0.801544261015245, 
+                    0.7549637003138846, 
+                    0.7549637003138846, 
+                    0.7098162920178781, 
+                    0.7098162920178781, 
+                    0.6656501003950347, 
+                    0.6656501003950347, 
+                    0.6216574022197261, 
+                    0.6216574022197261, 
+                    0.581473766941813, 
+                    0.581473766941813, 
+                    0.5430617307129277, 
+                    0.5430617307129277, 
+                    0.5082090046656575, 
+                    0.5082090046656575, 
+                    0.4754887909200553, 
+                    0.4754887909200553, 
+                    0.44615512509585326, 
+                    0.44615512509585326, 
+                    0.41957821656968136, 
+                    0.41957821656968136, 
+                    0.3949780839359858, 
+                    0.3949780839359858, 
+                    0.3728266055265458, 
+                    0.3728266055265458, 
+                    0.35243320205772505, 
+                    0.35243320205772505, 
+                    0.3344126429983888, 
+                    0.3344126429983888, 
+                    0.31834796644505703, 
+                    0.31834796644505703, 
+                    0.30562894422954934, 
+                    0.30562894422954934, 
+                    0.2915446109908271, 
+                    0.2915446109908271, 
+                    0.2725924695807976, 
+                    0.2725924695807976, 
+                    0.24887819786675727, 
+                    0.24887819786675727, 
+                    0.22097166716684097, 
+                    0.22097166716684097, 
+                    0.1885152664138609, 
+                    0.1885152664138609, 
+                    0.1491988829632646, 
+                    0.1491988829632646
+                ], 
+                0.3277866840362549
+            ], 
+            [
+                1.094437837600708, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998066198268165, 
+                    0.9998066198268165, 
+                    0.9966215453717073, 
+                    0.9966215453717073, 
+                    0.9851759501597973, 
+                    0.9851759501597973, 
+                    0.9627738174165532, 
+                    0.9627738174165532, 
+                    0.9288276968018968, 
+                    0.9288276968018968, 
+                    0.8878829930908861, 
+                    0.8878829930908861, 
+                    0.8433449452228393, 
+                    0.8433449452228393, 
+                    0.7974677051676918, 
+                    0.7974677051676918, 
+                    0.7505695597185797, 
+                    0.7505695597185797, 
+                    0.7054732200617585, 
+                    0.7054732200617585, 
+                    0.6608428932294395, 
+                    0.6608428932294395, 
+                    0.6175868925357066, 
+                    0.6175868925357066, 
+                    0.5764920834958606, 
+                    0.5764920834958606, 
+                    0.5390651487646011, 
+                    0.5390651487646011, 
+                    0.503756756326856, 
+                    0.503756756326856, 
+                    0.47142362899483636, 
+                    0.47142362899483636, 
+                    0.4421709031129791, 
+                    0.4421709031129791, 
+                    0.4157720329504871, 
+                    0.4157720329504871, 
+                    0.3913383483333295, 
+                    0.3913383483333295, 
+                    0.36936924279868133, 
+                    0.36936924279868133, 
+                    0.34918630941205486, 
+                    0.34918630941205486, 
+                    0.33096540176450234, 
+                    0.33096540176450234, 
+                    0.31573624738370437, 
+                    0.31573624738370437, 
+                    0.3012927612508948, 
+                    0.3012927612508948, 
+                    0.28284045586583906, 
+                    0.28284045586583906, 
+                    0.2603157135434879, 
+                    0.2603157135434879, 
+                    0.23427233826780133, 
+                    0.23427233826780133, 
+                    0.20502098670402336, 
+                    0.20502098670402336, 
+                    0.172102574725698, 
+                    0.172102574725698, 
+                    0.13336484761044742, 
+                    0.13336484761044742
+                ], 
+                0.3079319894313812
+            ]
+        ]
+    }, 
+    {
+        "block_size": 66, 
+        "preprocessing_block_sizes": [
+            42
+        ], 
+        "pruning_parameters": [
+            [
+                0.9149338603019714, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999987434209016, 
+                    0.9999987434209016, 
+                    0.9996322806948142, 
+                    0.9996322806948142, 
+                    0.9977424021208056, 
+                    0.9977424021208056, 
+                    0.9839649655579261, 
+                    0.9839649655579261, 
+                    0.9594408762305121, 
+                    0.9594408762305121, 
+                    0.9271328166130396, 
+                    0.9271328166130396, 
+                    0.8878015327068007, 
+                    0.8878015327068007, 
+                    0.844829554041105, 
+                    0.844829554041105, 
+                    0.8011798949125767, 
+                    0.8011798949125767, 
+                    0.7590597044794244, 
+                    0.7590597044794244, 
+                    0.7160520597296649, 
+                    0.7160520597296649, 
+                    0.6718866681180313, 
+                    0.6718866681180313, 
+                    0.6286873472183923, 
+                    0.6286873472183923, 
+                    0.5866855515462185, 
+                    0.5866855515462185, 
+                    0.5446543325252006, 
+                    0.5446543325252006, 
+                    0.5060131123441914, 
+                    0.5060131123441914, 
+                    0.47050889421391345, 
+                    0.47050889421391345, 
+                    0.43861802353889834, 
+                    0.43861802353889834, 
+                    0.4102047119964821, 
+                    0.4102047119964821, 
+                    0.3841272404849849, 
+                    0.3841272404849849, 
+                    0.36138316088583056, 
+                    0.36138316088583056, 
+                    0.3406331656528624, 
+                    0.3406331656528624, 
+                    0.3219212016062757, 
+                    0.3219212016062757, 
+                    0.30536554141284483, 
+                    0.30536554141284483, 
+                    0.29009830261534514, 
+                    0.29009830261534514, 
+                    0.27434370362021726, 
+                    0.27434370362021726, 
+                    0.2546202787858935, 
+                    0.2546202787858935, 
+                    0.2308069538320163, 
+                    0.2308069538320163, 
+                    0.20330670255206706, 
+                    0.20330670255206706, 
+                    0.17187467413145957, 
+                    0.17187467413145957, 
+                    0.1345572295553708, 
+                    0.1345572295553708
+                ], 
+                0.37874701619148254
+            ], 
+            [
+                0.9231041669845581, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999995590524239, 
+                    0.9999995590524239, 
+                    0.9993901926617236, 
+                    0.9993901926617236, 
+                    0.9974646749540045, 
+                    0.9974646749540045, 
+                    0.982012415676401, 
+                    0.982012415676401, 
+                    0.9579872425770442, 
+                    0.9579872425770442, 
+                    0.9246837841338151, 
+                    0.9246837841338151, 
+                    0.8848765393736131, 
+                    0.8848765393736131, 
+                    0.8414416706067874, 
+                    0.8414416706067874, 
+                    0.7974700501986739, 
+                    0.7974700501986739, 
+                    0.7551479587947513, 
+                    0.7551479587947513, 
+                    0.7119176939150684, 
+                    0.7119176939150684, 
+                    0.6678529257570023, 
+                    0.6678529257570023, 
+                    0.6242769734390884, 
+                    0.6242769734390884, 
+                    0.58282874633278, 
+                    0.58282874633278, 
+                    0.5405618219669731, 
+                    0.5405618219669731, 
+                    0.5016520338182009, 
+                    0.5016520338182009, 
+                    0.4673064047530206, 
+                    0.4673064047530206, 
+                    0.4344437545349765, 
+                    0.4344437545349765, 
+                    0.40685034292585914, 
+                    0.40685034292585914, 
+                    0.3806912911147583, 
+                    0.3806912911147583, 
+                    0.3581657090197667, 
+                    0.3581657090197667, 
+                    0.33753261762537407, 
+                    0.33753261762537407, 
+                    0.3190005809550495, 
+                    0.3190005809550495, 
+                    0.3025378128385991, 
+                    0.3025378128385991, 
+                    0.2879655129244794, 
+                    0.2879655129244794, 
+                    0.2754206737218167, 
+                    0.2754206737218167, 
+                    0.2578121141591774, 
+                    0.2578121141591774, 
+                    0.23518054061919239, 
+                    0.23518054061919239, 
+                    0.20819337294873175, 
+                    0.20819337294873175, 
+                    0.17661505215678985, 
+                    0.17661505215678985, 
+                    0.13824950059729676, 
+                    0.13824950059729676
+                ], 
+                0.3619029223918915
+            ], 
+            [
+                0.9313474893569946, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999944028186738, 
+                    0.9999944028186738, 
+                    0.9995615942782412, 
+                    0.9995615942782412, 
+                    0.9973587739024284, 
+                    0.9973587739024284, 
+                    0.9816660753633177, 
+                    0.9816660753633177, 
+                    0.9563425077382438, 
+                    0.9563425077382438, 
+                    0.922555691533244, 
+                    0.922555691533244, 
+                    0.8819334214965803, 
+                    0.8819334214965803, 
+                    0.8379927856724069, 
+                    0.8379927856724069, 
+                    0.793675157528903, 
+                    0.793675157528903, 
+                    0.7511351924540906, 
+                    0.7511351924540906, 
+                    0.7078360760989104, 
+                    0.7078360760989104, 
+                    0.6634807929243751, 
+                    0.6634807929243751, 
+                    0.6203440777859088, 
+                    0.6203440777859088, 
+                    0.5781666365836541, 
+                    0.5781666365836541, 
+                    0.5369357433693228, 
+                    0.5369357433693228, 
+                    0.4974230518933442, 
+                    0.4974230518933442, 
+                    0.4633517623797796, 
+                    0.4633517623797796, 
+                    0.43102193703367836, 
+                    0.43102193703367836, 
+                    0.40317210867231695, 
+                    0.40317210867231695, 
+                    0.37733416125499075, 
+                    0.37733416125499075, 
+                    0.3548873169149113, 
+                    0.3548873169149113, 
+                    0.3344204474721242, 
+                    0.3344204474721242, 
+                    0.3159824341942697, 
+                    0.3159824341942697, 
+                    0.2996885810179381, 
+                    0.2996885810179381, 
+                    0.2846294001806802, 
+                    0.2846294001806802, 
+                    0.26873062675650305, 
+                    0.26873062675650305, 
+                    0.24882749076010333, 
+                    0.24882749076010333, 
+                    0.22503430768605195, 
+                    0.22503430768605195, 
+                    0.1977581644034569, 
+                    0.1977581644034569, 
+                    0.16676191263597792, 
+                    0.16676191263597792, 
+                    0.1301874157505272, 
+                    0.1301874157505272
+                ], 
+                0.34316277503967285
+            ], 
+            [
+                0.9396644234657288, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99952881916221, 
+                    0.99952881916221, 
+                    0.9969121275619087, 
+                    0.9969121275619087, 
+                    0.9804049256666845, 
+                    0.9804049256666845, 
+                    0.9547167873359645, 
+                    0.9547167873359645, 
+                    0.9202100710380413, 
+                    0.9202100710380413, 
+                    0.8789487326732367, 
+                    0.8789487326732367, 
+                    0.8345334118509359, 
+                    0.8345334118509359, 
+                    0.789897268135491, 
+                    0.789897268135491, 
+                    0.7471520811650776, 
+                    0.7471520811650776, 
+                    0.7037169890192632, 
+                    0.7037169890192632, 
+                    0.6592820508460818, 
+                    0.6592820508460818, 
+                    0.6161710049342838, 
+                    0.6161710049342838, 
+                    0.5739882793012584, 
+                    0.5739882793012584, 
+                    0.5329778927038291, 
+                    0.5329778927038291, 
+                    0.49338540127230773, 
+                    0.49338540127230773, 
+                    0.4596463877132582, 
+                    0.4596463877132582, 
+                    0.4273507350053673, 
+                    0.4273507350053673, 
+                    0.39968556760980506, 
+                    0.39968556760980506, 
+                    0.37399159675629406, 
+                    0.37399159675629406, 
+                    0.3516908026506808, 
+                    0.3516908026506808, 
+                    0.3313647263829546, 
+                    0.3313647263829546, 
+                    0.31305905410186435, 
+                    0.31305905410186435, 
+                    0.29688174970581765, 
+                    0.29688174970581765, 
+                    0.28202967650289346, 
+                    0.28202967650289346, 
+                    0.26655082837513744, 
+                    0.26655082837513744, 
+                    0.2470223416839895, 
+                    0.2470223416839895, 
+                    0.22354251804677247, 
+                    0.22354251804677247, 
+                    0.1965440934088161, 
+                    0.1965440934088161, 
+                    0.16580426927876318, 
+                    0.16580426927876318, 
+                    0.12947764871719827, 
+                    0.12947764871719827
+                ], 
+                0.32620441913604736
+            ], 
+            [
+                0.948055624961853, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999502847008814, 
+                    0.999502847008814, 
+                    0.99684112898903, 
+                    0.99684112898903, 
+                    0.979425855593968, 
+                    0.979425855593968, 
+                    0.9531031310305672, 
+                    0.9531031310305672, 
+                    0.9177925300745777, 
+                    0.9177925300745777, 
+                    0.8759144916728382, 
+                    0.8759144916728382, 
+                    0.8310339485363281, 
+                    0.8310339485363281, 
+                    0.7860898530244923, 
+                    0.7860898530244923, 
+                    0.7431521722648667, 
+                    0.7431521722648667, 
+                    0.6995801902306464, 
+                    0.6995801902306464, 
+                    0.6551142101579888, 
+                    0.6551142101579888, 
+                    0.6118807613725779, 
+                    0.6118807613725779, 
+                    0.5701457631664034, 
+                    0.5701457631664034, 
+                    0.5283115406721798, 
+                    0.5283115406721798, 
+                    0.4903710771195896, 
+                    0.4903710771195896, 
+                    0.4552390221663173, 
+                    0.4552390221663173, 
+                    0.4240053306859926, 
+                    0.4240053306859926, 
+                    0.39615926878086527, 
+                    0.39615926878086527, 
+                    0.3706877301870705, 
+                    0.3706877301870705, 
+                    0.34852551927745073, 
+                    0.34852551927745073, 
+                    0.3283430104993411, 
+                    0.3283430104993411, 
+                    0.3101711341841981, 
+                    0.3101711341841981, 
+                    0.29404829994834075, 
+                    0.29404829994834075, 
+                    0.27947665255945964, 
+                    0.27947665255945964, 
+                    0.26391086245957684, 
+                    0.26391086245957684, 
+                    0.24413767860999047, 
+                    0.24413767860999047, 
+                    0.22053236235243856, 
+                    0.22053236235243856, 
+                    0.19353126990759698, 
+                    0.19353126990759698, 
+                    0.16289965568913004, 
+                    0.16289965568913004, 
+                    0.12682026847711259, 
+                    0.12682026847711259
+                ], 
+                0.3094085454940796
+            ], 
+            [
+                0.95652174949646, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994817096310341, 
+                    0.9994817096310341, 
+                    0.9965911534416271, 
+                    0.9965911534416271, 
+                    0.9774829304718522, 
+                    0.9774829304718522, 
+                    0.9515228498350312, 
+                    0.9515228498350312, 
+                    0.9153001095330086, 
+                    0.9153001095330086, 
+                    0.8728542876456931, 
+                    0.8728542876456931, 
+                    0.8275219681790508, 
+                    0.8275219681790508, 
+                    0.7822720852507062, 
+                    0.7822720852507062, 
+                    0.739149921736833, 
+                    0.739149921736833, 
+                    0.6954553627786818, 
+                    0.6954553627786818, 
+                    0.6508988013269843, 
+                    0.6508988013269843, 
+                    0.6078062767657659, 
+                    0.6078062767657659, 
+                    0.5657653465348401, 
+                    0.5657653465348401, 
+                    0.5248681773986048, 
+                    0.5248681773986048, 
+                    0.48570391796075546, 
+                    0.48570391796075546, 
+                    0.45206925820737964, 
+                    0.45206925820737964, 
+                    0.42018736818727825, 
+                    0.42018736818727825, 
+                    0.3927805125364094, 
+                    0.3927805125364094, 
+                    0.36740256317427245, 
+                    0.36740256317427245, 
+                    0.3454254740130395, 
+                    0.3454254740130395, 
+                    0.32558505997415194, 
+                    0.32558505997415194, 
+                    0.3072067476065906, 
+                    0.3072067476065906, 
+                    0.2901947678522621, 
+                    0.2901947678522621, 
+                    0.27713067239619127, 
+                    0.27713067239619127, 
+                    0.2623991699335154, 
+                    0.2623991699335154, 
+                    0.2429965381814556, 
+                    0.2429965381814556, 
+                    0.21965906089546725, 
+                    0.21965906089546725, 
+                    0.19284443222748754, 
+                    0.19284443222748754, 
+                    0.16228640562232494, 
+                    0.16228640562232494, 
+                    0.12609232105204682, 
+                    0.12609232105204682
+                ], 
+                0.2932732105255127
+            ], 
+            [
+                0.9650634527206421, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990344008421446, 
+                    0.9990344008421446, 
+                    0.9937255573935788, 
+                    0.9937255573935788, 
+                    0.976523860668143, 
+                    0.976523860668143, 
+                    0.9494937709637822, 
+                    0.9494937709637822, 
+                    0.9128341780839149, 
+                    0.9128341780839149, 
+                    0.8697564918996963, 
+                    0.8697564918996963, 
+                    0.8239523503794469, 
+                    0.8239523503794469, 
+                    0.7784290851218872, 
+                    0.7784290851218872, 
+                    0.7351212506952419, 
+                    0.7351212506952419, 
+                    0.6913122626083965, 
+                    0.6913122626083965, 
+                    0.6467158757575412, 
+                    0.6467158757575412, 
+                    0.6035819361732122, 
+                    0.6035819361732122, 
+                    0.5617760921129342, 
+                    0.5617760921129342, 
+                    0.5205477829708636, 
+                    0.5205477829708636, 
+                    0.4821829507055548, 
+                    0.4821829507055548, 
+                    0.44806790070902613, 
+                    0.44806790070902613, 
+                    0.4167627075085465, 
+                    0.4167627075085465, 
+                    0.3893774597657851, 
+                    0.3893774597657851, 
+                    0.3641725829288837, 
+                    0.3641725829288837, 
+                    0.34229590186740866, 
+                    0.34229590186740866, 
+                    0.32238890323425534, 
+                    0.32238890323425534, 
+                    0.3045609535763851, 
+                    0.3045609535763851, 
+                    0.2887701955142703, 
+                    0.2887701955142703, 
+                    0.27433886224624465, 
+                    0.27433886224624465, 
+                    0.26183996051695907, 
+                    0.26183996051695907, 
+                    0.2449728878020543, 
+                    0.2449728878020543, 
+                    0.22349857528002445, 
+                    0.22349857528002445, 
+                    0.19798412733450108, 
+                    0.19798412733450108, 
+                    0.16826792594219578, 
+                    0.16826792594219578, 
+                    0.13241356777162056, 
+                    0.13241356777162056
+                ], 
+                0.27838853001594543
+            ], 
+            [
+                0.9736814498901367, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988112293063602, 
+                    0.9988112293063602, 
+                    0.9935816157644559, 
+                    0.9935816157644559, 
+                    0.9746354473594924, 
+                    0.9746354473594924, 
+                    0.9473991598813699, 
+                    0.9473991598813699, 
+                    0.9102381601104262, 
+                    0.9102381601104262, 
+                    0.8665849760707169, 
+                    0.8665849760707169, 
+                    0.8203661850395016, 
+                    0.8203661850395016, 
+                    0.774556458608354, 
+                    0.774556458608354, 
+                    0.7310772079858148, 
+                    0.7310772079858148, 
+                    0.6871553886021178, 
+                    0.6871553886021178, 
+                    0.6425107897329186, 
+                    0.6425107897329186, 
+                    0.5994188074607841, 
+                    0.5994188074607841, 
+                    0.5576583084582365, 
+                    0.5576583084582365, 
+                    0.5166266902736241, 
+                    0.5166266902736241, 
+                    0.4782734103401251, 
+                    0.4782734103401251, 
+                    0.44442801632767787, 
+                    0.44442801632767787, 
+                    0.4132096331494175, 
+                    0.4132096331494175, 
+                    0.38599792248737874, 
+                    0.38599792248737874, 
+                    0.36094745325555116, 
+                    0.36094745325555116, 
+                    0.33922402247724337, 
+                    0.33922402247724337, 
+                    0.31946339234795984, 
+                    0.31946339234795984, 
+                    0.3016517104106307, 
+                    0.3016517104106307, 
+                    0.2853908076143606, 
+                    0.2853908076143606, 
+                    0.2716851035308951, 
+                    0.2716851035308951, 
+                    0.25806509811185924, 
+                    0.25806509811185924, 
+                    0.23993060620111656, 
+                    0.23993060620111656, 
+                    0.21765186524138636, 
+                    0.21765186524138636, 
+                    0.19176094128738347, 
+                    0.19176094128738347, 
+                    0.16208147493588113, 
+                    0.16208147493588113, 
+                    0.1268187070055653, 
+                    0.1268187070055653
+                ], 
+                0.2625022232532501
+            ], 
+            [
+                0.9823764562606812, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987621850374616, 
+                    0.9987621850374616, 
+                    0.9928594400633275, 
+                    0.9928594400633275, 
+                    0.9725271746760616, 
+                    0.9725271746760616, 
+                    0.9453997625671114, 
+                    0.9453997625671114, 
+                    0.9076497195754045, 
+                    0.9076497195754045, 
+                    0.8633974835762658, 
+                    0.8633974835762658, 
+                    0.8167568148240706, 
+                    0.8167568148240706, 
+                    0.7706461013960048, 
+                    0.7706461013960048, 
+                    0.7270133040431971, 
+                    0.7270133040431971, 
+                    0.6830032521738472, 
+                    0.6830032521738472, 
+                    0.6383322483199573, 
+                    0.6383322483199573, 
+                    0.5952492118457104, 
+                    0.5952492118457104, 
+                    0.5536079611579904, 
+                    0.5536079611579904, 
+                    0.5125977365733043, 
+                    0.5125977365733043, 
+                    0.47455327639406125, 
+                    0.47455327639406125, 
+                    0.44070707664633596, 
+                    0.44070707664633596, 
+                    0.4097281583733977, 
+                    0.4097281583733977, 
+                    0.38264877902640876, 
+                    0.38264877902640876, 
+                    0.35775983965510183, 
+                    0.35775983965510183, 
+                    0.3361855262045885, 
+                    0.3361855262045885, 
+                    0.3165696046959635, 
+                    0.3165696046959635, 
+                    0.2988653989702045, 
+                    0.2988653989702045, 
+                    0.28238174116616177, 
+                    0.28238174116616177, 
+                    0.2690092905762551, 
+                    0.2690092905762551, 
+                    0.255677806357338, 
+                    0.255677806357338, 
+                    0.23768923125536093, 
+                    0.23768923125536093, 
+                    0.21556332311462917, 
+                    0.21556332311462917, 
+                    0.1898562824647445, 
+                    0.1898562824647445, 
+                    0.16040274027774332, 
+                    0.16040274027774332, 
+                    0.1254395492147038, 
+                    0.1254395492147038
+                ], 
+                0.24761827290058136
+            ], 
+            [
+                0.9911490678787231, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986555095976347, 
+                    0.9986555095976347, 
+                    0.993425813085823, 
+                    0.993425813085823, 
+                    0.9744436474620738, 
+                    0.9744436474620738, 
+                    0.9435582486105212, 
+                    0.9435582486105212, 
+                    0.904979889235769, 
+                    0.904979889235769, 
+                    0.8601533775025496, 
+                    0.8601533775025496, 
+                    0.8130929140763061, 
+                    0.8130929140763061, 
+                    0.766738734465803, 
+                    0.766738734465803, 
+                    0.7229592057427102, 
+                    0.7229592057427102, 
+                    0.6788484488688579, 
+                    0.6788484488688579, 
+                    0.6341429342406656, 
+                    0.6341429342406656, 
+                    0.5911338500329256, 
+                    0.5911338500329256, 
+                    0.5495282821604855, 
+                    0.5495282821604855, 
+                    0.5088054550139886, 
+                    0.5088054550139886, 
+                    0.4707155005239467, 
+                    0.4707155005239467, 
+                    0.43717791506427267, 
+                    0.43717791506427267, 
+                    0.4062193297383715, 
+                    0.4062193297383715, 
+                    0.37932790923983045, 
+                    0.37932790923983045, 
+                    0.35459875606032787, 
+                    0.35459875606032787, 
+                    0.33318214354139947, 
+                    0.33318214354139947, 
+                    0.313711134484539, 
+                    0.313711134484539, 
+                    0.2960798922394459, 
+                    0.2960798922394459, 
+                    0.27965810124601076, 
+                    0.27965810124601076, 
+                    0.26674820415865863, 
+                    0.26674820415865863, 
+                    0.2522509349698786, 
+                    0.2522509349698786, 
+                    0.23314923105945076, 
+                    0.23314923105945076, 
+                    0.21032652184934048, 
+                    0.21032652184934048, 
+                    0.18430475069146895, 
+                    0.18430475069146895, 
+                    0.154921815307241, 
+                    0.154921815307241, 
+                    0.120567532000822, 
+                    0.120567532000822
+                ], 
+                0.23294994235038757
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986008043972957, 
+                    0.9986008043972957, 
+                    0.9933130377826512, 
+                    0.9933130377826512, 
+                    0.975701382329632, 
+                    0.975701382329632, 
+                    0.9422653849567795, 
+                    0.9422653849567795, 
+                    0.9024064545227067, 
+                    0.9024064545227067, 
+                    0.8569138505865539, 
+                    0.8569138505865539, 
+                    0.8094447665412673, 
+                    0.8094447665412673, 
+                    0.7628344395149202, 
+                    0.7628344395149202, 
+                    0.7189079670688241, 
+                    0.7189079670688241, 
+                    0.6747055068695681, 
+                    0.6747055068695681, 
+                    0.6299903064690637, 
+                    0.6299903064690637, 
+                    0.586998865824844, 
+                    0.586998865824844, 
+                    0.5455716102435728, 
+                    0.5455716102435728, 
+                    0.5048058634568969, 
+                    0.5048058634568969, 
+                    0.4670916320566817, 
+                    0.4670916320566817, 
+                    0.43351041064566437, 
+                    0.43351041064566437, 
+                    0.40283441612065657, 
+                    0.40283441612065657, 
+                    0.37605380858800097, 
+                    0.37605380858800097, 
+                    0.3514877048196774, 
+                    0.3514877048196774, 
+                    0.33021253140794865, 
+                    0.33021253140794865, 
+                    0.3108790039815955, 
+                    0.3108790039815955, 
+                    0.2935167911615635, 
+                    0.2935167911615635, 
+                    0.27839690557880215, 
+                    0.27839690557880215, 
+                    0.26489859093507057, 
+                    0.26489859093507057, 
+                    0.24947485725806678, 
+                    0.24947485725806678, 
+                    0.22975151440268207, 
+                    0.22975151440268207, 
+                    0.20657961837338407, 
+                    0.20657961837338407, 
+                    0.1804674853971094, 
+                    0.1804674853971094, 
+                    0.1512858526060824, 
+                    0.1512858526060824, 
+                    0.11758040556537176, 
+                    0.11758040556537176
+                ], 
+                0.21921977400779724
+            ], 
+            [
+                1.008929967880249, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984436277975831, 
+                    0.9984436277975831, 
+                    0.9906270842116583, 
+                    0.9906270842116583, 
+                    0.9701113284944678, 
+                    0.9701113284944678, 
+                    0.9400358667144759, 
+                    0.9400358667144759, 
+                    0.8996551778154547, 
+                    0.8996551778154547, 
+                    0.8536061736975267, 
+                    0.8536061736975267, 
+                    0.805736568037434, 
+                    0.805736568037434, 
+                    0.7588789003637418, 
+                    0.7588789003637418, 
+                    0.7148099714656267, 
+                    0.7148099714656267, 
+                    0.6705383607049792, 
+                    0.6705383607049792, 
+                    0.6257607170291297, 
+                    0.6257607170291297, 
+                    0.5829501288229353, 
+                    0.5829501288229353, 
+                    0.5413323635851831, 
+                    0.5413323635851831, 
+                    0.5012335671083921, 
+                    0.5012335671083921, 
+                    0.4629453647732661, 
+                    0.4629453647732661, 
+                    0.43017086238522884, 
+                    0.43017086238522884, 
+                    0.39930603018067956, 
+                    0.39930603018067956, 
+                    0.37280443584301143, 
+                    0.37280443584301143, 
+                    0.3483745507083542, 
+                    0.3483745507083542, 
+                    0.32725093277927086, 
+                    0.32725093277927086, 
+                    0.3080628674468526, 
+                    0.3080628674468526, 
+                    0.29080540806455357, 
+                    0.29080540806455357, 
+                    0.27516247036300256, 
+                    0.27516247036300256, 
+                    0.26167325311316464, 
+                    0.26167325311316464, 
+                    0.24850529947008418, 
+                    0.24850529947008418, 
+                    0.2307944337179398, 
+                    0.2307944337179398, 
+                    0.20904836814696706, 
+                    0.20904836814696706, 
+                    0.18388015259113785, 
+                    0.18388015259113785, 
+                    0.15519084335800612, 
+                    0.15519084335800612, 
+                    0.12139531057198534, 
+                    0.12139531057198534
+                ], 
+                0.2063414603471756
+            ], 
+            [
+                1.0179396867752075, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983311222165504, 
+                    0.9983311222165504, 
+                    0.9900272824712947, 
+                    0.9900272824712947, 
+                    0.9682904966686007, 
+                    0.9682904966686007, 
+                    0.9379072429286054, 
+                    0.9379072429286054, 
+                    0.8968715506207455, 
+                    0.8968715506207455, 
+                    0.8502707515949476, 
+                    0.8502707515949476, 
+                    0.8020116903042512, 
+                    0.8020116903042512, 
+                    0.7549158360834364, 
+                    0.7549158360834364, 
+                    0.7107247678764451, 
+                    0.7107247678764451, 
+                    0.666345327888692, 
+                    0.666345327888692, 
+                    0.621667181699158, 
+                    0.621667181699158, 
+                    0.578633329870771, 
+                    0.578633329870771, 
+                    0.5377215357219423, 
+                    0.5377215357219423, 
+                    0.49667319771359575, 
+                    0.49667319771359575, 
+                    0.4600296249045995, 
+                    0.4600296249045995, 
+                    0.42611335306377585, 
+                    0.42611335306377585, 
+                    0.3961069082488245, 
+                    0.3961069082488245, 
+                    0.3695377878681688, 
+                    0.3695377878681688, 
+                    0.34531387130120045, 
+                    0.34531387130120045, 
+                    0.3243365429676337, 
+                    0.3243365429676337, 
+                    0.3052954508166371, 
+                    0.3052954508166371, 
+                    0.2881388939029997, 
+                    0.2881388939029997, 
+                    0.27211809285594646, 
+                    0.27211809285594646, 
+                    0.25927951422058654, 
+                    0.25927951422058654, 
+                    0.24626033616436585, 
+                    0.24626033616436585, 
+                    0.22842324321852175, 
+                    0.22842324321852175, 
+                    0.20663120094292672, 
+                    0.20663120094292672, 
+                    0.18151617104776757, 
+                    0.18151617104776757, 
+                    0.15298656325225166, 
+                    0.15298656325225166, 
+                    0.11950873600120639, 
+                    0.11950873600120639
+                ], 
+                0.193502739071846
+            ], 
+            [
+                1.0270298719406128, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9981927451098791, 
+                    0.9981927451098791, 
+                    0.9894842628293234, 
+                    0.9894842628293234, 
+                    0.9703725584980317, 
+                    0.9703725584980317, 
+                    0.9360681450820716, 
+                    0.9360681450820716, 
+                    0.8940969763959247, 
+                    0.8940969763959247, 
+                    0.8469145615115582, 
+                    0.8469145615115582, 
+                    0.7982975481500819, 
+                    0.7982975481500819, 
+                    0.7509135205808711, 
+                    0.7509135205808711, 
+                    0.7066285796598338, 
+                    0.7066285796598338, 
+                    0.6622560111208889, 
+                    0.6622560111208889, 
+                    0.6173910383263695, 
+                    0.6173910383263695, 
+                    0.5748271593895362, 
+                    0.5748271593895362, 
+                    0.5329775054390057, 
+                    0.5329775054390057, 
+                    0.4934194151296889, 
+                    0.4934194151296889, 
+                    0.45497266037320766, 
+                    0.45497266037320766, 
+                    0.42317471646897903, 
+                    0.42317471646897903, 
+                    0.392624635989924, 
+                    0.392624635989924, 
+                    0.36649913011446195, 
+                    0.36649913011446195, 
+                    0.3423159476293043, 
+                    0.3423159476293043, 
+                    0.3214564642824474, 
+                    0.3214564642824474, 
+                    0.3025270204985389, 
+                    0.3025270204985389, 
+                    0.2855616467296721, 
+                    0.2855616467296721, 
+                    0.2709073348503319, 
+                    0.2709073348503319, 
+                    0.25701515509392725, 
+                    0.25701515509392725, 
+                    0.24431786088234186, 
+                    0.24431786088234186, 
+                    0.22728211620486502, 
+                    0.22728211620486502, 
+                    0.20612365189238835, 
+                    0.20612365189238835, 
+                    0.18150289019714355, 
+                    0.18150289019714355, 
+                    0.1533619681910118, 
+                    0.1533619681910118, 
+                    0.12017418927293415, 
+                    0.12017418927293415
+                ], 
+                0.18144181370735168
+            ], 
+            [
+                1.0362012386322021, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999983952778198, 
+                    0.999983952778198, 
+                    0.9980523065193251, 
+                    0.9980523065193251, 
+                    0.9889777039983463, 
+                    0.9889777039983463, 
+                    0.9683741227334552, 
+                    0.9683741227334552, 
+                    0.9337395257093766, 
+                    0.9337395257093766, 
+                    0.8912658364252695, 
+                    0.8912658364252695, 
+                    0.843327639565954, 
+                    0.843327639565954, 
+                    0.7945936138188732, 
+                    0.7945936138188732, 
+                    0.7469905348991961, 
+                    0.7469905348991961, 
+                    0.7025406558618283, 
+                    0.7025406558618283, 
+                    0.6580075455191123, 
+                    0.6580075455191123, 
+                    0.613345050756775, 
+                    0.613345050756775, 
+                    0.5704627689205348, 
+                    0.5704627689205348, 
+                    0.5301253679879201, 
+                    0.5301253679879201, 
+                    0.49024061114507694, 
+                    0.49024061114507694, 
+                    0.4532021716391506, 
+                    0.4532021716391506, 
+                    0.41965383132427625, 
+                    0.41965383132427625, 
+                    0.38907962222400455, 
+                    0.38907962222400455, 
+                    0.3628401937835991, 
+                    0.3628401937835991, 
+                    0.33914800371783743, 
+                    0.33914800371783743, 
+                    0.3185493037834794, 
+                    0.3185493037834794, 
+                    0.2998211913432458, 
+                    0.2998211913432458, 
+                    0.28299085295568216, 
+                    0.28299085295568216, 
+                    0.2680927550074661, 
+                    0.2680927550074661, 
+                    0.25458298433016835, 
+                    0.25458298433016835, 
+                    0.24235566087527738, 
+                    0.24235566087527738, 
+                    0.22612389050318926, 
+                    0.22612389050318926, 
+                    0.2055888536887191, 
+                    0.2055888536887191, 
+                    0.18144682250235242, 
+                    0.18144682250235242, 
+                    0.15367291122241875, 
+                    0.15367291122241875, 
+                    0.12074085206353849, 
+                    0.12074085206353849
+                ], 
+                0.17039133608341217
+            ], 
+            [
+                1.045454502105713, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999820774453111, 
+                    0.9999820774453111, 
+                    0.9979752704881714, 
+                    0.9979752704881714, 
+                    0.9887727590673248, 
+                    0.9887727590673248, 
+                    0.9656183280663365, 
+                    0.9656183280663365, 
+                    0.9315870211225005, 
+                    0.9315870211225005, 
+                    0.8883291964419997, 
+                    0.8883291964419997, 
+                    0.8400667954300949, 
+                    0.8400667954300949, 
+                    0.7907011457575928, 
+                    0.7907011457575928, 
+                    0.7429428619718141, 
+                    0.7429428619718141, 
+                    0.6984153650946803, 
+                    0.6984153650946803, 
+                    0.6538336335784036, 
+                    0.6538336335784036, 
+                    0.609238732376395, 
+                    0.609238732376395, 
+                    0.5662716922150978, 
+                    0.5662716922150978, 
+                    0.5259525173364621, 
+                    0.5259525173364621, 
+                    0.48500990540050365, 
+                    0.48500990540050365, 
+                    0.4492393435219465, 
+                    0.4492393435219465, 
+                    0.41555713982255293, 
+                    0.41555713982255293, 
+                    0.38614427116357414, 
+                    0.38614427116357414, 
+                    0.3600369928749428, 
+                    0.3600369928749428, 
+                    0.3362988303635071, 
+                    0.3362988303635071, 
+                    0.31576854914087854, 
+                    0.31576854914087854, 
+                    0.29715371577747635, 
+                    0.29715371577747635, 
+                    0.2804484915194739, 
+                    0.2804484915194739, 
+                    0.26470062923389925, 
+                    0.26470062923389925, 
+                    0.2535200191664476, 
+                    0.2535200191664476, 
+                    0.24009567769231407, 
+                    0.24009567769231407, 
+                    0.2216411199684842, 
+                    0.2216411199684842, 
+                    0.19958507917745144, 
+                    0.19958507917745144, 
+                    0.17456511318507123, 
+                    0.17456511318507123, 
+                    0.14652612689703987, 
+                    0.14652612689703987, 
+                    0.11414527188334733, 
+                    0.11414527188334733
+                ], 
+                0.1584448516368866
+            ], 
+            [
+                1.0547904968261719, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999673728073064, 
+                    0.9999673728073064, 
+                    0.9976978104633362, 
+                    0.9976978104633362, 
+                    0.9867457577179013, 
+                    0.9867457577179013, 
+                    0.9680805447746083, 
+                    0.9680805447746083, 
+                    0.9295069848257714, 
+                    0.9295069848257714, 
+                    0.8853629856253978, 
+                    0.8853629856253978, 
+                    0.8365642646155278, 
+                    0.8365642646155278, 
+                    0.7868810987774814, 
+                    0.7868810987774814, 
+                    0.7389601458088623, 
+                    0.7389601458088623, 
+                    0.694220072365238, 
+                    0.694220072365238, 
+                    0.6497613174312215, 
+                    0.6497613174312215, 
+                    0.6048706777534342, 
+                    0.6048706777534342, 
+                    0.5625420280215581, 
+                    0.5625420280215581, 
+                    0.5213114020497298, 
+                    0.5213114020497298, 
+                    0.48189063541755, 
+                    0.48189063541755, 
+                    0.44423399880974596, 
+                    0.44423399880974596, 
+                    0.41255195180165327, 
+                    0.41255195180165327, 
+                    0.38275837835567755, 
+                    0.38275837835567755, 
+                    0.3570277147830549, 
+                    0.3570277147830549, 
+                    0.33334551478010405, 
+                    0.33334551478010405, 
+                    0.3129396665713215, 
+                    0.3129396665713215, 
+                    0.29447538764864184, 
+                    0.29447538764864184, 
+                    0.27822078062146505, 
+                    0.27822078062146505, 
+                    0.26341810774424884, 
+                    0.26341810774424884, 
+                    0.24864025946055918, 
+                    0.24864025946055918, 
+                    0.23824109569838955, 
+                    0.23824109569838955, 
+                    0.22272689147596886, 
+                    0.22272689147596886, 
+                    0.20274130464149848, 
+                    0.20274130464149848, 
+                    0.17909244356672513, 
+                    0.17909244356672513, 
+                    0.1517703707243836, 
+                    0.1517703707243836, 
+                    0.11924620819277185, 
+                    0.11924620819277185
+                ], 
+                0.1480749249458313
+            ], 
+            [
+                1.0642096996307373, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999629230476126, 
+                    0.9999629230476126, 
+                    0.9975502647905362, 
+                    0.9975502647905362, 
+                    0.9869143074294071, 
+                    0.9869143074294071, 
+                    0.9663014935594291, 
+                    0.9663014935594291, 
+                    0.9274852326134926, 
+                    0.9274852326134926, 
+                    0.88244469738739, 
+                    0.88244469738739, 
+                    0.8331079665320849, 
+                    0.8331079665320849, 
+                    0.7830326965881298, 
+                    0.7830326965881298, 
+                    0.734875931131628, 
+                    0.734875931131628, 
+                    0.6901297022423595, 
+                    0.6901297022423595, 
+                    0.6454938446915763, 
+                    0.6454938446915763, 
+                    0.6008322501465819, 
+                    0.6008322501465819, 
+                    0.5582532986409878, 
+                    0.5582532986409878, 
+                    0.5176176313652825, 
+                    0.5176176313652825, 
+                    0.477770507514598, 
+                    0.477770507514598, 
+                    0.4413435795294012, 
+                    0.4413435795294012, 
+                    0.4089303268536544, 
+                    0.4089303268536544, 
+                    0.37951758620973713, 
+                    0.37951758620973713, 
+                    0.35389054744352355, 
+                    0.35389054744352355, 
+                    0.3304146076656143, 
+                    0.3304146076656143, 
+                    0.3101562160791718, 
+                    0.3101562160791718, 
+                    0.29181583221986507, 
+                    0.29181583221986507, 
+                    0.27549461766329314, 
+                    0.27549461766329314, 
+                    0.26074296179236955, 
+                    0.26074296179236955, 
+                    0.24647500175156398, 
+                    0.24647500175156398, 
+                    0.23616955494649922, 
+                    0.23616955494649922, 
+                    0.22099796365951188, 
+                    0.22099796365951188, 
+                    0.20131017173652208, 
+                    0.20131017173652208, 
+                    0.17793607915271784, 
+                    0.17793607915271784, 
+                    0.15088445542535703, 
+                    0.15088445542535703, 
+                    0.11865028117133346, 
+                    0.11865028117133346
+                ], 
+                0.13797283172607422
+            ], 
+            [
+                1.0737130641937256, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999469975547206, 
+                    0.9999469975547206, 
+                    0.9973339262320859, 
+                    0.9973339262320859, 
+                    0.9864279510793282, 
+                    0.9864279510793282, 
+                    0.9662929288217394, 
+                    0.9662929288217394, 
+                    0.9253643803617418, 
+                    0.9253643803617418, 
+                    0.8794185357443297, 
+                    0.8794185357443297, 
+                    0.8295600705845578, 
+                    0.8295600705845578, 
+                    0.7791913704318367, 
+                    0.7791913704318367, 
+                    0.7308214575869169, 
+                    0.7308214575869169, 
+                    0.6859709960750747, 
+                    0.6859709960750747, 
+                    0.6413085171967244, 
+                    0.6413085171967244, 
+                    0.5966761365286909, 
+                    0.5966761365286909, 
+                    0.5542484491499405, 
+                    0.5542484491499405, 
+                    0.5135013105617093, 
+                    0.5135013105617093, 
+                    0.47407899101030077, 
+                    0.47407899101030077, 
+                    0.4373937231692329, 
+                    0.4373937231692329, 
+                    0.405611293677476, 
+                    0.405611293677476, 
+                    0.37628026650314333, 
+                    0.37628026650314333, 
+                    0.35088280561247437, 
+                    0.35088280561247437, 
+                    0.3275077754658833, 
+                    0.3275077754658833, 
+                    0.3074052141191643, 
+                    0.3074052141191643, 
+                    0.2892289219760765, 
+                    0.2892289219760765, 
+                    0.27323719933184015, 
+                    0.27323719933184015, 
+                    0.25808455373398115, 
+                    0.25808455373398115, 
+                    0.2440091430767636, 
+                    0.2440091430767636, 
+                    0.23415093867210832, 
+                    0.23415093867210832, 
+                    0.21910527649299644, 
+                    0.21910527649299644, 
+                    0.19954955152503562, 
+                    0.19954955152503562, 
+                    0.17634186280835837, 
+                    0.17634186280835837, 
+                    0.14950248473540093, 
+                    0.14950248473540093, 
+                    0.11755977534131305, 
+                    0.11755977534131305
+                ], 
+                0.12827283143997192
+            ], 
+            [
+                1.083301305770874, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999260008862935, 
+                    0.9999260008862935, 
+                    0.9973145099622319, 
+                    0.9973145099622319, 
+                    0.9862943302453953, 
+                    0.9862943302453953, 
+                    0.9610569380011017, 
+                    0.9610569380011017, 
+                    0.9227213995291637, 
+                    0.9227213995291637, 
+                    0.8763578488005287, 
+                    0.8763578488005287, 
+                    0.8259834932510468, 
+                    0.8259834932510468, 
+                    0.7752781139408448, 
+                    0.7752781139408448, 
+                    0.7267891625218202, 
+                    0.7267891625218202, 
+                    0.6818390140509866, 
+                    0.6818390140509866, 
+                    0.6371931965974853, 
+                    0.6371931965974853, 
+                    0.5924908924742857, 
+                    0.5924908924742857, 
+                    0.5502253594472675, 
+                    0.5502253594472675, 
+                    0.5095744072476664, 
+                    0.5095744072476664, 
+                    0.4704146436322407, 
+                    0.4704146436322407, 
+                    0.43394701680767034, 
+                    0.43394701680767034, 
+                    0.40224391593683184, 
+                    0.40224391593683184, 
+                    0.3730664003610219, 
+                    0.3730664003610219, 
+                    0.34783286327773566, 
+                    0.34783286327773566, 
+                    0.3246537338054105, 
+                    0.3246537338054105, 
+                    0.3046917718431869, 
+                    0.3046917718431869, 
+                    0.28659291715888524, 
+                    0.28659291715888524, 
+                    0.26995255747624747, 
+                    0.26995255747624747, 
+                    0.25603839091304265, 
+                    0.25603839091304265, 
+                    0.24306574313180243, 
+                    0.24306574313180243, 
+                    0.23260981653977203, 
+                    0.23260981653977203, 
+                    0.2169167775748607, 
+                    0.2169167775748607, 
+                    0.1969544644432208, 
+                    0.1969544644432208, 
+                    0.1735683839950082, 
+                    0.1735683839950082, 
+                    0.14679322420629717, 
+                    0.14679322420629717, 
+                    0.11525009426882143, 
+                    0.11525009426882143
+                ], 
+                0.11909468472003937
+            ], 
+            [
+                1.0929752588272095, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999062424635795, 
+                    0.9999062424635795, 
+                    0.9971566766776631, 
+                    0.9971566766776631, 
+                    0.9853259884669253, 
+                    0.9853259884669253, 
+                    0.9599106883036197, 
+                    0.9599106883036197, 
+                    0.9200751327161718, 
+                    0.9200751327161718, 
+                    0.8731138903859783, 
+                    0.8731138903859783, 
+                    0.8224429167261115, 
+                    0.8224429167261115, 
+                    0.7713154200044856, 
+                    0.7713154200044856, 
+                    0.7227318664580343, 
+                    0.7227318664580343, 
+                    0.6778848256295856, 
+                    0.6778848256295856, 
+                    0.6328682463252545, 
+                    0.6328682463252545, 
+                    0.5884971662421253, 
+                    0.5884971662421253, 
+                    0.5461675114394696, 
+                    0.5461675114394696, 
+                    0.5063529872495678, 
+                    0.5063529872495678, 
+                    0.466005863058888, 
+                    0.466005863058888, 
+                    0.43112910464459137, 
+                    0.43112910464459137, 
+                    0.3989115152362363, 
+                    0.3989115152362363, 
+                    0.37020849520508875, 
+                    0.37020849520508875, 
+                    0.3449028381595187, 
+                    0.3449028381595187, 
+                    0.321953824260196, 
+                    0.321953824260196, 
+                    0.3020549919358605, 
+                    0.3020549919358605, 
+                    0.28413556827414777, 
+                    0.28413556827414777, 
+                    0.2679575647739744, 
+                    0.2679575647739744, 
+                    0.25398111734798007, 
+                    0.25398111734798007, 
+                    0.24477352195901125, 
+                    0.24477352195901125, 
+                    0.23205566138944594, 
+                    0.23205566138944594, 
+                    0.21390256695293253, 
+                    0.21390256695293253, 
+                    0.19229304270829062, 
+                    0.19229304270829062, 
+                    0.16793148780361528, 
+                    0.16793148780361528, 
+                    0.14083623447401214, 
+                    0.14083623447401214, 
+                    0.10985212582219397, 
+                    0.10985212582219397
+                ], 
+                0.11072740703821182
+            ]
+        ]
+    }, 
+    {
+        "block_size": 67, 
+        "preprocessing_block_sizes": [
+            52
+        ], 
+        "pruning_parameters": [
+            [
+                0.9161224365234375, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999997210969659, 
+                    0.9999997210969659, 
+                    0.9999997210969659, 
+                    0.9999997210969659, 
+                    0.9999997210969659, 
+                    0.9999997210969659, 
+                    0.9956535629786023, 
+                    0.9956535629786023, 
+                    0.9625325028667795, 
+                    0.9625325028667795, 
+                    0.9268259197321023, 
+                    0.9268259197321023, 
+                    0.891333545135535, 
+                    0.891333545135535, 
+                    0.8565830606264645, 
+                    0.8565830606264645, 
+                    0.822396732883121, 
+                    0.822396732883121, 
+                    0.7885745038045019, 
+                    0.7885745038045019, 
+                    0.7547212438780415, 
+                    0.7547212438780415, 
+                    0.7208252601462319, 
+                    0.7208252601462319, 
+                    0.6863257145427095, 
+                    0.6863257145427095, 
+                    0.6518029507112255, 
+                    0.6518029507112255, 
+                    0.617362610605635, 
+                    0.617362610605635, 
+                    0.5848607725288836, 
+                    0.5848607725288836, 
+                    0.552896380288887, 
+                    0.552896380288887, 
+                    0.5216556567898544, 
+                    0.5216556567898544, 
+                    0.49199208596606736, 
+                    0.49199208596606736, 
+                    0.4631734669352568, 
+                    0.4631734669352568, 
+                    0.43426113873617783, 
+                    0.43426113873617783, 
+                    0.4053929574145347, 
+                    0.4053929574145347, 
+                    0.37614179829827993, 
+                    0.37614179829827993, 
+                    0.34661699439040994, 
+                    0.34661699439040994, 
+                    0.3167689649390885, 
+                    0.3167689649390885, 
+                    0.2866903456805414, 
+                    0.2866903456805414, 
+                    0.25642479956745584, 
+                    0.25642479956745584, 
+                    0.22600520215649328, 
+                    0.22600520215649328, 
+                    0.19542935733156308, 
+                    0.19542935733156308, 
+                    0.16465709209601884, 
+                    0.16465709209601884, 
+                    0.1335864956143961, 
+                    0.1335864956143961, 
+                    0.10094301983796812, 
+                    0.10094301983796812
+                ], 
+                0.5007171034812927
+            ], 
+            [
+                0.9241834282875061, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999997985999116, 
+                    0.9999997985999116, 
+                    0.9999997985999116, 
+                    0.9999997985999116, 
+                    0.9999997985999116, 
+                    0.9999997985999116, 
+                    0.9959456992304854, 
+                    0.9959456992304854, 
+                    0.9628064950452528, 
+                    0.9628064950452528, 
+                    0.9270643109674548, 
+                    0.9270643109674548, 
+                    0.8915338791555876, 
+                    0.8915338791555876, 
+                    0.8567441522636595, 
+                    0.8567441522636595, 
+                    0.8225122405867492, 
+                    0.8225122405867492, 
+                    0.7886325564182759, 
+                    0.7886325564182759, 
+                    0.7546963860490765, 
+                    0.7546963860490765, 
+                    0.7207004089562565, 
+                    0.7207004089562565, 
+                    0.6860664906558582, 
+                    0.6860664906558582, 
+                    0.6514251905777072, 
+                    0.6514251905777072, 
+                    0.6168975911337148, 
+                    0.6168975911337148, 
+                    0.5844159225533294, 
+                    0.5844159225533294, 
+                    0.552506115075097, 
+                    0.552506115075097, 
+                    0.521355702060438, 
+                    0.521355702060438, 
+                    0.49179360902828384, 
+                    0.49179360902828384, 
+                    0.46304937536276153, 
+                    0.46304937536276153, 
+                    0.43418931053754267, 
+                    0.43418931053754267, 
+                    0.40534842771663915, 
+                    0.40534842771663915, 
+                    0.3761139770218776, 
+                    0.3761139770218776, 
+                    0.3465960272521954, 
+                    0.3465960272521954, 
+                    0.3167525150453067, 
+                    0.3167525150453067, 
+                    0.28667683939729055, 
+                    0.28667683939729055, 
+                    0.25641396033663993, 
+                    0.25641396033663993, 
+                    0.22599681346813874, 
+                    0.22599681346813874, 
+                    0.19542336956343848, 
+                    0.19542336956343848, 
+                    0.16465349504363785, 
+                    0.16465349504363785, 
+                    0.13358523441122483, 
+                    0.13358523441122483, 
+                    0.10096746559643871, 
+                    0.10096746559643871
+                ], 
+                0.5001094937324524
+            ], 
+            [
+                0.9323152899742126, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999997781280413, 
+                    0.9999997781280413, 
+                    0.9999997781280413, 
+                    0.9999997781280413, 
+                    0.9962068108697307, 
+                    0.9962068108697307, 
+                    0.9631701237236044, 
+                    0.9631701237236044, 
+                    0.9276089601860633, 
+                    0.9276089601860633, 
+                    0.892191218975877, 
+                    0.892191218975877, 
+                    0.8574289159204275, 
+                    0.8574289159204275, 
+                    0.8231607949281692, 
+                    0.8231607949281692, 
+                    0.7891958041993503, 
+                    0.7891958041993503, 
+                    0.7551274543553397, 
+                    0.7551274543553397, 
+                    0.7209666757041171, 
+                    0.7209666757041171, 
+                    0.686132179002569, 
+                    0.686132179002569, 
+                    0.6513092648512743, 
+                    0.6513092648512743, 
+                    0.616650759347127, 
+                    0.616650759347127, 
+                    0.5841415275395706, 
+                    0.5841415275395706, 
+                    0.552255568022366, 
+                    0.552255568022366, 
+                    0.5211782478916818, 
+                    0.5211782478916818, 
+                    0.4917039456726516, 
+                    0.4917039456726516, 
+                    0.46303318351438283, 
+                    0.46303318351438283, 
+                    0.43423606972661405, 
+                    0.43423606972661405, 
+                    0.4054364784254332, 
+                    0.4054364784254332, 
+                    0.37623221525131134, 
+                    0.37623221525131134, 
+                    0.346731421311699, 
+                    0.346731421311699, 
+                    0.31689835248420584, 
+                    0.31689835248420584, 
+                    0.28682733371601726, 
+                    0.28682733371601726, 
+                    0.25656492091582195, 
+                    0.25656492091582195, 
+                    0.22614427786736152, 
+                    0.22614427786736152, 
+                    0.1955631630896982, 
+                    0.1955631630896982, 
+                    0.16478021663799533, 
+                    0.16478021663799533, 
+                    0.13369022301980432, 
+                    0.13369022301980432, 
+                    0.10106829768415562, 
+                    0.10106829768415562
+                ], 
+                0.5008217096328735
+            ], 
+            [
+                0.9405187964439392, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999970872359807, 
+                    0.9999970872359807, 
+                    0.9999970872359807, 
+                    0.9999970872359807, 
+                    0.9999970872359807, 
+                    0.9999970872359807, 
+                    0.9999970872359807, 
+                    0.9999970872359807, 
+                    0.9824987831851457, 
+                    0.9824987831851457, 
+                    0.9443147875010728, 
+                    0.9443147875010728, 
+                    0.9063802812173007, 
+                    0.9063802812173007, 
+                    0.8694460957265379, 
+                    0.8694460957265379, 
+                    0.8332027359584864, 
+                    0.8332027359584864, 
+                    0.7973171631748547, 
+                    0.7973171631748547, 
+                    0.761081222975443, 
+                    0.761081222975443, 
+                    0.7246186563587514, 
+                    0.7246186563587514, 
+                    0.6868879866416939, 
+                    0.6868879866416939, 
+                    0.6492082421924406, 
+                    0.6492082421924406, 
+                    0.6117875606979075, 
+                    0.6117875606979075, 
+                    0.5782155938814713, 
+                    0.5782155938814713, 
+                    0.54563481778266, 
+                    0.54563481778266, 
+                    0.5143861351493817, 
+                    0.5143861351493817, 
+                    0.4859633742403767, 
+                    0.4859633742403767, 
+                    0.4588868347755041, 
+                    0.4588868347755041, 
+                    0.4314704504893709, 
+                    0.4314704504893709, 
+                    0.403992094546969, 
+                    0.403992094546969, 
+                    0.3757502333568851, 
+                    0.3757502333568851, 
+                    0.3469691200320202, 
+                    0.3469691200320202, 
+                    0.3176028849521549, 
+                    0.3176028849521549, 
+                    0.2878291994375516, 
+                    0.2878291994375516, 
+                    0.25773781269079915, 
+                    0.25773781269079915, 
+                    0.22739587408394402, 
+                    0.22739587408394402, 
+                    0.19681445957850024, 
+                    0.19681445957850024, 
+                    0.16594807602221814, 
+                    0.16594807602221814, 
+                    0.13466412572484657, 
+                    0.13466412572484657, 
+                    0.10125907509808998, 
+                    0.10125907509808998
+                ], 
+                0.5008176565170288
+            ], 
+            [
+                0.948794424533844, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999988866332091, 
+                    0.9999988866332091, 
+                    0.9999988866332091, 
+                    0.9999988866332091, 
+                    0.9999988866332091, 
+                    0.9999988866332091, 
+                    0.9999988866332091, 
+                    0.9999988866332091, 
+                    0.9826883513624237, 
+                    0.9826883513624237, 
+                    0.9444851829994259, 
+                    0.9444851829994259, 
+                    0.906534004155787, 
+                    0.906534004155787, 
+                    0.869581842508247, 
+                    0.869581842508247, 
+                    0.8333143481563329, 
+                    0.8333143481563329, 
+                    0.7973883701535378, 
+                    0.7973883701535378, 
+                    0.7610789598819268, 
+                    0.7610789598819268, 
+                    0.724503536256073, 
+                    0.724503536256073, 
+                    0.6866166641098392, 
+                    0.6866166641098392, 
+                    0.6488146771150733, 
+                    0.6488146771150733, 
+                    0.6113538082843888, 
+                    0.6113538082843888, 
+                    0.5778798990182854, 
+                    0.5778798990182854, 
+                    0.5454650834086181, 
+                    0.5454650834086181, 
+                    0.5144372975729662, 
+                    0.5144372975729662, 
+                    0.48613656837361335, 
+                    0.48613656837361335, 
+                    0.4590685119203778, 
+                    0.4590685119203778, 
+                    0.43164626789645677, 
+                    0.43164626789645677, 
+                    0.4041163786505858, 
+                    0.4041163786505858, 
+                    0.37583805014378835, 
+                    0.37583805014378835, 
+                    0.34702037891115683, 
+                    0.34702037891115683, 
+                    0.3176321492945076, 
+                    0.3176321492945076, 
+                    0.28784404181693823, 
+                    0.28784404181693823, 
+                    0.2577445977699098, 
+                    0.2577445977699098, 
+                    0.22739827508858748, 
+                    0.22739827508858748, 
+                    0.19681502364058012, 
+                    0.19681502364058012, 
+                    0.16594868692698936, 
+                    0.16594868692698936, 
+                    0.13466621179214786, 
+                    0.13466621179214786, 
+                    0.10131883393518641, 
+                    0.10131883393518641
+                ], 
+                0.5006387233734131
+            ], 
+            [
+                0.9571428298950195, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9999743395112463, 
+                    0.9565247271441298, 
+                    0.9565247271441298, 
+                    0.9126146553277591, 
+                    0.9126146553277591, 
+                    0.8699954793011483, 
+                    0.8699954793011483, 
+                    0.8279445601062431, 
+                    0.8279445601062431, 
+                    0.7848920126515464, 
+                    0.7848920126515464, 
+                    0.7411858715097932, 
+                    0.7411858715097932, 
+                    0.6945423074323464, 
+                    0.6945423074323464, 
+                    0.6481742569807961, 
+                    0.6481742569807961, 
+                    0.6026541119521854, 
+                    0.6026541119521854, 
+                    0.5660095017793869, 
+                    0.5660095017793869, 
+                    0.5316720236201041, 
+                    0.5316720236201041, 
+                    0.5003358702694479, 
+                    0.5003358702694479, 
+                    0.47482086048621175, 
+                    0.47482086048621175, 
+                    0.45179725496274603, 
+                    0.45179725496274603, 
+                    0.42789261189080896, 
+                    0.42789261189080896, 
+                    0.4036610489093672, 
+                    0.4036610489093672, 
+                    0.37778437343483134, 
+                    0.37778437343483134, 
+                    0.35072479372192206, 
+                    0.35072479372192206, 
+                    0.32244286184460774, 
+                    0.32244286184460774, 
+                    0.293308680927484, 
+                    0.293308680927484, 
+                    0.26351761942890417, 
+                    0.26351761942890417, 
+                    0.233211371890638, 
+                    0.233211371890638, 
+                    0.20241875314525065, 
+                    0.20241875314525065, 
+                    0.17105447681653743, 
+                    0.17105447681653743, 
+                    0.13885935556149434, 
+                    0.13885935556149434, 
+                    0.10261736075645486, 
+                    0.10261736075645486
+                ], 
+                0.4998224973678589
+            ], 
+            [
+                0.9655647873878479, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999543720267084, 
+                    0.9999543720267084, 
+                    0.9999543720267084, 
+                    0.9999543720267084, 
+                    0.9999543720267084, 
+                    0.9999543720267084, 
+                    0.9999543720267084, 
+                    0.9999543720267084, 
+                    0.968176456754967, 
+                    0.968176456754967, 
+                    0.9275630005966174, 
+                    0.9275630005966174, 
+                    0.8886010612846464, 
+                    0.8886010612846464, 
+                    0.8500703180013318, 
+                    0.8500703180013318, 
+                    0.8113134113767065, 
+                    0.8113134113767065, 
+                    0.7713436086363449, 
+                    0.7713436086363449, 
+                    0.730790514484897, 
+                    0.730790514484897, 
+                    0.6884381008436375, 
+                    0.6884381008436375, 
+                    0.6467795735955683, 
+                    0.6467795735955683, 
+                    0.6067909523093715, 
+                    0.6067909523093715, 
+                    0.5714310754072442, 
+                    0.5714310754072442, 
+                    0.5380088940102642, 
+                    0.5380088940102642, 
+                    0.5066715048244811, 
+                    0.5066715048244811, 
+                    0.4789106810637766, 
+                    0.4789106810637766, 
+                    0.45356804794452993, 
+                    0.45356804794452993, 
+                    0.4282328084875623, 
+                    0.4282328084875623, 
+                    0.4028612913953733, 
+                    0.4028612913953733, 
+                    0.37629858640877106, 
+                    0.37629858640877106, 
+                    0.3487917640019113, 
+                    0.3487917640019113, 
+                    0.3202792445687492, 
+                    0.3202792445687492, 
+                    0.29104642562495187, 
+                    0.29104642562495187, 
+                    0.26125226612836633, 
+                    0.26125226612836633, 
+                    0.23101489144348028, 
+                    0.23101489144348028, 
+                    0.20036318667725658, 
+                    0.20036318667725658, 
+                    0.16923399672402228, 
+                    0.16923399672402228, 
+                    0.13741642470033852, 
+                    0.13741642470033852, 
+                    0.10279265382206068, 
+                    0.10279265382206068
+                ], 
+                0.5006332397460938
+            ], 
+            [
+                0.9740607738494873, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998402276372579, 
+                    0.9998402276372579, 
+                    0.9998327359761311, 
+                    0.9998327359761311, 
+                    0.9998286718345987, 
+                    0.9998286718345987, 
+                    0.9998152310757299, 
+                    0.9998152310757299, 
+                    0.9673611401859737, 
+                    0.9673611401859737, 
+                    0.9276200485486962, 
+                    0.9276200485486962, 
+                    0.8897730773137339, 
+                    0.8897730773137339, 
+                    0.8516111803135077, 
+                    0.8516111803135077, 
+                    0.8123912969642539, 
+                    0.8123912969642539, 
+                    0.771414199128913, 
+                    0.771414199128913, 
+                    0.7299205739904405, 
+                    0.7299205739904405, 
+                    0.6873188957103268, 
+                    0.6873188957103268, 
+                    0.6462334801639678, 
+                    0.6462334801639678, 
+                    0.6083073102392101, 
+                    0.6083073102392101, 
+                    0.5720079642500394, 
+                    0.5720079642500394, 
+                    0.5379267388915219, 
+                    0.5379267388915219, 
+                    0.5056886092701067, 
+                    0.5056886092701067, 
+                    0.47622810686891653, 
+                    0.47622810686891653, 
+                    0.4504307231663922, 
+                    0.4504307231663922, 
+                    0.42575108324768995, 
+                    0.42575108324768995, 
+                    0.40147065031977847, 
+                    0.40147065031977847, 
+                    0.37594204769496853, 
+                    0.37594204769496853, 
+                    0.34929921168598377, 
+                    0.34929921168598377, 
+                    0.3214028649262748, 
+                    0.3214028649262748, 
+                    0.2925898112592565, 
+                    0.2925898112592565, 
+                    0.2630548138872248, 
+                    0.2630548138872248, 
+                    0.23294841624380597, 
+                    0.23294841624380597, 
+                    0.20231443243468103, 
+                    0.20231443243468103, 
+                    0.17108624820168664, 
+                    0.17108624820168664, 
+                    0.13901237014209625, 
+                    0.13901237014209625, 
+                    0.10412788636587686, 
+                    0.10412788636587686
+                ], 
+                0.5004735589027405
+            ], 
+            [
+                0.9826315641403198, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997095707490299, 
+                    0.9997095707490299, 
+                    0.9996427889834064, 
+                    0.9996427889834064, 
+                    0.9996252372024734, 
+                    0.9996252372024734, 
+                    0.999548813117508, 
+                    0.999548813117508, 
+                    0.9660783580681427, 
+                    0.9660783580681427, 
+                    0.9273549106378104, 
+                    0.9273549106378104, 
+                    0.8905031876997237, 
+                    0.8905031876997237, 
+                    0.8524327009413242, 
+                    0.8524327009413242, 
+                    0.8126247910239056, 
+                    0.8126247910239056, 
+                    0.7707291174518764, 
+                    0.7707291174518764, 
+                    0.7286855039647284, 
+                    0.7286855039647284, 
+                    0.686216167280062, 
+                    0.686216167280062, 
+                    0.6460223709238165, 
+                    0.6460223709238165, 
+                    0.6085936186014835, 
+                    0.6085936186014835, 
+                    0.5724452021676575, 
+                    0.5724452021676575, 
+                    0.5378228338433718, 
+                    0.5378228338433718, 
+                    0.5048726693404398, 
+                    0.5048726693404398, 
+                    0.47437181135064876, 
+                    0.47437181135064876, 
+                    0.44779530216715635, 
+                    0.44779530216715635, 
+                    0.4233782190153745, 
+                    0.4233782190153745, 
+                    0.4000441884793595, 
+                    0.4000441884793595, 
+                    0.37558752021845254, 
+                    0.37558752021845254, 
+                    0.3499000605233855, 
+                    0.3499000605233855, 
+                    0.3227080441075599, 
+                    0.3227080441075599, 
+                    0.2943861478168281, 
+                    0.2943861478168281, 
+                    0.26516204114476644, 
+                    0.26516204114476644, 
+                    0.2352197744831553, 
+                    0.2352197744831553, 
+                    0.20461849258584322, 
+                    0.20461849258584322, 
+                    0.17328703769223697, 
+                    0.17328703769223697, 
+                    0.1409296914025439, 
+                    0.1409296914025439, 
+                    0.10571269510491056, 
+                    0.10571269510491056
+                ], 
+                0.5002298951148987
+            ], 
+            [
+                0.9912777543067932, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999252320881754, 
+                    0.9999252320881754, 
+                    0.9991332672146854, 
+                    0.9991332672146854, 
+                    0.9989604133021216, 
+                    0.9989604133021216, 
+                    0.9981414515075275, 
+                    0.9981414515075275, 
+                    0.9627750374985093, 
+                    0.9627750374985093, 
+                    0.9278208665285264, 
+                    0.9278208665285264, 
+                    0.8925908559374198, 
+                    0.8925908559374198, 
+                    0.8540474285133407, 
+                    0.8540474285133407, 
+                    0.8130166497536159, 
+                    0.8130166497536159, 
+                    0.76993811310495, 
+                    0.76993811310495, 
+                    0.7273471384214746, 
+                    0.7273471384214746, 
+                    0.6839956087968063, 
+                    0.6839956087968063, 
+                    0.6420018095790799, 
+                    0.6420018095790799, 
+                    0.6043966959202901, 
+                    0.6043966959202901, 
+                    0.5668968802583264, 
+                    0.5668968802583264, 
+                    0.5332724213181375, 
+                    0.5332724213181375, 
+                    0.5012680642281853, 
+                    0.5012680642281853, 
+                    0.4722146991984764, 
+                    0.4722146991984764, 
+                    0.4459966635523168, 
+                    0.4459966635523168, 
+                    0.42112459147840575, 
+                    0.42112459147840575, 
+                    0.39881347095792186, 
+                    0.39881347095792186, 
+                    0.3768225753897248, 
+                    0.3768225753897248, 
+                    0.35391394259193315, 
+                    0.35391394259193315, 
+                    0.3289353737566924, 
+                    0.3289353737566924, 
+                    0.30218988189704193, 
+                    0.30218988189704193, 
+                    0.2739533386231407, 
+                    0.2739533386231407, 
+                    0.2445032202600989, 
+                    0.2445032202600989, 
+                    0.2139411532923783, 
+                    0.2139411532923783, 
+                    0.1821788819624628, 
+                    0.1821788819624628, 
+                    0.14878196065104746, 
+                    0.14878196065104746, 
+                    0.1119654907026229, 
+                    0.1119654907026229
+                ], 
+                0.5005282759666443
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99999996341085, 
+                    0.99999996341085, 
+                    0.99999996341085, 
+                    0.99999996341085, 
+                    0.9989211171779458, 
+                    0.9989211171779458, 
+                    0.9970245338163342, 
+                    0.9970245338163342, 
+                    0.9911235962430496, 
+                    0.9911235962430496, 
+                    0.9581394585408751, 
+                    0.9581394585408751, 
+                    0.9266117246992353, 
+                    0.9266117246992353, 
+                    0.8907712709312319, 
+                    0.8907712709312319, 
+                    0.8513162747134717, 
+                    0.8513162747134717, 
+                    0.809631766630645, 
+                    0.809631766630645, 
+                    0.7660551219281709, 
+                    0.7660551219281709, 
+                    0.723181084809461, 
+                    0.723181084809461, 
+                    0.6797458629659396, 
+                    0.6797458629659396, 
+                    0.6387669133856968, 
+                    0.6387669133856968, 
+                    0.598961440610301, 
+                    0.598961440610301, 
+                    0.5640311753302308, 
+                    0.5640311753302308, 
+                    0.5297564903978296, 
+                    0.5297564903978296, 
+                    0.49765097748143894, 
+                    0.49765097748143894, 
+                    0.46851843144238253, 
+                    0.46851843144238253, 
+                    0.4422311713771527, 
+                    0.4422311713771527, 
+                    0.417750840587832, 
+                    0.417750840587832, 
+                    0.39586394450458684, 
+                    0.39586394450458684, 
+                    0.37559556399228106, 
+                    0.37559556399228106, 
+                    0.35710337783648755, 
+                    0.35710337783648755, 
+                    0.33745254500505667, 
+                    0.33745254500505667, 
+                    0.3151125452633443, 
+                    0.3151125452633443, 
+                    0.28990271474243434, 
+                    0.28990271474243434, 
+                    0.2623121871134217, 
+                    0.2623121871134217, 
+                    0.23259975426204135, 
+                    0.23259975426204135, 
+                    0.20074196769785121, 
+                    0.20074196769785121, 
+                    0.1661777312466326, 
+                    0.1661777312466326, 
+                    0.12683345015387318, 
+                    0.12683345015387318
+                ], 
+                0.4987315237522125
+            ], 
+            [
+                1.0087989568710327, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999844886188726, 
+                    0.9999844886188726, 
+                    0.998618353107635, 
+                    0.998618353107635, 
+                    0.9926909654210093, 
+                    0.9926909654210093, 
+                    0.9792302393241618, 
+                    0.9792302393241618, 
+                    0.9561565084188859, 
+                    0.9561565084188859, 
+                    0.9244287454187597, 
+                    0.9244287454187597, 
+                    0.8880802856984462, 
+                    0.8880802856984462, 
+                    0.8481923551697936, 
+                    0.8481923551697936, 
+                    0.8061808603430921, 
+                    0.8061808603430921, 
+                    0.7623939519272044, 
+                    0.7623939519272044, 
+                    0.7194646854275968, 
+                    0.7194646854275968, 
+                    0.675864110476137, 
+                    0.675864110476137, 
+                    0.6352493552669198, 
+                    0.6352493552669198, 
+                    0.5950946497971921, 
+                    0.5950946497971921, 
+                    0.5606434316676174, 
+                    0.5606434316676174, 
+                    0.5262064450518038, 
+                    0.5262064450518038, 
+                    0.49433425447981194, 
+                    0.49433425447981194, 
+                    0.4652716804940515, 
+                    0.4652716804940515, 
+                    0.43905135265736667, 
+                    0.43905135265736667, 
+                    0.41462866100285206, 
+                    0.41462866100285206, 
+                    0.392754758170839, 
+                    0.392754758170839, 
+                    0.37248420622051454, 
+                    0.37248420622051454, 
+                    0.35445148748022437, 
+                    0.35445148748022437, 
+                    0.3380803204452614, 
+                    0.3380803204452614, 
+                    0.3231662967539015, 
+                    0.3231662967539015, 
+                    0.3052846346269556, 
+                    0.3052846346269556, 
+                    0.2828800820851909, 
+                    0.2828800820851909, 
+                    0.2564020629645345, 
+                    0.2564020629645345, 
+                    0.2262238766192395, 
+                    0.2262238766192395, 
+                    0.1918677482825645, 
+                    0.1918677482825645, 
+                    0.150924906143381, 
+                    0.150924906143381
+                ], 
+                0.4891308844089508
+            ], 
+            [
+                1.0176753997802734, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985064376291146, 
+                    0.9985064376291146, 
+                    0.9922681422406331, 
+                    0.9922681422406331, 
+                    0.9783073244258459, 
+                    0.9783073244258459, 
+                    0.9544825829434519, 
+                    0.9544825829434519, 
+                    0.9219732415479186, 
+                    0.9219732415479186, 
+                    0.8850114028382463, 
+                    0.8850114028382463, 
+                    0.8446362771790087, 
+                    0.8446362771790087, 
+                    0.802263332896963, 
+                    0.802263332896963, 
+                    0.7582228033128452, 
+                    0.7582228033128452, 
+                    0.7150941723489892, 
+                    0.7150941723489892, 
+                    0.671513119297676, 
+                    0.671513119297676, 
+                    0.6305868140034384, 
+                    0.6305868140034384, 
+                    0.590945085951363, 
+                    0.590945085951363, 
+                    0.5560884184885918, 
+                    0.5560884184885918, 
+                    0.5220054989365964, 
+                    0.5220054989365964, 
+                    0.4901469406275443, 
+                    0.4901469406275443, 
+                    0.46124645966289873, 
+                    0.46124645966289873, 
+                    0.43515732356299314, 
+                    0.43515732356299314, 
+                    0.4108757958703539, 
+                    0.4108757958703539, 
+                    0.3891421567300868, 
+                    0.3891421567300868, 
+                    0.36901180549937757, 
+                    0.36901180549937757, 
+                    0.35111553124159084, 
+                    0.35111553124159084, 
+                    0.33483750133137236, 
+                    0.33483750133137236, 
+                    0.31966038332467295, 
+                    0.31966038332467295, 
+                    0.30152245307911124, 
+                    0.30152245307911124, 
+                    0.2790657483390573, 
+                    0.2790657483390573, 
+                    0.25268523423839667, 
+                    0.25268523423839667, 
+                    0.22271790063902291, 
+                    0.22271790063902291, 
+                    0.1886871199840893, 
+                    0.1886871199840893, 
+                    0.14823510327428363, 
+                    0.14823510327428363
+                ], 
+                0.46817871928215027
+            ], 
+            [
+                1.02662992477417, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984043498792272, 
+                    0.9984043498792272, 
+                    0.9918176111010393, 
+                    0.9918176111010393, 
+                    0.9772713058143093, 
+                    0.9772713058143093, 
+                    0.9526793843639897, 
+                    0.9526793843639897, 
+                    0.9194553374848398, 
+                    0.9194553374848398, 
+                    0.881878277251257, 
+                    0.881878277251257, 
+                    0.8410631519697545, 
+                    0.8410631519697545, 
+                    0.7983498906775782, 
+                    0.7983498906775782, 
+                    0.7540283269073907, 
+                    0.7540283269073907, 
+                    0.7107995966790466, 
+                    0.7107995966790466, 
+                    0.6669474622883595, 
+                    0.6669474622883595, 
+                    0.6264240481891324, 
+                    0.6264240481891324, 
+                    0.5861991942081557, 
+                    0.5861991942081557, 
+                    0.5519582139713837, 
+                    0.5519582139713837, 
+                    0.5176835600611659, 
+                    0.5176835600611659, 
+                    0.4860523130408191, 
+                    0.4860523130408191, 
+                    0.4572555525264435, 
+                    0.4572555525264435, 
+                    0.43131398296080076, 
+                    0.43131398296080076, 
+                    0.40717368922510794, 
+                    0.40717368922510794, 
+                    0.3855774856941843, 
+                    0.3855774856941843, 
+                    0.36558433558133335, 
+                    0.36558433558133335, 
+                    0.3478176981078188, 
+                    0.3478176981078188, 
+                    0.3316604924868118, 
+                    0.3316604924868118, 
+                    0.31655297635380614, 
+                    0.31655297635380614, 
+                    0.2984966143479371, 
+                    0.2984966143479371, 
+                    0.27618177515942277, 
+                    0.27618177515942277, 
+                    0.24999896452817083, 
+                    0.24999896452817083, 
+                    0.2202806519549474, 
+                    0.2202806519549474, 
+                    0.1865599542864972, 
+                    0.1865599542864972, 
+                    0.14651771385249385, 
+                    0.14651771385249385
+                ], 
+                0.4475777745246887
+            ], 
+            [
+                1.035663366317749, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999900132042334, 
+                    0.9999900132042334, 
+                    0.9982805202220223, 
+                    0.9982805202220223, 
+                    0.9913521012845687, 
+                    0.9913521012845687, 
+                    0.9762168699901764, 
+                    0.9762168699901764, 
+                    0.9508704769932232, 
+                    0.9508704769932232, 
+                    0.9168786374306845, 
+                    0.9168786374306845, 
+                    0.8787477261065143, 
+                    0.8787477261065143, 
+                    0.83745028341657, 
+                    0.83745028341657, 
+                    0.7943876055920558, 
+                    0.7943876055920558, 
+                    0.7498547086039038, 
+                    0.7498547086039038, 
+                    0.7063358880186867, 
+                    0.7063358880186867, 
+                    0.6629064845825028, 
+                    0.6629064845825028, 
+                    0.621221497560152, 
+                    0.621221497560152, 
+                    0.5827371223471137, 
+                    0.5827371223471137, 
+                    0.5470517476984883, 
+                    0.5470517476984883, 
+                    0.5137099345194891, 
+                    0.5137099345194891, 
+                    0.4818812425591419, 
+                    0.4818812425591419, 
+                    0.45331500720872925, 
+                    0.45331500720872925, 
+                    0.42749794220517556, 
+                    0.42749794220517556, 
+                    0.40350510741109236, 
+                    0.40350510741109236, 
+                    0.3820499638413804, 
+                    0.3820499638413804, 
+                    0.3621958351515419, 
+                    0.3621958351515419, 
+                    0.3445621111527499, 
+                    0.3445621111527499, 
+                    0.3285223635600062, 
+                    0.3285223635600062, 
+                    0.31335417880563166, 
+                    0.31335417880563166, 
+                    0.29513799770887345, 
+                    0.29513799770887345, 
+                    0.2727692442097537, 
+                    0.2727692442097537, 
+                    0.2466509008623552, 
+                    0.2466509008623552, 
+                    0.21709629945608003, 
+                    0.21709629945608003, 
+                    0.1836410379340741, 
+                    0.1836410379340741, 
+                    0.14401078832067815, 
+                    0.14401078832067815
+                ], 
+                0.42714715003967285
+            ], 
+            [
+                1.0447760820388794, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999833933435355, 
+                    0.9999833933435355, 
+                    0.9981532829949565, 
+                    0.9981532829949565, 
+                    0.9908267619206068, 
+                    0.9908267619206068, 
+                    0.9750874487467218, 
+                    0.9750874487467218, 
+                    0.9489826426303037, 
+                    0.9489826426303037, 
+                    0.9142541248679851, 
+                    0.9142541248679851, 
+                    0.8755554101266981, 
+                    0.8755554101266981, 
+                    0.8338176270195768, 
+                    0.8338176270195768, 
+                    0.7904242579738451, 
+                    0.7904242579738451, 
+                    0.745620469708306, 
+                    0.745620469708306, 
+                    0.7020918529187932, 
+                    0.7020918529187932, 
+                    0.6581806126083505, 
+                    0.6581806126083505, 
+                    0.6173895201591861, 
+                    0.6173895201591861, 
+                    0.577688213118746, 
+                    0.577688213118746, 
+                    0.5431867399844191, 
+                    0.5431867399844191, 
+                    0.5093592968118749, 
+                    0.5093592968118749, 
+                    0.4778766201163104, 
+                    0.4778766201163104, 
+                    0.4493918437796396, 
+                    0.4493918437796396, 
+                    0.42372623470079773, 
+                    0.42372623470079773, 
+                    0.39987790665074086, 
+                    0.39987790665074086, 
+                    0.37856367520445355, 
+                    0.37856367520445355, 
+                    0.3588476659540853, 
+                    0.3588476659540853, 
+                    0.3413474424892766, 
+                    0.3413474424892766, 
+                    0.3254790270240529, 
+                    0.3254790270240529, 
+                    0.31035471969185857, 
+                    0.31035471969185857, 
+                    0.29190275935880095, 
+                    0.29190275935880095, 
+                    0.2693542007597454, 
+                    0.2693542007597454, 
+                    0.24318321579026755, 
+                    0.24318321579026755, 
+                    0.21368706794461342, 
+                    0.21368706794461342, 
+                    0.1803965995360584, 
+                    0.1803965995360584, 
+                    0.14106970720473772, 
+                    0.14106970720473772
+                ], 
+                0.4069487750530243
+            ], 
+            [
+                1.053969144821167, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999746382975827, 
+                    0.9999746382975827, 
+                    0.9979813659934779, 
+                    0.9979813659934779, 
+                    0.9903377577845689, 
+                    0.9903377577845689, 
+                    0.9739704550685346, 
+                    0.9739704550685346, 
+                    0.9470367024864564, 
+                    0.9470367024864564, 
+                    0.911590191794672, 
+                    0.911590191794672, 
+                    0.8723233524823528, 
+                    0.8723233524823528, 
+                    0.8301508153462482, 
+                    0.8301508153462482, 
+                    0.7864258193090219, 
+                    0.7864258193090219, 
+                    0.7413958680173249, 
+                    0.7413958680173249, 
+                    0.697745817236651, 
+                    0.697745817236651, 
+                    0.6537813061773485, 
+                    0.6537813061773485, 
+                    0.6129591433807198, 
+                    0.6129591433807198, 
+                    0.5733837799745544, 
+                    0.5733837799745544, 
+                    0.5388899084382759, 
+                    0.5388899084382759, 
+                    0.5052223096971893, 
+                    0.5052223096971893, 
+                    0.47384894918970777, 
+                    0.47384894918970777, 
+                    0.4455140468093232, 
+                    0.4455140468093232, 
+                    0.41999271379188907, 
+                    0.41999271379188907, 
+                    0.3962892936286294, 
+                    0.3962892936286294, 
+                    0.3751164825560193, 
+                    0.3751164825560193, 
+                    0.3555408248810936, 
+                    0.3555408248810936, 
+                    0.33817453632805494, 
+                    0.33817453632805494, 
+                    0.32237508652846136, 
+                    0.32237508652846136, 
+                    0.307123994815282, 
+                    0.307123994815282, 
+                    0.28862656196155084, 
+                    0.28862656196155084, 
+                    0.26615831022690317, 
+                    0.26615831022690317, 
+                    0.24015980822817806, 
+                    0.24015980822817806, 
+                    0.21091586511916005, 
+                    0.21091586511916005, 
+                    0.1779707477966602, 
+                    0.1779707477966602, 
+                    0.13914296341172208, 
+                    0.13914296341172208
+                ], 
+                0.38717055320739746
+            ], 
+            [
+                1.06324303150177, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999503692077034, 
+                    0.9999503692077034, 
+                    0.9978445242613214, 
+                    0.9978445242613214, 
+                    0.9898037680919005, 
+                    0.9898037680919005, 
+                    0.9727836752003228, 
+                    0.9727836752003228, 
+                    0.9450557231655919, 
+                    0.9450557231655919, 
+                    0.9088758595078004, 
+                    0.9088758595078004, 
+                    0.8690617424756498, 
+                    0.8690617424756498, 
+                    0.8264608225185964, 
+                    0.8264608225185964, 
+                    0.7824058500221438, 
+                    0.7824058500221438, 
+                    0.7372316736393506, 
+                    0.7372316736393506, 
+                    0.6931765721948003, 
+                    0.6931765721948003, 
+                    0.649974681262312, 
+                    0.649974681262312, 
+                    0.6075470775469175, 
+                    0.6075470775469175, 
+                    0.5701685650137079, 
+                    0.5701685650137079, 
+                    0.534012015401225, 
+                    0.534012015401225, 
+                    0.5013471267367523, 
+                    0.5013471267367523, 
+                    0.46979262311559344, 
+                    0.46979262311559344, 
+                    0.44168483162529537, 
+                    0.44168483162529537, 
+                    0.41629458122941004, 
+                    0.41629458122941004, 
+                    0.3927408564140453, 
+                    0.3927408564140453, 
+                    0.3717095204607441, 
+                    0.3717095204607441, 
+                    0.35227275089860133, 
+                    0.35227275089860133, 
+                    0.33503617321628604, 
+                    0.33503617321628604, 
+                    0.31936633020461835, 
+                    0.31936633020461835, 
+                    0.30419900992772897, 
+                    0.30419900992772897, 
+                    0.2857353397361624, 
+                    0.2857353397361624, 
+                    0.2633377080479769, 
+                    0.2633377080479769, 
+                    0.2374648126439841, 
+                    0.2374648126439841, 
+                    0.20839843598391694, 
+                    0.20839843598391694, 
+                    0.17568733122809255, 
+                    0.17568733122809255, 
+                    0.13718134967502332, 
+                    0.13718134967502332
+                ], 
+                0.3678504228591919
+            ], 
+            [
+                1.0725984573364258, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999880736470783, 
+                    0.9999880736470783, 
+                    0.9984359350771765, 
+                    0.9984359350771765, 
+                    0.9907603814118885, 
+                    0.9907603814118885, 
+                    0.9741787176032917, 
+                    0.9741787176032917, 
+                    0.9436174162370222, 
+                    0.9436174162370222, 
+                    0.9060996586192414, 
+                    0.9060996586192414, 
+                    0.8657452971960676, 
+                    0.8657452971960676, 
+                    0.8227365066648858, 
+                    0.8227365066648858, 
+                    0.7784626989708471, 
+                    0.7784626989708471, 
+                    0.7330099850208802, 
+                    0.7330099850208802, 
+                    0.6890208233487962, 
+                    0.6890208233487962, 
+                    0.6451270876643455, 
+                    0.6451270876643455, 
+                    0.6039168929951937, 
+                    0.6039168929951937, 
+                    0.5651243465691392, 
+                    0.5651243465691392, 
+                    0.5302847620435709, 
+                    0.5302847620435709, 
+                    0.4971403037654648, 
+                    0.4971403037654648, 
+                    0.46594606577857445, 
+                    0.46594606577857445, 
+                    0.43792048277490836, 
+                    0.43792048277490836, 
+                    0.4126779801675011, 
+                    0.4126779801675011, 
+                    0.38926024284381916, 
+                    0.38926024284381916, 
+                    0.3683886284954599, 
+                    0.3683886284954599, 
+                    0.3492548990224941, 
+                    0.3492548990224941, 
+                    0.33242976616703296, 
+                    0.33242976616703296, 
+                    0.3134045229520927, 
+                    0.3134045229520927, 
+                    0.30424119403142175, 
+                    0.30424119403142175, 
+                    0.2954589305972933, 
+                    0.2954589305972933, 
+                    0.280097424409063, 
+                    0.280097424409063, 
+                    0.2588147486080115, 
+                    0.2588147486080115, 
+                    0.2325632610294607, 
+                    0.2325632610294607, 
+                    0.20114585998449505, 
+                    0.20114585998449505, 
+                    0.16211059259846175, 
+                    0.16211059259846175
+                ], 
+                0.3510342240333557
+            ], 
+            [
+                1.0820362567901611, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999192290674509, 
+                    0.9999192290674509, 
+                    0.9975380847603852, 
+                    0.9975380847603852, 
+                    0.9886833442340759, 
+                    0.9886833442340759, 
+                    0.9704453579114315, 
+                    0.9704453579114315, 
+                    0.9409640912709377, 
+                    0.9409640912709377, 
+                    0.9033370008766154, 
+                    0.9033370008766154, 
+                    0.8624217059571863, 
+                    0.8624217059571863, 
+                    0.8189608180317485, 
+                    0.8189608180317485, 
+                    0.774398850154223, 
+                    0.774398850154223, 
+                    0.7284987751545684, 
+                    0.7284987751545684, 
+                    0.6848284638147663, 
+                    0.6848284638147663, 
+                    0.6414053569850312, 
+                    0.6414053569850312, 
+                    0.5987449156634359, 
+                    0.5987449156634359, 
+                    0.5603751787648742, 
+                    0.5603751787648742, 
+                    0.5265387640906241, 
+                    0.5265387640906241, 
+                    0.49330981687060765, 
+                    0.49330981687060765, 
+                    0.4618439190242224, 
+                    0.4618439190242224, 
+                    0.4341530257917376, 
+                    0.4341530257917376, 
+                    0.4090493880499504, 
+                    0.4090493880499504, 
+                    0.38577663263463163, 
+                    0.38577663263463163, 
+                    0.3649950914108047, 
+                    0.3649950914108047, 
+                    0.3458391807080678, 
+                    0.3458391807080678, 
+                    0.3288719497265276, 
+                    0.3288719497265276, 
+                    0.3136822166364893, 
+                    0.3136822166364893, 
+                    0.30132235795107704, 
+                    0.30132235795107704, 
+                    0.2851419781164904, 
+                    0.2851419781164904, 
+                    0.26424641293376194, 
+                    0.26424641293376194, 
+                    0.2393571054163572, 
+                    0.2393571054163572, 
+                    0.21086661965165915, 
+                    0.21086661965165915, 
+                    0.17829598403046834, 
+                    0.17829598403046834, 
+                    0.13930500327347217, 
+                    0.13930500327347217
+                ], 
+                0.3314916491508484
+            ], 
+            [
+                1.0915571451187134, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999392941295685, 
+                    0.9999392941295685, 
+                    0.9976492629860835, 
+                    0.9976492629860835, 
+                    0.9928382080131603, 
+                    0.9928382080131603, 
+                    0.9710609173293173, 
+                    0.9710609173293173, 
+                    0.938969391317005, 
+                    0.938969391317005, 
+                    0.9003736538833023, 
+                    0.9003736538833023, 
+                    0.8589782407347165, 
+                    0.8589782407347165, 
+                    0.8151857344903329, 
+                    0.8151857344903329, 
+                    0.7702741524865769, 
+                    0.7702741524865769, 
+                    0.7245339231858985, 
+                    0.7245339231858985, 
+                    0.6801554964000969, 
+                    0.6801554964000969, 
+                    0.6366869557213731, 
+                    0.6366869557213731, 
+                    0.594924342696082, 
+                    0.594924342696082, 
+                    0.5568660889172855, 
+                    0.5568660889172855, 
+                    0.521779643190092, 
+                    0.521779643190092, 
+                    0.4890573036376637, 
+                    0.4890573036376637, 
+                    0.458079656393706, 
+                    0.458079656393706, 
+                    0.4303884484978311, 
+                    0.4303884484978311, 
+                    0.40546065611165877, 
+                    0.40546065611165877, 
+                    0.3823036827303872, 
+                    0.3823036827303872, 
+                    0.36134441030550785, 
+                    0.36134441030550785, 
+                    0.34254668929240983, 
+                    0.34254668929240983, 
+                    0.32715171921649816, 
+                    0.32715171921649816, 
+                    0.31043267951557196, 
+                    0.31043267951557196, 
+                    0.29846827785041063, 
+                    0.29846827785041063, 
+                    0.2824930823265755, 
+                    0.2824930823265755, 
+                    0.26180126241113294, 
+                    0.26180126241113294, 
+                    0.2371361876876368, 
+                    0.2371361876876368, 
+                    0.2088870163135066, 
+                    0.2088870163135066, 
+                    0.1765753860947779, 
+                    0.1765753860947779, 
+                    0.13787163561809337, 
+                    0.13787163561809337
+                ], 
+                0.3136022984981537
+            ]
+        ]
+    }, 
+    {
+        "block_size": 68, 
+        "preprocessing_block_sizes": [
+            48
+        ], 
+        "pruning_parameters": [
+            [
+                0.9172782897949219, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999416424118284, 
+                    0.9999416424118284, 
+                    0.9997672286339191, 
+                    0.9997672286339191, 
+                    0.9995826350351135, 
+                    0.9995826350351135, 
+                    0.9993651197063897, 
+                    0.9993651197063897, 
+                    0.9722856729759027, 
+                    0.9722856729759027, 
+                    0.9399910688221113, 
+                    0.9399910688221113, 
+                    0.9075630068417516, 
+                    0.9075630068417516, 
+                    0.870478037924552, 
+                    0.870478037924552, 
+                    0.8305741860828747, 
+                    0.8305741860828747, 
+                    0.789693191198734, 
+                    0.789693191198734, 
+                    0.7474472993790369, 
+                    0.7474472993790369, 
+                    0.7028624458209791, 
+                    0.7028624458209791, 
+                    0.6606655485314213, 
+                    0.6606655485314213, 
+                    0.6266683785996755, 
+                    0.6266683785996755, 
+                    0.5806516392749319, 
+                    0.5806516392749319, 
+                    0.5553231338108271, 
+                    0.5553231338108271, 
+                    0.5170205449492572, 
+                    0.5170205449492572, 
+                    0.4889008102337016, 
+                    0.4889008102337016, 
+                    0.45779363208618346, 
+                    0.45779363208618346, 
+                    0.4308455935455764, 
+                    0.4308455935455764, 
+                    0.4059500271976158, 
+                    0.4059500271976158, 
+                    0.3832967146728213, 
+                    0.3832967146728213, 
+                    0.3626726813141414, 
+                    0.3626726813141414, 
+                    0.34184512782460474, 
+                    0.34184512782460474, 
+                    0.31999134933098544, 
+                    0.31999134933098544, 
+                    0.2958847950401512, 
+                    0.2958847950401512, 
+                    0.2697891443518446, 
+                    0.2697891443518446, 
+                    0.24204266492869048, 
+                    0.24204266492869048, 
+                    0.21285524739268932, 
+                    0.21285524739268932, 
+                    0.1821866677951486, 
+                    0.1821866677951486, 
+                    0.14962290164440284, 
+                    0.14962290164440284, 
+                    0.11347035938390904, 
+                    0.11347035938390904
+                ], 
+                0.5003814697265625
+            ], 
+            [
+                0.9252327680587769, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999977626372412, 
+                    0.999977626372412, 
+                    0.9996388458349594, 
+                    0.9996388458349594, 
+                    0.9980225507170907, 
+                    0.9980225507170907, 
+                    0.9921548202801675, 
+                    0.9921548202801675, 
+                    0.9685523562728148, 
+                    0.9685523562728148, 
+                    0.9412503864798554, 
+                    0.9412503864798554, 
+                    0.9073020514524012, 
+                    0.9073020514524012, 
+                    0.8685502865648205, 
+                    0.8685502865648205, 
+                    0.8278759985842953, 
+                    0.8278759985842953, 
+                    0.7864522132213585, 
+                    0.7864522132213585, 
+                    0.7442588137548575, 
+                    0.7442588137548575, 
+                    0.6993684555851645, 
+                    0.6993684555851645, 
+                    0.658303497008047, 
+                    0.658303497008047, 
+                    0.618848524217815, 
+                    0.618848524217815, 
+                    0.5820519632502087, 
+                    0.5820519632502087, 
+                    0.5471492322660597, 
+                    0.5471492322660597, 
+                    0.5148444532680226, 
+                    0.5148444532680226, 
+                    0.4845537174948869, 
+                    0.4845537174948869, 
+                    0.45475317218438505, 
+                    0.45475317218438505, 
+                    0.4281062612720961, 
+                    0.4281062612720961, 
+                    0.40308752309296675, 
+                    0.40308752309296675, 
+                    0.3804977162764219, 
+                    0.3804977162764219, 
+                    0.36016472237587505, 
+                    0.36016472237587505, 
+                    0.3410204567173224, 
+                    0.3410204567173224, 
+                    0.3242702631298596, 
+                    0.3242702631298596, 
+                    0.30930305712201767, 
+                    0.30930305712201767, 
+                    0.2935486644989869, 
+                    0.2935486644989869, 
+                    0.27338063028587434, 
+                    0.27338063028587434, 
+                    0.24887140665007468, 
+                    0.24887140665007468, 
+                    0.22037876355194672, 
+                    0.22037876355194672, 
+                    0.18757464251034023, 
+                    0.18757464251034023, 
+                    0.14821023381536966, 
+                    0.14821023381536966
+                ], 
+                0.5001311898231506
+            ], 
+            [
+                0.9332562685012817, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999802927705279, 
+                    0.9999802927705279, 
+                    0.9997969775507964, 
+                    0.9997969775507964, 
+                    0.9987544167957183, 
+                    0.9987544167957183, 
+                    0.9928666372325888, 
+                    0.9928666372325888, 
+                    0.9671471223609481, 
+                    0.9671471223609481, 
+                    0.9394184487399987, 
+                    0.9394184487399987, 
+                    0.9047362008484469, 
+                    0.9047362008484469, 
+                    0.8653865204573541, 
+                    0.8653865204573541, 
+                    0.8243131738995952, 
+                    0.8243131738995952, 
+                    0.7826121302739878, 
+                    0.7826121302739878, 
+                    0.7402048189197927, 
+                    0.7402048189197927, 
+                    0.6950769641968729, 
+                    0.6950769641968729, 
+                    0.6541809303729204, 
+                    0.6541809303729204, 
+                    0.614386337760537, 
+                    0.614386337760537, 
+                    0.5779812373040124, 
+                    0.5779812373040124, 
+                    0.5428643707570653, 
+                    0.5428643707570653, 
+                    0.5107945767184747, 
+                    0.5107945767184747, 
+                    0.4805772981048952, 
+                    0.4805772981048952, 
+                    0.4509074996849963, 
+                    0.4509074996849963, 
+                    0.42440096878242356, 
+                    0.42440096878242356, 
+                    0.39952636374752276, 
+                    0.39952636374752276, 
+                    0.3770726556282645, 
+                    0.3770726556282645, 
+                    0.356867192236774, 
+                    0.356867192236774, 
+                    0.33785197954689317, 
+                    0.33785197954689317, 
+                    0.32145430531221103, 
+                    0.32145430531221103, 
+                    0.3075284631388513, 
+                    0.3075284631388513, 
+                    0.29139768637239555, 
+                    0.29139768637239555, 
+                    0.2704959326488402, 
+                    0.2704959326488402, 
+                    0.2454867341302613, 
+                    0.2454867341302613, 
+                    0.21671689509423783, 
+                    0.21671689509423783, 
+                    0.18380550208838875, 
+                    0.18380550208838875, 
+                    0.144491226371071, 
+                    0.144491226371071
+                ], 
+                0.4800320863723755
+            ], 
+            [
+                0.9413492679595947, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999950338405477, 
+                    0.9999950338405477, 
+                    0.9992839371622492, 
+                    0.9992839371622492, 
+                    0.997176609288442, 
+                    0.997176609288442, 
+                    0.9891977466804324, 
+                    0.9891977466804324, 
+                    0.9657475782258412, 
+                    0.9657475782258412, 
+                    0.9376156853286103, 
+                    0.9376156853286103, 
+                    0.9021501886010782, 
+                    0.9021501886010782, 
+                    0.862182659187797, 
+                    0.862182659187797, 
+                    0.8207536786388187, 
+                    0.8207536786388187, 
+                    0.7788367483618871, 
+                    0.7788367483618871, 
+                    0.7362261452302735, 
+                    0.7362261452302735, 
+                    0.6909109758805763, 
+                    0.6909109758805763, 
+                    0.6499701731892021, 
+                    0.6499701731892021, 
+                    0.6104456472735869, 
+                    0.6104456472735869, 
+                    0.5732640323913083, 
+                    0.5732640323913083, 
+                    0.539304118890154, 
+                    0.539304118890154, 
+                    0.5065359801895889, 
+                    0.5065359801895889, 
+                    0.4768167252063568, 
+                    0.4768167252063568, 
+                    0.44720610485256473, 
+                    0.44720610485256473, 
+                    0.4208500310834183, 
+                    0.4208500310834183, 
+                    0.3961106998102512, 
+                    0.3961106998102512, 
+                    0.3737841433637781, 
+                    0.3737841433637781, 
+                    0.3536763724687731, 
+                    0.3536763724687731, 
+                    0.33471974862714726, 
+                    0.33471974862714726, 
+                    0.31942770231101353, 
+                    0.31942770231101353, 
+                    0.310083848408511, 
+                    0.310083848408511, 
+                    0.2981037186111158, 
+                    0.2981037186111158, 
+                    0.2799465324882949, 
+                    0.2799465324882949, 
+                    0.25666059576968947, 
+                    0.25666059576968947, 
+                    0.22876189349751982, 
+                    0.22876189349751982, 
+                    0.19588445694827455, 
+                    0.19588445694827455, 
+                    0.15550585773060613, 
+                    0.15550585773060613
+                ], 
+                0.46226540207862854
+            ], 
+            [
+                0.9495124816894531, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995459320004864, 
+                    0.9995459320004864, 
+                    0.9976217617192684, 
+                    0.9976217617192684, 
+                    0.9899220357268846, 
+                    0.9899220357268846, 
+                    0.9646532425047766, 
+                    0.9646532425047766, 
+                    0.9351933949632579, 
+                    0.9351933949632579, 
+                    0.8992938911395184, 
+                    0.8992938911395184, 
+                    0.8589732129669847, 
+                    0.8589732129669847, 
+                    0.8171087544459349, 
+                    0.8171087544459349, 
+                    0.7748625683115534, 
+                    0.7748625683115534, 
+                    0.7320093395118703, 
+                    0.7320093395118703, 
+                    0.6866936894043375, 
+                    0.6866936894043375, 
+                    0.6454524909355202, 
+                    0.6454524909355202, 
+                    0.606109853007371, 
+                    0.606109853007371, 
+                    0.5692122763612284, 
+                    0.5692122763612284, 
+                    0.5347359329954087, 
+                    0.5347359329954087, 
+                    0.5025995420880605, 
+                    0.5025995420880605, 
+                    0.47270911133965104, 
+                    0.47270911133965104, 
+                    0.44329709448356963, 
+                    0.44329709448356963, 
+                    0.4170777615082011, 
+                    0.4170777615082011, 
+                    0.3924888562594359, 
+                    0.3924888562594359, 
+                    0.37031962129677, 
+                    0.37031962129677, 
+                    0.35038887377702316, 
+                    0.35038887377702316, 
+                    0.3316486232942003, 
+                    0.3316486232942003, 
+                    0.3152826232035001, 
+                    0.3152826232035001, 
+                    0.3004949688544988, 
+                    0.3004949688544988, 
+                    0.2841745151794778, 
+                    0.2841745151794778, 
+                    0.2635453531858287, 
+                    0.2635453531858287, 
+                    0.23897075260806278, 
+                    0.23897075260806278, 
+                    0.21077291724593283, 
+                    0.21077291724593283, 
+                    0.1786085833368063, 
+                    0.1786085833368063, 
+                    0.1403412683426172, 
+                    0.1403412683426172
+                ], 
+                0.4399791657924652
+            ], 
+            [
+                0.9577465057373047, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999982734339723, 
+                    0.9999982734339723, 
+                    0.9997459584779282, 
+                    0.9997459584779282, 
+                    0.9977218405605436, 
+                    0.9977218405605436, 
+                    0.9883282927586603, 
+                    0.9883282927586603, 
+                    0.9631696155904341, 
+                    0.9631696155904341, 
+                    0.9331236713721449, 
+                    0.9331236713721449, 
+                    0.8966112338798427, 
+                    0.8966112338798427, 
+                    0.8557790362793842, 
+                    0.8557790362793842, 
+                    0.8135616931699988, 
+                    0.8135616931699988, 
+                    0.7708516507411536, 
+                    0.7708516507411536, 
+                    0.7278688321648178, 
+                    0.7278688321648178, 
+                    0.6827436985580331, 
+                    0.6827436985580331, 
+                    0.6408337445073372, 
+                    0.6408337445073372, 
+                    0.6028338043720166, 
+                    0.6028338043720166, 
+                    0.5641592019570338, 
+                    0.5641592019570338, 
+                    0.5311992730924615, 
+                    0.5311992730924615, 
+                    0.4984431637401077, 
+                    0.4984431637401077, 
+                    0.468834226403052, 
+                    0.468834226403052, 
+                    0.4395014912827031, 
+                    0.4395014912827031, 
+                    0.41347183087247374, 
+                    0.41347183087247374, 
+                    0.3890362469732602, 
+                    0.3890362469732602, 
+                    0.3670064130714457, 
+                    0.3670064130714457, 
+                    0.3472117857486886, 
+                    0.3472117857486886, 
+                    0.3285887317058294, 
+                    0.3285887317058294, 
+                    0.3123273991123724, 
+                    0.3123273991123724, 
+                    0.29879875336196715, 
+                    0.29879875336196715, 
+                    0.2835397483919775, 
+                    0.2835397483919775, 
+                    0.26350330978370184, 
+                    0.26350330978370184, 
+                    0.23933820444685477, 
+                    0.23933820444685477, 
+                    0.2114202609398165, 
+                    0.2114202609398165, 
+                    0.1794092631566918, 
+                    0.1794092631566918, 
+                    0.1411244803208178, 
+                    0.1411244803208178
+                ], 
+                0.4210188090801239
+            ], 
+            [
+                0.9660518765449524, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992111866808145, 
+                    0.9992111866808145, 
+                    0.9972348374651383, 
+                    0.9972348374651383, 
+                    0.9877200520868796, 
+                    0.9877200520868796, 
+                    0.961887032738946, 
+                    0.961887032738946, 
+                    0.9309619311258448, 
+                    0.9309619311258448, 
+                    0.8938050432553819, 
+                    0.8938050432553819, 
+                    0.8524547660374614, 
+                    0.8524547660374614, 
+                    0.8098422984613421, 
+                    0.8098422984613421, 
+                    0.7670472908476378, 
+                    0.7670472908476378, 
+                    0.7238318405916553, 
+                    0.7238318405916553, 
+                    0.678222348532575, 
+                    0.678222348532575, 
+                    0.6369920511412636, 
+                    0.6369920511412636, 
+                    0.5976037050550974, 
+                    0.5976037050550974, 
+                    0.5608380663450893, 
+                    0.5608380663450893, 
+                    0.5265405191386104, 
+                    0.5265405191386104, 
+                    0.49460001103120677, 
+                    0.49460001103120677, 
+                    0.4649672101317899, 
+                    0.4649672101317899, 
+                    0.4358340842875843, 
+                    0.4358340842875843, 
+                    0.40990761613432747, 
+                    0.40990761613432747, 
+                    0.38561081379491335, 
+                    0.38561081379491335, 
+                    0.36372423835385126, 
+                    0.36372423835385126, 
+                    0.3440630506977214, 
+                    0.3440630506977214, 
+                    0.3255898336039854, 
+                    0.3255898336039854, 
+                    0.3094727870514344, 
+                    0.3094727870514344, 
+                    0.2948180384736786, 
+                    0.2948180384736786, 
+                    0.278414583025454, 
+                    0.278414583025454, 
+                    0.25780820769249707, 
+                    0.25780820769249707, 
+                    0.23342292862896472, 
+                    0.23342292862896472, 
+                    0.2055692034992044, 
+                    0.2055692034992044, 
+                    0.17391267842276384, 
+                    0.17391267842276384, 
+                    0.13640077325738448, 
+                    0.13640077325738448
+                ], 
+                0.4011876583099365
+            ], 
+            [
+                0.9744293093681335, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994836396801617, 
+                    0.9994836396801617, 
+                    0.9978487556523387, 
+                    0.9978487556523387, 
+                    0.9870587046194234, 
+                    0.9870587046194234, 
+                    0.9604098405623677, 
+                    0.9604098405623677, 
+                    0.9287814560330632, 
+                    0.9287814560330632, 
+                    0.8909892770690924, 
+                    0.8909892770690924, 
+                    0.8491458249729308, 
+                    0.8491458249729308, 
+                    0.8061797622556424, 
+                    0.8061797622556424, 
+                    0.7631309724093154, 
+                    0.7631309724093154, 
+                    0.7196879513005852, 
+                    0.7196879513005852, 
+                    0.6742122364433869, 
+                    0.6742122364433869, 
+                    0.6323157627076271, 
+                    0.6323157627076271, 
+                    0.593983372688181, 
+                    0.593983372688181, 
+                    0.556145841461496, 
+                    0.556145841461496, 
+                    0.5227834600513541, 
+                    0.5227834600513541, 
+                    0.49054670640560555, 
+                    0.49054670640560555, 
+                    0.4611730594750808, 
+                    0.4611730594750808, 
+                    0.43215431311183067, 
+                    0.43215431311183067, 
+                    0.40637887575092846, 
+                    0.40637887575092846, 
+                    0.3822292296815407, 
+                    0.3822292296815407, 
+                    0.36048392854024985, 
+                    0.36048392854024985, 
+                    0.34095263104018464, 
+                    0.34095263104018464, 
+                    0.3226017401762851, 
+                    0.3226017401762851, 
+                    0.3067407870491478, 
+                    0.3067407870491478, 
+                    0.29274772513580855, 
+                    0.29274772513580855, 
+                    0.2762535873833176, 
+                    0.2762535873833176, 
+                    0.25533406251708723, 
+                    0.25533406251708723, 
+                    0.2307008708938074, 
+                    0.2307008708938074, 
+                    0.20267009676776251, 
+                    0.20267009676776251, 
+                    0.1708652459153726, 
+                    0.1708652459153726, 
+                    0.13319821558398376, 
+                    0.13319821558398376
+                ], 
+                0.38228243589401245
+            ], 
+            [
+                0.9828794002532959, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993979402743226, 
+                    0.9993979402743226, 
+                    0.9969478887992156, 
+                    0.9969478887992156, 
+                    0.9837206142950068, 
+                    0.9837206142950068, 
+                    0.9589102340340443, 
+                    0.9589102340340443, 
+                    0.9265351401633671, 
+                    0.9265351401633671, 
+                    0.8881295008338622, 
+                    0.8881295008338622, 
+                    0.8457933208732263, 
+                    0.8457933208732263, 
+                    0.8024721320428552, 
+                    0.8024721320428552, 
+                    0.7591868593532758, 
+                    0.7591868593532758, 
+                    0.7156206127882425, 
+                    0.7156206127882425, 
+                    0.6697627153708227, 
+                    0.6697627153708227, 
+                    0.6285599870555287, 
+                    0.6285599870555287, 
+                    0.5891626432706867, 
+                    0.5891626432706867, 
+                    0.5525534736326213, 
+                    0.5525534736326213, 
+                    0.5184399283561831, 
+                    0.5184399283561831, 
+                    0.4867177024531766, 
+                    0.4867177024531766, 
+                    0.457348909218285, 
+                    0.457348909218285, 
+                    0.4285030239203809, 
+                    0.4285030239203809, 
+                    0.4028730019871816, 
+                    0.4028730019871816, 
+                    0.3788727162479996, 
+                    0.3788727162479996, 
+                    0.35727239818302287, 
+                    0.35727239818302287, 
+                    0.3378814295300058, 
+                    0.3378814295300058, 
+                    0.3196779994542686, 
+                    0.3196779994542686, 
+                    0.3038143867784239, 
+                    0.3038143867784239, 
+                    0.2892409135300842, 
+                    0.2892409135300842, 
+                    0.27258303943453727, 
+                    0.27258303943453727, 
+                    0.25183915849364635, 
+                    0.25183915849364635, 
+                    0.22752364264487168, 
+                    0.22752364264487168, 
+                    0.1999343267102114, 
+                    0.1999343267102114, 
+                    0.16874501555099097, 
+                    0.16874501555099097, 
+                    0.1320015034879636, 
+                    0.1320015034879636
+                ], 
+                0.363622784614563
+            ], 
+            [
+                0.9914027452468872, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993586858676836, 
+                    0.9993586858676836, 
+                    0.9966565566373301, 
+                    0.9966565566373301, 
+                    0.9820352107166469, 
+                    0.9820352107166469, 
+                    0.9573713556891404, 
+                    0.9573713556891404, 
+                    0.9242618731865466, 
+                    0.9242618731865466, 
+                    0.8852506612380131, 
+                    0.8852506612380131, 
+                    0.8424274485992113, 
+                    0.8424274485992113, 
+                    0.7987617360958542, 
+                    0.7987617360958542, 
+                    0.755230029667494, 
+                    0.755230029667494, 
+                    0.7115296321628096, 
+                    0.7115296321628096, 
+                    0.665482216331737, 
+                    0.665482216331737, 
+                    0.6244725872760959, 
+                    0.6244725872760959, 
+                    0.5848420211901494, 
+                    0.5848420211901494, 
+                    0.5485534532716477, 
+                    0.5485534532716477, 
+                    0.514371767443834, 
+                    0.514371767443834, 
+                    0.4828398081085435, 
+                    0.4828398081085435, 
+                    0.4535797623521833, 
+                    0.4535797623521833, 
+                    0.4248878516894328, 
+                    0.4248878516894328, 
+                    0.39940760070917386, 
+                    0.39940760070917386, 
+                    0.3755565155151366, 
+                    0.3755565155151366, 
+                    0.3540992210084747, 
+                    0.3540992210084747, 
+                    0.3348433896790174, 
+                    0.3348433896790174, 
+                    0.31677221558433183, 
+                    0.31677221558433183, 
+                    0.30103186433733564, 
+                    0.30103186433733564, 
+                    0.286578711699186, 
+                    0.286578711699186, 
+                    0.27002061143444017, 
+                    0.27002061143444017, 
+                    0.24939646575716884, 
+                    0.24939646575716884, 
+                    0.2252394246593553, 
+                    0.2252394246593553, 
+                    0.19785217866439278, 
+                    0.19785217866439278, 
+                    0.166919678812126, 
+                    0.166919678812126, 
+                    0.1305296113338108, 
+                    0.1305296113338108
+                ], 
+                0.34553062915802
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993454903193507, 
+                    0.9993454903193507, 
+                    0.996663358943548, 
+                    0.996663358943548, 
+                    0.9808656554889063, 
+                    0.9808656554889063, 
+                    0.9557730980857536, 
+                    0.9557730980857536, 
+                    0.9219511644003793, 
+                    0.9219511644003793, 
+                    0.8823093768040023, 
+                    0.8823093768040023, 
+                    0.8390237856800716, 
+                    0.8390237856800716, 
+                    0.7950206561907137, 
+                    0.7950206561907137, 
+                    0.7512796870998031, 
+                    0.7512796870998031, 
+                    0.7073236554084482, 
+                    0.7073236554084482, 
+                    0.6616227808459125, 
+                    0.6616227808459125, 
+                    0.6195878114796814, 
+                    0.6195878114796814, 
+                    0.5814729764048718, 
+                    0.5814729764048718, 
+                    0.5437921078728876, 
+                    0.5437921078728876, 
+                    0.51072718933089, 
+                    0.51072718933089, 
+                    0.4788594244168549, 
+                    0.4788594244168549, 
+                    0.449875070056794, 
+                    0.449875070056794, 
+                    0.42130383990903136, 
+                    0.42130383990903136, 
+                    0.3959778843994629, 
+                    0.3959778843994629, 
+                    0.3722766359678906, 
+                    0.3722766359678906, 
+                    0.35096280402974867, 
+                    0.35096280402974867, 
+                    0.331839729211242, 
+                    0.331839729211242, 
+                    0.31392576898642044, 
+                    0.31392576898642044, 
+                    0.2982869208575474, 
+                    0.2982869208575474, 
+                    0.28409868226457036, 
+                    0.28409868226457036, 
+                    0.2674026828978391, 
+                    0.2674026828978391, 
+                    0.24659767076064512, 
+                    0.24659767076064512, 
+                    0.22235507037726726, 
+                    0.22235507037726726, 
+                    0.19497418283432336, 
+                    0.19497418283432336, 
+                    0.16412597163176626, 
+                    0.16412597163176626, 
+                    0.1279123046457014, 
+                    0.1279123046457014
+                ], 
+                0.3277474045753479
+            ], 
+            [
+                1.008671760559082, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991418986328624, 
+                    0.9991418986328624, 
+                    0.9961860849495418, 
+                    0.9961860849495418, 
+                    0.977462521846645, 
+                    0.977462521846645, 
+                    0.953851559205104, 
+                    0.953851559205104, 
+                    0.9194286404540147, 
+                    0.9194286404540147, 
+                    0.8793788479534934, 
+                    0.8793788479534934, 
+                    0.835646275082332, 
+                    0.835646275082332, 
+                    0.7912978048658466, 
+                    0.7912978048658466, 
+                    0.7473302658227386, 
+                    0.7473302658227386, 
+                    0.7032434069836282, 
+                    0.7032434069836282, 
+                    0.6573661746457568, 
+                    0.6573661746457568, 
+                    0.6154833313434934, 
+                    0.6154833313434934, 
+                    0.5773300813214834, 
+                    0.5773300813214834, 
+                    0.5396548544074591, 
+                    0.5396548544074591, 
+                    0.5068598120584773, 
+                    0.5068598120584773, 
+                    0.47498767814919857, 
+                    0.47498767814919857, 
+                    0.4461967378865335, 
+                    0.4461967378865335, 
+                    0.4177581123863289, 
+                    0.4177581123863289, 
+                    0.3925873893356844, 
+                    0.3925873893356844, 
+                    0.3690732357884568, 
+                    0.3690732357884568, 
+                    0.3481236336749856, 
+                    0.3481236336749856, 
+                    0.3293954252001799, 
+                    0.3293954252001799, 
+                    0.30959060828094653, 
+                    0.30959060828094653, 
+                    0.29478323269507095, 
+                    0.29478323269507095, 
+                    0.2839306916824548, 
+                    0.2839306916824548, 
+                    0.2692799855073941, 
+                    0.2692799855073941, 
+                    0.24973567408738623, 
+                    0.24973567408738623, 
+                    0.22624645502506915, 
+                    0.22624645502506915, 
+                    0.19914026186719075, 
+                    0.19914026186719075, 
+                    0.1679840400281422, 
+                    0.1679840400281422, 
+                    0.13055815312071198, 
+                    0.13055815312071198
+                ], 
+                0.3112947642803192
+            ], 
+            [
+                1.0174188613891602, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990964888020918, 
+                    0.9990964888020918, 
+                    0.995510396405917, 
+                    0.995510396405917, 
+                    0.9785575275447422, 
+                    0.9785575275447422, 
+                    0.9524762075381016, 
+                    0.9524762075381016, 
+                    0.9171736717092678, 
+                    0.9171736717092678, 
+                    0.8763362214391147, 
+                    0.8763362214391147, 
+                    0.8321281879392075, 
+                    0.8321281879392075, 
+                    0.7874811377643866, 
+                    0.7874811377643866, 
+                    0.7433266191413358, 
+                    0.7433266191413358, 
+                    0.6990510813771039, 
+                    0.6990510813771039, 
+                    0.6532936193881634, 
+                    0.6532936193881634, 
+                    0.6110988241526851, 
+                    0.6110988241526851, 
+                    0.5732770591050181, 
+                    0.5732770591050181, 
+                    0.5356196185696951, 
+                    0.5356196185696951, 
+                    0.5028357714653181, 
+                    0.5028357714653181, 
+                    0.47120262169386007, 
+                    0.47120262169386007, 
+                    0.44249793056398806, 
+                    0.44249793056398806, 
+                    0.4142320224155408, 
+                    0.4142320224155408, 
+                    0.3892114961023016, 
+                    0.3892114961023016, 
+                    0.36581221192216695, 
+                    0.36581221192216695, 
+                    0.34478603631880905, 
+                    0.34478603631880905, 
+                    0.3259357945372123, 
+                    0.3259357945372123, 
+                    0.3082640571852526, 
+                    0.3082640571852526, 
+                    0.29291906094554376, 
+                    0.29291906094554376, 
+                    0.27872417110666375, 
+                    0.27872417110666375, 
+                    0.2619766620993172, 
+                    0.2619766620993172, 
+                    0.24127506305626445, 
+                    0.24127506305626445, 
+                    0.2172838264981842, 
+                    0.2172838264981842, 
+                    0.19030763155826871, 
+                    0.19030763155826871, 
+                    0.1600573454173181, 
+                    0.1600573454173181, 
+                    0.12477762306989668, 
+                    0.12477762306989668
+                ], 
+                0.29369568824768066
+            ], 
+            [
+                1.026241660118103, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990261201040942, 
+                    0.9990261201040942, 
+                    0.9950564043918302, 
+                    0.9950564043918302, 
+                    0.9775365553055303, 
+                    0.9775365553055303, 
+                    0.9507520027158363, 
+                    0.9507520027158363, 
+                    0.9147126196195059, 
+                    0.9147126196195059, 
+                    0.8732942220206987, 
+                    0.8732942220206987, 
+                    0.8286401724908995, 
+                    0.8286401724908995, 
+                    0.7836907022681818, 
+                    0.7836907022681818, 
+                    0.7393341361115471, 
+                    0.7393341361115471, 
+                    0.6948929088623294, 
+                    0.6948929088623294, 
+                    0.6492108598347923, 
+                    0.6492108598347923, 
+                    0.6067609202919534, 
+                    0.6067609202919534, 
+                    0.5693218777454143, 
+                    0.5693218777454143, 
+                    0.5314826685168048, 
+                    0.5314826685168048, 
+                    0.4989668110867729, 
+                    0.4989668110867729, 
+                    0.4674020870560472, 
+                    0.4674020870560472, 
+                    0.4388558093685882, 
+                    0.4388558093685882, 
+                    0.4107433467891475, 
+                    0.4107433467891475, 
+                    0.385877307659576, 
+                    0.385877307659576, 
+                    0.3626297729099109, 
+                    0.3626297729099109, 
+                    0.3417478599461157, 
+                    0.3417478599461157, 
+                    0.3230325012185057, 
+                    0.3230325012185057, 
+                    0.30549586074042995, 
+                    0.30549586074042995, 
+                    0.29030891991136215, 
+                    0.29030891991136215, 
+                    0.2761826931893199, 
+                    0.2761826931893199, 
+                    0.259356934017126, 
+                    0.259356934017126, 
+                    0.23862713794836132, 
+                    0.23862713794836132, 
+                    0.2146936922117171, 
+                    0.2146936922117171, 
+                    0.1878651994149125, 
+                    0.1878651994149125, 
+                    0.1578693609626989, 
+                    0.1578693609626989, 
+                    0.12302216135464465, 
+                    0.12302216135464465
+                ], 
+                0.2774002254009247
+            ], 
+            [
+                1.035141110420227, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985863416960462, 
+                    0.9985863416960462, 
+                    0.9923851332766656, 
+                    0.9923851332766656, 
+                    0.975737893913799, 
+                    0.975737893913799, 
+                    0.9489349957680159, 
+                    0.9489349957680159, 
+                    0.912232546563368, 
+                    0.912232546563368, 
+                    0.8702036427640918, 
+                    0.8702036427640918, 
+                    0.8251338128764564, 
+                    0.8251338128764564, 
+                    0.7798754640631508, 
+                    0.7798754640631508, 
+                    0.7353078595935191, 
+                    0.7353078595935191, 
+                    0.6908506134398626, 
+                    0.6908506134398626, 
+                    0.6447359881164219, 
+                    0.6447359881164219, 
+                    0.6031073766007857, 
+                    0.6031073766007857, 
+                    0.564697239601116, 
+                    0.564697239601116, 
+                    0.5278646869260749, 
+                    0.5278646869260749, 
+                    0.49488598191807487, 
+                    0.49488598191807487, 
+                    0.46369670526110357, 
+                    0.46369670526110357, 
+                    0.4352233870201006, 
+                    0.4352233870201006, 
+                    0.4072806752652664, 
+                    0.4072806752652664, 
+                    0.38256640208504983, 
+                    0.38256640208504983, 
+                    0.35946889127144255, 
+                    0.35946889127144255, 
+                    0.33872688086383995, 
+                    0.33872688086383995, 
+                    0.32013612609853925, 
+                    0.32013612609853925, 
+                    0.3026713587017738, 
+                    0.3026713587017738, 
+                    0.2872427728243886, 
+                    0.2872427728243886, 
+                    0.27433008119462576, 
+                    0.27433008119462576, 
+                    0.2598673567866139, 
+                    0.2598673567866139, 
+                    0.24096354703565862, 
+                    0.24096354703565862, 
+                    0.21830809291689324, 
+                    0.21830809291689324, 
+                    0.19229515084430449, 
+                    0.19229515084430449, 
+                    0.16267424507650255, 
+                    0.16267424507650255, 
+                    0.12761365911126177, 
+                    0.12761365911126177
+                ], 
+                0.2624061107635498
+            ], 
+            [
+                1.0441176891326904, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9985362583403935, 
+                    0.9985362583403935, 
+                    0.9919420450261154, 
+                    0.9919420450261154, 
+                    0.9745272772867901, 
+                    0.9745272772867901, 
+                    0.9471350682560828, 
+                    0.9471350682560828, 
+                    0.9096706044323564, 
+                    0.9096706044323564, 
+                    0.8671038794130481, 
+                    0.8671038794130481, 
+                    0.8215775096318334, 
+                    0.8215775096318334, 
+                    0.7760412086855696, 
+                    0.7760412086855696, 
+                    0.731259750521184, 
+                    0.731259750521184, 
+                    0.6868028165051373, 
+                    0.6868028165051373, 
+                    0.640251380009815, 
+                    0.640251380009815, 
+                    0.5994253242493683, 
+                    0.5994253242493683, 
+                    0.5601111743400845, 
+                    0.5601111743400845, 
+                    0.5242197725341355, 
+                    0.5242197725341355, 
+                    0.49087343712396797, 
+                    0.49087343712396797, 
+                    0.46000533128819826, 
+                    0.46000533128819826, 
+                    0.43162639810268705, 
+                    0.43162639810268705, 
+                    0.40385270007897744, 
+                    0.40385270007897744, 
+                    0.3792903036008325, 
+                    0.3792903036008325, 
+                    0.35634639174948884, 
+                    0.35634639174948884, 
+                    0.33575160915249463, 
+                    0.33575160915249463, 
+                    0.31729377426884187, 
+                    0.31729377426884187, 
+                    0.29986253122814344, 
+                    0.29986253122814344, 
+                    0.2842618689034142, 
+                    0.2842618689034142, 
+                    0.2718444317682926, 
+                    0.2718444317682926, 
+                    0.2573108510958429, 
+                    0.2573108510958429, 
+                    0.23828168919280912, 
+                    0.23828168919280912, 
+                    0.21559485957569816, 
+                    0.21559485957569816, 
+                    0.18964521347907412, 
+                    0.18964521347907412, 
+                    0.1601803431302285, 
+                    0.1601803431302285, 
+                    0.1254050478205308, 
+                    0.1254050478205308
+                ], 
+                0.2470608502626419
+            ], 
+            [
+                1.053171992301941, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984444087525248, 
+                    0.9984444087525248, 
+                    0.9919688476312047, 
+                    0.9919688476312047, 
+                    0.9721934827606568, 
+                    0.9721934827606568, 
+                    0.9449547248992, 
+                    0.9449547248992, 
+                    0.9070768334706549, 
+                    0.9070768334706549, 
+                    0.863950530376557, 
+                    0.863950530376557, 
+                    0.8180180482157415, 
+                    0.8180180482157415, 
+                    0.7721889193768016, 
+                    0.7721889193768016, 
+                    0.7272380711736394, 
+                    0.7272380711736394, 
+                    0.682595036180386, 
+                    0.682595036180386, 
+                    0.636223200713205, 
+                    0.636223200713205, 
+                    0.5949634313024893, 
+                    0.5949634313024893, 
+                    0.5563353008913416, 
+                    0.5563353008913416, 
+                    0.5200256844370609, 
+                    0.5200256844370609, 
+                    0.4871283756602196, 
+                    0.4871283756602196, 
+                    0.45628749233007787, 
+                    0.45628749233007787, 
+                    0.42808350439083837, 
+                    0.42808350439083837, 
+                    0.4004605823509134, 
+                    0.4004605823509134, 
+                    0.376055821032678, 
+                    0.376055821032678, 
+                    0.35326729804724194, 
+                    0.35326729804724194, 
+                    0.3328194126022837, 
+                    0.3328194126022837, 
+                    0.31448923254552963, 
+                    0.31448923254552963, 
+                    0.2971018922886593, 
+                    0.2971018922886593, 
+                    0.28181551144057554, 
+                    0.28181551144057554, 
+                    0.26924607043173726, 
+                    0.26924607043173726, 
+                    0.2535225569696348, 
+                    0.2535225569696348, 
+                    0.23359778114472474, 
+                    0.23359778114472474, 
+                    0.21038338056163494, 
+                    0.21038338056163494, 
+                    0.18423967735282623, 
+                    0.18423967735282623, 
+                    0.15492233293324312, 
+                    0.15492233293324312, 
+                    0.1207801457779869, 
+                    0.1207801457779869
+                ], 
+                0.23201435804367065
+            ], 
+            [
+                1.062304973602295, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983078549511776, 
+                    0.9983078549511776, 
+                    0.9907736375050359, 
+                    0.9907736375050359, 
+                    0.9730400235477312, 
+                    0.9730400235477312, 
+                    0.943381972631717, 
+                    0.943381972631717, 
+                    0.9045111996806249, 
+                    0.9045111996806249, 
+                    0.860915622463771, 
+                    0.860915622463771, 
+                    0.8142140468761436, 
+                    0.8142140468761436, 
+                    0.7685775826432324, 
+                    0.7685775826432324, 
+                    0.723171970797423, 
+                    0.723171970797423, 
+                    0.6779435220804146, 
+                    0.6779435220804146, 
+                    0.6325404474156989, 
+                    0.6325404474156989, 
+                    0.5904044946403281, 
+                    0.5904044946403281, 
+                    0.5533163965316835, 
+                    0.5533163965316835, 
+                    0.5155815562214041, 
+                    0.5155815562214041, 
+                    0.48308955195086656, 
+                    0.48308955195086656, 
+                    0.45233968208898623, 
+                    0.45233968208898623, 
+                    0.4245924761676663, 
+                    0.4245924761676663, 
+                    0.39703101231916765, 
+                    0.39703101231916765, 
+                    0.37279728324621947, 
+                    0.37279728324621947, 
+                    0.35018365888720643, 
+                    0.35018365888720643, 
+                    0.3298559012674376, 
+                    0.3298559012674376, 
+                    0.3116799681180983, 
+                    0.3116799681180983, 
+                    0.2946397994687899, 
+                    0.2946397994687899, 
+                    0.2797991918721713, 
+                    0.2797991918721713, 
+                    0.26673161561659486, 
+                    0.26673161561659486, 
+                    0.2534531273631644, 
+                    0.2534531273631644, 
+                    0.23593767226500736, 
+                    0.23593767226500736, 
+                    0.21444781942986585, 
+                    0.21444781942986585, 
+                    0.1894445144266533, 
+                    0.1894445144266533, 
+                    0.16074902053924317, 
+                    0.16074902053924317, 
+                    0.12659095762418102, 
+                    0.12659095762418102
+                ], 
+                0.21847425401210785
+            ], 
+            [
+                1.0715171098709106, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999974780371269, 
+                    0.999974780371269, 
+                    0.9982083202955478, 
+                    0.9982083202955478, 
+                    0.9908390371372815, 
+                    0.9908390371372815, 
+                    0.968812311712231, 
+                    0.968812311712231, 
+                    0.9404680152616036, 
+                    0.9404680152616036, 
+                    0.9016479050180032, 
+                    0.9016479050180032, 
+                    0.8575019240851469, 
+                    0.8575019240851469, 
+                    0.8107744190914088, 
+                    0.8107744190914088, 
+                    0.7644279477027102, 
+                    0.7644279477027102, 
+                    0.7191470465385383, 
+                    0.7191470465385383, 
+                    0.6743320580313863, 
+                    0.6743320580313863, 
+                    0.6278747098516386, 
+                    0.6278747098516386, 
+                    0.5867680145404479, 
+                    0.5867680145404479, 
+                    0.5482420188383729, 
+                    0.5482420188383729, 
+                    0.5121622488346447, 
+                    0.5121622488346447, 
+                    0.47949169428768296, 
+                    0.47949169428768296, 
+                    0.4489399420191597, 
+                    0.4489399420191597, 
+                    0.4210387870849393, 
+                    0.4210387870849393, 
+                    0.39374088053876893, 
+                    0.39374088053876893, 
+                    0.36965594373032623, 
+                    0.36965594373032623, 
+                    0.34718204854603957, 
+                    0.34718204854603957, 
+                    0.32703590094557927, 
+                    0.32703590094557927, 
+                    0.30886474080626947, 
+                    0.30886474080626947, 
+                    0.2906694949019692, 
+                    0.2906694949019692, 
+                    0.2760570733565361, 
+                    0.2760570733565361, 
+                    0.2646225751409225, 
+                    0.2646225751409225, 
+                    0.24881923540048043, 
+                    0.24881923540048043, 
+                    0.22881912560827242, 
+                    0.22881912560827242, 
+                    0.2056692841603973, 
+                    0.2056692841603973, 
+                    0.1797408630917222, 
+                    0.1797408630917222, 
+                    0.15080981808288574, 
+                    0.15080981808288574, 
+                    0.11733690152208964, 
+                    0.11733690152208964
+                ], 
+                0.20402777194976807
+            ], 
+            [
+                1.0808091163635254, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999930483490923, 
+                    0.9999930483490923, 
+                    0.9980874936183164, 
+                    0.9980874936183164, 
+                    0.9911754656981026, 
+                    0.9911754656981026, 
+                    0.9701754547819805, 
+                    0.9701754547819805, 
+                    0.9392466491108921, 
+                    0.9392466491108921, 
+                    0.89908653512397, 
+                    0.89908653512397, 
+                    0.8542897062803084, 
+                    0.8542897062803084, 
+                    0.8071473810833333, 
+                    0.8071473810833333, 
+                    0.7605437195552005, 
+                    0.7605437195552005, 
+                    0.7151432027711997, 
+                    0.7151432027711997, 
+                    0.6701450635181816, 
+                    0.6701450635181816, 
+                    0.6239496808458256, 
+                    0.6239496808458256, 
+                    0.5823960214818428, 
+                    0.5823960214818428, 
+                    0.5445073294809718, 
+                    0.5445073294809718, 
+                    0.5081220593552539, 
+                    0.5081220593552539, 
+                    0.47581140238926944, 
+                    0.47581140238926944, 
+                    0.44531875136433857, 
+                    0.44531875136433857, 
+                    0.41758953847205765, 
+                    0.41758953847205765, 
+                    0.39045181015918173, 
+                    0.39045181015918173, 
+                    0.3665217268151797, 
+                    0.3665217268151797, 
+                    0.34419632249634535, 
+                    0.34419632249634535, 
+                    0.32419795184034345, 
+                    0.32419795184034345, 
+                    0.3063309317704616, 
+                    0.3063309317704616, 
+                    0.2887436212207983, 
+                    0.2887436212207983, 
+                    0.27488923410556926, 
+                    0.27488923410556926, 
+                    0.2626829869636138, 
+                    0.2626829869636138, 
+                    0.2460443207363686, 
+                    0.2460443207363686, 
+                    0.22550230768841958, 
+                    0.22550230768841958, 
+                    0.2020626152179558, 
+                    0.2020626152179558, 
+                    0.17607999032223434, 
+                    0.17607999032223434, 
+                    0.1473578911496274, 
+                    0.1473578911496274, 
+                    0.114502609456217, 
+                    0.114502609456217
+                ], 
+                0.19118689000606537
+            ], 
+            [
+                1.0901817083358765, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999829270045881, 
+                    0.9999829270045881, 
+                    0.9978922571244888, 
+                    0.9978922571244888, 
+                    0.9881831046842776, 
+                    0.9881831046842776, 
+                    0.9688399627932807, 
+                    0.9688399627932807, 
+                    0.9373773791494021, 
+                    0.9373773791494021, 
+                    0.8961465708350526, 
+                    0.8961465708350526, 
+                    0.8508694621192071, 
+                    0.8508694621192071, 
+                    0.8034243183173082, 
+                    0.8034243183173082, 
+                    0.7565738244136571, 
+                    0.7565738244136571, 
+                    0.7110664534997255, 
+                    0.7110664534997255, 
+                    0.6660399881192697, 
+                    0.6660399881192697, 
+                    0.6194662192734633, 
+                    0.6194662192734633, 
+                    0.5783545262008679, 
+                    0.5783545262008679, 
+                    0.5400951103915838, 
+                    0.5400951103915838, 
+                    0.5043671090175016, 
+                    0.5043671090175016, 
+                    0.472096046775033, 
+                    0.472096046775033, 
+                    0.44185247484992657, 
+                    0.44185247484992657, 
+                    0.41415022332360596, 
+                    0.41415022332360596, 
+                    0.3871855906557941, 
+                    0.3871855906557941, 
+                    0.36341937254238743, 
+                    0.36341937254238743, 
+                    0.34124675916416725, 
+                    0.34124675916416725, 
+                    0.3213870464523396, 
+                    0.3213870464523396, 
+                    0.303605882171836, 
+                    0.303605882171836, 
+                    0.2866121373783512, 
+                    0.2866121373783512, 
+                    0.2712619586093479, 
+                    0.2712619586093479, 
+                    0.25908322312225274, 
+                    0.25908322312225274, 
+                    0.24767655307847972, 
+                    0.24767655307847972, 
+                    0.23126197348754707, 
+                    0.23126197348754707, 
+                    0.2106699437238518, 
+                    0.2106699437238518, 
+                    0.18644069833362714, 
+                    0.18644069833362714, 
+                    0.15839932096972775, 
+                    0.15839932096972775, 
+                    0.12472920368906903, 
+                    0.12472920368906903
+                ], 
+                0.17960882186889648
+            ]
+        ]
+    }, 
+    {
+        "block_size": 69, 
+        "preprocessing_block_sizes": [
+            52
+        ], 
+        "pruning_parameters": [
+            [
+                0.9184027910232544, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9682556656131581, 
+                    0.9682556656131581, 
+                    0.9258061837089948, 
+                    0.9258061837089948, 
+                    0.8846590505242873, 
+                    0.8846590505242873, 
+                    0.8443806074597728, 
+                    0.8443806074597728, 
+                    0.8036930135086751, 
+                    0.8036930135086751, 
+                    0.7617757219173444, 
+                    0.7617757219173444, 
+                    0.7189825056301948, 
+                    0.7189825056301948, 
+                    0.6743189972362008, 
+                    0.6743189972362008, 
+                    0.6298396989325352, 
+                    0.6298396989325352, 
+                    0.5834803632337169, 
+                    0.5834803632337169, 
+                    0.547403684482138, 
+                    0.547403684482138, 
+                    0.5133007147799489, 
+                    0.5133007147799489, 
+                    0.48292140532820355, 
+                    0.48292140532820355, 
+                    0.4597000665517477, 
+                    0.4597000665517477, 
+                    0.43819613591439033, 
+                    0.43819613591439033, 
+                    0.4155526958844011, 
+                    0.4155526958844011, 
+                    0.3927761025094184, 
+                    0.3927761025094184, 
+                    0.3682928198762055, 
+                    0.3682928198762055, 
+                    0.3424812486759777, 
+                    0.3424812486759777, 
+                    0.3154113917751983, 
+                    0.3154113917751983, 
+                    0.2873685684636335, 
+                    0.2873685684636335, 
+                    0.2585990796141114, 
+                    0.2585990796141114, 
+                    0.22925430620863296, 
+                    0.22925430620863296, 
+                    0.19938132212701715, 
+                    0.19938132212701715, 
+                    0.16890650720393255, 
+                    0.16890650720393255, 
+                    0.13759351340274303, 
+                    0.13759351340274303, 
+                    0.10248559427781972, 
+                    0.10248559427781972
+                ], 
+                0.5001313090324402
+            ], 
+            [
+                0.9262534976005554, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999836957025282, 
+                    0.9999836957025282, 
+                    0.9999832278152168, 
+                    0.9999832278152168, 
+                    0.999983132831973, 
+                    0.999983132831973, 
+                    0.999983132831973, 
+                    0.999983132831973, 
+                    0.9768105669161409, 
+                    0.9768105669161409, 
+                    0.9374290164572855, 
+                    0.9374290164572855, 
+                    0.8994090290733203, 
+                    0.8994090290733203, 
+                    0.8620900696012438, 
+                    0.8620900696012438, 
+                    0.8250116111479439, 
+                    0.8250116111479439, 
+                    0.7871128203710351, 
+                    0.7871128203710351, 
+                    0.748148051683873, 
+                    0.748148051683873, 
+                    0.708568097983887, 
+                    0.708568097983887, 
+                    0.6678493856688236, 
+                    0.6678493856688236, 
+                    0.62752431257873, 
+                    0.62752431257873, 
+                    0.5869645784031636, 
+                    0.5869645784031636, 
+                    0.5525317052620132, 
+                    0.5525317052620132, 
+                    0.519828024101953, 
+                    0.519828024101953, 
+                    0.48962118383873227, 
+                    0.48962118383873227, 
+                    0.4638984050249053, 
+                    0.4638984050249053, 
+                    0.4401038502569466, 
+                    0.4401038502569466, 
+                    0.41595057164407206, 
+                    0.41595057164407206, 
+                    0.3918577016227519, 
+                    0.3918577016227519, 
+                    0.366524573389001, 
+                    0.366524573389001, 
+                    0.3401469788398957, 
+                    0.3401469788398957, 
+                    0.312750865923352, 
+                    0.312750865923352, 
+                    0.28455661941075167, 
+                    0.28455661941075167, 
+                    0.2557629951434057, 
+                    0.2557629951434057, 
+                    0.22649579356152344, 
+                    0.22649579356152344, 
+                    0.19679962851555416, 
+                    0.19679962851555416, 
+                    0.16662495969111926, 
+                    0.16662495969111926, 
+                    0.13579089495473065, 
+                    0.13579089495473065, 
+                    0.10233936698214906, 
+                    0.10233936698214906
+                ], 
+                0.5000463128089905
+            ], 
+            [
+                0.9341713786125183, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999111200895177, 
+                    0.9999111200895177, 
+                    0.9999007097004379, 
+                    0.9999007097004379, 
+                    0.9998817698353222, 
+                    0.9998817698353222, 
+                    0.9998725049956885, 
+                    0.9998725049956885, 
+                    0.9758485857259395, 
+                    0.9758485857259395, 
+                    0.9371929281913722, 
+                    0.9371929281913722, 
+                    0.900341827850383, 
+                    0.900341827850383, 
+                    0.8636698791469782, 
+                    0.8636698791469782, 
+                    0.8265464038275743, 
+                    0.8265464038275743, 
+                    0.7877325314204072, 
+                    0.7877325314204072, 
+                    0.7477681205416571, 
+                    0.7477681205416571, 
+                    0.7074581003083663, 
+                    0.7074581003083663, 
+                    0.6666195212171323, 
+                    0.6666195212171323, 
+                    0.6267576791936881, 
+                    0.6267576791936881, 
+                    0.588114842585349, 
+                    0.588114842585349, 
+                    0.5533323621909911, 
+                    0.5533323621909911, 
+                    0.5203390653802387, 
+                    0.5203390653802387, 
+                    0.4893991606563213, 
+                    0.4893991606563213, 
+                    0.4618435851909961, 
+                    0.4618435851909961, 
+                    0.4372747791318979, 
+                    0.4372747791318979, 
+                    0.41349612652475215, 
+                    0.41349612652475215, 
+                    0.3903423609165931, 
+                    0.3903423609165931, 
+                    0.36605705169683544, 
+                    0.36605705169683544, 
+                    0.3405970425997152, 
+                    0.3405970425997152, 
+                    0.3138849618494962, 
+                    0.3138849618494962, 
+                    0.2861579025547019, 
+                    0.2861579025547019, 
+                    0.2576562696908355, 
+                    0.2576562696908355, 
+                    0.22853856828023328, 
+                    0.22853856828023328, 
+                    0.19886686750082097, 
+                    0.19886686750082097, 
+                    0.1685887950016843, 
+                    0.1685887950016843, 
+                    0.13748250223338013, 
+                    0.13748250223338013, 
+                    0.10372988096666394, 
+                    0.10372988096666394
+                ], 
+                0.5005712509155273
+            ], 
+            [
+                0.9421569108963013, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998661002491472, 
+                    0.9998661002491472, 
+                    0.9998661002491472, 
+                    0.9998661002491472, 
+                    0.999862141967694, 
+                    0.999862141967694, 
+                    0.9998522150373051, 
+                    0.9998522150373051, 
+                    0.9746175754579792, 
+                    0.9746175754579792, 
+                    0.9365212489383845, 
+                    0.9365212489383845, 
+                    0.900377983040961, 
+                    0.900377983040961, 
+                    0.8639851661945768, 
+                    0.8639851661945768, 
+                    0.8266882853462523, 
+                    0.8266882853462523, 
+                    0.7870214630204287, 
+                    0.7870214630204287, 
+                    0.7463426202688769, 
+                    0.7463426202688769, 
+                    0.7056477818949846, 
+                    0.7056477818949846, 
+                    0.6651634238103864, 
+                    0.6651634238103864, 
+                    0.6261751577954492, 
+                    0.6261751577954492, 
+                    0.5908999643914563, 
+                    0.5908999643914563, 
+                    0.5554107138568449, 
+                    0.5554107138568449, 
+                    0.5221816179967238, 
+                    0.5221816179967238, 
+                    0.49022720352577026, 
+                    0.49022720352577026, 
+                    0.4598188516064763, 
+                    0.4598188516064763, 
+                    0.4343187387206752, 
+                    0.4343187387206752, 
+                    0.41083304747102584, 
+                    0.41083304747102584, 
+                    0.38846479151830315, 
+                    0.38846479151830315, 
+                    0.36505178964728047, 
+                    0.36505178964728047, 
+                    0.34035061040437725, 
+                    0.34035061040437725, 
+                    0.31420843774733803, 
+                    0.31420843774733803, 
+                    0.2868806828077966, 
+                    0.2868806828077966, 
+                    0.25864327556806593, 
+                    0.25864327556806593, 
+                    0.22968191007467423, 
+                    0.22968191007467423, 
+                    0.20007377223896106, 
+                    0.20007377223896106, 
+                    0.16976648306882378, 
+                    0.16976648306882378, 
+                    0.13851187967450138, 
+                    0.13851187967450138, 
+                    0.1046146029941883, 
+                    0.1046146029941883
+                ], 
+                0.5003435015678406
+            ], 
+            [
+                0.950210690498352, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999350341890239, 
+                    0.9999350341890239, 
+                    0.9995039393883297, 
+                    0.9995039393883297, 
+                    0.9993703318219933, 
+                    0.9993703318219933, 
+                    0.9990541932649252, 
+                    0.9990541932649252, 
+                    0.9717075893617156, 
+                    0.9717075893617156, 
+                    0.9366935194006241, 
+                    0.9366935194006241, 
+                    0.9029842768347736, 
+                    0.9029842768347736, 
+                    0.866945184694342, 
+                    0.866945184694342, 
+                    0.828811796448123, 
+                    0.828811796448123, 
+                    0.7875907560843993, 
+                    0.7875907560843993, 
+                    0.7459212256319988, 
+                    0.7459212256319988, 
+                    0.7048745944349308, 
+                    0.7048745944349308, 
+                    0.6643908415751604, 
+                    0.6643908415751604, 
+                    0.6232843397416246, 
+                    0.6232843397416246, 
+                    0.5878894866446573, 
+                    0.5878894866446573, 
+                    0.5489129508200316, 
+                    0.5489129508200316, 
+                    0.5172634789548158, 
+                    0.5172634789548158, 
+                    0.48640773572281426, 
+                    0.48640773572281426, 
+                    0.45860822152203073, 
+                    0.45860822152203073, 
+                    0.4333968653149988, 
+                    0.4333968653149988, 
+                    0.4089084756551652, 
+                    0.4089084756551652, 
+                    0.3870166151402838, 
+                    0.3870166151402838, 
+                    0.3657027440423677, 
+                    0.3657027440423677, 
+                    0.34352102839553716, 
+                    0.34352102839553716, 
+                    0.3194654517487754, 
+                    0.3194654517487754, 
+                    0.29361350986806795, 
+                    0.29361350986806795, 
+                    0.26630668444309447, 
+                    0.26630668444309447, 
+                    0.23781008629825573, 
+                    0.23781008629825573, 
+                    0.20824384583545782, 
+                    0.20824384583545782, 
+                    0.17753744132272517, 
+                    0.17753744132272517, 
+                    0.14530937327450374, 
+                    0.14530937327450374, 
+                    0.10991101973378395, 
+                    0.10991101973378395
+                ], 
+                0.5002883076667786
+            ], 
+            [
+                0.9583333134651184, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999799235112857, 
+                    0.9999799235112857, 
+                    0.9996965827138387, 
+                    0.9996965827138387, 
+                    0.9987557393729323, 
+                    0.9987557393729323, 
+                    0.9837607430526835, 
+                    0.9837607430526835, 
+                    0.9635569055430616, 
+                    0.9635569055430616, 
+                    0.9363864276933208, 
+                    0.9363864276933208, 
+                    0.9025456739826833, 
+                    0.9025456739826833, 
+                    0.8652691256165638, 
+                    0.8652691256165638, 
+                    0.8261766814359149, 
+                    0.8261766814359149, 
+                    0.7841931803709066, 
+                    0.7841931803709066, 
+                    0.7420761364445301, 
+                    0.7420761364445301, 
+                    0.7008363854823839, 
+                    0.7008363854823839, 
+                    0.6599408424107424, 
+                    0.6599408424107424, 
+                    0.6207142644000827, 
+                    0.6207142644000827, 
+                    0.5821281267801613, 
+                    0.5821281267801613, 
+                    0.547902625507995, 
+                    0.547902625507995, 
+                    0.5146418593410143, 
+                    0.5146418593410143, 
+                    0.48344533488286817, 
+                    0.48344533488286817, 
+                    0.4554310983154153, 
+                    0.4554310983154153, 
+                    0.42992105741312786, 
+                    0.42992105741312786, 
+                    0.4059470674415785, 
+                    0.4059470674415785, 
+                    0.38435534811341093, 
+                    0.38435534811341093, 
+                    0.36439414901422384, 
+                    0.36439414901422384, 
+                    0.3463178828625253, 
+                    0.3463178828625253, 
+                    0.32786044781858414, 
+                    0.32786044781858414, 
+                    0.30667231200692047, 
+                    0.30667231200692047, 
+                    0.2825717624520773, 
+                    0.2825717624520773, 
+                    0.2560126382601379, 
+                    0.2560126382601379, 
+                    0.22730855289866725, 
+                    0.22730855289866725, 
+                    0.19645290740488972, 
+                    0.19645290740488972, 
+                    0.16291990117922237, 
+                    0.16291990117922237, 
+                    0.12478835706339333, 
+                    0.12478835706339333
+                ], 
+                0.5004588961601257
+            ], 
+            [
+                0.9665254354476929, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999790466766114, 
+                    0.9999790466766114, 
+                    0.9990642332848874, 
+                    0.9990642332848874, 
+                    0.995088170853642, 
+                    0.995088170853642, 
+                    0.9827211450482721, 
+                    0.9827211450482721, 
+                    0.9628422855853632, 
+                    0.9628422855853632, 
+                    0.9345391721608951, 
+                    0.9345391721608951, 
+                    0.9000706729957938, 
+                    0.9000706729957938, 
+                    0.8623436024249264, 
+                    0.8623436024249264, 
+                    0.8229107234860819, 
+                    0.8229107234860819, 
+                    0.7806979617874941, 
+                    0.7806979617874941, 
+                    0.7384021652547657, 
+                    0.7384021652547657, 
+                    0.6971040200966794, 
+                    0.6971040200966794, 
+                    0.6559766709089483, 
+                    0.6559766709089483, 
+                    0.6171989780869247, 
+                    0.6171989780869247, 
+                    0.5778979216591175, 
+                    0.5778979216591175, 
+                    0.5445458578413502, 
+                    0.5445458578413502, 
+                    0.5108781763649559, 
+                    0.5108781763649559, 
+                    0.48003902784854235, 
+                    0.48003902784854235, 
+                    0.45207559676071984, 
+                    0.45207559676071984, 
+                    0.4267179034245775, 
+                    0.4267179034245775, 
+                    0.4028617788031869, 
+                    0.4028617788031869, 
+                    0.38135486877090735, 
+                    0.38135486877090735, 
+                    0.3614263168427743, 
+                    0.3614263168427743, 
+                    0.34360608804857845, 
+                    0.34360608804857845, 
+                    0.3278049729685355, 
+                    0.3278049729685355, 
+                    0.3133931548476425, 
+                    0.3133931548476425, 
+                    0.2963591089992855, 
+                    0.2963591089992855, 
+                    0.2748111364073511, 
+                    0.2748111364073511, 
+                    0.24928739537785974, 
+                    0.24928739537785974, 
+                    0.22013110613469514, 
+                    0.22013110613469514, 
+                    0.1869041060469285, 
+                    0.1869041060469285, 
+                    0.1472927734994907, 
+                    0.1472927734994907
+                ], 
+                0.4895903766155243
+            ], 
+            [
+                0.9747875332832336, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999973752041099, 
+                    0.9999973752041099, 
+                    0.99907827265982, 
+                    0.99907827265982, 
+                    0.9935869942330999, 
+                    0.9935869942330999, 
+                    0.981532121609187, 
+                    0.981532121609187, 
+                    0.961393396425827, 
+                    0.961393396425827, 
+                    0.9324466548761425, 
+                    0.9324466548761425, 
+                    0.8974305763385098, 
+                    0.8974305763385098, 
+                    0.8589887618846029, 
+                    0.8589887618846029, 
+                    0.8193475870220486, 
+                    0.8193475870220486, 
+                    0.7767162168071922, 
+                    0.7767162168071922, 
+                    0.7343084464357745, 
+                    0.7343084464357745, 
+                    0.6927595558706573, 
+                    0.6927595558706573, 
+                    0.6520538243005136, 
+                    0.6520538243005136, 
+                    0.6125015643264178, 
+                    0.6125015643264178, 
+                    0.5744149344418623, 
+                    0.5744149344418623, 
+                    0.5398568695140229, 
+                    0.5398568695140229, 
+                    0.5072043954320831, 
+                    0.5072043954320831, 
+                    0.4759897833200324, 
+                    0.4759897833200324, 
+                    0.44832222308937064, 
+                    0.44832222308937064, 
+                    0.4230737177884651, 
+                    0.4230737177884651, 
+                    0.3993781743581237, 
+                    0.3993781743581237, 
+                    0.3779932227538384, 
+                    0.3779932227538384, 
+                    0.3581726456907484, 
+                    0.3581726456907484, 
+                    0.3404505974340063, 
+                    0.3404505974340063, 
+                    0.32575275378938556, 
+                    0.32575275378938556, 
+                    0.31377413816428806, 
+                    0.31377413816428806, 
+                    0.2978710695068056, 
+                    0.2978710695068056, 
+                    0.2769321973552487, 
+                    0.2769321973552487, 
+                    0.2517806010154289, 
+                    0.2517806010154289, 
+                    0.22279537410432596, 
+                    0.22279537410432596, 
+                    0.18950983977014182, 
+                    0.18950983977014182, 
+                    0.1494854486461368, 
+                    0.1494854486461368
+                ], 
+                0.47053515911102295
+            ], 
+            [
+                0.9831202626228333, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988817385817015, 
+                    0.9988817385817015, 
+                    0.9939605187409387, 
+                    0.9939605187409387, 
+                    0.9813125292258148, 
+                    0.9813125292258148, 
+                    0.959806413127386, 
+                    0.959806413127386, 
+                    0.9301924863097305, 
+                    0.9301924863097305, 
+                    0.8945095196256613, 
+                    0.8945095196256613, 
+                    0.8558323292014245, 
+                    0.8558323292014245, 
+                    0.8156769137917088, 
+                    0.8156769137917088, 
+                    0.7728832294657233, 
+                    0.7728832294657233, 
+                    0.7301639976026668, 
+                    0.7301639976026668, 
+                    0.6888171242977457, 
+                    0.6888171242977457, 
+                    0.6473784567814378, 
+                    0.6473784567814378, 
+                    0.608683205943337, 
+                    0.608683205943337, 
+                    0.5697196439638305, 
+                    0.5697196439638305, 
+                    0.5361534403316079, 
+                    0.5361534403316079, 
+                    0.5028269394872807, 
+                    0.5028269394872807, 
+                    0.4722739061121597, 
+                    0.4722739061121597, 
+                    0.4445120764241704, 
+                    0.4445120764241704, 
+                    0.4194358890851331, 
+                    0.4194358890851331, 
+                    0.39584963464552164, 
+                    0.39584963464552164, 
+                    0.37460560288076533, 
+                    0.37460560288076533, 
+                    0.35493131478999956, 
+                    0.35493131478999956, 
+                    0.33735756486491725, 
+                    0.33735756486491725, 
+                    0.322424984440447, 
+                    0.322424984440447, 
+                    0.3087952386865542, 
+                    0.3087952386865542, 
+                    0.2913998586725549, 
+                    0.2913998586725549, 
+                    0.26955880373016805, 
+                    0.26955880373016805, 
+                    0.24396784189416088, 
+                    0.24396784189416088, 
+                    0.21491870753274508, 
+                    0.21491870753274508, 
+                    0.18193940742925846, 
+                    0.18193940742925846, 
+                    0.14272898706317758, 
+                    0.14272898706317758
+                ], 
+                0.44988346099853516
+            ], 
+            [
+                0.9915242195129395, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999881662054927, 
+                    0.9999881662054927, 
+                    0.9984639010867178, 
+                    0.9984639010867178, 
+                    0.991425942477175, 
+                    0.991425942477175, 
+                    0.9807785361306026, 
+                    0.9807785361306026, 
+                    0.958385391693816, 
+                    0.958385391693816, 
+                    0.9280508720637041, 
+                    0.9280508720637041, 
+                    0.8917348173848753, 
+                    0.8917348173848753, 
+                    0.852559425409678, 
+                    0.852559425409678, 
+                    0.8120816067795306, 
+                    0.8120816067795306, 
+                    0.7690110823713735, 
+                    0.7690110823713735, 
+                    0.7262117027903515, 
+                    0.7262117027903515, 
+                    0.6846142272508539, 
+                    0.6846142272508539, 
+                    0.6433793911878098, 
+                    0.6433793911878098, 
+                    0.6044611669138903, 
+                    0.6044611669138903, 
+                    0.5656624094560504, 
+                    0.5656624094560504, 
+                    0.5321506145489717, 
+                    0.5321506145489717, 
+                    0.49904991052938086, 
+                    0.49904991052938086, 
+                    0.46845361919820316, 
+                    0.46845361919820316, 
+                    0.4409202887458459, 
+                    0.4409202887458459, 
+                    0.415925349343921, 
+                    0.415925349343921, 
+                    0.3925199175094322, 
+                    0.3925199175094322, 
+                    0.37140165985524237, 
+                    0.37140165985524237, 
+                    0.35173851500293407, 
+                    0.35173851500293407, 
+                    0.3342763072525632, 
+                    0.3342763072525632, 
+                    0.3228493379642921, 
+                    0.3228493379642921, 
+                    0.3154871943793073, 
+                    0.3154871943793073, 
+                    0.30231681835917273, 
+                    0.30231681835917273, 
+                    0.28314934669653014, 
+                    0.28314934669653014, 
+                    0.2590959946538848, 
+                    0.2590959946538848, 
+                    0.23060056276018548, 
+                    0.23060056276018548, 
+                    0.19711450755408644, 
+                    0.19711450755408644, 
+                    0.15580791169614078, 
+                    0.15580791169614078
+                ], 
+                0.432827353477478
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986346464136292, 
+                    0.9986346464136292, 
+                    0.9928941703290288, 
+                    0.9928941703290288, 
+                    0.9793176802233889, 
+                    0.9793176802233889, 
+                    0.9566038745170165, 
+                    0.9566038745170165, 
+                    0.9256760221871493, 
+                    0.9256760221871493, 
+                    0.8887709652108393, 
+                    0.8887709652108393, 
+                    0.8491865511754788, 
+                    0.8491865511754788, 
+                    0.8083263937394668, 
+                    0.8083263937394668, 
+                    0.7649726699793431, 
+                    0.7649726699793431, 
+                    0.7219657474257085, 
+                    0.7219657474257085, 
+                    0.680285835953627, 
+                    0.680285835953627, 
+                    0.6390099083296407, 
+                    0.6390099083296407, 
+                    0.600145775063064, 
+                    0.600145775063064, 
+                    0.5613676892482911, 
+                    0.5613676892482911, 
+                    0.52793863161122, 
+                    0.52793863161122, 
+                    0.494976965929212, 
+                    0.494976965929212, 
+                    0.4644695446321725, 
+                    0.4644695446321725, 
+                    0.4370982483875065, 
+                    0.4370982483875065, 
+                    0.4122609596731339, 
+                    0.4122609596731339, 
+                    0.3889552564869981, 
+                    0.3889552564869981, 
+                    0.36798797822312246, 
+                    0.36798797822312246, 
+                    0.34859370871982265, 
+                    0.34859370871982265, 
+                    0.33128370733486756, 
+                    0.33128370733486756, 
+                    0.3159204583233894, 
+                    0.3159204583233894, 
+                    0.30132021856440305, 
+                    0.30132021856440305, 
+                    0.28380371306437363, 
+                    0.28380371306437363, 
+                    0.2621829952087947, 
+                    0.2621829952087947, 
+                    0.23699096635259279, 
+                    0.23699096635259279, 
+                    0.2085115226256868, 
+                    0.2085115226256868, 
+                    0.17631949550008383, 
+                    0.17631949550008383, 
+                    0.13826602498095625, 
+                    0.13826602498095625
+                ], 
+                0.4104498624801636
+            ], 
+            [
+                1.0085482597351074, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999944283128865, 
+                    0.9999944283128865, 
+                    0.9986751715274876, 
+                    0.9986751715274876, 
+                    0.9914575874872609, 
+                    0.9914575874872609, 
+                    0.976175871408514, 
+                    0.976175871408514, 
+                    0.9549100459257737, 
+                    0.9549100459257737, 
+                    0.923288788818196, 
+                    0.923288788818196, 
+                    0.8858340400885726, 
+                    0.8858340400885726, 
+                    0.845802981760789, 
+                    0.845802981760789, 
+                    0.8046089712579925, 
+                    0.8046089712579925, 
+                    0.7610047936880076, 
+                    0.7610047936880076, 
+                    0.7179610936610281, 
+                    0.7179610936610281, 
+                    0.6758948001660816, 
+                    0.6758948001660816, 
+                    0.6351369779960082, 
+                    0.6351369779960082, 
+                    0.5954958212201226, 
+                    0.5954958212201226, 
+                    0.557760374500116, 
+                    0.557760374500116, 
+                    0.5235124692902335, 
+                    0.5235124692902335, 
+                    0.49129802184609994, 
+                    0.49129802184609994, 
+                    0.46054891394494923, 
+                    0.46054891394494923, 
+                    0.43350560784512865, 
+                    0.43350560784512865, 
+                    0.40874570626693546, 
+                    0.40874570626693546, 
+                    0.385583664882161, 
+                    0.385583664882161, 
+                    0.3647418423052424, 
+                    0.3647418423052424, 
+                    0.345439945507849, 
+                    0.345439945507849, 
+                    0.3282542543791599, 
+                    0.3282542543791599, 
+                    0.3134973647879357, 
+                    0.3134973647879357, 
+                    0.30044762295479854, 
+                    0.30044762295479854, 
+                    0.2838008186624402, 
+                    0.2838008186624402, 
+                    0.2627074120568499, 
+                    0.2627074120568499, 
+                    0.2378706590998559, 
+                    0.2378706590998559, 
+                    0.2096034189961566, 
+                    0.2096034189961566, 
+                    0.17746314202438884, 
+                    0.17746314202438884, 
+                    0.13921915297942464, 
+                    0.13921915297942464
+                ], 
+                0.39201056957244873
+            ], 
+            [
+                1.0171695947647095, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999986785562943, 
+                    0.9999986785562943, 
+                    0.9984531632644205, 
+                    0.9984531632644205, 
+                    0.9919796444909329, 
+                    0.9919796444909329, 
+                    0.9773041876512158, 
+                    0.9773041876512158, 
+                    0.9532680224822636, 
+                    0.9532680224822636, 
+                    0.9209321819732043, 
+                    0.9209321819732043, 
+                    0.8828628655796049, 
+                    0.8828628655796049, 
+                    0.8423855466461994, 
+                    0.8423855466461994, 
+                    0.8008817794199201, 
+                    0.8008817794199201, 
+                    0.7570230166658459, 
+                    0.7570230166658459, 
+                    0.7137604599395411, 
+                    0.7137604599395411, 
+                    0.6717636235182708, 
+                    0.6717636235182708, 
+                    0.6308746377062571, 
+                    0.6308746377062571, 
+                    0.5912295208690729, 
+                    0.5912295208690729, 
+                    0.5537842459134035, 
+                    0.5537842459134035, 
+                    0.5194074818232565, 
+                    0.5194074818232565, 
+                    0.487354122665418, 
+                    0.487354122665418, 
+                    0.45682874901580667, 
+                    0.45682874901580667, 
+                    0.4298186904362113, 
+                    0.4298186904362113, 
+                    0.405242224923456, 
+                    0.405242224923456, 
+                    0.38221783223208095, 
+                    0.38221783223208095, 
+                    0.3615238498094329, 
+                    0.3615238498094329, 
+                    0.34239611289843497, 
+                    0.34239611289843497, 
+                    0.32533648864330955, 
+                    0.32533648864330955, 
+                    0.31024286180177024, 
+                    0.31024286180177024, 
+                    0.2957642497380655, 
+                    0.2957642497380655, 
+                    0.27812722482048824, 
+                    0.27812722482048824, 
+                    0.2564795290894304, 
+                    0.2564795290894304, 
+                    0.23140745812793068, 
+                    0.23140745812793068, 
+                    0.2031817653054681, 
+                    0.2031817653054681, 
+                    0.17137749639638436, 
+                    0.17137749639638436, 
+                    0.13390592035038607, 
+                    0.13390592035038607
+                ], 
+                0.37261417508125305
+            ], 
+            [
+                1.025864601135254, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999928617289577, 
+                    0.9999928617289577, 
+                    0.9983311384855589, 
+                    0.9983311384855589, 
+                    0.9914523886508235, 
+                    0.9914523886508235, 
+                    0.9763001110870039, 
+                    0.9763001110870039, 
+                    0.9515155344084627, 
+                    0.9515155344084627, 
+                    0.9184964501097918, 
+                    0.9184964501097918, 
+                    0.8798479674854771, 
+                    0.8798479674854771, 
+                    0.8389407552647834, 
+                    0.8389407552647834, 
+                    0.7971293026325311, 
+                    0.7971293026325311, 
+                    0.7530379672195229, 
+                    0.7530379672195229, 
+                    0.7095698109178845, 
+                    0.7095698109178845, 
+                    0.6677290355425285, 
+                    0.6677290355425285, 
+                    0.6262961510473734, 
+                    0.6262961510473734, 
+                    0.5876576521749238, 
+                    0.5876576521749238, 
+                    0.5489612769519228, 
+                    0.5489612769519228, 
+                    0.5159015738554986, 
+                    0.5159015738554986, 
+                    0.4832695717070352, 
+                    0.4832695717070352, 
+                    0.4531620038234822, 
+                    0.4531620038234822, 
+                    0.4262071717027467, 
+                    0.4262071717027467, 
+                    0.40178478503237847, 
+                    0.40178478503237847, 
+                    0.3789006480942546, 
+                    0.3789006480942546, 
+                    0.3583440768684286, 
+                    0.3583440768684286, 
+                    0.3393512971863405, 
+                    0.3393512971863405, 
+                    0.32242035532422897, 
+                    0.32242035532422897, 
+                    0.30740274699356573, 
+                    0.30740274699356573, 
+                    0.2927957396265533, 
+                    0.2927957396265533, 
+                    0.27506468905823456, 
+                    0.27506468905823456, 
+                    0.25345097933686994, 
+                    0.25345097933686994, 
+                    0.22851657130331982, 
+                    0.22851657130331982, 
+                    0.2005239707792185, 
+                    0.2005239707792185, 
+                    0.1690682341145339, 
+                    0.1690682341145339, 
+                    0.13214057366515172, 
+                    0.13214057366515172
+                ], 
+                0.35418301820755005
+            ], 
+            [
+                1.034633994102478, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999743334418086, 
+                    0.9999743334418086, 
+                    0.9979168593164911, 
+                    0.9979168593164911, 
+                    0.9900816504202588, 
+                    0.9900816504202588, 
+                    0.9732015362218195, 
+                    0.9732015362218195, 
+                    0.9490805295308921, 
+                    0.9490805295308921, 
+                    0.9158799094862307, 
+                    0.9158799094862307, 
+                    0.8767681283205139, 
+                    0.8767681283205139, 
+                    0.8354601623751191, 
+                    0.8354601623751191, 
+                    0.7933484423880329, 
+                    0.7933484423880329, 
+                    0.7490078759887487, 
+                    0.7490078759887487, 
+                    0.7055367762681435, 
+                    0.7055367762681435, 
+                    0.6632595684760435, 
+                    0.6632595684760435, 
+                    0.6226761154999404, 
+                    0.6226761154999404, 
+                    0.5825977526967836, 
+                    0.5825977526967836, 
+                    0.5459860642854244, 
+                    0.5459860642854244, 
+                    0.5111994082321368, 
+                    0.5111994082321368, 
+                    0.47974805113091507, 
+                    0.47974805113091507, 
+                    0.4493540102277468, 
+                    0.4493540102277468, 
+                    0.42266553277250507, 
+                    0.42266553277250507, 
+                    0.3983618802621286, 
+                    0.3983618802621286, 
+                    0.3756254626957415, 
+                    0.3756254626957415, 
+                    0.3551663871434348, 
+                    0.3551663871434348, 
+                    0.33600209907261774, 
+                    0.33600209907261774, 
+                    0.31866396674986225, 
+                    0.31866396674986225, 
+                    0.30570734876884115, 
+                    0.30570734876884115, 
+                    0.29371649146021644, 
+                    0.29371649146021644, 
+                    0.2770285319480013, 
+                    0.2770285319480013, 
+                    0.2559187031459886, 
+                    0.2559187031459886, 
+                    0.2311660326369306, 
+                    0.2311660326369306, 
+                    0.20301276176083793, 
+                    0.20301276176083793, 
+                    0.17090879816064772, 
+                    0.17090879816064772, 
+                    0.13253148119366465, 
+                    0.13253148119366465
+                ], 
+                0.33686932921409607
+            ], 
+            [
+                1.04347825050354, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984156130730304, 
+                    0.9984156130730304, 
+                    0.9896893385332526, 
+                    0.9896893385332526, 
+                    0.974078780728467, 
+                    0.974078780728467, 
+                    0.9479562881227411, 
+                    0.9479562881227411, 
+                    0.9136995914126548, 
+                    0.9136995914126548, 
+                    0.8739173221910115, 
+                    0.8739173221910115, 
+                    0.8320099820657559, 
+                    0.8320099820657559, 
+                    0.7895291089586512, 
+                    0.7895291089586512, 
+                    0.7449800013889321, 
+                    0.7449800013889321, 
+                    0.7013164027020637, 
+                    0.7013164027020637, 
+                    0.6592474692653807, 
+                    0.6592474692653807, 
+                    0.6180885522094639, 
+                    0.6180885522094639, 
+                    0.5789495741117978, 
+                    0.5789495741117978, 
+                    0.5412046968633226, 
+                    0.5412046968633226, 
+                    0.5077417122324576, 
+                    0.5077417122324576, 
+                    0.4757894854461071, 
+                    0.4757894854461071, 
+                    0.44581601395186543, 
+                    0.44581601395186543, 
+                    0.41918394486170507, 
+                    0.41918394486170507, 
+                    0.3950036641336543, 
+                    0.3950036641336543, 
+                    0.3723967846953445, 
+                    0.3723967846953445, 
+                    0.35208698444383413, 
+                    0.35208698444383413, 
+                    0.3333156522041398, 
+                    0.3333156522041398, 
+                    0.316489285571582, 
+                    0.316489285571582, 
+                    0.3015982557513876, 
+                    0.3015982557513876, 
+                    0.2921355386382568, 
+                    0.2921355386382568, 
+                    0.2830116408974321, 
+                    0.2830116408974321, 
+                    0.2680279275828274, 
+                    0.2680279275828274, 
+                    0.2475956837627944, 
+                    0.2475956837627944, 
+                    0.22239713739189937, 
+                    0.22239713739189937, 
+                    0.19216168514414106, 
+                    0.19216168514414106, 
+                    0.154442814540498, 
+                    0.154442814540498
+                ], 
+                0.32094138860702515
+            ], 
+            [
+                1.0523982048034668, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999429659942883, 
+                    0.9999429659942883, 
+                    0.9977796480476157, 
+                    0.9977796480476157, 
+                    0.9892433245368351, 
+                    0.9892433245368351, 
+                    0.9720337195174472, 
+                    0.9720337195174472, 
+                    0.945880672503764, 
+                    0.945880672503764, 
+                    0.9109127001744799, 
+                    0.9109127001744799, 
+                    0.8705853543883485, 
+                    0.8705853543883485, 
+                    0.8284377063456285, 
+                    0.8284377063456285, 
+                    0.7857345673919793, 
+                    0.7857345673919793, 
+                    0.7409527410865722, 
+                    0.7409527410865722, 
+                    0.6972323083958625, 
+                    0.6972323083958625, 
+                    0.6549322289618872, 
+                    0.6549322289618872, 
+                    0.614186472255497, 
+                    0.614186472255497, 
+                    0.574549443685561, 
+                    0.574549443685561, 
+                    0.5375870639099904, 
+                    0.5375870639099904, 
+                    0.5035657012932528, 
+                    0.5035657012932528, 
+                    0.4720239794150501, 
+                    0.4720239794150501, 
+                    0.44206121853360447, 
+                    0.44206121853360447, 
+                    0.41561910509497535, 
+                    0.41561910509497535, 
+                    0.39160655947419365, 
+                    0.39160655947419365, 
+                    0.36915773949547287, 
+                    0.36915773949547287, 
+                    0.34904321705317864, 
+                    0.34904321705317864, 
+                    0.3304329989182273, 
+                    0.3304329989182273, 
+                    0.31331327593287295, 
+                    0.31331327593287295, 
+                    0.2993094728555006, 
+                    0.2993094728555006, 
+                    0.2857109769640028, 
+                    0.2857109769640028, 
+                    0.2681217631800206, 
+                    0.2681217631800206, 
+                    0.24664092496227646, 
+                    0.24664092496227646, 
+                    0.2219513753356147, 
+                    0.2219513753356147, 
+                    0.19429344764018466, 
+                    0.19429344764018466, 
+                    0.16322892187208338, 
+                    0.16322892187208338, 
+                    0.1267595042556445, 
+                    0.1267595042556445
+                ], 
+                0.30180442333221436
+            ], 
+            [
+                1.0613943338394165, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999932133177704, 
+                    0.999932133177704, 
+                    0.997404847047338, 
+                    0.997404847047338, 
+                    0.9882821301579258, 
+                    0.9882821301579258, 
+                    0.9707214669026277, 
+                    0.9707214669026277, 
+                    0.9436386746348769, 
+                    0.9436386746348769, 
+                    0.9082298633872458, 
+                    0.9082298633872458, 
+                    0.867372954794559, 
+                    0.867372954794559, 
+                    0.8248466629664466, 
+                    0.8248466629664466, 
+                    0.7818519944645916, 
+                    0.7818519944645916, 
+                    0.7369482105914381, 
+                    0.7369482105914381, 
+                    0.6930015032126288, 
+                    0.6930015032126288, 
+                    0.6507901402698957, 
+                    0.6507901402698957, 
+                    0.6100814316281645, 
+                    0.6100814316281645, 
+                    0.5703482381500007, 
+                    0.5703482381500007, 
+                    0.5335462232447095, 
+                    0.5335462232447095, 
+                    0.4996265694351231, 
+                    0.4996265694351231, 
+                    0.46842435787904646, 
+                    0.46842435787904646, 
+                    0.43832595068381275, 
+                    0.43832595068381275, 
+                    0.4121690932560911, 
+                    0.4121690932560911, 
+                    0.38826510348772864, 
+                    0.38826510348772864, 
+                    0.3659692999425804, 
+                    0.3659692999425804, 
+                    0.34602956286804515, 
+                    0.34602956286804515, 
+                    0.32761392573065345, 
+                    0.32761392573065345, 
+                    0.3095826430241409, 
+                    0.3095826430241409, 
+                    0.29606439792659694, 
+                    0.29606439792659694, 
+                    0.2850347346788098, 
+                    0.2850347346788098, 
+                    0.2693565630553292, 
+                    0.2693565630553292, 
+                    0.24919991450855786, 
+                    0.24919991450855786, 
+                    0.2253803524251558, 
+                    0.2253803524251558, 
+                    0.19818031392328705, 
+                    0.19818031392328705, 
+                    0.167104218832504, 
+                    0.167104218832504, 
+                    0.12991201473557568, 
+                    0.12991201473557568
+                ], 
+                0.28580668568611145
+            ], 
+            [
+                1.0704673528671265, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999025212344195, 
+                    0.9999025212344195, 
+                    0.9972969414176147, 
+                    0.9972969414176147, 
+                    0.9883569507644128, 
+                    0.9883569507644128, 
+                    0.9696241468672322, 
+                    0.9696241468672322, 
+                    0.941856251310074, 
+                    0.941856251310074, 
+                    0.9055973867903332, 
+                    0.9055973867903332, 
+                    0.8642070968915739, 
+                    0.8642070968915739, 
+                    0.8212703585278471, 
+                    0.8212703585278471, 
+                    0.7780431214483597, 
+                    0.7780431214483597, 
+                    0.7328933744463708, 
+                    0.7328933744463708, 
+                    0.6888272133073541, 
+                    0.6888272133073541, 
+                    0.64671567104055, 
+                    0.64671567104055, 
+                    0.6055816383049603, 
+                    0.6055816383049603, 
+                    0.5666650096488622, 
+                    0.5666650096488622, 
+                    0.5290581678692236, 
+                    0.5290581678692236, 
+                    0.4960900315874061, 
+                    0.4960900315874061, 
+                    0.46455558317417717, 
+                    0.46455558317417717, 
+                    0.43484593103178626, 
+                    0.43484593103178626, 
+                    0.4087069156852038, 
+                    0.4087069156852038, 
+                    0.3849770946588229, 
+                    0.3849770946588229, 
+                    0.36282767395081456, 
+                    0.36282767395081456, 
+                    0.3430589664258407, 
+                    0.3430589664258407, 
+                    0.32483649357310956, 
+                    0.32483649357310956, 
+                    0.30689764795843816, 
+                    0.30689764795843816, 
+                    0.29300386926773264, 
+                    0.29300386926773264, 
+                    0.282167147732359, 
+                    0.282167147732359, 
+                    0.26694771420008645, 
+                    0.26694771420008645, 
+                    0.2471855008774153, 
+                    0.2471855008774153, 
+                    0.2237158783329172, 
+                    0.2237158783329172, 
+                    0.1968444894615219, 
+                    0.1968444894615219, 
+                    0.1660946407452579, 
+                    0.1660946407452579, 
+                    0.12925115675259308, 
+                    0.12925115675259308
+                ], 
+                0.2698424458503723
+            ], 
+            [
+                1.079617977142334, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998888491330364, 
+                    0.9998888491330364, 
+                    0.9974235023730975, 
+                    0.9974235023730975, 
+                    0.9881765481499349, 
+                    0.9881765481499349, 
+                    0.9693105401587522, 
+                    0.9693105401587522, 
+                    0.940073315817196, 
+                    0.940073315817196, 
+                    0.9029228241332029, 
+                    0.9029228241332029, 
+                    0.8609644928447612, 
+                    0.8609644928447612, 
+                    0.8176668330977985, 
+                    0.8176668330977985, 
+                    0.7741450601945837, 
+                    0.7741450601945837, 
+                    0.7288094588928699, 
+                    0.7288094588928699, 
+                    0.6847093369140306, 
+                    0.6847093369140306, 
+                    0.6425553473280501, 
+                    0.6425553473280501, 
+                    0.6014171061889999, 
+                    0.6014171061889999, 
+                    0.5626972820405018, 
+                    0.5626972820405018, 
+                    0.5251622219203149, 
+                    0.5251622219203149, 
+                    0.4922286487988833, 
+                    0.4922286487988833, 
+                    0.4607075929185696, 
+                    0.4607075929185696, 
+                    0.4313325610967937, 
+                    0.4313325610967937, 
+                    0.40529296260138975, 
+                    0.40529296260138975, 
+                    0.38172200180729315, 
+                    0.38172200180729315, 
+                    0.3596977913111033, 
+                    0.3596977913111033, 
+                    0.33996705007280464, 
+                    0.33996705007280464, 
+                    0.32177128354613266, 
+                    0.32177128354613266, 
+                    0.30559460551241197, 
+                    0.30559460551241197, 
+                    0.2914411832572536, 
+                    0.2914411832572536, 
+                    0.27724467026312094, 
+                    0.27724467026312094, 
+                    0.2594828078032498, 
+                    0.2594828078032498, 
+                    0.23810385759311659, 
+                    0.23810385759311659, 
+                    0.21377952238937206, 
+                    0.21377952238937206, 
+                    0.186783538765755, 
+                    0.186783538765755, 
+                    0.15678640687692402, 
+                    0.15678640687692402, 
+                    0.12209954021585832, 
+                    0.12209954021585832
+                ], 
+                0.25362855195999146
+            ], 
+            [
+                1.0888469219207764, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999857516109043, 
+                    0.999857516109043, 
+                    0.997299652545824, 
+                    0.997299652545824, 
+                    0.9875247843620981, 
+                    0.9875247843620981, 
+                    0.9680531659504497, 
+                    0.9680531659504497, 
+                    0.9380040915640436, 
+                    0.9380040915640436, 
+                    0.9001596988097232, 
+                    0.9001596988097232, 
+                    0.8576782436380369, 
+                    0.8576782436380369, 
+                    0.8140083656531955, 
+                    0.8140083656531955, 
+                    0.7702339942500681, 
+                    0.7702339942500681, 
+                    0.7247083390475312, 
+                    0.7247083390475312, 
+                    0.6805745746605933, 
+                    0.6805745746605933, 
+                    0.6382997089813411, 
+                    0.6382997089813411, 
+                    0.5973856249943449, 
+                    0.5973856249943449, 
+                    0.5584994605350743, 
+                    0.5584994605350743, 
+                    0.5213314160890943, 
+                    0.5213314160890943, 
+                    0.4883244877683785, 
+                    0.4883244877683785, 
+                    0.4570409405029732, 
+                    0.4570409405029732, 
+                    0.4277849458108653, 
+                    0.4277849458108653, 
+                    0.40190233444606865, 
+                    0.40190233444606865, 
+                    0.3784735954344431, 
+                    0.3784735954344431, 
+                    0.3565911957686712, 
+                    0.3565911957686712, 
+                    0.3369979151997001, 
+                    0.3369979151997001, 
+                    0.3189734667538882, 
+                    0.3189734667538882, 
+                    0.30292465751558323, 
+                    0.30292465751558323, 
+                    0.2883207347025029, 
+                    0.2883207347025029, 
+                    0.2759676373786415, 
+                    0.2759676373786415, 
+                    0.26044658323066605, 
+                    0.26044658323066605, 
+                    0.24073511457965993, 
+                    0.24073511457965993, 
+                    0.21756813669854225, 
+                    0.21756813669854225, 
+                    0.19129626967045918, 
+                    0.19129626967045918, 
+                    0.1615811446292754, 
+                    0.1615811446292754, 
+                    0.126530507402065, 
+                    0.126530507402065
+                ], 
+                0.23934520781040192
+            ]
+        ]
+    }, 
+    {
+        "block_size": 70, 
+        "preprocessing_block_sizes": [
+            56
+        ], 
+        "pruning_parameters": [
+            [
+                0.9194970726966858, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999999929279361, 
+                    0.9999999929279361, 
+                    0.9999691132806234, 
+                    0.9999691132806234, 
+                    0.9978511542185358, 
+                    0.9978511542185358, 
+                    0.9874571846444743, 
+                    0.9874571846444743, 
+                    0.9602435710651506, 
+                    0.9602435710651506, 
+                    0.9291745732191851, 
+                    0.9291745732191851, 
+                    0.8974637377458261, 
+                    0.8974637377458261, 
+                    0.8658089716768138, 
+                    0.8658089716768138, 
+                    0.8345864202107441, 
+                    0.8345864202107441, 
+                    0.8036073992440571, 
+                    0.8036073992440571, 
+                    0.7725793363034025, 
+                    0.7725793363034025, 
+                    0.7415032388749523, 
+                    0.7415032388749523, 
+                    0.7099403232992415, 
+                    0.7099403232992415, 
+                    0.6782767361661698, 
+                    0.6782767361661698, 
+                    0.6464783872219012, 
+                    0.6464783872219012, 
+                    0.615002149459724, 
+                    0.615002149459724, 
+                    0.5836502395653278, 
+                    0.5836502395653278, 
+                    0.5518453776488431, 
+                    0.5518453776488431, 
+                    0.5221286268371632, 
+                    0.5221286268371632, 
+                    0.49395488773170276, 
+                    0.49395488773170276, 
+                    0.46623336835521145, 
+                    0.46623336835521145, 
+                    0.4390266766994497, 
+                    0.4390266766994497, 
+                    0.41240347935117677, 
+                    0.41240347935117677, 
+                    0.3854386661800916, 
+                    0.3854386661800916, 
+                    0.3581307150813002, 
+                    0.3581307150813002, 
+                    0.33046604376278055, 
+                    0.33046604376278055, 
+                    0.30247427542887984, 
+                    0.30247427542887984, 
+                    0.27422211499819893, 
+                    0.27422211499819893, 
+                    0.24578855811799794, 
+                    0.24578855811799794, 
+                    0.21720951970270916, 
+                    0.21720951970270916, 
+                    0.1884967334911577, 
+                    0.1884967334911577, 
+                    0.15963181579118393, 
+                    0.15963181579118393, 
+                    0.13055944896717112, 
+                    0.13055944896717112, 
+                    0.10050713954885178, 
+                    0.10050713954885178
+                ], 
+                0.5004123449325562
+            ], 
+            [
+                0.9272467494010925, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999722931708993, 
+                    0.9999722931708993, 
+                    0.997920615133157, 
+                    0.997920615133157, 
+                    0.987717775807202, 
+                    0.987717775807202, 
+                    0.9613483801226976, 
+                    0.9613483801226976, 
+                    0.9311314816944996, 
+                    0.9311314816944996, 
+                    0.8999271927507968, 
+                    0.8999271927507968, 
+                    0.8684776864970278, 
+                    0.8684776864970278, 
+                    0.837209669491828, 
+                    0.837209669491828, 
+                    0.8060315533851238, 
+                    0.8060315533851238, 
+                    0.7746486981689469, 
+                    0.7746486981689469, 
+                    0.7430991887357716, 
+                    0.7430991887357716, 
+                    0.7109260740070613, 
+                    0.7109260740070613, 
+                    0.6786373629092352, 
+                    0.6786373629092352, 
+                    0.6462071353444424, 
+                    0.6462071353444424, 
+                    0.6141769006270873, 
+                    0.6141769006270873, 
+                    0.5823254547526414, 
+                    0.5823254547526414, 
+                    0.5500111629982005, 
+                    0.5500111629982005, 
+                    0.5201020591507346, 
+                    0.5201020591507346, 
+                    0.49202054887105545, 
+                    0.49202054887105545, 
+                    0.4645139374161332, 
+                    0.4645139374161332, 
+                    0.43764173071455553, 
+                    0.43764173071455553, 
+                    0.41148584978398567, 
+                    0.41148584978398567, 
+                    0.38492270267662104, 
+                    0.38492270267662104, 
+                    0.3579348744771768, 
+                    0.3579348744771768, 
+                    0.33050601900547344, 
+                    0.33050601900547344, 
+                    0.30267399495524083, 
+                    0.30267399495524083, 
+                    0.27452222385397446, 
+                    0.27452222385397446, 
+                    0.24614787301473995, 
+                    0.24614787301473995, 
+                    0.21759645944137923, 
+                    0.21759645944137923, 
+                    0.18888462955960197, 
+                    0.18888462955960197, 
+                    0.15999350908751445, 
+                    0.15999350908751445, 
+                    0.1308600641180247, 
+                    0.1308600641180247, 
+                    0.10072352459419733, 
+                    0.10072352459419733
+                ], 
+                0.5007811188697815
+            ], 
+            [
+                0.9350617527961731, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999709801459888, 
+                    0.9999709801459888, 
+                    0.9979404220075889, 
+                    0.9979404220075889, 
+                    0.9876958458958033, 
+                    0.9876958458958033, 
+                    0.9606629236812463, 
+                    0.9606629236812463, 
+                    0.9297615760319919, 
+                    0.9297615760319919, 
+                    0.8981331398195793, 
+                    0.8981331398195793, 
+                    0.8664972554138742, 
+                    0.8664972554138742, 
+                    0.8352342765338362, 
+                    0.8352342765338362, 
+                    0.8041780633999562, 
+                    0.8041780633999562, 
+                    0.7730187670338485, 
+                    0.7730187670338485, 
+                    0.7417726329487841, 
+                    0.7417726329487841, 
+                    0.7099800651261511, 
+                    0.7099800651261511, 
+                    0.6780966137278577, 
+                    0.6780966137278577, 
+                    0.6460913814141003, 
+                    0.6460913814141003, 
+                    0.6144789547949281, 
+                    0.6144789547949281, 
+                    0.5830579535147227, 
+                    0.5830579535147227, 
+                    0.5512554308053116, 
+                    0.5512554308053116, 
+                    0.5216741019793868, 
+                    0.5216741019793868, 
+                    0.4936697564591409, 
+                    0.4936697564591409, 
+                    0.4661098866559137, 
+                    0.4661098866559137, 
+                    0.43903567629350476, 
+                    0.43903567629350476, 
+                    0.41247623929008304, 
+                    0.41247623929008304, 
+                    0.38554546074110974, 
+                    0.38554546074110974, 
+                    0.3582510462711032, 
+                    0.3582510462711032, 
+                    0.3305886026261966, 
+                    0.3305886026261966, 
+                    0.30259559532232055, 
+                    0.30259559532232055, 
+                    0.2743422143408078, 
+                    0.2743422143408078, 
+                    0.24590604267840052, 
+                    0.24590604267840052, 
+                    0.2173227597362288, 
+                    0.2173227597362288, 
+                    0.1886031661921699, 
+                    0.1886031661921699, 
+                    0.15972749576923212, 
+                    0.15972749576923212, 
+                    0.13063765890645102, 
+                    0.13063765890645102, 
+                    0.10059813697033085, 
+                    0.10059813697033085
+                ], 
+                0.500635027885437
+            ], 
+            [
+                0.9429426193237305, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9779815038392108, 
+                    0.9779815038392108, 
+                    0.9333148948284239, 
+                    0.9333148948284239, 
+                    0.8899709621192657, 
+                    0.8899709621192657, 
+                    0.8459452159099685, 
+                    0.8459452159099685, 
+                    0.801739022470679, 
+                    0.801739022470679, 
+                    0.7544517508585032, 
+                    0.7544517508585032, 
+                    0.706997345359833, 
+                    0.706997345359833, 
+                    0.6590088554189317, 
+                    0.6590088554189317, 
+                    0.6134538181780346, 
+                    0.6134538181780346, 
+                    0.569038641885866, 
+                    0.569038641885866, 
+                    0.5221534165062486, 
+                    0.5221534165062486, 
+                    0.4884271290185004, 
+                    0.4884271290185004, 
+                    0.4638889967684197, 
+                    0.4638889967684197, 
+                    0.44149357109616544, 
+                    0.44149357109616544, 
+                    0.421672157116819, 
+                    0.421672157116819, 
+                    0.4047513791266565, 
+                    0.4047513791266565, 
+                    0.38547942424879694, 
+                    0.38547942424879694, 
+                    0.364070906352941, 
+                    0.364070906352941, 
+                    0.34054803773461245, 
+                    0.34054803773461245, 
+                    0.31515226921224926, 
+                    0.31515226921224926, 
+                    0.28829684876020106, 
+                    0.28829684876020106, 
+                    0.2604233999871429, 
+                    0.2604233999871429, 
+                    0.23172983766654276, 
+                    0.23172983766654276, 
+                    0.20227174758888036, 
+                    0.20227174758888036, 
+                    0.17193123066473145, 
+                    0.17193123066473145, 
+                    0.14037424719767866, 
+                    0.14037424719767866, 
+                    0.10339970840035113, 
+                    0.10339970840035113
+                ], 
+                0.5000751614570618
+            ], 
+            [
+                0.9508898854255676, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9999830694145277, 
+                    0.9797030402246804, 
+                    0.9797030402246804, 
+                    0.9381102957401662, 
+                    0.9381102957401662, 
+                    0.8981969353333904, 
+                    0.8981969353333904, 
+                    0.8591571023165532, 
+                    0.8591571023165532, 
+                    0.8194671320558535, 
+                    0.8194671320558535, 
+                    0.7793633760420644, 
+                    0.7793633760420644, 
+                    0.7366997557660024, 
+                    0.7366997557660024, 
+                    0.6937846047936348, 
+                    0.6937846047936348, 
+                    0.650441313691799, 
+                    0.650441313691799, 
+                    0.6090696320951503, 
+                    0.6090696320951503, 
+                    0.5687479677565933, 
+                    0.5687479677565933, 
+                    0.5267913170984816, 
+                    0.5267913170984816, 
+                    0.4949520359156718, 
+                    0.4949520359156718, 
+                    0.46994491757346557, 
+                    0.46994491757346557, 
+                    0.44652318726793894, 
+                    0.44652318726793894, 
+                    0.4249074862862046, 
+                    0.4249074862862046, 
+                    0.40516420605954, 
+                    0.40516420605954, 
+                    0.38362432507769656, 
+                    0.38362432507769656, 
+                    0.3604546283574136, 
+                    0.3604546283574136, 
+                    0.3357010949633585, 
+                    0.3357010949633585, 
+                    0.3095646738488298, 
+                    0.3095646738488298, 
+                    0.2823593731490843, 
+                    0.2823593731490843, 
+                    0.2544090907481279, 
+                    0.2544090907481279, 
+                    0.2258655114719877, 
+                    0.2258655114719877, 
+                    0.19677772806355642, 
+                    0.19677772806355642, 
+                    0.16707280499266322, 
+                    0.16707280499266322, 
+                    0.13652768804780263, 
+                    0.13652768804780263, 
+                    0.10230696364190098, 
+                    0.10230696364190098
+                ], 
+                0.4998095631599426
+            ], 
+            [
+                0.9589040875434875, 
+                [
+                    1.0, 
+                    1.0, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9999993296413336, 
+                    0.9850802634803263, 
+                    0.9850802634803263, 
+                    0.94730347057349, 
+                    0.94730347057349, 
+                    0.9096088271927685, 
+                    0.9096088271927685, 
+                    0.87306447355098, 
+                    0.87306447355098, 
+                    0.8370787125343763, 
+                    0.8370787125343763, 
+                    0.8005161175262231, 
+                    0.8005161175262231, 
+                    0.7635089423939134, 
+                    0.7635089423939134, 
+                    0.7244597336066504, 
+                    0.7244597336066504, 
+                    0.685178504782302, 
+                    0.685178504782302, 
+                    0.645587120732226, 
+                    0.645587120732226, 
+                    0.6075701633183457, 
+                    0.6075701633183457, 
+                    0.5704820591853869, 
+                    0.5704820591853869, 
+                    0.5324514751646794, 
+                    0.5324514751646794, 
+                    0.5019539241097323, 
+                    0.5019539241097323, 
+                    0.47632977297892354, 
+                    0.47632977297892354, 
+                    0.4518598821219312, 
+                    0.4518598821219312, 
+                    0.4286169097203434, 
+                    0.4286169097203434, 
+                    0.40654506613299546, 
+                    0.40654506613299546, 
+                    0.3831596968180102, 
+                    0.3831596968180102, 
+                    0.3585699012503801, 
+                    0.3585699012503801, 
+                    0.3328209959959376, 
+                    0.3328209959959376, 
+                    0.30606996640231177, 
+                    0.30606996640231177, 
+                    0.2785486329318518, 
+                    0.2785486329318518, 
+                    0.25048948883996497, 
+                    0.25048948883996497, 
+                    0.22200539346934722, 
+                    0.22200539346934722, 
+                    0.1931360946329765, 
+                    0.1931360946329765, 
+                    0.1638361080274663, 
+                    0.1638361080274663, 
+                    0.1339555885944035, 
+                    0.1339555885944035, 
+                    0.10159649913271218, 
+                    0.10159649913271218
+                ], 
+                0.5000655055046082
+            ], 
+            [
+                0.9669858813285828, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999756579767669, 
+                    0.9999756579767669, 
+                    0.9999756579767669, 
+                    0.9999756579767669, 
+                    0.9999756579767669, 
+                    0.9999756579767669, 
+                    0.9999756579767669, 
+                    0.9999756579767669, 
+                    0.9843051927946197, 
+                    0.9843051927946197, 
+                    0.9467978119135998, 
+                    0.9467978119135998, 
+                    0.9098123197452896, 
+                    0.9098123197452896, 
+                    0.87389020348142, 
+                    0.87389020348142, 
+                    0.8380646720770049, 
+                    0.8380646720770049, 
+                    0.8009901073508562, 
+                    0.8009901073508562, 
+                    0.7631979044604488, 
+                    0.7631979044604488, 
+                    0.7233532359851018, 
+                    0.7233532359851018, 
+                    0.6837100382654895, 
+                    0.6837100382654895, 
+                    0.6443031244131351, 
+                    0.6443031244131351, 
+                    0.6065745178434511, 
+                    0.6065745178434511, 
+                    0.5699531688594035, 
+                    0.5699531688594035, 
+                    0.5341114064432092, 
+                    0.5341114064432092, 
+                    0.5031045892560985, 
+                    0.5031045892560985, 
+                    0.4756795939630904, 
+                    0.4756795939630904, 
+                    0.45025625393593766, 
+                    0.45025625393593766, 
+                    0.4265744806189971, 
+                    0.4265744806189971, 
+                    0.4047142807602544, 
+                    0.4047142807602544, 
+                    0.3820187589759486, 
+                    0.3820187589759486, 
+                    0.3581268100430408, 
+                    0.3581268100430408, 
+                    0.3329552659187295, 
+                    0.3329552659187295, 
+                    0.3066274869166636, 
+                    0.3066274869166636, 
+                    0.2793922139472034, 
+                    0.2793922139472034, 
+                    0.2515147679607921, 
+                    0.2515147679607921, 
+                    0.22312736673821906, 
+                    0.22312736673821906, 
+                    0.19428044365142472, 
+                    0.19428044365142472, 
+                    0.1649271182294289, 
+                    0.1649271182294289, 
+                    0.13489296885945845, 
+                    0.13489296885945845, 
+                    0.10240899626473346, 
+                    0.10240899626473346
+                ], 
+                0.49960750341415405
+            ], 
+            [
+                0.9751358032226562, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999965127578841, 
+                    0.999965127578841, 
+                    0.9999563680422179, 
+                    0.9999563680422179, 
+                    0.9999563680422179, 
+                    0.9999563680422179, 
+                    0.9999563680422179, 
+                    0.9999563680422179, 
+                    0.983120789954266, 
+                    0.983120789954266, 
+                    0.945999855484142, 
+                    0.945999855484142, 
+                    0.9098858826646431, 
+                    0.9098858826646431, 
+                    0.8745727818591428, 
+                    0.8745727818591428, 
+                    0.8387961100060215, 
+                    0.8387961100060215, 
+                    0.8008847337544434, 
+                    0.8008847337544434, 
+                    0.7621489486395947, 
+                    0.7621489486395947, 
+                    0.7215790454279393, 
+                    0.7215790454279393, 
+                    0.6819386229401374, 
+                    0.6819386229401374, 
+                    0.6432188609425904, 
+                    0.6432188609425904, 
+                    0.6061976535918707, 
+                    0.6061976535918707, 
+                    0.570490686787606, 
+                    0.570490686787606, 
+                    0.5371799250638241, 
+                    0.5371799250638241, 
+                    0.5053437760614091, 
+                    0.5053437760614091, 
+                    0.47546344976231003, 
+                    0.47546344976231003, 
+                    0.4484694597748675, 
+                    0.4484694597748675, 
+                    0.4239291322099489, 
+                    0.4239291322099489, 
+                    0.4021778304976058, 
+                    0.4021778304976058, 
+                    0.38035572898399217, 
+                    0.38035572898399217, 
+                    0.35740862328048495, 
+                    0.35740862328048495, 
+                    0.3330348991657565, 
+                    0.3330348991657565, 
+                    0.3072949450328827, 
+                    0.3072949450328827, 
+                    0.2804582285522706, 
+                    0.2804582285522706, 
+                    0.25283759016340784, 
+                    0.25283759016340784, 
+                    0.22459142628396295, 
+                    0.22459142628396295, 
+                    0.1957846545621498, 
+                    0.1957846545621498, 
+                    0.16636833511991359, 
+                    0.16636833511991359, 
+                    0.13613633689287302, 
+                    0.13613633689287302, 
+                    0.10344518525299047, 
+                    0.10344518525299047
+                ], 
+                0.5000051856040955
+            ], 
+            [
+                0.983354389667511, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999990270457945, 
+                    0.9999990270457945, 
+                    0.999975900645908, 
+                    0.999975900645908, 
+                    0.9999454592832248, 
+                    0.9999454592832248, 
+                    0.9910994160140327, 
+                    0.9910994160140327, 
+                    0.9619325331522575, 
+                    0.9619325331522575, 
+                    0.9356565880851399, 
+                    0.9356565880851399, 
+                    0.9069381618669986, 
+                    0.9069381618669986, 
+                    0.8749417795494109, 
+                    0.8749417795494109, 
+                    0.839963391649085, 
+                    0.839963391649085, 
+                    0.8010112559740865, 
+                    0.8010112559740865, 
+                    0.7610838160695003, 
+                    0.7610838160695003, 
+                    0.7200926425547785, 
+                    0.7200926425547785, 
+                    0.6808448853333079, 
+                    0.6808448853333079, 
+                    0.6428356178201033, 
+                    0.6428356178201033, 
+                    0.606387232744746, 
+                    0.606387232744746, 
+                    0.5710850729386552, 
+                    0.5710850729386552, 
+                    0.5366266689075645, 
+                    0.5366266689075645, 
+                    0.5041314619217119, 
+                    0.5041314619217119, 
+                    0.4738404186605545, 
+                    0.4738404186605545, 
+                    0.44595676568349835, 
+                    0.44595676568349835, 
+                    0.42071555204697153, 
+                    0.42071555204697153, 
+                    0.3990544400572327, 
+                    0.3990544400572327, 
+                    0.378626847108083, 
+                    0.378626847108083, 
+                    0.3575354614620865, 
+                    0.3575354614620865, 
+                    0.33482482145321385, 
+                    0.33482482145321385, 
+                    0.31031336857299924, 
+                    0.31031336857299924, 
+                    0.2842801302164562, 
+                    0.2842801302164562, 
+                    0.2571452230620672, 
+                    0.2571452230620672, 
+                    0.22911913428401054, 
+                    0.22911913428401054, 
+                    0.20029285990528434, 
+                    0.20029285990528434, 
+                    0.17060382896723952, 
+                    0.17060382896723952, 
+                    0.1397642675893311, 
+                    0.1397642675893311, 
+                    0.10654968684355547, 
+                    0.10654968684355547
+                ], 
+                0.4998757839202881
+            ], 
+            [
+                0.9916422963142395, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999789259869323, 
+                    0.9999789259869323, 
+                    0.9998702875194553, 
+                    0.9998702875194553, 
+                    0.9998516587965514, 
+                    0.9998516587965514, 
+                    0.9893911066030171, 
+                    0.9893911066030171, 
+                    0.9654927168897941, 
+                    0.9654927168897941, 
+                    0.9417881217279437, 
+                    0.9417881217279437, 
+                    0.9122876171890829, 
+                    0.9122876171890829, 
+                    0.8782177231145927, 
+                    0.8782177231145927, 
+                    0.8410649277074033, 
+                    0.8410649277074033, 
+                    0.8000158253695556, 
+                    0.8000158253695556, 
+                    0.7591099715769251, 
+                    0.7591099715769251, 
+                    0.717554021113785, 
+                    0.717554021113785, 
+                    0.6784874800572479, 
+                    0.6784874800572479, 
+                    0.6404432154085011, 
+                    0.6404432154085011, 
+                    0.6031930437319298, 
+                    0.6031930437319298, 
+                    0.5720701165349752, 
+                    0.5720701165349752, 
+                    0.527946219487158, 
+                    0.527946219487158, 
+                    0.5046056358006527, 
+                    0.5046056358006527, 
+                    0.47215161547229595, 
+                    0.47215161547229595, 
+                    0.4441933393401198, 
+                    0.4441933393401198, 
+                    0.4195907995217463, 
+                    0.4195907995217463, 
+                    0.39760059440167517, 
+                    0.39760059440167517, 
+                    0.3768162231716664, 
+                    0.3768162231716664, 
+                    0.35779928130076644, 
+                    0.35779928130076644, 
+                    0.3382310392494977, 
+                    0.3382310392494977, 
+                    0.31642668301401233, 
+                    0.31642668301401233, 
+                    0.29228012539951154, 
+                    0.29228012539951154, 
+                    0.2663621804155561, 
+                    0.2663621804155561, 
+                    0.23897991544627467, 
+                    0.23897991544627467, 
+                    0.21028318753395805, 
+                    0.21028318753395805, 
+                    0.18019538497245013, 
+                    0.18019538497245013, 
+                    0.14828714303461007, 
+                    0.14828714303461007, 
+                    0.11308096776622817, 
+                    0.11308096776622817
+                ], 
+                0.500428318977356
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999566681547823, 
+                    0.9999566681547823, 
+                    0.9994649650754733, 
+                    0.9994649650754733, 
+                    0.9978329560240936, 
+                    0.9978329560240936, 
+                    0.9863348355412469, 
+                    0.9863348355412469, 
+                    0.9690880659518515, 
+                    0.9690880659518515, 
+                    0.9443146328267006, 
+                    0.9443146328267006, 
+                    0.911968501921124, 
+                    0.911968501921124, 
+                    0.8764705210595316, 
+                    0.8764705210595316, 
+                    0.8384860321620548, 
+                    0.8384860321620548, 
+                    0.7968224485831579, 
+                    0.7968224485831579, 
+                    0.7556961572761213, 
+                    0.7556961572761213, 
+                    0.714025967369714, 
+                    0.714025967369714, 
+                    0.6745000633434524, 
+                    0.6745000633434524, 
+                    0.6361342369545919, 
+                    0.6361342369545919, 
+                    0.5998563550605751, 
+                    0.5998563550605751, 
+                    0.5643060371934244, 
+                    0.5643060371934244, 
+                    0.5298559183501108, 
+                    0.5298559183501108, 
+                    0.4981839054264724, 
+                    0.4981839054264724, 
+                    0.4695817863750585, 
+                    0.4695817863750585, 
+                    0.4423313088898276, 
+                    0.4423313088898276, 
+                    0.4170479983499647, 
+                    0.4170479983499647, 
+                    0.3945589137015186, 
+                    0.3945589137015186, 
+                    0.3740227139756939, 
+                    0.3740227139756939, 
+                    0.3554208454837748, 
+                    0.3554208454837748, 
+                    0.33887007799775404, 
+                    0.33887007799775404, 
+                    0.32448682394848577, 
+                    0.32448682394848577, 
+                    0.3103333907515057, 
+                    0.3103333907515057, 
+                    0.293075253451231, 
+                    0.293075253451231, 
+                    0.2715918863553001, 
+                    0.2715918863553001, 
+                    0.24639813009664338, 
+                    0.24639813009664338, 
+                    0.21775500574674464, 
+                    0.21775500574674464, 
+                    0.18516835089908543, 
+                    0.18516835089908543, 
+                    0.14633767799119898, 
+                    0.14633767799119898
+                ], 
+                0.5001152753829956
+            ], 
+            [
+                1.0084282159805298, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996630403258828, 
+                    0.9996630403258828, 
+                    0.9977674905093225, 
+                    0.9977674905093225, 
+                    0.9854753059400144, 
+                    0.9854753059400144, 
+                    0.9679203269239328, 
+                    0.9679203269239328, 
+                    0.9423530989924445, 
+                    0.9423530989924445, 
+                    0.909458851876404, 
+                    0.909458851876404, 
+                    0.8734517136594614, 
+                    0.8734517136594614, 
+                    0.835085081715487, 
+                    0.835085081715487, 
+                    0.7930996231838597, 
+                    0.7930996231838597, 
+                    0.7517350128528629, 
+                    0.7517350128528629, 
+                    0.7099496282754486, 
+                    0.7099496282754486, 
+                    0.670209684262406, 
+                    0.670209684262406, 
+                    0.6321601694642927, 
+                    0.6321601694642927, 
+                    0.5953851633951331, 
+                    0.5953851633951331, 
+                    0.5605944285541806, 
+                    0.5605944285541806, 
+                    0.5253246586442661, 
+                    0.5253246586442661, 
+                    0.4945951120829894, 
+                    0.4945951120829894, 
+                    0.4656684241780643, 
+                    0.4656684241780643, 
+                    0.4386762518224278, 
+                    0.4386762518224278, 
+                    0.41349839183964276, 
+                    0.41349839183964276, 
+                    0.39114391758180217, 
+                    0.39114391758180217, 
+                    0.37073338839679193, 
+                    0.37073338839679193, 
+                    0.3522527358170512, 
+                    0.3522527358170512, 
+                    0.3358154342546893, 
+                    0.3358154342546893, 
+                    0.32153977716210796, 
+                    0.32153977716210796, 
+                    0.3075755871344682, 
+                    0.3075755871344682, 
+                    0.29056249288592706, 
+                    0.29056249288592706, 
+                    0.2693205402606659, 
+                    0.2693205402606659, 
+                    0.2443657999733002, 
+                    0.2443657999733002, 
+                    0.21596938335284802, 
+                    0.21596938335284802, 
+                    0.1836480226685357, 
+                    0.1836480226685357, 
+                    0.1451252162739672, 
+                    0.1451252162739672
+                ], 
+                0.4802895784378052
+            ], 
+            [
+                1.0169273614883423, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999242723329829, 
+                    0.9999242723329829, 
+                    0.9992793768565931, 
+                    0.9992793768565931, 
+                    0.9971872939046335, 
+                    0.9971872939046335, 
+                    0.9849985589177043, 
+                    0.9849985589177043, 
+                    0.9667081417694275, 
+                    0.9667081417694275, 
+                    0.9404449157299147, 
+                    0.9404449157299147, 
+                    0.9069045168379762, 
+                    0.9069045168379762, 
+                    0.8704003653581487, 
+                    0.8704003653581487, 
+                    0.831632474416714, 
+                    0.831632474416714, 
+                    0.7893242688292311, 
+                    0.7893242688292311, 
+                    0.7478046421198659, 
+                    0.7478046421198659, 
+                    0.7058243739576247, 
+                    0.7058243739576247, 
+                    0.6661809663595339, 
+                    0.6661809663595339, 
+                    0.6277303627166662, 
+                    0.6277303627166662, 
+                    0.5915622298250621, 
+                    0.5915622298250621, 
+                    0.556083143134949, 
+                    0.556083143134949, 
+                    0.5218156074692695, 
+                    0.5218156074692695, 
+                    0.4903691133184242, 
+                    0.4903691133184242, 
+                    0.4619856156323485, 
+                    0.4619856156323485, 
+                    0.4349985285487119, 
+                    0.4349985285487119, 
+                    0.4099836649599319, 
+                    0.4099836649599319, 
+                    0.3877534324533864, 
+                    0.3877534324533864, 
+                    0.3674713300183429, 
+                    0.3674713300183429, 
+                    0.3491134751360212, 
+                    0.3491134751360212, 
+                    0.3327956288274472, 
+                    0.3327956288274472, 
+                    0.3187226961062623, 
+                    0.3187226961062623, 
+                    0.30462047253306607, 
+                    0.30462047253306607, 
+                    0.28696588035276605, 
+                    0.28696588035276605, 
+                    0.265239278276795, 
+                    0.265239278276795, 
+                    0.24002855935637912, 
+                    0.24002855935637912, 
+                    0.21156293348441854, 
+                    0.21156293348441854, 
+                    0.17934301243302792, 
+                    0.17934301243302792, 
+                    0.14113349111039455, 
+                    0.14113349111039455
+                ], 
+                0.4603203237056732
+            ], 
+            [
+                1.0254981517791748, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999840575369809, 
+                    0.9999840575369809, 
+                    0.9986770389856086, 
+                    0.9986770389856086, 
+                    0.9966294764719879, 
+                    0.9966294764719879, 
+                    0.9846755301063882, 
+                    0.9846755301063882, 
+                    0.9662541968170829, 
+                    0.9662541968170829, 
+                    0.9382402119669156, 
+                    0.9382402119669156, 
+                    0.9042678854446509, 
+                    0.9042678854446509, 
+                    0.8672727028675903, 
+                    0.8672727028675903, 
+                    0.8285133781183703, 
+                    0.8285133781183703, 
+                    0.7852985904134191, 
+                    0.7852985904134191, 
+                    0.7435728793268088, 
+                    0.7435728793268088, 
+                    0.7015743409977264, 
+                    0.7015743409977264, 
+                    0.6623713257893862, 
+                    0.6623713257893862, 
+                    0.6234430860087156, 
+                    0.6234430860087156, 
+                    0.587452819002985, 
+                    0.587452819002985, 
+                    0.5518466402573117, 
+                    0.5518466402573117, 
+                    0.5180601374292731, 
+                    0.5180601374292731, 
+                    0.48634754186310597, 
+                    0.48634754186310597, 
+                    0.4583169727393394, 
+                    0.4583169727393394, 
+                    0.43147575134004185, 
+                    0.43147575134004185, 
+                    0.40650675966645405, 
+                    0.40650675966645405, 
+                    0.38446906343995857, 
+                    0.38446906343995857, 
+                    0.3642952768178136, 
+                    0.3642952768178136, 
+                    0.3460222323149522, 
+                    0.3460222323149522, 
+                    0.329840244884002, 
+                    0.329840244884002, 
+                    0.3179490192692795, 
+                    0.3179490192692795, 
+                    0.3058148174095171, 
+                    0.3058148174095171, 
+                    0.2891178095938587, 
+                    0.2891178095938587, 
+                    0.26799842779771965, 
+                    0.26799842779771965, 
+                    0.2431630180198609, 
+                    0.2431630180198609, 
+                    0.21484612428814334, 
+                    0.21484612428814334, 
+                    0.18249826142375514, 
+                    0.18249826142375514, 
+                    0.1437076633870867, 
+                    0.1437076633870867
+                ], 
+                0.4417593479156494
+            ], 
+            [
+                1.034141182899475, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989009891448345, 
+                    0.9989009891448345, 
+                    0.9963894135143341, 
+                    0.9963894135143341, 
+                    0.9838884124336222, 
+                    0.9838884124336222, 
+                    0.9640193152192711, 
+                    0.9640193152192711, 
+                    0.9365169173724406, 
+                    0.9365169173724406, 
+                    0.901774063803784, 
+                    0.901774063803784, 
+                    0.8642480469578149, 
+                    0.8642480469578149, 
+                    0.8246924735823032, 
+                    0.8246924735823032, 
+                    0.7818276693186172, 
+                    0.7818276693186172, 
+                    0.7398535369988251, 
+                    0.7398535369988251, 
+                    0.6975247238772497, 
+                    0.6975247238772497, 
+                    0.6578144824590746, 
+                    0.6578144824590746, 
+                    0.6197326123531915, 
+                    0.6197326123531915, 
+                    0.5828170612354142, 
+                    0.5828170612354142, 
+                    0.5485844228542128, 
+                    0.5485844228542128, 
+                    0.5132553417423468, 
+                    0.5132553417423468, 
+                    0.48315980597140507, 
+                    0.48315980597140507, 
+                    0.45436941522696533, 
+                    0.45436941522696533, 
+                    0.4278693326721857, 
+                    0.4278693326721857, 
+                    0.4030618206882914, 
+                    0.4030618206882914, 
+                    0.3811045441561655, 
+                    0.3811045441561655, 
+                    0.3610703537854065, 
+                    0.3610703537854065, 
+                    0.3429464593457885, 
+                    0.3429464593457885, 
+                    0.32684268139263994, 
+                    0.32684268139263994, 
+                    0.31357854236583876, 
+                    0.31357854236583876, 
+                    0.30028846370341866, 
+                    0.30028846370341866, 
+                    0.28293367441891515, 
+                    0.28293367441891515, 
+                    0.2614631750222648, 
+                    0.2614631750222648, 
+                    0.2365342964722789, 
+                    0.2365342964722789, 
+                    0.2083714315000453, 
+                    0.2083714315000453, 
+                    0.17646423367852584, 
+                    0.17646423367852584, 
+                    0.13856416239702296, 
+                    0.13856416239702296
+                ], 
+                0.42178764939308167
+            ], 
+            [
+                1.0428571701049805, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992702488188691, 
+                    0.9992702488188691, 
+                    0.9958206744504039, 
+                    0.9958206744504039, 
+                    0.9851524898331746, 
+                    0.9851524898331746, 
+                    0.9624947910985279, 
+                    0.9624947910985279, 
+                    0.9343914705645219, 
+                    0.9343914705645219, 
+                    0.8990238614085877, 
+                    0.8990238614085877, 
+                    0.8610625459201998, 
+                    0.8610625459201998, 
+                    0.821215292518907, 
+                    0.821215292518907, 
+                    0.7780128761176888, 
+                    0.7780128761176888, 
+                    0.7358634502466413, 
+                    0.7358634502466413, 
+                    0.6935915134458414, 
+                    0.6935915134458414, 
+                    0.6535750739087284, 
+                    0.6535750739087284, 
+                    0.615545257612943, 
+                    0.615545257612943, 
+                    0.5788429781341814, 
+                    0.5788429781341814, 
+                    0.544301296995255, 
+                    0.544301296995255, 
+                    0.5095473290723868, 
+                    0.5095473290723868, 
+                    0.47910764656028704, 
+                    0.47910764656028704, 
+                    0.4507660228424334, 
+                    0.4507660228424334, 
+                    0.42426525324582304, 
+                    0.42426525324582304, 
+                    0.39963825115743773, 
+                    0.39963825115743773, 
+                    0.37781011899900663, 
+                    0.37781011899900663, 
+                    0.3579132030204096, 
+                    0.3579132030204096, 
+                    0.339925206378647, 
+                    0.339925206378647, 
+                    0.3239593228750108, 
+                    0.3239593228750108, 
+                    0.31031973830392434, 
+                    0.31031973830392434, 
+                    0.2962222118751794, 
+                    0.2962222118751794, 
+                    0.27843882811731124, 
+                    0.27843882811731124, 
+                    0.2567935033924529, 
+                    0.2567935033924529, 
+                    0.23187692425765996, 
+                    0.23187692425765996, 
+                    0.20389355308368348, 
+                    0.20389355308368348, 
+                    0.1723551236472913, 
+                    0.1723551236472913, 
+                    0.13512284653652715, 
+                    0.13512284653652715
+                ], 
+                0.4023416042327881
+            ], 
+            [
+                1.0516464710235596, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990595192107555, 
+                    0.9990595192107555, 
+                    0.9952462944492334, 
+                    0.9952462944492334, 
+                    0.983800415771714, 
+                    0.983800415771714, 
+                    0.961225731244801, 
+                    0.961225731244801, 
+                    0.9323042773175759, 
+                    0.9323042773175759, 
+                    0.8963319921767802, 
+                    0.8963319921767802, 
+                    0.8579007355649171, 
+                    0.8579007355649171, 
+                    0.8176868534964356, 
+                    0.8176868534964356, 
+                    0.7741824674290381, 
+                    0.7741824674290381, 
+                    0.7318990687774761, 
+                    0.7318990687774761, 
+                    0.6893748394485825, 
+                    0.6893748394485825, 
+                    0.6497062844000048, 
+                    0.6497062844000048, 
+                    0.610991971648938, 
+                    0.610991971648938, 
+                    0.575243239965203, 
+                    0.575243239965203, 
+                    0.5398364207204245, 
+                    0.5398364207204245, 
+                    0.506065571247072, 
+                    0.506065571247072, 
+                    0.47507138047497716, 
+                    0.47507138047497716, 
+                    0.44718375286135537, 
+                    0.44718375286135537, 
+                    0.42072514945413636, 
+                    0.42072514945413636, 
+                    0.3962571807852073, 
+                    0.3962571807852073, 
+                    0.3745610075249069, 
+                    0.3745610075249069, 
+                    0.3547954982272574, 
+                    0.3547954982272574, 
+                    0.3369347121856952, 
+                    0.3369347121856952, 
+                    0.32109037504665267, 
+                    0.32109037504665267, 
+                    0.3073258549352828, 
+                    0.3073258549352828, 
+                    0.29295745141098994, 
+                    0.29295745141098994, 
+                    0.27513038998233663, 
+                    0.27513038998233663, 
+                    0.253568578355397, 
+                    0.253568578355397, 
+                    0.22881941418282625, 
+                    0.22881941418282625, 
+                    0.2010819491013726, 
+                    0.2010819491013726, 
+                    0.16988789556657313, 
+                    0.16988789556657313, 
+                    0.133172333028162, 
+                    0.133172333028162
+                ], 
+                0.38351762294769287
+            ], 
+            [
+                1.0605099201202393, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989599128922101, 
+                    0.9989599128922101, 
+                    0.994837785476658, 
+                    0.994837785476658, 
+                    0.9824116529660598, 
+                    0.9824116529660598, 
+                    0.9597455643363484, 
+                    0.9597455643363484, 
+                    0.9301857441262381, 
+                    0.9301857441262381, 
+                    0.8935820767733943, 
+                    0.8935820767733943, 
+                    0.8547237185138705, 
+                    0.8547237185138705, 
+                    0.8141420161684472, 
+                    0.8141420161684472, 
+                    0.7703668702582471, 
+                    0.7703668702582471, 
+                    0.7279137677103329, 
+                    0.7279137677103329, 
+                    0.6852646792769744, 
+                    0.6852646792769744, 
+                    0.6455987869275754, 
+                    0.6455987869275754, 
+                    0.6068600867072141, 
+                    0.6068600867072141, 
+                    0.5711666084216329, 
+                    0.5711666084216329, 
+                    0.535867608794863, 
+                    0.535867608794863, 
+                    0.5021518662321116, 
+                    0.5021518662321116, 
+                    0.4713399806310146, 
+                    0.4713399806310146, 
+                    0.4435536425240376, 
+                    0.4435536425240376, 
+                    0.4172412559435556, 
+                    0.4172412559435556, 
+                    0.3929094989159915, 
+                    0.3929094989159915, 
+                    0.37134814567650287, 
+                    0.37134814567650287, 
+                    0.35171195242375614, 
+                    0.35171195242375614, 
+                    0.3339757509473093, 
+                    0.3339757509473093, 
+                    0.3182493999993579, 
+                    0.3182493999993579, 
+                    0.3045599343168434, 
+                    0.3045599343168434, 
+                    0.2901087672561654, 
+                    0.2901087672561654, 
+                    0.2722152747142329, 
+                    0.2722152747142329, 
+                    0.25067782454663845, 
+                    0.25067782454663845, 
+                    0.22603632010803537, 
+                    0.22603632010803537, 
+                    0.19848500318648074, 
+                    0.19848500318648074, 
+                    0.16756967800493583, 
+                    0.16756967800493583, 
+                    0.1312873602926627, 
+                    0.1312873602926627
+                ], 
+                0.3650995194911957
+            ], 
+            [
+                1.0694481134414673, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989161489699048, 
+                    0.9989161489699048, 
+                    0.9947259572698904, 
+                    0.9947259572698904, 
+                    0.9814086806297969, 
+                    0.9814086806297969, 
+                    0.9581926328401772, 
+                    0.9581926328401772, 
+                    0.9279627386347744, 
+                    0.9279627386347744, 
+                    0.8907837421223, 
+                    0.8907837421223, 
+                    0.8514764751890447, 
+                    0.8514764751890447, 
+                    0.8105764141646529, 
+                    0.8105764141646529, 
+                    0.7665221606603503, 
+                    0.7665221606603503, 
+                    0.7238424841124554, 
+                    0.7238424841124554, 
+                    0.6813588628664432, 
+                    0.6813588628664432, 
+                    0.6410841537871962, 
+                    0.6410841537871962, 
+                    0.6032969650954229, 
+                    0.6032969650954229, 
+                    0.5665791036286245, 
+                    0.5665791036286245, 
+                    0.5323477453126062, 
+                    0.5323477453126062, 
+                    0.4979362240646675, 
+                    0.4979362240646675, 
+                    0.4678119008027665, 
+                    0.4678119008027665, 
+                    0.4399094497543163, 
+                    0.4399094497543163, 
+                    0.4138003165577444, 
+                    0.4138003165577444, 
+                    0.3895969447608634, 
+                    0.3895969447608634, 
+                    0.3681714857089802, 
+                    0.3681714857089802, 
+                    0.3486623486539768, 
+                    0.3486623486539768, 
+                    0.3310394320896751, 
+                    0.3310394320896751, 
+                    0.3153837755110904, 
+                    0.3153837755110904, 
+                    0.3021493520966246, 
+                    0.3021493520966246, 
+                    0.28818366304465226, 
+                    0.28818366304465226, 
+                    0.27041898311299833, 
+                    0.27041898311299833, 
+                    0.24892690147296812, 
+                    0.24892690147296812, 
+                    0.22430918960259624, 
+                    0.22430918960259624, 
+                    0.19675043062374714, 
+                    0.19675043062374714, 
+                    0.1657595881737674, 
+                    0.1657595881737674, 
+                    0.12927954030458844, 
+                    0.12927954030458844
+                ], 
+                0.3472071588039398
+            ], 
+            [
+                1.0784615278244019, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999674514410645, 
+                    0.9999674514410645, 
+                    0.9988365771965746, 
+                    0.9988365771965746, 
+                    0.9937853737336895, 
+                    0.9937853737336895, 
+                    0.9798368271846306, 
+                    0.9798368271846306, 
+                    0.9566216116364408, 
+                    0.9566216116364408, 
+                    0.9257714733751518, 
+                    0.9257714733751518, 
+                    0.8879663498702917, 
+                    0.8879663498702917, 
+                    0.8482185190298557, 
+                    0.8482185190298557, 
+                    0.8069610703548009, 
+                    0.8069610703548009, 
+                    0.7626608319732364, 
+                    0.7626608319732364, 
+                    0.7198155022516494, 
+                    0.7198155022516494, 
+                    0.6773072386366845, 
+                    0.6773072386366845, 
+                    0.6368904233187417, 
+                    0.6368904233187417, 
+                    0.5992721916441215, 
+                    0.5992721916441215, 
+                    0.5624953296223878, 
+                    0.5624953296223878, 
+                    0.5284185553324103, 
+                    0.5284185553324103, 
+                    0.49409903750588036, 
+                    0.49409903750588036, 
+                    0.46410485441121185, 
+                    0.46410485441121185, 
+                    0.43634254462164657, 
+                    0.43634254462164657, 
+                    0.4103713031640902, 
+                    0.4103713031640902, 
+                    0.3863097513992801, 
+                    0.3863097513992801, 
+                    0.365021146817314, 
+                    0.365021146817314, 
+                    0.34564380526325394, 
+                    0.34564380526325394, 
+                    0.3281537477683931, 
+                    0.3281537477683931, 
+                    0.31265911556113724, 
+                    0.31265911556113724, 
+                    0.2991861182376003, 
+                    0.2991861182376003, 
+                    0.2848073952060721, 
+                    0.2848073952060721, 
+                    0.26695604101173465, 
+                    0.26695604101173465, 
+                    0.24555859402855115, 
+                    0.24555859402855115, 
+                    0.22116740710551194, 
+                    0.22116740710551194, 
+                    0.19397734639660297, 
+                    0.19397734639660297, 
+                    0.16355750628696017, 
+                    0.16355750628696017, 
+                    0.12800222127220273, 
+                    0.12800222127220273
+                ], 
+                0.32951056957244873
+            ], 
+            [
+                1.0875509977340698, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999727854072086, 
+                    0.9999727854072086, 
+                    0.9987068099884524, 
+                    0.9987068099884524, 
+                    0.9933417022872212, 
+                    0.9933417022872212, 
+                    0.9788151687274028, 
+                    0.9788151687274028, 
+                    0.955009539409647, 
+                    0.955009539409647, 
+                    0.9234892502871781, 
+                    0.9234892502871781, 
+                    0.8851067426462813, 
+                    0.8851067426462813, 
+                    0.8449278729350848, 
+                    0.8449278729350848, 
+                    0.8033446097877296, 
+                    0.8033446097877296, 
+                    0.7587890091077781, 
+                    0.7587890091077781, 
+                    0.7157899149416491, 
+                    0.7157899149416491, 
+                    0.6732107695092652, 
+                    0.6732107695092652, 
+                    0.6327834398157655, 
+                    0.6327834398157655, 
+                    0.5951517938534099, 
+                    0.5951517938534099, 
+                    0.5585222309710173, 
+                    0.5585222309710173, 
+                    0.5244455540952137, 
+                    0.5244455540952137, 
+                    0.4903402085172409, 
+                    0.4903402085172409, 
+                    0.46040799168384283, 
+                    0.46040799168384283, 
+                    0.4328179652534547, 
+                    0.4328179652534547, 
+                    0.40697536040502796, 
+                    0.40697536040502796, 
+                    0.38305844844114006, 
+                    0.38305844844114006, 
+                    0.3619055230060624, 
+                    0.3619055230060624, 
+                    0.3426583105316147, 
+                    0.3426583105316147, 
+                    0.32529246772219617, 
+                    0.32529246772219617, 
+                    0.3099159964329575, 
+                    0.3099159964329575, 
+                    0.2965650598263067, 
+                    0.2965650598263067, 
+                    0.2821259328537627, 
+                    0.2821259328537627, 
+                    0.2641527228401242, 
+                    0.2641527228401242, 
+                    0.24271233656211935, 
+                    0.24271233656211935, 
+                    0.21836635200090196, 
+                    0.21836635200090196, 
+                    0.19130502636381122, 
+                    0.19130502636381122, 
+                    0.16110808688134037, 
+                    0.16110808688134037, 
+                    0.1259275715927662, 
+                    0.1259275715927662
+                ], 
+                0.3123081624507904
+            ]
+        ]
+    }, 
+    {
+        "block_size": 71, 
+        "preprocessing_block_sizes": [
+            52
+        ], 
+        "pruning_parameters": [
+            [
+                0.9205624461174011, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993690237413636, 
+                    0.9993690237413636, 
+                    0.9988471278467659, 
+                    0.9988471278467659, 
+                    0.9866973745478506, 
+                    0.9866973745478506, 
+                    0.9709692144896277, 
+                    0.9709692144896277, 
+                    0.9463195091706907, 
+                    0.9463195091706907, 
+                    0.9148188766596989, 
+                    0.9148188766596989, 
+                    0.8806753769753264, 
+                    0.8806753769753264, 
+                    0.8426500099253719, 
+                    0.8426500099253719, 
+                    0.8014879426272397, 
+                    0.8014879426272397, 
+                    0.7592784293264792, 
+                    0.7592784293264792, 
+                    0.7183105987874479, 
+                    0.7183105987874479, 
+                    0.677563351550673, 
+                    0.677563351550673, 
+                    0.6385873930877276, 
+                    0.6385873930877276, 
+                    0.600231357445325, 
+                    0.600231357445325, 
+                    0.5622221952055441, 
+                    0.5622221952055441, 
+                    0.5271245237855315, 
+                    0.5271245237855315, 
+                    0.4963927748490184, 
+                    0.4963927748490184, 
+                    0.46367012355917653, 
+                    0.46367012355917653, 
+                    0.43644028721267614, 
+                    0.43644028721267614, 
+                    0.4106520490648877, 
+                    0.4106520490648877, 
+                    0.38738678200925636, 
+                    0.38738678200925636, 
+                    0.3666481279537569, 
+                    0.3666481279537569, 
+                    0.34726822407891517, 
+                    0.34726822407891517, 
+                    0.3296030396843079, 
+                    0.3296030396843079, 
+                    0.31468635297148195, 
+                    0.31468635297148195, 
+                    0.3015294012939136, 
+                    0.3015294012939136, 
+                    0.2853607946586947, 
+                    0.2853607946586947, 
+                    0.2645083082237626, 
+                    0.2645083082237626, 
+                    0.23969530693549582, 
+                    0.23969530693549582, 
+                    0.21131233459736276, 
+                    0.21131233459736276, 
+                    0.17892790913795953, 
+                    0.17892790913795953, 
+                    0.14026043849159034, 
+                    0.14026043849159034
+                ], 
+                0.48027071356773376
+            ], 
+            [
+                0.9282135963439941, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999431618990172, 
+                    0.9999431618990172, 
+                    0.9993468976046531, 
+                    0.9993468976046531, 
+                    0.9982820622018727, 
+                    0.9982820622018727, 
+                    0.9874318262475505, 
+                    0.9874318262475505, 
+                    0.968882317336294, 
+                    0.968882317336294, 
+                    0.9443520629288461, 
+                    0.9443520629288461, 
+                    0.9126399112609387, 
+                    0.9126399112609387, 
+                    0.8780827336819966, 
+                    0.8780827336819966, 
+                    0.8394385728020143, 
+                    0.8394385728020143, 
+                    0.7979511665385077, 
+                    0.7979511665385077, 
+                    0.7555488526379391, 
+                    0.7555488526379391, 
+                    0.7144638089349653, 
+                    0.7144638089349653, 
+                    0.6736503456375914, 
+                    0.6736503456375914, 
+                    0.6342973565973254, 
+                    0.6342973565973254, 
+                    0.5967359744554739, 
+                    0.5967359744554739, 
+                    0.5570562373746852, 
+                    0.5570562373746852, 
+                    0.5242405656860837, 
+                    0.5242405656860837, 
+                    0.4923356099419793, 
+                    0.4923356099419793, 
+                    0.4599610701724499, 
+                    0.4599610701724499, 
+                    0.432971554229252, 
+                    0.432971554229252, 
+                    0.4072332929855337, 
+                    0.4072332929855337, 
+                    0.38410806501801054, 
+                    0.38410806501801054, 
+                    0.36349770799927755, 
+                    0.36349770799927755, 
+                    0.34425268759572514, 
+                    0.34425268759572514, 
+                    0.3267010078156502, 
+                    0.3267010078156502, 
+                    0.31129960363665, 
+                    0.31129960363665, 
+                    0.297783930335752, 
+                    0.297783930335752, 
+                    0.28265586704651857, 
+                    0.28265586704651857, 
+                    0.26297290621043695, 
+                    0.26297290621043695, 
+                    0.23915332226105065, 
+                    0.23915332226105065, 
+                    0.21163121995571466, 
+                    0.21163121995571466, 
+                    0.18005230786819548, 
+                    0.18005230786819548, 
+                    0.14223473067036171, 
+                    0.14223473067036171
+                ], 
+                0.46156755089759827
+            ], 
+            [
+                0.9359283447265625, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999885086262281, 
+                    0.9999885086262281, 
+                    0.9993329337959324, 
+                    0.9993329337959324, 
+                    0.9978845257970663, 
+                    0.9978845257970663, 
+                    0.9855485215147459, 
+                    0.9855485215147459, 
+                    0.9684809674084238, 
+                    0.9684809674084238, 
+                    0.942703766633105, 
+                    0.942703766633105, 
+                    0.9099190054224062, 
+                    0.9099190054224062, 
+                    0.8751412222043531, 
+                    0.8751412222043531, 
+                    0.8362291128692612, 
+                    0.8362291128692612, 
+                    0.7943675583309581, 
+                    0.7943675583309581, 
+                    0.7517498539083955, 
+                    0.7517498539083955, 
+                    0.7104874145563125, 
+                    0.7104874145563125, 
+                    0.6696223175474816, 
+                    0.6696223175474816, 
+                    0.6304419995234608, 
+                    0.6304419995234608, 
+                    0.5924064937562673, 
+                    0.5924064937562673, 
+                    0.5540093826209448, 
+                    0.5540093826209448, 
+                    0.5196785171571202, 
+                    0.5196785171571202, 
+                    0.4887635471105909, 
+                    0.4887635471105909, 
+                    0.4564320750746294, 
+                    0.4564320750746294, 
+                    0.4293921741696753, 
+                    0.4293921741696753, 
+                    0.40387831520209083, 
+                    0.40387831520209083, 
+                    0.3808697527963101, 
+                    0.3808697527963101, 
+                    0.3603775380181592, 
+                    0.3603775380181592, 
+                    0.34124586776664834, 
+                    0.34124586776664834, 
+                    0.32381853867631966, 
+                    0.32381853867631966, 
+                    0.30931004623357544, 
+                    0.30931004623357544, 
+                    0.29606613473072796, 
+                    0.29606613473072796, 
+                    0.27961656272067337, 
+                    0.27961656272067337, 
+                    0.25884758023839216, 
+                    0.25884758023839216, 
+                    0.23436482380349916, 
+                    0.23436482380349916, 
+                    0.20648784520090985, 
+                    0.20648784520090985, 
+                    0.17479336409393864, 
+                    0.17479336409393864, 
+                    0.13710576343682618, 
+                    0.13710576343682618
+                ], 
+                0.4427641034126282
+            ], 
+            [
+                0.9437072277069092, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999989732179844, 
+                    0.999989732179844, 
+                    0.9992415161469164, 
+                    0.9992415161469164, 
+                    0.9979328551369862, 
+                    0.9979328551369862, 
+                    0.9908127409072751, 
+                    0.9908127409072751, 
+                    0.9669056387996183, 
+                    0.9669056387996183, 
+                    0.94038716141812, 
+                    0.94038716141812, 
+                    0.9075635519342468, 
+                    0.9075635519342468, 
+                    0.8720968385056, 
+                    0.8720968385056, 
+                    0.8329075159350936, 
+                    0.8329075159350936, 
+                    0.79077517008367, 
+                    0.79077517008367, 
+                    0.7479444839214412, 
+                    0.7479444839214412, 
+                    0.7065634842734406, 
+                    0.7065634842734406, 
+                    0.6655807515177855, 
+                    0.6655807515177855, 
+                    0.6264808714105782, 
+                    0.6264808714105782, 
+                    0.5883258572315758, 
+                    0.5883258572315758, 
+                    0.5501671538681764, 
+                    0.5501671538681764, 
+                    0.5158103372958684, 
+                    0.5158103372958684, 
+                    0.48499283331201126, 
+                    0.48499283331201126, 
+                    0.4528435283128021, 
+                    0.4528435283128021, 
+                    0.42589483437882303, 
+                    0.42589483437882303, 
+                    0.40052737420289425, 
+                    0.40052737420289425, 
+                    0.3776482851429509, 
+                    0.3776482851429509, 
+                    0.35728702062925405, 
+                    0.35728702062925405, 
+                    0.3382897281252123, 
+                    0.3382897281252123, 
+                    0.32098838369101396, 
+                    0.32098838369101396, 
+                    0.3060279342884341, 
+                    0.3060279342884341, 
+                    0.29213880310356616, 
+                    0.29213880310356616, 
+                    0.2758704009771305, 
+                    0.2758704009771305, 
+                    0.25535793113913624, 
+                    0.25535793113913624, 
+                    0.23112233696897036, 
+                    0.23112233696897036, 
+                    0.20352092980004385, 
+                    0.20352092980004385, 
+                    0.1721663508425722, 
+                    0.1721663508425722, 
+                    0.13495909091175634, 
+                    0.13495909091175634
+                ], 
+                0.4240094721317291
+            ], 
+            [
+                0.9515507221221924, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999867784467511, 
+                    0.9999867784467511, 
+                    0.9994648422428357, 
+                    0.9994648422428357, 
+                    0.9974602751624, 
+                    0.9974602751624, 
+                    0.9893615274277402, 
+                    0.9893615274277402, 
+                    0.9657199384016073, 
+                    0.9657199384016073, 
+                    0.9385163655123404, 
+                    0.9385163655123404, 
+                    0.9050400618679265, 
+                    0.9050400618679265, 
+                    0.8691733306302264, 
+                    0.8691733306302264, 
+                    0.8296029712849227, 
+                    0.8296029712849227, 
+                    0.7871617900855004, 
+                    0.7871617900855004, 
+                    0.744138992426527, 
+                    0.744138992426527, 
+                    0.7026510789264926, 
+                    0.7026510789264926, 
+                    0.6615865869893194, 
+                    0.6615865869893194, 
+                    0.622492286399199, 
+                    0.622492286399199, 
+                    0.5843557957579708, 
+                    0.5843557957579708, 
+                    0.5462415159530433, 
+                    0.5462415159530433, 
+                    0.512010960422465, 
+                    0.512010960422465, 
+                    0.4812798726101392, 
+                    0.4812798726101392, 
+                    0.44926965999273305, 
+                    0.44926965999273305, 
+                    0.4224420157275544, 
+                    0.4224420157275544, 
+                    0.39721088771852603, 
+                    0.39721088771852603, 
+                    0.3744637368693597, 
+                    0.3744637368693597, 
+                    0.35423044699269157, 
+                    0.35423044699269157, 
+                    0.33536054795782605, 
+                    0.33536054795782605, 
+                    0.3181869223373469, 
+                    0.3181869223373469, 
+                    0.30324954368905027, 
+                    0.30324954368905027, 
+                    0.2889238319340829, 
+                    0.2889238319340829, 
+                    0.2723646258347706, 
+                    0.2723646258347706, 
+                    0.25185243059268325, 
+                    0.25185243059268325, 
+                    0.2277856312432137, 
+                    0.2277856312432137, 
+                    0.20048786061773358, 
+                    0.20048786061773358, 
+                    0.16959734885619568, 
+                    0.16959734885619568, 
+                    0.13311909341429082, 
+                    0.13311909341429082
+                ], 
+                0.40561792254447937
+            ], 
+            [
+                0.9594594836235046, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992276663933134, 
+                    0.9992276663933134, 
+                    0.9973321483682138, 
+                    0.9973321483682138, 
+                    0.9878197578736064, 
+                    0.9878197578736064, 
+                    0.9645318427721967, 
+                    0.9645318427721967, 
+                    0.9366226314896902, 
+                    0.9366226314896902, 
+                    0.9026814321176166, 
+                    0.9026814321176166, 
+                    0.8663149712149801, 
+                    0.8663149712149801, 
+                    0.8261985241863229, 
+                    0.8261985241863229, 
+                    0.7836968223371734, 
+                    0.7836968223371734, 
+                    0.7404017982822729, 
+                    0.7404017982822729, 
+                    0.6987038700620084, 
+                    0.6987038700620084, 
+                    0.657665577687027, 
+                    0.657665577687027, 
+                    0.618311629236137, 
+                    0.618311629236137, 
+                    0.5807494387872932, 
+                    0.5807494387872932, 
+                    0.5417133856397655, 
+                    0.5417133856397655, 
+                    0.5087595237529284, 
+                    0.5087595237529284, 
+                    0.477390250779855, 
+                    0.477390250779855, 
+                    0.44580298784114275, 
+                    0.44580298784114275, 
+                    0.41901257137926085, 
+                    0.41901257137926085, 
+                    0.3939413494284711, 
+                    0.3939413494284711, 
+                    0.37133412204056315, 
+                    0.37133412204056315, 
+                    0.3512236364901444, 
+                    0.3512236364901444, 
+                    0.332468791110863, 
+                    0.332468791110863, 
+                    0.3153969189771611, 
+                    0.3153969189771611, 
+                    0.30054196672751243, 
+                    0.30054196672751243, 
+                    0.2867587435632888, 
+                    0.2867587435632888, 
+                    0.270744152723164, 
+                    0.270744152723164, 
+                    0.25060691907289506, 
+                    0.25060691907289506, 
+                    0.22683567258491324, 
+                    0.22683567258491324, 
+                    0.1997831875021451, 
+                    0.1997831875021451, 
+                    0.16909573632784278, 
+                    0.16909573632784278, 
+                    0.13277253780162007, 
+                    0.13277253780162007
+                ], 
+                0.38792914152145386
+            ], 
+            [
+                0.9674339294433594, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999984328364508, 
+                    0.9999984328364508, 
+                    0.9992994152387366, 
+                    0.9992994152387366, 
+                    0.9972303029180694, 
+                    0.9972303029180694, 
+                    0.9867086387695089, 
+                    0.9867086387695089, 
+                    0.9630696570478502, 
+                    0.9630696570478502, 
+                    0.9346096731149421, 
+                    0.9346096731149421, 
+                    0.8999802068849869, 
+                    0.8999802068849869, 
+                    0.8632216373631448, 
+                    0.8632216373631448, 
+                    0.8229231849896896, 
+                    0.8229231849896896, 
+                    0.7799183470396159, 
+                    0.7799183470396159, 
+                    0.7365080896681305, 
+                    0.7365080896681305, 
+                    0.6947760496568821, 
+                    0.6947760496568821, 
+                    0.6536983068704215, 
+                    0.6536983068704215, 
+                    0.6143688826140097, 
+                    0.6143688826140097, 
+                    0.576771842849026, 
+                    0.576771842849026, 
+                    0.5379147543862288, 
+                    0.5379147543862288, 
+                    0.5049591415844196, 
+                    0.5049591415844196, 
+                    0.47373875014957334, 
+                    0.47373875014957334, 
+                    0.4423015026859206, 
+                    0.4423015026859206, 
+                    0.4156196542641362, 
+                    0.4156196542641362, 
+                    0.3906870499505895, 
+                    0.3906870499505895, 
+                    0.36820000683370213, 
+                    0.36820000683370213, 
+                    0.34822017000748956, 
+                    0.34822017000748956, 
+                    0.32960105692495123, 
+                    0.32960105692495123, 
+                    0.3126687703576182, 
+                    0.3126687703576182, 
+                    0.2979576238557187, 
+                    0.2979576238557187, 
+                    0.2837206869305488, 
+                    0.2837206869305488, 
+                    0.26707489563066994, 
+                    0.26707489563066994, 
+                    0.24657432334157803, 
+                    0.24657432334157803, 
+                    0.22267089465587953, 
+                    0.22267089465587953, 
+                    0.19568014835029204, 
+                    0.19568014835029204, 
+                    0.1652564915153917, 
+                    0.1652564915153917, 
+                    0.12950118290720097, 
+                    0.12950118290720097
+                ], 
+                0.36999648809432983
+            ], 
+            [
+                0.9754746556282043, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993008873013511, 
+                    0.9993008873013511, 
+                    0.9968877285818294, 
+                    0.9968877285818294, 
+                    0.9845827530295899, 
+                    0.9845827530295899, 
+                    0.9616946404149286, 
+                    0.9616946404149286, 
+                    0.9326140293843107, 
+                    0.9326140293843107, 
+                    0.8973718361611656, 
+                    0.8973718361611656, 
+                    0.8602181134740408, 
+                    0.8602181134740408, 
+                    0.8195349653512232, 
+                    0.8195349653512232, 
+                    0.7762711373893048, 
+                    0.7762711373893048, 
+                    0.7326860257080497, 
+                    0.7326860257080497, 
+                    0.6908273827619649, 
+                    0.6908273827619649, 
+                    0.6497769280489604, 
+                    0.6497769280489604, 
+                    0.6102674846870171, 
+                    0.6102674846870171, 
+                    0.5731213480670287, 
+                    0.5731213480670287, 
+                    0.5335989157453492, 
+                    0.5335989157453492, 
+                    0.5015951310984413, 
+                    0.5015951310984413, 
+                    0.4699527372087227, 
+                    0.4699527372087227, 
+                    0.43887281211898305, 
+                    0.43887281211898305, 
+                    0.41224918280229883, 
+                    0.41224918280229883, 
+                    0.3874707657926486, 
+                    0.3874707657926486, 
+                    0.3651143258127801, 
+                    0.3651143258127801, 
+                    0.34526144969356753, 
+                    0.34526144969356753, 
+                    0.32676578678534557, 
+                    0.32676578678534557, 
+                    0.309952748165995, 
+                    0.309952748165995, 
+                    0.29535366150191755, 
+                    0.29535366150191755, 
+                    0.28124899624366123, 
+                    0.28124899624366123, 
+                    0.2647363543478392, 
+                    0.2647363543478392, 
+                    0.24437970382601795, 
+                    0.24437970382601795, 
+                    0.2206447984619851, 
+                    0.2206447984619851, 
+                    0.19385372596114792, 
+                    0.19385372596114792, 
+                    0.16367260034651557, 
+                    0.16367260034651557, 
+                    0.1282416785637231, 
+                    0.1282416785637231
+                ], 
+                0.3527383506298065
+            ], 
+            [
+                0.9835821986198425, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992749273627869, 
+                    0.9992749273627869, 
+                    0.9950790510268984, 
+                    0.9950790510268984, 
+                    0.9800697496549153, 
+                    0.9800697496549153, 
+                    0.9603779961318766, 
+                    0.9603779961318766, 
+                    0.9309079542508157, 
+                    0.9309079542508157, 
+                    0.894491407821817, 
+                    0.894491407821817, 
+                    0.8570296499436578, 
+                    0.8570296499436578, 
+                    0.8161498056617296, 
+                    0.8161498056617296, 
+                    0.7725537493407131, 
+                    0.7725537493407131, 
+                    0.7288737992911095, 
+                    0.7288737992911095, 
+                    0.6869185039391302, 
+                    0.6869185039391302, 
+                    0.6456767040780172, 
+                    0.6456767040780172, 
+                    0.6066709123778324, 
+                    0.6066709123778324, 
+                    0.5684460226595018, 
+                    0.5684460226595018, 
+                    0.5309823431276703, 
+                    0.5309823431276703, 
+                    0.496907276696357, 
+                    0.496907276696357, 
+                    0.4667745471145935, 
+                    0.4667745471145935, 
+                    0.43523721202579263, 
+                    0.43523721202579263, 
+                    0.4089683873576046, 
+                    0.4089683873576046, 
+                    0.3843034445026656, 
+                    0.3843034445026656, 
+                    0.3620818544701883, 
+                    0.3620818544701883, 
+                    0.34235855086463607, 
+                    0.34235855086463607, 
+                    0.3243758645606414, 
+                    0.3243758645606414, 
+                    0.3070125468326236, 
+                    0.3070125468326236, 
+                    0.29262624788473673, 
+                    0.29262624788473673, 
+                    0.2798301019999833, 
+                    0.2798301019999833, 
+                    0.2659468620619035, 
+                    0.2659468620619035, 
+                    0.24756690136496404, 
+                    0.24756690136496404, 
+                    0.22515367233410405, 
+                    0.22515367233410405, 
+                    0.19917419722403093, 
+                    0.19917419722403093, 
+                    0.16933110598275694, 
+                    0.16933110598275694, 
+                    0.13360710043484936, 
+                    0.13360710043484936
+                ], 
+                0.3368132710456848
+            ], 
+            [
+                0.9917570948600769, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991717304686619, 
+                    0.9991717304686619, 
+                    0.9961196752743015, 
+                    0.9961196752743015, 
+                    0.9817484052360188, 
+                    0.9817484052360188, 
+                    0.9588636623369291, 
+                    0.9588636623369291, 
+                    0.9284180884273054, 
+                    0.9284180884273054, 
+                    0.8920762744445837, 
+                    0.8920762744445837, 
+                    0.8540771817394637, 
+                    0.8540771817394637, 
+                    0.8127015745093259, 
+                    0.8127015745093259, 
+                    0.7689057776432889, 
+                    0.7689057776432889, 
+                    0.724970030684914, 
+                    0.724970030684914, 
+                    0.6830166023090645, 
+                    0.6830166023090645, 
+                    0.6416765972805087, 
+                    0.6416765972805087, 
+                    0.6027385656370068, 
+                    0.6027385656370068, 
+                    0.5646012487069073, 
+                    0.5646012487069073, 
+                    0.5271674941727129, 
+                    0.5271674941727129, 
+                    0.4932166275226859, 
+                    0.4932166275226859, 
+                    0.4631803235837845, 
+                    0.4631803235837845, 
+                    0.4318010365415964, 
+                    0.4318010365415964, 
+                    0.4056591707379728, 
+                    0.4056591707379728, 
+                    0.38111033557718493, 
+                    0.38111033557718493, 
+                    0.3590298659395042, 
+                    0.3590298659395042, 
+                    0.3394298298288001, 
+                    0.3394298298288001, 
+                    0.32118295146268483, 
+                    0.32118295146268483, 
+                    0.3046479567944378, 
+                    0.3046479567944378, 
+                    0.29024290320814433, 
+                    0.29024290320814433, 
+                    0.2763903499264087, 
+                    0.2763903499264087, 
+                    0.2598147430001573, 
+                    0.2598147430001573, 
+                    0.2394289555705705, 
+                    0.2394289555705705, 
+                    0.21579946750608453, 
+                    0.21579946750608453, 
+                    0.18924434772448653, 
+                    0.18924434772448653, 
+                    0.15943769972502167, 
+                    0.15943769972502167, 
+                    0.12459711488939448, 
+                    0.12459711488939448
+                ], 
+                0.3192678987979889
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991257875339267, 
+                    0.9991257875339267, 
+                    0.9958519737946654, 
+                    0.9958519737946654, 
+                    0.9804997898750915, 
+                    0.9804997898750915, 
+                    0.9573430270055839, 
+                    0.9573430270055839, 
+                    0.9262465327460503, 
+                    0.9262465327460503, 
+                    0.8893600161127372, 
+                    0.8893600161127372, 
+                    0.8509522748566363, 
+                    0.8509522748566363, 
+                    0.8092409820142565, 
+                    0.8092409820142565, 
+                    0.7652034842458861, 
+                    0.7652034842458861, 
+                    0.7210964511338325, 
+                    0.7210964511338325, 
+                    0.6790855829841523, 
+                    0.6790855829841523, 
+                    0.6376964299747132, 
+                    0.6376964299747132, 
+                    0.5988077712516785, 
+                    0.5988077712516785, 
+                    0.5607350084594966, 
+                    0.5607350084594966, 
+                    0.5233069818251587, 
+                    0.5233069818251587, 
+                    0.489615734868917, 
+                    0.489615734868917, 
+                    0.4595811903213599, 
+                    0.4595811903213599, 
+                    0.42842416673978545, 
+                    0.42842416673978545, 
+                    0.402374091685321, 
+                    0.402374091685321, 
+                    0.37798049295870667, 
+                    0.37798049295870667, 
+                    0.3560340258075099, 
+                    0.3560340258075099, 
+                    0.33657955625648706, 
+                    0.33657955625648706, 
+                    0.31846621800850433, 
+                    0.31846621800850433, 
+                    0.3019810661516532, 
+                    0.3019810661516532, 
+                    0.28769294809546087, 
+                    0.28769294809546087, 
+                    0.27407689119260303, 
+                    0.27407689119260303, 
+                    0.2576117803870136, 
+                    0.2576117803870136, 
+                    0.2373196514966245, 
+                    0.2373196514966245, 
+                    0.2138083957694782, 
+                    0.2138083957694782, 
+                    0.1873980625179685, 
+                    0.1873980625179685, 
+                    0.15776371182017002, 
+                    0.15776371182017002, 
+                    0.12314779940577147, 
+                    0.12314779940577147
+                ], 
+                0.30318376421928406
+            ], 
+            [
+                1.00831139087677, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999995440832614, 
+                    0.9999995440832614, 
+                    0.9990686700206253, 
+                    0.9990686700206253, 
+                    0.9952092528727237, 
+                    0.9952092528727237, 
+                    0.9795618024993412, 
+                    0.9795618024993412, 
+                    0.9557927860960531, 
+                    0.9557927860960531, 
+                    0.9240651572692978, 
+                    0.9240651572692978, 
+                    0.8866076623427364, 
+                    0.8866076623427364, 
+                    0.847801092045538, 
+                    0.847801092045538, 
+                    0.8057459174586136, 
+                    0.8057459174586136, 
+                    0.7614626839833327, 
+                    0.7614626839833327, 
+                    0.7172428257831293, 
+                    0.7172428257831293, 
+                    0.6750724985659697, 
+                    0.6750724985659697, 
+                    0.6339050145801192, 
+                    0.6339050145801192, 
+                    0.5945501354972074, 
+                    0.5945501354972074, 
+                    0.55736985936466, 
+                    0.55736985936466, 
+                    0.5187793266982333, 
+                    0.5187793266982333, 
+                    0.4865186639530949, 
+                    0.4865186639530949, 
+                    0.4558408535629573, 
+                    0.4558408535629573, 
+                    0.4251041271413798, 
+                    0.4251041271413798, 
+                    0.3991187203090961, 
+                    0.3991187203090961, 
+                    0.3748773751926143, 
+                    0.3748773751926143, 
+                    0.35306340326074337, 
+                    0.35306340326074337, 
+                    0.3337204289823964, 
+                    0.3337204289823964, 
+                    0.31572590276339196, 
+                    0.31572590276339196, 
+                    0.29939362091409544, 
+                    0.29939362091409544, 
+                    0.28533195790064536, 
+                    0.28533195790064536, 
+                    0.2715055609692145, 
+                    0.2715055609692145, 
+                    0.25480449960709883, 
+                    0.25480449960709883, 
+                    0.23441202441624936, 
+                    0.23441202441624936, 
+                    0.2109332220142746, 
+                    0.2109332220142746, 
+                    0.18469281036793392, 
+                    0.18469281036793392, 
+                    0.1554037602575463, 
+                    0.1554037602575463, 
+                    0.12143400016092237, 
+                    0.12143400016092237
+                ], 
+                0.2873712182044983
+            ], 
+            [
+                1.0166919231414795, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999942073858258, 
+                    0.9999942073858258, 
+                    0.9987030809948303, 
+                    0.9987030809948303, 
+                    0.9937458529616853, 
+                    0.9937458529616853, 
+                    0.9780849958186517, 
+                    0.9780849958186517, 
+                    0.9541785498081443, 
+                    0.9541785498081443, 
+                    0.9217882163255947, 
+                    0.9217882163255947, 
+                    0.8838477129677322, 
+                    0.8838477129677322, 
+                    0.8446842557904315, 
+                    0.8446842557904315, 
+                    0.8023038377762088, 
+                    0.8023038377762088, 
+                    0.7577521572896802, 
+                    0.7577521572896802, 
+                    0.7133682151948879, 
+                    0.7133682151948879, 
+                    0.6711508389833418, 
+                    0.6711508389833418, 
+                    0.6298849857162492, 
+                    0.6298849857162492, 
+                    0.5909573229469732, 
+                    0.5909573229469732, 
+                    0.5531390626671819, 
+                    0.5531390626671819, 
+                    0.5152318280720088, 
+                    0.5152318280720088, 
+                    0.4830925952080657, 
+                    0.4830925952080657, 
+                    0.4521091365456004, 
+                    0.4521091365456004, 
+                    0.42200809381959914, 
+                    0.42200809381959914, 
+                    0.3958141655587471, 
+                    0.3958141655587471, 
+                    0.37180303208745846, 
+                    0.37180303208745846, 
+                    0.35014790792833494, 
+                    0.35014790792833494, 
+                    0.3312327504587262, 
+                    0.3312327504587262, 
+                    0.31337830874150835, 
+                    0.31337830874150835, 
+                    0.2967969919840475, 
+                    0.2967969919840475, 
+                    0.28256673286945416, 
+                    0.28256673286945416, 
+                    0.2697514308367493, 
+                    0.2697514308367493, 
+                    0.25500556829811766, 
+                    0.25500556829811766, 
+                    0.23609423456481554, 
+                    0.23609423456481554, 
+                    0.21360179322628692, 
+                    0.21360179322628692, 
+                    0.1879209967250959, 
+                    0.1879209967250959, 
+                    0.158735823302308, 
+                    0.158735823302308, 
+                    0.12420501470879478, 
+                    0.12420501470879478
+                ], 
+                0.27301275730133057
+            ], 
+            [
+                1.025141954421997, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982819624802003, 
+                    0.9982819624802003, 
+                    0.9883198012126081, 
+                    0.9883198012126081, 
+                    0.9744602785886777, 
+                    0.9744602785886777, 
+                    0.9521255011446004, 
+                    0.9521255011446004, 
+                    0.9196480260193755, 
+                    0.9196480260193755, 
+                    0.8810175064422244, 
+                    0.8810175064422244, 
+                    0.8414733881107948, 
+                    0.8414733881107948, 
+                    0.798708731350297, 
+                    0.798708731350297, 
+                    0.7538801159910712, 
+                    0.7538801159910712, 
+                    0.7094669054869299, 
+                    0.7094669054869299, 
+                    0.6671021925906362, 
+                    0.6671021925906362, 
+                    0.6260106691505879, 
+                    0.6260106691505879, 
+                    0.5866221724798333, 
+                    0.5866221724798333, 
+                    0.5496523566633292, 
+                    0.5496523566633292, 
+                    0.5114286389483392, 
+                    0.5114286389483392, 
+                    0.4792290183416783, 
+                    0.4792290183416783, 
+                    0.4488089091053384, 
+                    0.4488089091053384, 
+                    0.41838306768752126, 
+                    0.41838306768752126, 
+                    0.3926889797484524, 
+                    0.3926889797484524, 
+                    0.36872754914454964, 
+                    0.36872754914454964, 
+                    0.3471842278755473, 
+                    0.3471842278755473, 
+                    0.3280903423225826, 
+                    0.3280903423225826, 
+                    0.31031202760226895, 
+                    0.31031202760226895, 
+                    0.29389317304408, 
+                    0.29389317304408, 
+                    0.2780747794853253, 
+                    0.2780747794853253, 
+                    0.26889022539052365, 
+                    0.26889022539052365, 
+                    0.2598647320456016, 
+                    0.2598647320456016, 
+                    0.24524368809305394, 
+                    0.24524368809305394, 
+                    0.2256360517103363, 
+                    0.2256360517103363, 
+                    0.20169256979871214, 
+                    0.20169256979871214, 
+                    0.17312812636997918, 
+                    0.17312812636997918, 
+                    0.13762437532988486, 
+                    0.13762437532988486
+                ], 
+                0.2586984634399414
+            ], 
+            [
+                1.0336623191833496, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999995301120296, 
+                    0.9999995301120296, 
+                    0.9985293638081967, 
+                    0.9985293638081967, 
+                    0.9932257621335631, 
+                    0.9932257621335631, 
+                    0.9776911064516993, 
+                    0.9776911064516993, 
+                    0.951012023488873, 
+                    0.951012023488873, 
+                    0.9172107621232612, 
+                    0.9172107621232612, 
+                    0.8781366032730759, 
+                    0.8781366032730759, 
+                    0.83816210596946, 
+                    0.83816210596946, 
+                    0.7951655072549535, 
+                    0.7951655072549535, 
+                    0.7502092670246425, 
+                    0.7502092670246425, 
+                    0.705550611752071, 
+                    0.705550611752071, 
+                    0.6633452035628216, 
+                    0.6633452035628216, 
+                    0.6218268399373493, 
+                    0.6218268399373493, 
+                    0.5832195874353797, 
+                    0.5832195874353797, 
+                    0.5452483102156637, 
+                    0.5452483102156637, 
+                    0.5084419093256926, 
+                    0.5084419093256926, 
+                    0.47505946323053433, 
+                    0.47505946323053433, 
+                    0.44564288785166223, 
+                    0.44564288785166223, 
+                    0.4150122841457142, 
+                    0.4150122841457142, 
+                    0.38956621413348447, 
+                    0.38956621413348447, 
+                    0.3657265675387815, 
+                    0.3657265675387815, 
+                    0.3443247502240017, 
+                    0.3443247502240017, 
+                    0.32536493587526716, 
+                    0.32536493587526716, 
+                    0.30774044190071514, 
+                    0.30774044190071514, 
+                    0.2917704880838929, 
+                    0.2917704880838929, 
+                    0.27826950544855866, 
+                    0.27826950544855866, 
+                    0.26484154096191453, 
+                    0.26484154096191453, 
+                    0.24815270741827425, 
+                    0.24815270741827425, 
+                    0.22783640330168706, 
+                    0.22783640330168706, 
+                    0.20460130665764759, 
+                    0.20460130665764759, 
+                    0.17878857307781318, 
+                    0.17878857307781318, 
+                    0.15015285039112608, 
+                    0.15015285039112608, 
+                    0.11721030920850999, 
+                    0.11721030920850999
+                ], 
+                0.24310597777366638
+            ], 
+            [
+                1.0422534942626953, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984384295127043, 
+                    0.9984384295127043, 
+                    0.9926804108203412, 
+                    0.9926804108203412, 
+                    0.9764653579559631, 
+                    0.9764653579559631, 
+                    0.9492990228558482, 
+                    0.9492990228558482, 
+                    0.9148393159456853, 
+                    0.9148393159456853, 
+                    0.8752342573645923, 
+                    0.8752342573645923, 
+                    0.8348949566176163, 
+                    0.8348949566176163, 
+                    0.7915995533102393, 
+                    0.7915995533102393, 
+                    0.7464076545386465, 
+                    0.7464076545386465, 
+                    0.701709749919301, 
+                    0.701709749919301, 
+                    0.6592249278961223, 
+                    0.6592249278961223, 
+                    0.6182554310669153, 
+                    0.6182554310669153, 
+                    0.5787555859142974, 
+                    0.5787555859142974, 
+                    0.5422236163840025, 
+                    0.5422236163840025, 
+                    0.5036957566437393, 
+                    0.5036957566437393, 
+                    0.47223336326164517, 
+                    0.47223336326164517, 
+                    0.44193400118536325, 
+                    0.44193400118536325, 
+                    0.411828239357572, 
+                    0.411828239357572, 
+                    0.38640889668789824, 
+                    0.38640889668789824, 
+                    0.3627361941287131, 
+                    0.3627361941287131, 
+                    0.34146746918041276, 
+                    0.34146746918041276, 
+                    0.32263448256639526, 
+                    0.32263448256639526, 
+                    0.30513195567646256, 
+                    0.30513195567646256, 
+                    0.28928522370588383, 
+                    0.28928522370588383, 
+                    0.2760537057998139, 
+                    0.2760537057998139, 
+                    0.2628060498732606, 
+                    0.2628060498732606, 
+                    0.24611779625248603, 
+                    0.24611779625248603, 
+                    0.22581288035899208, 
+                    0.22581288035899208, 
+                    0.2026422345543234, 
+                    0.2026422345543234, 
+                    0.1769557006895106, 
+                    0.1769557006895106, 
+                    0.14852403387351823, 
+                    0.14852403387351823, 
+                    0.11592264858006814, 
+                    0.11592264858006814
+                ], 
+                0.22929373383522034
+            ], 
+            [
+                1.050916075706482, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999989331892754, 
+                    0.9999989331892754, 
+                    0.9981687837974068, 
+                    0.9981687837974068, 
+                    0.9899845620075937, 
+                    0.9899845620075937, 
+                    0.9721024637461675, 
+                    0.9721024637461675, 
+                    0.9471718831234909, 
+                    0.9471718831234909, 
+                    0.9123624668024453, 
+                    0.9123624668024453, 
+                    0.8722669671095272, 
+                    0.8722669671095272, 
+                    0.8315961908772073, 
+                    0.8315961908772073, 
+                    0.7879600161746365, 
+                    0.7879600161746365, 
+                    0.7426064238055176, 
+                    0.7426064238055176, 
+                    0.6977478997084792, 
+                    0.6977478997084792, 
+                    0.6553913465747362, 
+                    0.6553913465747362, 
+                    0.6140627448658069, 
+                    0.6140627448658069, 
+                    0.5752285354358064, 
+                    0.5752285354358064, 
+                    0.5379266160229832, 
+                    0.5379266160229832, 
+                    0.5006503114319892, 
+                    0.5006503114319892, 
+                    0.4682259151206366, 
+                    0.4682259151206366, 
+                    0.4386616877287905, 
+                    0.4386616877287905, 
+                    0.4084859285824714, 
+                    0.4084859285824714, 
+                    0.38328330449799985, 
+                    0.38328330449799985, 
+                    0.35974005248116053, 
+                    0.35974005248116053, 
+                    0.33860997737692733, 
+                    0.33860997737692733, 
+                    0.3199063354303294, 
+                    0.3199063354303294, 
+                    0.302525932060716, 
+                    0.302525932060716, 
+                    0.2866279485212172, 
+                    0.2866279485212172, 
+                    0.27210364461431996, 
+                    0.27210364461431996, 
+                    0.2606699177785141, 
+                    0.2606699177785141, 
+                    0.24699767506584086, 
+                    0.24699767506584086, 
+                    0.22895246999484767, 
+                    0.22895246999484767, 
+                    0.2073240769768728, 
+                    0.2073240769768728, 
+                    0.18259032174789153, 
+                    0.18259032174789153, 
+                    0.15452418184102362, 
+                    0.15452418184102362, 
+                    0.12145641698839996, 
+                    0.12145641698839996
+                ], 
+                0.2165079563856125
+            ], 
+            [
+                1.0596506595611572, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999804172606095, 
+                    0.9999804172606095, 
+                    0.99817106070875, 
+                    0.99817106070875, 
+                    0.9914743671098644, 
+                    0.9914743671098644, 
+                    0.9739241557672603, 
+                    0.9739241557672603, 
+                    0.9456883906075136, 
+                    0.9456883906075136, 
+                    0.9099649026974167, 
+                    0.9099649026974167, 
+                    0.869320804879079, 
+                    0.869320804879079, 
+                    0.8282625147828727, 
+                    0.8282625147828727, 
+                    0.7843898882997528, 
+                    0.7843898882997528, 
+                    0.7387716478879643, 
+                    0.7387716478879643, 
+                    0.693999320979323, 
+                    0.693999320979323, 
+                    0.6511180291281297, 
+                    0.6511180291281297, 
+                    0.6106773098050862, 
+                    0.6106773098050862, 
+                    0.5708287914755193, 
+                    0.5708287914755193, 
+                    0.5345942793208581, 
+                    0.5345942793208581, 
+                    0.4966810971281805, 
+                    0.4966810971281805, 
+                    0.46483104852303925, 
+                    0.46483104852303925, 
+                    0.4352937039820764, 
+                    0.4352937039820764, 
+                    0.4052686116296284, 
+                    0.4052686116296284, 
+                    0.3802307108049526, 
+                    0.3802307108049526, 
+                    0.35682370962901305, 
+                    0.35682370962901305, 
+                    0.33583203032450554, 
+                    0.33583203032450554, 
+                    0.31725159585754714, 
+                    0.31725159585754714, 
+                    0.29998932025985603, 
+                    0.29998932025985603, 
+                    0.2843683549091232, 
+                    0.2843683549091232, 
+                    0.27174317324932573, 
+                    0.27174317324932573, 
+                    0.25890061012526977, 
+                    0.25890061012526977, 
+                    0.24229012810554465, 
+                    0.24229012810554465, 
+                    0.22207455873058737, 
+                    0.22207455873058737, 
+                    0.199074029900275, 
+                    0.199074029900275, 
+                    0.17365381737456215, 
+                    0.17365381737456215, 
+                    0.14561064620675437, 
+                    0.14561064620675437, 
+                    0.113622068498194, 
+                    0.113622068498194
+                ], 
+                0.20323047041893005
+            ], 
+            [
+                1.068457841873169, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999962826707371, 
+                    0.999962826707371, 
+                    0.9979745066635388, 
+                    0.9979745066635388, 
+                    0.9892841859503702, 
+                    0.9892841859503702, 
+                    0.9690890872118005, 
+                    0.9690890872118005, 
+                    0.9432951097472433, 
+                    0.9432951097472433, 
+                    0.907367535514878, 
+                    0.907367535514878, 
+                    0.8662675058310257, 
+                    0.8662675058310257, 
+                    0.8248719975742766, 
+                    0.8248719975742766, 
+                    0.7807278464897147, 
+                    0.7807278464897147, 
+                    0.7349463416746214, 
+                    0.7349463416746214, 
+                    0.6899651368103389, 
+                    0.6899651368103389, 
+                    0.6473321837723013, 
+                    0.6473321837723013, 
+                    0.6064800632467996, 
+                    0.6064800632467996, 
+                    0.5671246164992358, 
+                    0.5671246164992358, 
+                    0.5307936895276181, 
+                    0.5307936895276181, 
+                    0.4928500197060122, 
+                    0.4928500197060122, 
+                    0.4615149028161993, 
+                    0.4615149028161993, 
+                    0.431791411681019, 
+                    0.431791411681019, 
+                    0.402085779664802, 
+                    0.402085779664802, 
+                    0.37713173514279485, 
+                    0.37713173514279485, 
+                    0.3538891630600453, 
+                    0.3538891630600453, 
+                    0.3330391551089499, 
+                    0.3330391551089499, 
+                    0.3146045306989166, 
+                    0.3146045306989166, 
+                    0.29742761537249257, 
+                    0.29742761537249257, 
+                    0.28100955249712284, 
+                    0.28100955249712284, 
+                    0.26743326304451376, 
+                    0.26743326304451376, 
+                    0.25662824784181953, 
+                    0.25662824784181953, 
+                    0.24166035616563536, 
+                    0.24166035616563536, 
+                    0.22259326671097296, 
+                    0.22259326671097296, 
+                    0.2003945937838822, 
+                    0.2003945937838822, 
+                    0.17549852053889695, 
+                    0.17549852053889695, 
+                    0.14769867794382657, 
+                    0.14769867794382657, 
+                    0.11555240161365903, 
+                    0.11555240161365903
+                ], 
+                0.19091932475566864
+            ], 
+            [
+                1.0773382186889648, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999567060114704, 
+                    0.9999567060114704, 
+                    0.9978862536646185, 
+                    0.9978862536646185, 
+                    0.9896408744995014, 
+                    0.9896408744995014, 
+                    0.9694834541769646, 
+                    0.9694834541769646, 
+                    0.9420955862173357, 
+                    0.9420955862173357, 
+                    0.9049502515297091, 
+                    0.9049502515297091, 
+                    0.863325638467352, 
+                    0.863325638467352, 
+                    0.8215420465751151, 
+                    0.8215420465751151, 
+                    0.7770187309866222, 
+                    0.7770187309866222, 
+                    0.7311632681772744, 
+                    0.7311632681772744, 
+                    0.6859149256619027, 
+                    0.6859149256619027, 
+                    0.6433354355565499, 
+                    0.6433354355565499, 
+                    0.6025018313107888, 
+                    0.6025018313107888, 
+                    0.5634781309882807, 
+                    0.5634781309882807, 
+                    0.5269116967557467, 
+                    0.5269116967557467, 
+                    0.4895875607708548, 
+                    0.4895875607708548, 
+                    0.457888656343979, 
+                    0.457888656343979, 
+                    0.4284101599726348, 
+                    0.4284101599726348, 
+                    0.39880499518227963, 
+                    0.39880499518227963, 
+                    0.374064159806667, 
+                    0.374064159806667, 
+                    0.35097716058713996, 
+                    0.35097716058713996, 
+                    0.33024981507972984, 
+                    0.33024981507972984, 
+                    0.3119047368379267, 
+                    0.3119047368379267, 
+                    0.2948881734455074, 
+                    0.2948881734455074, 
+                    0.27892610430779935, 
+                    0.27892610430779935, 
+                    0.265750351324247, 
+                    0.265750351324247, 
+                    0.2535655199994542, 
+                    0.2535655199994542, 
+                    0.2422459335826703, 
+                    0.2422459335826703, 
+                    0.22620432146075256, 
+                    0.22620432146075256, 
+                    0.2060993732891002, 
+                    0.2060993732891002, 
+                    0.1825455722194501, 
+                    0.1825455722194501, 
+                    0.1553733410581611, 
+                    0.1553733410581611, 
+                    0.12286088664544526, 
+                    0.12286088664544526
+                ], 
+                0.17971475422382355
+            ], 
+            [
+                1.0862923860549927, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999187874512335, 
+                    0.9999187874512335, 
+                    0.997700515152927, 
+                    0.997700515152927, 
+                    0.9885772537549828, 
+                    0.9885772537549828, 
+                    0.9679070242193294, 
+                    0.9679070242193294, 
+                    0.9403280495687819, 
+                    0.9403280495687819, 
+                    0.9025216819866606, 
+                    0.9025216819866606, 
+                    0.8602547554431902, 
+                    0.8602547554431902, 
+                    0.8181334054027222, 
+                    0.8181334054027222, 
+                    0.7734248156989847, 
+                    0.7734248156989847, 
+                    0.727274991778223, 
+                    0.727274991778223, 
+                    0.6821273299977492, 
+                    0.6821273299977492, 
+                    0.6394676737017461, 
+                    0.6394676737017461, 
+                    0.5986541054109838, 
+                    0.5986541054109838, 
+                    0.5594985804421702, 
+                    0.5594985804421702, 
+                    0.5232821029711607, 
+                    0.5232821029711607, 
+                    0.48568497190378573, 
+                    0.48568497190378573, 
+                    0.45455601099790954, 
+                    0.45455601099790954, 
+                    0.4251638156107646, 
+                    0.4251638156107646, 
+                    0.39575694081740154, 
+                    0.39575694081740154, 
+                    0.37109944022530594, 
+                    0.37109944022530594, 
+                    0.34814081415761644, 
+                    0.34814081415761644, 
+                    0.3275536019916749, 
+                    0.3275536019916749, 
+                    0.30939716328283745, 
+                    0.30939716328283745, 
+                    0.29295791421102624, 
+                    0.29295791421102624, 
+                    0.27669825305996204, 
+                    0.27669825305996204, 
+                    0.2642538119823647, 
+                    0.2642538119823647, 
+                    0.2531580772793639, 
+                    0.2531580772793639, 
+                    0.23753753056321628, 
+                    0.23753753056321628, 
+                    0.21806293827258982, 
+                    0.21806293827258982, 
+                    0.19571324205767035, 
+                    0.19571324205767035, 
+                    0.17091024890645892, 
+                    0.17091024890645892, 
+                    0.14348191575333377, 
+                    0.14348191575333377, 
+                    0.11216022174102144, 
+                    0.11216022174102144
+                ], 
+                0.16798025369644165
+            ]
+        ]
+    }, 
+    {
+        "block_size": 72, 
+        "preprocessing_block_sizes": [
+            52
+        ], 
+        "pruning_parameters": [
+            [
+                0.9215999841690063, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999664371497193, 
+                    0.9999664371497193, 
+                    0.9998594141497461, 
+                    0.9998594141497461, 
+                    0.999635874681226, 
+                    0.999635874681226, 
+                    0.9893030744935964, 
+                    0.9893030744935964, 
+                    0.9777895563628934, 
+                    0.9777895563628934, 
+                    0.9535449804338778, 
+                    0.9535449804338778, 
+                    0.921129586019379, 
+                    0.921129586019379, 
+                    0.8845496045700233, 
+                    0.8845496045700233, 
+                    0.8457397817856995, 
+                    0.8457397817856995, 
+                    0.8061416826623059, 
+                    0.8061416826623059, 
+                    0.7662568495721166, 
+                    0.7662568495721166, 
+                    0.7261700932351985, 
+                    0.7261700932351985, 
+                    0.686576941024091, 
+                    0.686576941024091, 
+                    0.64737998126404, 
+                    0.64737998126404, 
+                    0.6080393058281178, 
+                    0.6080393058281178, 
+                    0.5696475015272755, 
+                    0.5696475015272755, 
+                    0.5353528748682814, 
+                    0.5353528748682814, 
+                    0.5002285267418559, 
+                    0.5002285267418559, 
+                    0.4696008608982418, 
+                    0.4696008608982418, 
+                    0.44142396356959446, 
+                    0.44142396356959446, 
+                    0.4153174630590519, 
+                    0.4153174630590519, 
+                    0.3921669384794653, 
+                    0.3921669384794653, 
+                    0.3704812655112372, 
+                    0.3704812655112372, 
+                    0.3504663669145951, 
+                    0.3504663669145951, 
+                    0.3322979280683236, 
+                    0.3322979280683236, 
+                    0.31614915344239525, 
+                    0.31614915344239525, 
+                    0.3035594725896852, 
+                    0.3035594725896852, 
+                    0.2929082363934976, 
+                    0.2929082363934976, 
+                    0.2777494636806922, 
+                    0.2777494636806922, 
+                    0.25792000195736364, 
+                    0.25792000195736364, 
+                    0.23429602590370036, 
+                    0.23429602590370036, 
+                    0.207130213216099, 
+                    0.207130213216099, 
+                    0.17593162316942246, 
+                    0.17593162316942246, 
+                    0.13833620881384, 
+                    0.13833620881384
+                ], 
+                0.4308820366859436
+            ], 
+            [
+                0.9291551113128662, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999577680743913, 
+                    0.9999577680743913, 
+                    0.9998006706835013, 
+                    0.9998006706835013, 
+                    0.9876701702456987, 
+                    0.9876701702456987, 
+                    0.9724815115325357, 
+                    0.9724815115325357, 
+                    0.94908446277099, 
+                    0.94908446277099, 
+                    0.9185450873124528, 
+                    0.9185450873124528, 
+                    0.8817086550885214, 
+                    0.8817086550885214, 
+                    0.8425010856217429, 
+                    0.8425010856217429, 
+                    0.8028183248876017, 
+                    0.8028183248876017, 
+                    0.7626489904671846, 
+                    0.7626489904671846, 
+                    0.7223436289348062, 
+                    0.7223436289348062, 
+                    0.6825979417804277, 
+                    0.6825979417804277, 
+                    0.6434875350221926, 
+                    0.6434875350221926, 
+                    0.6039365783634112, 
+                    0.6039365783634112, 
+                    0.5660693832705965, 
+                    0.5660693832705965, 
+                    0.5310737463053876, 
+                    0.5310737463053876, 
+                    0.49694351160460204, 
+                    0.49694351160460204, 
+                    0.4657443900146794, 
+                    0.4657443900146794, 
+                    0.437943023119361, 
+                    0.437943023119361, 
+                    0.41193727048337914, 
+                    0.41193727048337914, 
+                    0.38890697040825595, 
+                    0.38890697040825595, 
+                    0.36735689867824967, 
+                    0.36735689867824967, 
+                    0.3474762113030015, 
+                    0.3474762113030015, 
+                    0.32944310561374257, 
+                    0.32944310561374257, 
+                    0.31351639203088083, 
+                    0.31351639203088083, 
+                    0.29921998737789135, 
+                    0.29921998737789135, 
+                    0.2855507497005539, 
+                    0.2855507497005539, 
+                    0.26888287030529956, 
+                    0.26888287030529956, 
+                    0.24832976846965713, 
+                    0.24832976846965713, 
+                    0.22449945169961036, 
+                    0.22449945169961036, 
+                    0.19760830197534643, 
+                    0.19760830197534643, 
+                    0.16726167591116972, 
+                    0.16726167591116972, 
+                    0.13149410586945218, 
+                    0.13149410586945218
+                ], 
+                0.4114295542240143
+            ], 
+            [
+                0.9367721676826477, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998807472204876, 
+                    0.9998807472204876, 
+                    0.9998621171528141, 
+                    0.9998621171528141, 
+                    0.9971445699273096, 
+                    0.9971445699273096, 
+                    0.9717225073537402, 
+                    0.9717225073537402, 
+                    0.9474447063882172, 
+                    0.9474447063882172, 
+                    0.9161810833696761, 
+                    0.9161810833696761, 
+                    0.8789208568673903, 
+                    0.8789208568673903, 
+                    0.8392982544839959, 
+                    0.8392982544839959, 
+                    0.7993488595549939, 
+                    0.7993488595549939, 
+                    0.7590276484147478, 
+                    0.7590276484147478, 
+                    0.7185735248858425, 
+                    0.7185735248858425, 
+                    0.6787771248500856, 
+                    0.6787771248500856, 
+                    0.6395408987669398, 
+                    0.6395408987669398, 
+                    0.6002092929541032, 
+                    0.6002092929541032, 
+                    0.5618588822706844, 
+                    0.5618588822706844, 
+                    0.5278120398458592, 
+                    0.5278120398458592, 
+                    0.492705689171448, 
+                    0.492705689171448, 
+                    0.4625988398749663, 
+                    0.4625988398749663, 
+                    0.4343811901246391, 
+                    0.4343811901246391, 
+                    0.4086698355600221, 
+                    0.4086698355600221, 
+                    0.38573125000629954, 
+                    0.38573125000629954, 
+                    0.3643106418057278, 
+                    0.3643106418057278, 
+                    0.3445542187408833, 
+                    0.3445542187408833, 
+                    0.3266386160446705, 
+                    0.3266386160446705, 
+                    0.31082244477682813, 
+                    0.31082244477682813, 
+                    0.29666839880631446, 
+                    0.29666839880631446, 
+                    0.28319463103011006, 
+                    0.28319463103011006, 
+                    0.26651395312908477, 
+                    0.26651395312908477, 
+                    0.24595881250231114, 
+                    0.24595881250231114, 
+                    0.22218365258765957, 
+                    0.22218365258765957, 
+                    0.19540495940156694, 
+                    0.19540495940156694, 
+                    0.16522736710960276, 
+                    0.16522736710960276, 
+                    0.12969708160016954, 
+                    0.12969708160016954
+                ], 
+                0.3936404287815094
+            ], 
+            [
+                0.944451630115509, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999379085983578, 
+                    0.9999379085983578, 
+                    0.9987425362918818, 
+                    0.9987425362918818, 
+                    0.9955721774850461, 
+                    0.9955721774850461, 
+                    0.9707430778920098, 
+                    0.9707430778920098, 
+                    0.9457586226803343, 
+                    0.9457586226803343, 
+                    0.9139282278005082, 
+                    0.9139282278005082, 
+                    0.8761616056885779, 
+                    0.8761616056885779, 
+                    0.8361322797077703, 
+                    0.8361322797077703, 
+                    0.7958840203164529, 
+                    0.7958840203164529, 
+                    0.7553423273908739, 
+                    0.7553423273908739, 
+                    0.7147541815830797, 
+                    0.7147541815830797, 
+                    0.6748899717770883, 
+                    0.6748899717770883, 
+                    0.6356478292794375, 
+                    0.6356478292794375, 
+                    0.596306982466131, 
+                    0.596306982466131, 
+                    0.5580705317291242, 
+                    0.5580705317291242, 
+                    0.5240372114419362, 
+                    0.5240372114419362, 
+                    0.48909672931162995, 
+                    0.48909672931162995, 
+                    0.45906484934943087, 
+                    0.45906484934943087, 
+                    0.4309879340919062, 
+                    0.4309879340919062, 
+                    0.4053973307716821, 
+                    0.4053973307716821, 
+                    0.3825824925758872, 
+                    0.3825824925758872, 
+                    0.3612889078964804, 
+                    0.3612889078964804, 
+                    0.34165805892541895, 
+                    0.34165805892541895, 
+                    0.32386553730397744, 
+                    0.32386553730397744, 
+                    0.30816242319279724, 
+                    0.30816242319279724, 
+                    0.29409100937358856, 
+                    0.29409100937358856, 
+                    0.28047851132786983, 
+                    0.28047851132786983, 
+                    0.26367150060361694, 
+                    0.26367150060361694, 
+                    0.2430989776528505, 
+                    0.2430989776528505, 
+                    0.21939878109778596, 
+                    0.21939878109778596, 
+                    0.19278122395456992, 
+                    0.19278122395456992, 
+                    0.1628634550751892, 
+                    0.1628634550751892, 
+                    0.12775897117332025, 
+                    0.12775897117332025
+                ], 
+                0.3760666847229004
+            ], 
+            [
+                0.952194094657898, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999433354762096, 
+                    0.9999433354762096, 
+                    0.9999111418367359, 
+                    0.9999111418367359, 
+                    0.9991399140987532, 
+                    0.9991399140987532, 
+                    0.9942871044863606, 
+                    0.9942871044863606, 
+                    0.9697013983776603, 
+                    0.9697013983776603, 
+                    0.9440926843323015, 
+                    0.9440926843323015, 
+                    0.9116581596798379, 
+                    0.9116581596798379, 
+                    0.8733695245420368, 
+                    0.8733695245420368, 
+                    0.8329602062031294, 
+                    0.8329602062031294, 
+                    0.7924301843808146, 
+                    0.7924301843808146, 
+                    0.7516719057443492, 
+                    0.7516719057443492, 
+                    0.7109415807463498, 
+                    0.7109415807463498, 
+                    0.6710165497011356, 
+                    0.6710165497011356, 
+                    0.631759703840253, 
+                    0.631759703840253, 
+                    0.5924464053375021, 
+                    0.5924464053375021, 
+                    0.5542506006355475, 
+                    0.5542506006355475, 
+                    0.5203199470441212, 
+                    0.5203199470441212, 
+                    0.4854852169937124, 
+                    0.4854852169937124, 
+                    0.4555571496556985, 
+                    0.4555571496556985, 
+                    0.42762084077257023, 
+                    0.42762084077257023, 
+                    0.40215144242869894, 
+                    0.40215144242869894, 
+                    0.379464336715561, 
+                    0.379464336715561, 
+                    0.3582985251486624, 
+                    0.3582985251486624, 
+                    0.33879404322076373, 
+                    0.33879404322076373, 
+                    0.3211203978081921, 
+                    0.3211203978081921, 
+                    0.30553177882749477, 
+                    0.30553177882749477, 
+                    0.29155496065940806, 
+                    0.29155496065940806, 
+                    0.27787383602180865, 
+                    0.27787383602180865, 
+                    0.260979461505534, 
+                    0.260979461505534, 
+                    0.24040805998759768, 
+                    0.24040805998759768, 
+                    0.21679168632297724, 
+                    0.21679168632297724, 
+                    0.19033722360001035, 
+                    0.19033722360001035, 
+                    0.1606753564371206, 
+                    0.1606753564371206, 
+                    0.12598628833175973, 
+                    0.12598628833175973
+                ], 
+                0.35884490609169006
+            ], 
+            [
+                0.9599999785423279, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996480613141991, 
+                    0.9996480613141991, 
+                    0.9988433713675102, 
+                    0.9988433713675102, 
+                    0.9925086128828141, 
+                    0.9925086128828141, 
+                    0.9687387236201441, 
+                    0.9687387236201441, 
+                    0.9423802392097435, 
+                    0.9423802392097435, 
+                    0.9093274735691409, 
+                    0.9093274735691409, 
+                    0.8705424799606726, 
+                    0.8705424799606726, 
+                    0.8297531584433095, 
+                    0.8297531584433095, 
+                    0.7889421372454439, 
+                    0.7889421372454439, 
+                    0.7479936743777302, 
+                    0.7479936743777302, 
+                    0.7071501781023812, 
+                    0.7071501781023812, 
+                    0.6671603608378878, 
+                    0.6671603608378878, 
+                    0.6278077610257218, 
+                    0.6278077610257218, 
+                    0.5887274424104759, 
+                    0.5887274424104759, 
+                    0.5501615083828605, 
+                    0.5501615083828605, 
+                    0.5169799442393451, 
+                    0.5169799442393451, 
+                    0.48148495644113953, 
+                    0.48148495644113953, 
+                    0.45234082991862423, 
+                    0.45234082991862423, 
+                    0.42418921988938146, 
+                    0.42418921988938146, 
+                    0.39895524582525255, 
+                    0.39895524582525255, 
+                    0.3763758195864182, 
+                    0.3763758195864182, 
+                    0.35533866975970785, 
+                    0.35533866975970785, 
+                    0.33595833035998135, 
+                    0.33595833035998135, 
+                    0.31840341070450673, 
+                    0.31840341070450673, 
+                    0.30291427087908795, 
+                    0.30291427087908795, 
+                    0.28909150419284857, 
+                    0.28909150419284857, 
+                    0.2756028216991945, 
+                    0.2756028216991945, 
+                    0.2587058356134499, 
+                    0.2587058356134499, 
+                    0.23814015326023935, 
+                    0.23814015326023935, 
+                    0.2145725988916937, 
+                    0.2145725988916937, 
+                    0.18820833325589714, 
+                    0.18820833325589714, 
+                    0.15867387846413378, 
+                    0.15867387846413378, 
+                    0.12416859366451662, 
+                    0.12416859366451662
+                ], 
+                0.34198203682899475
+            ], 
+            [
+                0.9678698778152466, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999873826291802, 
+                    0.9999873826291802, 
+                    0.9997504143342997, 
+                    0.9997504143342997, 
+                    0.9984656217071638, 
+                    0.9984656217071638, 
+                    0.9910486270931378, 
+                    0.9910486270931378, 
+                    0.9675607890313286, 
+                    0.9675607890313286, 
+                    0.9405236612593569, 
+                    0.9405236612593569, 
+                    0.9069612354276226, 
+                    0.9069612354276226, 
+                    0.8676380322348711, 
+                    0.8676380322348711, 
+                    0.8264615856287756, 
+                    0.8264615856287756, 
+                    0.7854284562948781, 
+                    0.7854284562948781, 
+                    0.7442974868168327, 
+                    0.7442974868168327, 
+                    0.7033203759918288, 
+                    0.7033203759918288, 
+                    0.6632906887688418, 
+                    0.6632906887688418, 
+                    0.6239782131197985, 
+                    0.6239782131197985, 
+                    0.5847744054682724, 
+                    0.5847744054682724, 
+                    0.5466453830224929, 
+                    0.5466453830224929, 
+                    0.5129620192399749, 
+                    0.5129620192399749, 
+                    0.4783046555369604, 
+                    0.4783046555369604, 
+                    0.4486419258556081, 
+                    0.4486419258556081, 
+                    0.4209558249717182, 
+                    0.4209558249717182, 
+                    0.3957457768669668, 
+                    0.3957457768669668, 
+                    0.37331404340208024, 
+                    0.37331404340208024, 
+                    0.35240386576403626, 
+                    0.35240386576403626, 
+                    0.33314997880836056, 
+                    0.33314997880836056, 
+                    0.31571591700010576, 
+                    0.31571591700010576, 
+                    0.3003467351972721, 
+                    0.3003467351972721, 
+                    0.28661717883660254, 
+                    0.28661717883660254, 
+                    0.27305056418271134, 
+                    0.27305056418271134, 
+                    0.2560970798835441, 
+                    0.2560970798835441, 
+                    0.23555647354850098, 
+                    0.23555647354850098, 
+                    0.21209210996280878, 
+                    0.21209210996280878, 
+                    0.18591274896696372, 
+                    0.18591274896696372, 
+                    0.15666749746208095, 
+                    0.15666749746208095, 
+                    0.12263690212632454, 
+                    0.12263690212632454
+                ], 
+                0.32553160190582275
+            ], 
+            [
+                0.975804328918457, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994000604990456, 
+                    0.9994000604990456, 
+                    0.9983423967532725, 
+                    0.9983423967532725, 
+                    0.988320347956556, 
+                    0.988320347956556, 
+                    0.9664133334979135, 
+                    0.9664133334979135, 
+                    0.9386743876729104, 
+                    0.9386743876729104, 
+                    0.9045697639075813, 
+                    0.9045697639075813, 
+                    0.8647045668603095, 
+                    0.8647045668603095, 
+                    0.8231826991286886, 
+                    0.8231826991286886, 
+                    0.7819240382690477, 
+                    0.7819240382690477, 
+                    0.7406012414197524, 
+                    0.7406012414197524, 
+                    0.6995191344083547, 
+                    0.6995191344083547, 
+                    0.6594012132025493, 
+                    0.6594012132025493, 
+                    0.6201772780189867, 
+                    0.6201772780189867, 
+                    0.5807265939696524, 
+                    0.5807265939696524, 
+                    0.5433993823605839, 
+                    0.5433993823605839, 
+                    0.5086843064449563, 
+                    0.5086843064449563, 
+                    0.47540059792578165, 
+                    0.47540059792578165, 
+                    0.4448128027337142, 
+                    0.4448128027337142, 
+                    0.417824480804453, 
+                    0.417824480804453, 
+                    0.39253694154965224, 
+                    0.39253694154965224, 
+                    0.37029184013448935, 
+                    0.37029184013448935, 
+                    0.3494960129689546, 
+                    0.3494960129689546, 
+                    0.3304386265390457, 
+                    0.3304386265390457, 
+                    0.3130368470680088, 
+                    0.3130368470680088, 
+                    0.29773051573651216, 
+                    0.29773051573651216, 
+                    0.2840974099894437, 
+                    0.2840974099894437, 
+                    0.2713892637033977, 
+                    0.2713892637033977, 
+                    0.25560393053190844, 
+                    0.25560393053190844, 
+                    0.23594087370630304, 
+                    0.23594087370630304, 
+                    0.2131065413982225, 
+                    0.2131065413982225, 
+                    0.1873504157077251, 
+                    0.1873504157077251, 
+                    0.15832755175895305, 
+                    0.15832755175895305, 
+                    0.12424377608062505, 
+                    0.12424377608062505
+                ], 
+                0.3099934160709381
+            ], 
+            [
+                0.9838038086891174, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999994718354938, 
+                    0.999994718354938, 
+                    0.9994696407953733, 
+                    0.9994696407953733, 
+                    0.9975244161332164, 
+                    0.9975244161332164, 
+                    0.9857192899390554, 
+                    0.9857192899390554, 
+                    0.9651742657192964, 
+                    0.9651742657192964, 
+                    0.9368880177710565, 
+                    0.9368880177710565, 
+                    0.9020523310047024, 
+                    0.9020523310047024, 
+                    0.8618323425086002, 
+                    0.8618323425086002, 
+                    0.8199208383046315, 
+                    0.8199208383046315, 
+                    0.7783474900434677, 
+                    0.7783474900434677, 
+                    0.7368765325413433, 
+                    0.7368765325413433, 
+                    0.6957129511554485, 
+                    0.6957129511554485, 
+                    0.6555376516812674, 
+                    0.6555376516812674, 
+                    0.6163155287114375, 
+                    0.6163155287114375, 
+                    0.5769257645241603, 
+                    0.5769257645241603, 
+                    0.5396060343516549, 
+                    0.5396060343516549, 
+                    0.5051071234423813, 
+                    0.5051071234423813, 
+                    0.4717676820395043, 
+                    0.4717676820395043, 
+                    0.4414970142006638, 
+                    0.4414970142006638, 
+                    0.41452125115280464, 
+                    0.41452125115280464, 
+                    0.38941976831153813, 
+                    0.38941976831153813, 
+                    0.36727653210685485, 
+                    0.36727653210685485, 
+                    0.3466378681955865, 
+                    0.3466378681955865, 
+                    0.3277595712070053, 
+                    0.3277595712070053, 
+                    0.31046314152707083, 
+                    0.31046314152707083, 
+                    0.29505876799783193, 
+                    0.29505876799783193, 
+                    0.2815532932900446, 
+                    0.2815532932900446, 
+                    0.26954606505782575, 
+                    0.26954606505782575, 
+                    0.25501566123736485, 
+                    0.25501566123736485, 
+                    0.23631133438138824, 
+                    0.23631133438138824, 
+                    0.21417559137337608, 
+                    0.21417559137337608, 
+                    0.18890979526327964, 
+                    0.18890979526327964, 
+                    0.16018935275887808, 
+                    0.16018935275887808, 
+                    0.1261519050462341, 
+                    0.1261519050462341
+                ], 
+                0.2947360873222351
+            ], 
+            [
+                0.9918688535690308, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988286647235392, 
+                    0.9988286647235392, 
+                    0.9949714841219759, 
+                    0.9949714841219759, 
+                    0.9804663512532782, 
+                    0.9804663512532782, 
+                    0.9638116505332986, 
+                    0.9638116505332986, 
+                    0.9354833853947134, 
+                    0.9354833853947134, 
+                    0.8997661453235481, 
+                    0.8997661453235481, 
+                    0.8582885915390304, 
+                    0.8582885915390304, 
+                    0.8162613360581523, 
+                    0.8162613360581523, 
+                    0.7745435786620966, 
+                    0.7745435786620966, 
+                    0.7329836540441043, 
+                    0.7329836540441043, 
+                    0.6918084158864368, 
+                    0.6918084158864368, 
+                    0.6516378910639858, 
+                    0.6516378910639858, 
+                    0.6123592628355493, 
+                    0.6123592628355493, 
+                    0.5731201929022358, 
+                    0.5731201929022358, 
+                    0.5356106881146956, 
+                    0.5356106881146956, 
+                    0.501720010807758, 
+                    0.501720010807758, 
+                    0.46800563801491507, 
+                    0.46800563801491507, 
+                    0.43823671166142747, 
+                    0.43823671166142747, 
+                    0.41120342753846545, 
+                    0.41120342753846545, 
+                    0.38631734427178266, 
+                    0.38631734427178266, 
+                    0.36428193175622714, 
+                    0.36428193175622714, 
+                    0.3437509507896858, 
+                    0.3437509507896858, 
+                    0.3248640454592586, 
+                    0.3248640454592586, 
+                    0.30773666487335366, 
+                    0.30773666487335366, 
+                    0.2920460148252867, 
+                    0.2920460148252867, 
+                    0.2775867504615035, 
+                    0.2775867504615035, 
+                    0.26995711499166003, 
+                    0.26995711499166003, 
+                    0.2596682654070823, 
+                    0.2596682654070823, 
+                    0.24392973327169454, 
+                    0.24392973327169454, 
+                    0.22377140269691548, 
+                    0.22377140269691548, 
+                    0.1996137313554204, 
+                    0.1996137313554204, 
+                    0.1710874357069188, 
+                    0.1710874357069188, 
+                    0.13585744057495241, 
+                    0.13585744057495241
+                ], 
+                0.2799381613731384
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989829803366819, 
+                    0.9989829803366819, 
+                    0.9971560893463038, 
+                    0.9971560893463038, 
+                    0.9831744485332624, 
+                    0.9831744485332624, 
+                    0.9627846751226371, 
+                    0.9627846751226371, 
+                    0.9330483667967677, 
+                    0.9330483667967677, 
+                    0.8969365476310396, 
+                    0.8969365476310396, 
+                    0.8557536923617602, 
+                    0.8557536923617602, 
+                    0.8131584135939688, 
+                    0.8131584135939688, 
+                    0.7711555087858046, 
+                    0.7711555087858046, 
+                    0.7293912542860832, 
+                    0.7293912542860832, 
+                    0.6880030141927098, 
+                    0.6880030141927098, 
+                    0.647835976648998, 
+                    0.647835976648998, 
+                    0.6085153446534912, 
+                    0.6085153446534912, 
+                    0.5694735578156704, 
+                    0.5694735578156704, 
+                    0.5317045612483744, 
+                    0.5317045612483744, 
+                    0.498361815088438, 
+                    0.498361815088438, 
+                    0.46428972693242926, 
+                    0.46428972693242926, 
+                    0.43501924079057175, 
+                    0.43501924079057175, 
+                    0.4079389169769291, 
+                    0.4079389169769291, 
+                    0.38323242478716285, 
+                    0.38323242478716285, 
+                    0.36132564518715404, 
+                    0.36132564518715404, 
+                    0.3409355263949091, 
+                    0.3409355263949091, 
+                    0.32219295315600605, 
+                    0.32219295315600605, 
+                    0.30514636864609573, 
+                    0.30514636864609573, 
+                    0.28879281323229744, 
+                    0.28879281323229744, 
+                    0.2755572271712247, 
+                    0.2755572271712247, 
+                    0.2655352617466423, 
+                    0.2655352617466423, 
+                    0.2513394287383766, 
+                    0.2513394287383766, 
+                    0.23283448319681838, 
+                    0.23283448319681838, 
+                    0.21093064047946777, 
+                    0.21093064047946777, 
+                    0.18592217069664152, 
+                    0.18592217069664152, 
+                    0.15745765215973725, 
+                    0.15745765215973725, 
+                    0.12366514828549943, 
+                    0.12366514828549943
+                ], 
+                0.2643482983112335
+            ], 
+            [
+                1.0081977844238281, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995607544874833, 
+                    0.9995607544874833, 
+                    0.9977316456890248, 
+                    0.9977316456890248, 
+                    0.9843309146071136, 
+                    0.9843309146071136, 
+                    0.96125892749072, 
+                    0.96125892749072, 
+                    0.9309688477205692, 
+                    0.9309688477205692, 
+                    0.8944855445545675, 
+                    0.8944855445545675, 
+                    0.8527412500104459, 
+                    0.8527412500104459, 
+                    0.8098288770617627, 
+                    0.8098288770617627, 
+                    0.7675948215388101, 
+                    0.7675948215388101, 
+                    0.7256379648661483, 
+                    0.7256379648661483, 
+                    0.6841730366771999, 
+                    0.6841730366771999, 
+                    0.6439759611234475, 
+                    0.6439759611234475, 
+                    0.6046281399054306, 
+                    0.6046281399054306, 
+                    0.5658248401821704, 
+                    0.5658248401821704, 
+                    0.5278463877166594, 
+                    0.5278463877166594, 
+                    0.4949541267971255, 
+                    0.4949541267971255, 
+                    0.460714358703734, 
+                    0.460714358703734, 
+                    0.4317866198791011, 
+                    0.4317866198791011, 
+                    0.4047423031292091, 
+                    0.4047423031292091, 
+                    0.38020003340575736, 
+                    0.38020003340575736, 
+                    0.3584166302965748, 
+                    0.3584166302965748, 
+                    0.33815116465711725, 
+                    0.33815116465711725, 
+                    0.3195233329391398, 
+                    0.3195233329391398, 
+                    0.3026787384663712, 
+                    0.3026787384663712, 
+                    0.2878845659231408, 
+                    0.2878845659231408, 
+                    0.2750722922447271, 
+                    0.2750722922447271, 
+                    0.2619771841230535, 
+                    0.2619771841230535, 
+                    0.2450526117842189, 
+                    0.2450526117842189, 
+                    0.22471212112670733, 
+                    0.22471212112670733, 
+                    0.20171396540275421, 
+                    0.20171396540275421, 
+                    0.1762999309227457, 
+                    0.1762999309227457, 
+                    0.14820344747244651, 
+                    0.14820344747244651, 
+                    0.11601680489006241, 
+                    0.11601680489006241
+                ], 
+                0.24959051609039307
+            ], 
+            [
+                1.016462802886963, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992655803941105, 
+                    0.9992655803941105, 
+                    0.9972095021111155, 
+                    0.9972095021111155, 
+                    0.9894090824473802, 
+                    0.9894090824473802, 
+                    0.9612240772941911, 
+                    0.9612240772941911, 
+                    0.9290425713103934, 
+                    0.9290425713103934, 
+                    0.8918869025508938, 
+                    0.8918869025508938, 
+                    0.8496524505521783, 
+                    0.8496524505521783, 
+                    0.8064252597491209, 
+                    0.8064252597491209, 
+                    0.7639775285605864, 
+                    0.7639775285605864, 
+                    0.7218708337649484, 
+                    0.7218708337649484, 
+                    0.6803543861911008, 
+                    0.6803543861911008, 
+                    0.640030478847319, 
+                    0.640030478847319, 
+                    0.6010088156351738, 
+                    0.6010088156351738, 
+                    0.5615325288367856, 
+                    0.5615325288367856, 
+                    0.5250235174492408, 
+                    0.5250235174492408, 
+                    0.4905237727572892, 
+                    0.4905237727572892, 
+                    0.458045122558571, 
+                    0.458045122558571, 
+                    0.42805538077192556, 
+                    0.42805538077192556, 
+                    0.40170233604628236, 
+                    0.40170233604628236, 
+                    0.3771407509495655, 
+                    0.3771407509495655, 
+                    0.3555168298382759, 
+                    0.3555168298382759, 
+                    0.33537924864757646, 
+                    0.33537924864757646, 
+                    0.3168758417112277, 
+                    0.3168758417112277, 
+                    0.3001481139527889, 
+                    0.3001481139527889, 
+                    0.2854744719034418, 
+                    0.2854744719034418, 
+                    0.27291230302677816, 
+                    0.27291230302677816, 
+                    0.25994526114187194, 
+                    0.25994526114187194, 
+                    0.243042387636675, 
+                    0.243042387636675, 
+                    0.2227520297716473, 
+                    0.2227520297716473, 
+                    0.19985010261789263, 
+                    0.19985010261789263, 
+                    0.17458415831561042, 
+                    0.17458415831561042, 
+                    0.146701720378563, 
+                    0.146701720378563, 
+                    0.1148283187717386, 
+                    0.1148283187717386
+                ], 
+                0.23582524061203003
+            ], 
+            [
+                1.024795651435852, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.998996201710644, 
+                    0.998996201710644, 
+                    0.9953348547631328, 
+                    0.9953348547631328, 
+                    0.9823957362456753, 
+                    0.9823957362456753, 
+                    0.9565302394810815, 
+                    0.9565302394810815, 
+                    0.9265201901255988, 
+                    0.9265201901255988, 
+                    0.8891512399137095, 
+                    0.8891512399137095, 
+                    0.8465337616015911, 
+                    0.8465337616015911, 
+                    0.8029976320625071, 
+                    0.8029976320625071, 
+                    0.7603264658437856, 
+                    0.7603264658437856, 
+                    0.718108662559389, 
+                    0.718108662559389, 
+                    0.6764771223788068, 
+                    0.6764771223788068, 
+                    0.6361899604014438, 
+                    0.6361899604014438, 
+                    0.596996410952103, 
+                    0.596996410952103, 
+                    0.558054204939234, 
+                    0.558054204939234, 
+                    0.5207802321155203, 
+                    0.5207802321155203, 
+                    0.4874723767410048, 
+                    0.4874723767410048, 
+                    0.45413248295371106, 
+                    0.45413248295371106, 
+                    0.4250100432652343, 
+                    0.4250100432652343, 
+                    0.3984656202412363, 
+                    0.3984656202412363, 
+                    0.37413398467863246, 
+                    0.37413398467863246, 
+                    0.3526246146300346, 
+                    0.3526246146300346, 
+                    0.33261621658127005, 
+                    0.33261621658127005, 
+                    0.3142413539388422, 
+                    0.3142413539388422, 
+                    0.2976182442817756, 
+                    0.2976182442817756, 
+                    0.28263114877975815, 
+                    0.28263114877975815, 
+                    0.2689981756306377, 
+                    0.2689981756306377, 
+                    0.25838839392212365, 
+                    0.25838839392212365, 
+                    0.24409478225150325, 
+                    0.24409478225150325, 
+                    0.22566819767990284, 
+                    0.22566819767990284, 
+                    0.20404730778681585, 
+                    0.20404730778681585, 
+                    0.17955964362848656, 
+                    0.17955964362848656, 
+                    0.15193838646705174, 
+                    0.15193838646705174, 
+                    0.11956197004173331, 
+                    0.11956197004173331
+                ], 
+                0.22286172211170197
+            ], 
+            [
+                1.0331966876983643, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990510458915113, 
+                    0.9990510458915113, 
+                    0.9953998587291802, 
+                    0.9953998587291802, 
+                    0.9838314599030804, 
+                    0.9838314599030804, 
+                    0.9557924629354392, 
+                    0.9557924629354392, 
+                    0.9245180971361667, 
+                    0.9245180971361667, 
+                    0.8865133791417175, 
+                    0.8865133791417175, 
+                    0.8434148782009567, 
+                    0.8434148782009567, 
+                    0.799516747755217, 
+                    0.799516747755217, 
+                    0.7566829478095196, 
+                    0.7566829478095196, 
+                    0.7142677097596083, 
+                    0.7142677097596083, 
+                    0.6726940745768584, 
+                    0.6726940745768584, 
+                    0.6323009977082652, 
+                    0.6323009977082652, 
+                    0.5933922634196579, 
+                    0.5933922634196579, 
+                    0.553904924244523, 
+                    0.553904924244523, 
+                    0.517823751974898, 
+                    0.517823751974898, 
+                    0.4833913843244095, 
+                    0.4833913843244095, 
+                    0.4512568254585367, 
+                    0.4512568254585367, 
+                    0.4214841452051384, 
+                    0.4214841452051384, 
+                    0.39541103278539586, 
+                    0.39541103278539586, 
+                    0.3711250152524607, 
+                    0.3711250152524607, 
+                    0.3497741965780741, 
+                    0.3497741965780741, 
+                    0.3299003802580825, 
+                    0.3299003802580825, 
+                    0.3116563247499189, 
+                    0.3116563247499189, 
+                    0.2951371331365062, 
+                    0.2951371331365062, 
+                    0.2800527769769727, 
+                    0.2800527769769727, 
+                    0.2672860755765671, 
+                    0.2672860755765671, 
+                    0.2562401997216811, 
+                    0.2562401997216811, 
+                    0.2409071356624392, 
+                    0.2409071356624392, 
+                    0.22175568243060517, 
+                    0.22175568243060517, 
+                    0.1997109737103121, 
+                    0.1997109737103121, 
+                    0.1750754842301575, 
+                    0.1750754842301575, 
+                    0.1476028392754045, 
+                    0.1476028392754045, 
+                    0.11584075697255491, 
+                    0.11584075697255491
+                ], 
+                0.20980633795261383
+            ], 
+            [
+                1.0416666269302368, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988649980247237, 
+                    0.9988649980247237, 
+                    0.9950846958970342, 
+                    0.9950846958970342, 
+                    0.9828570170001089, 
+                    0.9828570170001089, 
+                    0.9535808857234935, 
+                    0.9535808857234935, 
+                    0.9221895050472112, 
+                    0.9221895050472112, 
+                    0.8837613321442174, 
+                    0.8837613321442174, 
+                    0.8402398952573784, 
+                    0.8402398952573784, 
+                    0.7960725609805179, 
+                    0.7960725609805179, 
+                    0.7530033465111363, 
+                    0.7530033465111363, 
+                    0.7105260778926928, 
+                    0.7105260778926928, 
+                    0.6687612145538778, 
+                    0.6687612145538778, 
+                    0.6285444278333828, 
+                    0.6285444278333828, 
+                    0.5892598987478053, 
+                    0.5892598987478053, 
+                    0.5507913236831398, 
+                    0.5507913236831398, 
+                    0.5131974533938236, 
+                    0.5131974533938236, 
+                    0.4807337521977477, 
+                    0.4807337521977477, 
+                    0.44713162027170944, 
+                    0.44713162027170944, 
+                    0.41863561984128844, 
+                    0.41863561984128844, 
+                    0.3922116343987749, 
+                    0.3922116343987749, 
+                    0.3682008490468754, 
+                    0.3682008490468754, 
+                    0.34695192853062, 
+                    0.34695192853062, 
+                    0.32721244249463693, 
+                    0.32721244249463693, 
+                    0.3090971137018059, 
+                    0.3090971137018059, 
+                    0.2926475584390051, 
+                    0.2926475584390051, 
+                    0.276924213575971, 
+                    0.276924213575971, 
+                    0.2649751744208548, 
+                    0.2649751744208548, 
+                    0.2543144400581582, 
+                    0.2543144400581582, 
+                    0.23889271154160766, 
+                    0.23889271154160766, 
+                    0.2196927864008064, 
+                    0.2196927864008064, 
+                    0.197669301393837, 
+                    0.197669301393837, 
+                    0.17312833479417142, 
+                    0.17312833479417142, 
+                    0.1458364168029658, 
+                    0.1458364168029658, 
+                    0.11440516982457538, 
+                    0.11440516982457538
+                ], 
+                0.19721858203411102
+            ], 
+            [
+                1.0502060651779175, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986557707689814, 
+                    0.9986557707689814, 
+                    0.9931260456921932, 
+                    0.9931260456921932, 
+                    0.9784072262868371, 
+                    0.9784072262868371, 
+                    0.9536681516340582, 
+                    0.9536681516340582, 
+                    0.9201714713271645, 
+                    0.9201714713271645, 
+                    0.8810498588089909, 
+                    0.8810498588089909, 
+                    0.836939965560727, 
+                    0.836939965560727, 
+                    0.7927120687228358, 
+                    0.7927120687228358, 
+                    0.7492294631147878, 
+                    0.7492294631147878, 
+                    0.7066912941102641, 
+                    0.7066912941102641, 
+                    0.6650492647470454, 
+                    0.6650492647470454, 
+                    0.6246803471332788, 
+                    0.6246803471332788, 
+                    0.5855215336407272, 
+                    0.5855215336407272, 
+                    0.5471981551561997, 
+                    0.5471981551561997, 
+                    0.5101508946789667, 
+                    0.5101508946789667, 
+                    0.4774488247732228, 
+                    0.4774488247732228, 
+                    0.44404003479285437, 
+                    0.44404003479285437, 
+                    0.41525781499709097, 
+                    0.41525781499709097, 
+                    0.38901126952267234, 
+                    0.38901126952267234, 
+                    0.3651619510746645, 
+                    0.3651619510746645, 
+                    0.34410584278813927, 
+                    0.34410584278813927, 
+                    0.3245144642084148, 
+                    0.3245144642084148, 
+                    0.3065090004073759, 
+                    0.3065090004073759, 
+                    0.29015917013881837, 
+                    0.29015917013881837, 
+                    0.27513521855564005, 
+                    0.27513521855564005, 
+                    0.26300713818142796, 
+                    0.26300713818142796, 
+                    0.2521802458141587, 
+                    0.2521802458141587, 
+                    0.23851744744411021, 
+                    0.23851744744411021, 
+                    0.2206577361149817, 
+                    0.2206577361149817, 
+                    0.1995986540018236, 
+                    0.1995986540018236, 
+                    0.1757146710581314, 
+                    0.1757146710581314, 
+                    0.1487949187510296, 
+                    0.1487949187510296, 
+                    0.11733742312449796, 
+                    0.11733742312449796
+                ], 
+                0.18585172295570374
+            ], 
+            [
+                1.0588154792785645, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999879280173462, 
+                    0.9999879280173462, 
+                    0.9986541277352728, 
+                    0.9986541277352728, 
+                    0.9930883754300079, 
+                    0.9930883754300079, 
+                    0.9781273100560719, 
+                    0.9781273100560719, 
+                    0.9523870187488158, 
+                    0.9523870187488158, 
+                    0.9181549999417278, 
+                    0.9181549999417278, 
+                    0.878324507636326, 
+                    0.878324507636326, 
+                    0.8338234233683147, 
+                    0.8338234233683147, 
+                    0.788972901584098, 
+                    0.788972901584098, 
+                    0.7456493226726227, 
+                    0.7456493226726227, 
+                    0.7031091950752694, 
+                    0.7031091950752694, 
+                    0.6610258812207828, 
+                    0.6610258812207828, 
+                    0.6207552840924955, 
+                    0.6207552840924955, 
+                    0.5816889989634056, 
+                    0.5816889989634056, 
+                    0.5436859639836058, 
+                    0.5436859639836058, 
+                    0.5061580385592656, 
+                    0.5061580385592656, 
+                    0.4741042625085734, 
+                    0.4741042625085734, 
+                    0.440490327735112, 
+                    0.440490327735112, 
+                    0.4122123089139698, 
+                    0.4122123089139698, 
+                    0.386020234936105, 
+                    0.386020234936105, 
+                    0.36231204362702746, 
+                    0.36231204362702746, 
+                    0.3413650615475349, 
+                    0.3413650615475349, 
+                    0.32188692467063645, 
+                    0.32188692467063645, 
+                    0.30402304469772373, 
+                    0.30402304469772373, 
+                    0.2878438673409066, 
+                    0.2878438673409066, 
+                    0.2735856032767775, 
+                    0.2735856032767775, 
+                    0.26104453136694344, 
+                    0.26104453136694344, 
+                    0.2504976849767688, 
+                    0.2504976849767688, 
+                    0.23611644640016297, 
+                    0.23611644640016297, 
+                    0.21773100370441065, 
+                    0.21773100370441065, 
+                    0.19637098917839774, 
+                    0.19637098917839774, 
+                    0.17239171812116347, 
+                    0.17239171812116347, 
+                    0.1455938581586312, 
+                    0.1455938581586312, 
+                    0.11459774840723554, 
+                    0.11459774840723554
+                ], 
+                0.17441383004188538
+            ], 
+            [
+                1.0674954652786255, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999745923805647, 
+                    0.9999745923805647, 
+                    0.998551063215325, 
+                    0.998551063215325, 
+                    0.9927974225391059, 
+                    0.9927974225391059, 
+                    0.9774014556042964, 
+                    0.9774014556042964, 
+                    0.9507742126588491, 
+                    0.9507742126588491, 
+                    0.9158812497676483, 
+                    0.9158812497676483, 
+                    0.8755066515109301, 
+                    0.8755066515109301, 
+                    0.830575557413591, 
+                    0.830575557413591, 
+                    0.7855644312102336, 
+                    0.7855644312102336, 
+                    0.7419286809648855, 
+                    0.7419286809648855, 
+                    0.6991354877073622, 
+                    0.6991354877073622, 
+                    0.6571921868104064, 
+                    0.6571921868104064, 
+                    0.6170799589723447, 
+                    0.6170799589723447, 
+                    0.5778290905921244, 
+                    0.5778290905921244, 
+                    0.5398944682164767, 
+                    0.5398944682164767, 
+                    0.5022930008354206, 
+                    0.5022930008354206, 
+                    0.4705136100626891, 
+                    0.4705136100626891, 
+                    0.4370714132345971, 
+                    0.4370714132345971, 
+                    0.40906039692426194, 
+                    0.40906039692426194, 
+                    0.383042926773738, 
+                    0.383042926773738, 
+                    0.3594681911008603, 
+                    0.3594681911008603, 
+                    0.3386227684640667, 
+                    0.3386227684640667, 
+                    0.31926690378662564, 
+                    0.31926690378662564, 
+                    0.3015120199646694, 
+                    0.3015120199646694, 
+                    0.2854626572445011, 
+                    0.2854626572445011, 
+                    0.27134356258771186, 
+                    0.27134356258771186, 
+                    0.25912982816896424, 
+                    0.25912982816896424, 
+                    0.2488226959362052, 
+                    0.2488226959362052, 
+                    0.23414764091196183, 
+                    0.23414764091196183, 
+                    0.21557001981807414, 
+                    0.21557001981807414, 
+                    0.19413617703644864, 
+                    0.19413617703644864, 
+                    0.17019704798311747, 
+                    0.17019704798311747, 
+                    0.1435672888600595, 
+                    0.1435672888600595, 
+                    0.11294886177534061, 
+                    0.11294886177534061
+                ], 
+                0.16334131360054016
+            ], 
+            [
+                1.0762466192245483, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999885011819225, 
+                    0.9999885011819225, 
+                    0.9984372599938374, 
+                    0.9984372599938374, 
+                    0.9914953482322381, 
+                    0.9914953482322381, 
+                    0.9752121062079648, 
+                    0.9752121062079648, 
+                    0.949030037910104, 
+                    0.949030037910104, 
+                    0.9134540342968336, 
+                    0.9134540342968336, 
+                    0.8726747255701365, 
+                    0.8726747255701365, 
+                    0.8273757896938458, 
+                    0.8273757896938458, 
+                    0.7819759967271702, 
+                    0.7819759967271702, 
+                    0.7382404790614281, 
+                    0.7382404790614281, 
+                    0.6952936326996011, 
+                    0.6952936326996011, 
+                    0.6533465690380997, 
+                    0.6533465690380997, 
+                    0.6130103572580791, 
+                    0.6130103572580791, 
+                    0.5741563980019557, 
+                    0.5741563980019557, 
+                    0.5354490361771853, 
+                    0.5354490361771853, 
+                    0.4991845696261309, 
+                    0.4991845696261309, 
+                    0.4662565048685514, 
+                    0.4662565048685514, 
+                    0.43415270279585366, 
+                    0.43415270279585366, 
+                    0.4057508327255345, 
+                    0.4057508327255345, 
+                    0.3801600581798209, 
+                    0.3801600581798209, 
+                    0.3566235951788331, 
+                    0.3566235951788331, 
+                    0.33587473811394114, 
+                    0.33587473811394114, 
+                    0.31662416107925523, 
+                    0.31662416107925523, 
+                    0.29891386112719526, 
+                    0.29891386112719526, 
+                    0.2830470004575397, 
+                    0.2830470004575397, 
+                    0.26935847776129396, 
+                    0.26935847776129396, 
+                    0.25613257105217435, 
+                    0.25613257105217435, 
+                    0.2466458010748425, 
+                    0.2466458010748425, 
+                    0.23290769541256282, 
+                    0.23290769541256282, 
+                    0.21500361855242675, 
+                    0.21500361855242675, 
+                    0.19407736481270732, 
+                    0.19407736481270732, 
+                    0.17051145781335242, 
+                    0.17051145781335242, 
+                    0.14412523208282568, 
+                    0.14412523208282568, 
+                    0.11356856519712073, 
+                    0.11356856519712073
+                ], 
+                0.15279416739940643
+            ], 
+            [
+                1.0850694179534912, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983721235204421, 
+                    0.9983721235204421, 
+                    0.9908280656304345, 
+                    0.9908280656304345, 
+                    0.9754206838992254, 
+                    0.9754206838992254, 
+                    0.9465901105169777, 
+                    0.9465901105169777, 
+                    0.9110455561874522, 
+                    0.9110455561874522, 
+                    0.8697636150044268, 
+                    0.8697636150044268, 
+                    0.8239863264988113, 
+                    0.8239863264988113, 
+                    0.7785705958567434, 
+                    0.7785705958567434, 
+                    0.734414455625876, 
+                    0.734414455625876, 
+                    0.691432737958383, 
+                    0.691432737958383, 
+                    0.6494841700991548, 
+                    0.6494841700991548, 
+                    0.6093374659882745, 
+                    0.6093374659882745, 
+                    0.5701772452377871, 
+                    0.5701772452377871, 
+                    0.5323418015156018, 
+                    0.5323418015156018, 
+                    0.49558750586242417, 
+                    0.49558750586242417, 
+                    0.46347119426389327, 
+                    0.46347119426389327, 
+                    0.43059626764208625, 
+                    0.43059626764208625, 
+                    0.4026406011633728, 
+                    0.4026406011633728, 
+                    0.3770176329060804, 
+                    0.3770176329060804, 
+                    0.3537673684471709, 
+                    0.3537673684471709, 
+                    0.3331628110244094, 
+                    0.3331628110244094, 
+                    0.31402638623768375, 
+                    0.31402638623768375, 
+                    0.2963867163511556, 
+                    0.2963867163511556, 
+                    0.2803740484341737, 
+                    0.2803740484341737, 
+                    0.26637835791384595, 
+                    0.26637835791384595, 
+                    0.25414645715163303, 
+                    0.25414645715163303, 
+                    0.2446781702795811, 
+                    0.2446781702795811, 
+                    0.23142170619870966, 
+                    0.23142170619870966, 
+                    0.21388030608051647, 
+                    0.21388030608051647, 
+                    0.19325400194404985, 
+                    0.19325400194404985, 
+                    0.16994686884315321, 
+                    0.16994686884315321, 
+                    0.14379152895607014, 
+                    0.14379152895607014, 
+                    0.11344157924471551, 
+                    0.11344157924471551
+                ], 
+                0.14281974732875824
+            ]
+        ]
+    }, 
+    {
+        "block_size": 73, 
+        "preprocessing_block_sizes": [
+            56
+        ], 
+        "pruning_parameters": [
+            [
+                0.9226108193397522, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999994634591757, 
+                    0.999994634591757, 
+                    0.9992771109291889, 
+                    0.9992771109291889, 
+                    0.9989131096764214, 
+                    0.9989131096764214, 
+                    0.9889153974288841, 
+                    0.9889153974288841, 
+                    0.9735555598232556, 
+                    0.9735555598232556, 
+                    0.9516165872559886, 
+                    0.9516165872559886, 
+                    0.9236039273136697, 
+                    0.9236039273136697, 
+                    0.8900347635418621, 
+                    0.8900347635418621, 
+                    0.8537393196027802, 
+                    0.8537393196027802, 
+                    0.8151177064200609, 
+                    0.8151177064200609, 
+                    0.7760493767750831, 
+                    0.7760493767750831, 
+                    0.73722199322897, 
+                    0.73722199322897, 
+                    0.6965912772391162, 
+                    0.6965912772391162, 
+                    0.6584068009973947, 
+                    0.6584068009973947, 
+                    0.6208322457586641, 
+                    0.6208322457586641, 
+                    0.5825883335148938, 
+                    0.5825883335148938, 
+                    0.5468107120882637, 
+                    0.5468107120882637, 
+                    0.5125015543456503, 
+                    0.5125015543456503, 
+                    0.4776908756663719, 
+                    0.4776908756663719, 
+                    0.44901337652244244, 
+                    0.44901337652244244, 
+                    0.4216767565909509, 
+                    0.4216767565909509, 
+                    0.3977168346566507, 
+                    0.3977168346566507, 
+                    0.3764282732360817, 
+                    0.3764282732360817, 
+                    0.35668337782513454, 
+                    0.35668337782513454, 
+                    0.33907862037967895, 
+                    0.33907862037967895, 
+                    0.32306710730087884, 
+                    0.32306710730087884, 
+                    0.3089023666943922, 
+                    0.3089023666943922, 
+                    0.2952714627077243, 
+                    0.2952714627077243, 
+                    0.2787166425595908, 
+                    0.2787166425595908, 
+                    0.2579697567966076, 
+                    0.2579697567966076, 
+                    0.233745627129465, 
+                    0.233745627129465, 
+                    0.20627567717445128, 
+                    0.20627567717445128, 
+                    0.17511333854822977, 
+                    0.17511333854822977, 
+                    0.1381211567603808, 
+                    0.1381211567603808
+                ], 
+                0.47513654828071594
+            ], 
+            [
+                0.9300722479820251, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999646005957385, 
+                    0.999646005957385, 
+                    0.9988445941244478, 
+                    0.9988445941244478, 
+                    0.9874686028600181, 
+                    0.9874686028600181, 
+                    0.9728981105639511, 
+                    0.9728981105639511, 
+                    0.9498942495206061, 
+                    0.9498942495206061, 
+                    0.92129782809588, 
+                    0.92129782809588, 
+                    0.8875317056594169, 
+                    0.8875317056594169, 
+                    0.8507299213466869, 
+                    0.8507299213466869, 
+                    0.8117678291357362, 
+                    0.8117678291357362, 
+                    0.7725922976824317, 
+                    0.7725922976824317, 
+                    0.733512601266149, 
+                    0.733512601266149, 
+                    0.6928101247274301, 
+                    0.6928101247274301, 
+                    0.6545180214748524, 
+                    0.6545180214748524, 
+                    0.6170276042524887, 
+                    0.6170276042524887, 
+                    0.5787807266503432, 
+                    0.5787807266503432, 
+                    0.5430637653632705, 
+                    0.5430637653632705, 
+                    0.5088310809629837, 
+                    0.5088310809629837, 
+                    0.4741601856715651, 
+                    0.4741601856715651, 
+                    0.44555256426623224, 
+                    0.44555256426623224, 
+                    0.4183561382596287, 
+                    0.4183561382596287, 
+                    0.3945086175556272, 
+                    0.3945086175556272, 
+                    0.3733370397746231, 
+                    0.3733370397746231, 
+                    0.3537066307870666, 
+                    0.3537066307870666, 
+                    0.336214447592304, 
+                    0.336214447592304, 
+                    0.3203055786221844, 
+                    0.3203055786221844, 
+                    0.3062767131261489, 
+                    0.3062767131261489, 
+                    0.2929577618825715, 
+                    0.2929577618825715, 
+                    0.2766061253965798, 
+                    0.2766061253965798, 
+                    0.25601654262931145, 
+                    0.25601654262931145, 
+                    0.2319509153227303, 
+                    0.2319509153227303, 
+                    0.20464926248921345, 
+                    0.20464926248921345, 
+                    0.1736685791220099, 
+                    0.1736685791220099, 
+                    0.13688005991032728, 
+                    0.13688005991032728
+                ], 
+                0.45711222290992737
+            ], 
+            [
+                0.9375939965248108, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998152755900434, 
+                    0.9998152755900434, 
+                    0.9981386313367813, 
+                    0.9981386313367813, 
+                    0.9874000712123895, 
+                    0.9874000712123895, 
+                    0.9714217138894734, 
+                    0.9714217138894734, 
+                    0.9481723369006151, 
+                    0.9481723369006151, 
+                    0.9191908522710465, 
+                    0.9191908522710465, 
+                    0.8848851151106109, 
+                    0.8848851151106109, 
+                    0.8476292981890037, 
+                    0.8476292981890037, 
+                    0.8084052569837301, 
+                    0.8084052569837301, 
+                    0.7689896685806978, 
+                    0.7689896685806978, 
+                    0.7298424367028472, 
+                    0.7298424367028472, 
+                    0.6889948537938804, 
+                    0.6889948537938804, 
+                    0.6506728761032048, 
+                    0.6506728761032048, 
+                    0.6131900254911475, 
+                    0.6131900254911475, 
+                    0.5749062038732045, 
+                    0.5749062038732045, 
+                    0.539395921174804, 
+                    0.539395921174804, 
+                    0.5050246825132363, 
+                    0.5050246825132363, 
+                    0.47084847706607175, 
+                    0.47084847706607175, 
+                    0.4419653754190047, 
+                    0.4419653754190047, 
+                    0.4150861248081172, 
+                    0.4150861248081172, 
+                    0.3913085108430673, 
+                    0.3913085108430673, 
+                    0.37026376356495716, 
+                    0.37026376356495716, 
+                    0.3507534566488939, 
+                    0.3507534566488939, 
+                    0.33337807227015265, 
+                    0.33337807227015265, 
+                    0.31758888908942706, 
+                    0.31758888908942706, 
+                    0.303599821165453, 
+                    0.303599821165453, 
+                    0.2897123586404086, 
+                    0.2897123586404086, 
+                    0.27275741390864017, 
+                    0.27275741390864017, 
+                    0.25186480937686634, 
+                    0.25186480937686634, 
+                    0.2277086013600761, 
+                    0.2277086013600761, 
+                    0.2004898550621457, 
+                    0.2004898550621457, 
+                    0.16976872088921063, 
+                    0.16976872088921063, 
+                    0.13351125275960843, 
+                    0.13351125275960843
+                ], 
+                0.43880602717399597
+            ], 
+            [
+                0.9451766014099121, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999355357635584, 
+                    0.9999355357635584, 
+                    0.9997350004604717, 
+                    0.9997350004604717, 
+                    0.9996327666209669, 
+                    0.9996327666209669, 
+                    0.9860937718970114, 
+                    0.9860937718970114, 
+                    0.9721167892693077, 
+                    0.9721167892693077, 
+                    0.9470025787915758, 
+                    0.9470025787915758, 
+                    0.9163994967964063, 
+                    0.9163994967964063, 
+                    0.881863652531373, 
+                    0.881863652531373, 
+                    0.8445820337313326, 
+                    0.8445820337313326, 
+                    0.8052694804100518, 
+                    0.8052694804100518, 
+                    0.765580374016227, 
+                    0.765580374016227, 
+                    0.7261862272355416, 
+                    0.7261862272355416, 
+                    0.6852770754306061, 
+                    0.6852770754306061, 
+                    0.6469365002896548, 
+                    0.6469365002896548, 
+                    0.6093766461900203, 
+                    0.6093766461900203, 
+                    0.5711602460550457, 
+                    0.5711602460550457, 
+                    0.5358557742335398, 
+                    0.5358557742335398, 
+                    0.5011760472974639, 
+                    0.5011760472974639, 
+                    0.4677808120727037, 
+                    0.4677808120727037, 
+                    0.43834354866085135, 
+                    0.43834354866085135, 
+                    0.41198488226092833, 
+                    0.41198488226092833, 
+                    0.3881650499040393, 
+                    0.3881650499040393, 
+                    0.36729183059971293, 
+                    0.36729183059971293, 
+                    0.34803601367721215, 
+                    0.34803601367721215, 
+                    0.3305369479227012, 
+                    0.3305369479227012, 
+                    0.3147993989176734, 
+                    0.3147993989176734, 
+                    0.3030257588131469, 
+                    0.3030257588131469, 
+                    0.2921340959106989, 
+                    0.2921340959106989, 
+                    0.27676220398178253, 
+                    0.27676220398178253, 
+                    0.2568174577947379, 
+                    0.2568174577947379, 
+                    0.23319120938394308, 
+                    0.23319120938394308, 
+                    0.20610987704977807, 
+                    0.20610987704977807, 
+                    0.17505087077054243, 
+                    0.17505087077054243, 
+                    0.13763414530282386, 
+                    0.13763414530282386
+                ], 
+                0.4225813150405884
+            ], 
+            [
+                0.9528205394744873, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989145889548253, 
+                    0.9989145889548253, 
+                    0.9987827793243763, 
+                    0.9987827793243763, 
+                    0.9928843865594454, 
+                    0.9928843865594454, 
+                    0.9683421074725626, 
+                    0.9683421074725626, 
+                    0.9453207377659993, 
+                    0.9453207377659993, 
+                    0.9147824859548659, 
+                    0.9147824859548659, 
+                    0.8792972558097096, 
+                    0.8792972558097096, 
+                    0.8414542577537593, 
+                    0.8414542577537593, 
+                    0.8015293979685456, 
+                    0.8015293979685456, 
+                    0.7619169611292488, 
+                    0.7619169611292488, 
+                    0.7226195727752706, 
+                    0.7226195727752706, 
+                    0.6814862606510155, 
+                    0.6814862606510155, 
+                    0.6431205960981484, 
+                    0.6431205960981484, 
+                    0.6055418895738329, 
+                    0.6055418895738329, 
+                    0.5673860611680497, 
+                    0.5673860611680497, 
+                    0.5320283079211585, 
+                    0.5320283079211585, 
+                    0.49781533410150725, 
+                    0.49781533410150725, 
+                    0.46380949056165005, 
+                    0.46380949056165005, 
+                    0.4353333462404209, 
+                    0.4353333462404209, 
+                    0.40857689947130454, 
+                    0.40857689947130454, 
+                    0.3850744682715975, 
+                    0.3850744682715975, 
+                    0.3642502269852771, 
+                    0.3642502269852771, 
+                    0.34497034105285085, 
+                    0.34497034105285085, 
+                    0.3278682745666375, 
+                    0.3278682745666375, 
+                    0.3120597090489002, 
+                    0.3120597090489002, 
+                    0.30037634546419995, 
+                    0.30037634546419995, 
+                    0.2898498005531763, 
+                    0.2898498005531763, 
+                    0.27475303638166804, 
+                    0.27475303638166804, 
+                    0.25502917305797335, 
+                    0.25502917305797335, 
+                    0.2315972719990495, 
+                    0.2315972719990495, 
+                    0.2046881562160478, 
+                    0.2046881562160478, 
+                    0.17377205815456453, 
+                    0.17377205815456453, 
+                    0.13648832991546941, 
+                    0.13648832991546941
+                ], 
+                0.4049537479877472
+            ], 
+            [
+                0.9605262875556946, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999834234566496, 
+                    0.9999834234566496, 
+                    0.9998597665532126, 
+                    0.9998597665532126, 
+                    0.9976605199785971, 
+                    0.9976605199785971, 
+                    0.9915923442614366, 
+                    0.9915923442614366, 
+                    0.9683039640706161, 
+                    0.9683039640706161, 
+                    0.9432171385527073, 
+                    0.9432171385527073, 
+                    0.9124027378763876, 
+                    0.9124027378763876, 
+                    0.8767254461949602, 
+                    0.8767254461949602, 
+                    0.8383784288481004, 
+                    0.8383784288481004, 
+                    0.7982172537438184, 
+                    0.7982172537438184, 
+                    0.7582474488254939, 
+                    0.7582474488254939, 
+                    0.7186409075508854, 
+                    0.7186409075508854, 
+                    0.6775445671292576, 
+                    0.6775445671292576, 
+                    0.6391694991260702, 
+                    0.6391694991260702, 
+                    0.6016988242806495, 
+                    0.6016988242806495, 
+                    0.5635767600792794, 
+                    0.5635767600792794, 
+                    0.5282500725617093, 
+                    0.5282500725617093, 
+                    0.49422579994794735, 
+                    0.49422579994794735, 
+                    0.46033822058589596, 
+                    0.46033822058589596, 
+                    0.43186969020606825, 
+                    0.43186969020606825, 
+                    0.4053426626649778, 
+                    0.4053426626649778, 
+                    0.3819321823737595, 
+                    0.3819321823737595, 
+                    0.36124126171892273, 
+                    0.36124126171892273, 
+                    0.3420853719928144, 
+                    0.3420853719928144, 
+                    0.325042771096497, 
+                    0.325042771096497, 
+                    0.30958640676721016, 
+                    0.30958640676721016, 
+                    0.2959573587315872, 
+                    0.2959573587315872, 
+                    0.2822635342006574, 
+                    0.2822635342006574, 
+                    0.26521232759283986, 
+                    0.26521232759283986, 
+                    0.24438418151263178, 
+                    0.24438418151263178, 
+                    0.22048245337194936, 
+                    0.22048245337194936, 
+                    0.1936995754947037, 
+                    0.1936995754947037, 
+                    0.16361366935706897, 
+                    0.16361366935706897, 
+                    0.12829356751099247, 
+                    0.12829356751099247
+                ], 
+                0.38609156012535095
+            ], 
+            [
+                0.9682943820953369, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999964640182046, 
+                    0.999964640182046, 
+                    0.9996967391131516, 
+                    0.9996967391131516, 
+                    0.9981640108119785, 
+                    0.9981640108119785, 
+                    0.9934952095843337, 
+                    0.9934952095843337, 
+                    0.9666727744315914, 
+                    0.9666727744315914, 
+                    0.9428922341603335, 
+                    0.9428922341603335, 
+                    0.9108037593259081, 
+                    0.9108037593259081, 
+                    0.8741228447800986, 
+                    0.8741228447800986, 
+                    0.8352427981282418, 
+                    0.8352427981282418, 
+                    0.7947448780898014, 
+                    0.7947448780898014, 
+                    0.7545684597065602, 
+                    0.7545684597065602, 
+                    0.7148840122043201, 
+                    0.7148840122043201, 
+                    0.6737425881208992, 
+                    0.6737425881208992, 
+                    0.6353024383901079, 
+                    0.6353024383901079, 
+                    0.5979707604812782, 
+                    0.5979707604812782, 
+                    0.559587786912021, 
+                    0.559587786912021, 
+                    0.5250166395249352, 
+                    0.5250166395249352, 
+                    0.4900096706363559, 
+                    0.4900096706363559, 
+                    0.4577350466515997, 
+                    0.4577350466515997, 
+                    0.4280503818577123, 
+                    0.4280503818577123, 
+                    0.40230223495325973, 
+                    0.40230223495325973, 
+                    0.3788456949714426, 
+                    0.3788456949714426, 
+                    0.35830141820310246, 
+                    0.35830141820310246, 
+                    0.3392412469030829, 
+                    0.3392412469030829, 
+                    0.32205386478660764, 
+                    0.32205386478660764, 
+                    0.30628001520760745, 
+                    0.30628001520760745, 
+                    0.2944859988239587, 
+                    0.2944859988239587, 
+                    0.2826751177374747, 
+                    0.2826751177374747, 
+                    0.26638313375532113, 
+                    0.26638313375532113, 
+                    0.24592239568995003, 
+                    0.24592239568995003, 
+                    0.22210279974337213, 
+                    0.22210279974337213, 
+                    0.19508180120605617, 
+                    0.19508180120605617, 
+                    0.1642974437173187, 
+                    0.1642974437173187, 
+                    0.12758524167761032, 
+                    0.12758524167761032
+                ], 
+                0.3695754408836365
+            ], 
+            [
+                0.9761252999305725, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999349269079177, 
+                    0.999349269079177, 
+                    0.9973927753691627, 
+                    0.9973927753691627, 
+                    0.9883596980661346, 
+                    0.9883596980661346, 
+                    0.965745963893149, 
+                    0.965745963893149, 
+                    0.9395743964987672, 
+                    0.9395743964987672, 
+                    0.9076577916081424, 
+                    0.9076577916081424, 
+                    0.8710984070986796, 
+                    0.8710984070986796, 
+                    0.8319873566615631, 
+                    0.8319873566615631, 
+                    0.7913220018478249, 
+                    0.7913220018478249, 
+                    0.7509188838599963, 
+                    0.7509188838599963, 
+                    0.7111802341362312, 
+                    0.7111802341362312, 
+                    0.6698391901154397, 
+                    0.6698391901154397, 
+                    0.6316361355530629, 
+                    0.6316361355530629, 
+                    0.5939587963218331, 
+                    0.5939587963218331, 
+                    0.5561237987055214, 
+                    0.5561237987055214, 
+                    0.5210600168462372, 
+                    0.5210600168462372, 
+                    0.48697997225024703, 
+                    0.48697997225024703, 
+                    0.45328528266367396, 
+                    0.45328528266367396, 
+                    0.42554143938250616, 
+                    0.42554143938250616, 
+                    0.3988754117427367, 
+                    0.3988754117427367, 
+                    0.37584249584022705, 
+                    0.37584249584022705, 
+                    0.35536817485834055, 
+                    0.35536817485834055, 
+                    0.3364487833980796, 
+                    0.3364487833980796, 
+                    0.3196302205115161, 
+                    0.3196302205115161, 
+                    0.30435454561725567, 
+                    0.30435454561725567, 
+                    0.2910227700996648, 
+                    0.2910227700996648, 
+                    0.2780735637646011, 
+                    0.2780735637646011, 
+                    0.26169425113945466, 
+                    0.26169425113945466, 
+                    0.24141667211788181, 
+                    0.24141667211788181, 
+                    0.2179982550140945, 
+                    0.2179982550140945, 
+                    0.1916537323094344, 
+                    0.1916537323094344, 
+                    0.1619712476910072, 
+                    0.1619712476910072, 
+                    0.12702902552718742, 
+                    0.12702902552718742
+                ], 
+                0.3526467978954315
+            ], 
+            [
+                0.9840195178985596, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999841455002657, 
+                    0.9999841455002657, 
+                    0.9995464228319958, 
+                    0.9995464228319958, 
+                    0.9972288490392285, 
+                    0.9972288490392285, 
+                    0.9873074014539654, 
+                    0.9873074014539654, 
+                    0.9646407448573412, 
+                    0.9646407448573412, 
+                    0.9377023104569105, 
+                    0.9377023104569105, 
+                    0.9052782880985981, 
+                    0.9052782880985981, 
+                    0.8682464172564078, 
+                    0.8682464172564078, 
+                    0.8287948656831721, 
+                    0.8287948656831721, 
+                    0.7878401308512946, 
+                    0.7878401308512946, 
+                    0.7473100402938532, 
+                    0.7473100402938532, 
+                    0.7073688946664882, 
+                    0.7073688946664882, 
+                    0.6660805311059989, 
+                    0.6660805311059989, 
+                    0.6276634616618846, 
+                    0.6276634616618846, 
+                    0.5903381875974657, 
+                    0.5903381875974657, 
+                    0.5521828577514637, 
+                    0.5521828577514637, 
+                    0.5175844210837979, 
+                    0.5175844210837979, 
+                    0.4831103680159922, 
+                    0.4831103680159922, 
+                    0.45067297883698754, 
+                    0.45067297883698754, 
+                    0.4216141976268221, 
+                    0.4216141976268221, 
+                    0.3959412659363912, 
+                    0.3959412659363912, 
+                    0.37278158652861704, 
+                    0.37278158652861704, 
+                    0.3524692726692415, 
+                    0.3524692726692415, 
+                    0.33366951306777526, 
+                    0.33366951306777526, 
+                    0.3169706945648331, 
+                    0.3169706945648331, 
+                    0.30182609559044277, 
+                    0.30182609559044277, 
+                    0.28847325670542057, 
+                    0.28847325670542057, 
+                    0.27491043520820857, 
+                    0.27491043520820857, 
+                    0.2580484610716572, 
+                    0.2580484610716572, 
+                    0.2375282042956408, 
+                    0.2375282042956408, 
+                    0.21405307641136984, 
+                    0.21405307641136984, 
+                    0.18782512228601111, 
+                    0.18782512228601111, 
+                    0.15846090927943313, 
+                    0.15846090927943313, 
+                    0.12417550279497858, 
+                    0.12417550279497858
+                ], 
+                0.3360104560852051
+            ], 
+            [
+                0.9919775724411011, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999981438440064, 
+                    0.999981438440064, 
+                    0.9994480317569894, 
+                    0.9994480317569894, 
+                    0.9970255261887155, 
+                    0.9970255261887155, 
+                    0.9853035038791689, 
+                    0.9853035038791689, 
+                    0.9632579777471063, 
+                    0.9632579777471063, 
+                    0.9358022765081682, 
+                    0.9358022765081682, 
+                    0.9028373620358866, 
+                    0.9028373620358866, 
+                    0.8653494286512385, 
+                    0.8653494286512385, 
+                    0.8255463558075592, 
+                    0.8255463558075592, 
+                    0.78432146269978, 
+                    0.78432146269978, 
+                    0.7436273075986876, 
+                    0.7436273075986876, 
+                    0.7035857184011771, 
+                    0.7035857184011771, 
+                    0.6622527361862223, 
+                    0.6622527361862223, 
+                    0.6238226507422944, 
+                    0.6238226507422944, 
+                    0.5865544103443894, 
+                    0.5865544103443894, 
+                    0.5484632652875211, 
+                    0.5484632652875211, 
+                    0.51395017516162, 
+                    0.51395017516162, 
+                    0.47962218762336845, 
+                    0.47962218762336845, 
+                    0.4472581145056382, 
+                    0.4472581145056382, 
+                    0.4183893410647838, 
+                    0.4183893410647838, 
+                    0.39281790259109295, 
+                    0.39281790259109295, 
+                    0.36979304335575186, 
+                    0.36979304335575186, 
+                    0.3496002641039415, 
+                    0.3496002641039415, 
+                    0.33091918851130575, 
+                    0.33091918851130575, 
+                    0.31433267740260584, 
+                    0.31433267740260584, 
+                    0.2992936701906214, 
+                    0.2992936701906214, 
+                    0.28606416078472363, 
+                    0.28606416078472363, 
+                    0.2725954363983275, 
+                    0.2725954363983275, 
+                    0.2557833365583011, 
+                    0.2557833365583011, 
+                    0.23534336162633943, 
+                    0.23534336162633943, 
+                    0.21199107529620423, 
+                    0.21199107529620423, 
+                    0.18593364650676777, 
+                    0.18593364650676777, 
+                    0.1568018609912333, 
+                    0.1568018609912333, 
+                    0.1228631663823143, 
+                    0.1228631663823143
+                ], 
+                0.3199881911277771
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992501952278513, 
+                    0.9992501952278513, 
+                    0.9966176156154088, 
+                    0.9966176156154088, 
+                    0.9839257733464349, 
+                    0.9839257733464349, 
+                    0.961958866953569, 
+                    0.961958866953569, 
+                    0.933841321304189, 
+                    0.933841321304189, 
+                    0.9003619114022671, 
+                    0.9003619114022671, 
+                    0.8624330235699751, 
+                    0.8624330235699751, 
+                    0.8222635916901566, 
+                    0.8222635916901566, 
+                    0.7808226722499971, 
+                    0.7808226722499971, 
+                    0.7399555072576703, 
+                    0.7399555072576703, 
+                    0.6998070787795131, 
+                    0.6998070787795131, 
+                    0.6584266539025811, 
+                    0.6584266539025811, 
+                    0.620003441130072, 
+                    0.620003441130072, 
+                    0.5827942738707949, 
+                    0.5827942738707949, 
+                    0.5447171772566264, 
+                    0.5447171772566264, 
+                    0.5103989146464794, 
+                    0.5103989146464794, 
+                    0.47606517188636277, 
+                    0.47606517188636277, 
+                    0.44396793442485866, 
+                    0.44396793442485866, 
+                    0.41513265460307336, 
+                    0.41513265460307336, 
+                    0.38973402578186783, 
+                    0.38973402578186783, 
+                    0.3668271179123772, 
+                    0.3668271179123772, 
+                    0.34675630163217874, 
+                    0.34675630163217874, 
+                    0.3281952338510545, 
+                    0.3281952338510545, 
+                    0.311721839397517, 
+                    0.311721839397517, 
+                    0.2967939536998024, 
+                    0.2967939536998024, 
+                    0.28369825202193094, 
+                    0.28369825202193094, 
+                    0.27022792870325113, 
+                    0.27022792870325113, 
+                    0.2533663390602215, 
+                    0.2533663390602215, 
+                    0.23294029786828505, 
+                    0.23294029786828505, 
+                    0.20967167900166495, 
+                    0.20967167900166495, 
+                    0.1837706771056428, 
+                    0.1837706771056428, 
+                    0.1548860800814914, 
+                    0.1548860800814914, 
+                    0.12135522280243831, 
+                    0.12135522280243831
+                ], 
+                0.3043156862258911
+            ], 
+            [
+                1.0080872774124146, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999979908491323, 
+                    0.9999979908491323, 
+                    0.9992563596881012, 
+                    0.9992563596881012, 
+                    0.9927239466672868, 
+                    0.9927239466672868, 
+                    0.9786355620956824, 
+                    0.9786355620956824, 
+                    0.9605241238269729, 
+                    0.9605241238269729, 
+                    0.9318609262021224, 
+                    0.9318609262021224, 
+                    0.8976907582626911, 
+                    0.8976907582626911, 
+                    0.8597062277016317, 
+                    0.8597062277016317, 
+                    0.8189848616845671, 
+                    0.8189848616845671, 
+                    0.7772552673015619, 
+                    0.7772552673015619, 
+                    0.7362943360112691, 
+                    0.7362943360112691, 
+                    0.6960710495448084, 
+                    0.6960710495448084, 
+                    0.6546350347526678, 
+                    0.6546350347526678, 
+                    0.6162467993227374, 
+                    0.6162467993227374, 
+                    0.5789707299913547, 
+                    0.5789707299913547, 
+                    0.5411564772839871, 
+                    0.5411564772839871, 
+                    0.5065787545245662, 
+                    0.5065787545245662, 
+                    0.47290499535814945, 
+                    0.47290499535814945, 
+                    0.44029632553455567, 
+                    0.44029632553455567, 
+                    0.4121406302632035, 
+                    0.4121406302632035, 
+                    0.3866007197712538, 
+                    0.3866007197712538, 
+                    0.36389713745915936, 
+                    0.36389713745915936, 
+                    0.343927953141834, 
+                    0.343927953141834, 
+                    0.3254889632814661, 
+                    0.3254889632814661, 
+                    0.3090854333721101, 
+                    0.3090854333721101, 
+                    0.2941509943141048, 
+                    0.2941509943141048, 
+                    0.2808299043627247, 
+                    0.2808299043627247, 
+                    0.2703618525176941, 
+                    0.2703618525176941, 
+                    0.25768465953338443, 
+                    0.25768465953338443, 
+                    0.24026515809767, 
+                    0.24026515809767, 
+                    0.21903156354408754, 
+                    0.21903156354408754, 
+                    0.1943432447860348, 
+                    0.1943432447860348, 
+                    0.16585019271280746, 
+                    0.16585019271280746, 
+                    0.1315107314876785, 
+                    0.1315107314876785
+                ], 
+                0.29026299715042114
+            ], 
+            [
+                1.0162400007247925, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988968865605012, 
+                    0.9988968865605012, 
+                    0.9940302196077616, 
+                    0.9940302196077616, 
+                    0.9779858733333164, 
+                    0.9779858733333164, 
+                    0.959287242263418, 
+                    0.959287242263418, 
+                    0.9298942930913074, 
+                    0.9298942930913074, 
+                    0.8950710492484885, 
+                    0.8950710492484885, 
+                    0.8565102722414207, 
+                    0.8565102722414207, 
+                    0.815548673372164, 
+                    0.815548673372164, 
+                    0.7736515852783167, 
+                    0.7736515852783167, 
+                    0.7325637581832178, 
+                    0.7325637581832178, 
+                    0.692209828983968, 
+                    0.692209828983968, 
+                    0.6507417256025683, 
+                    0.6507417256025683, 
+                    0.612376772632893, 
+                    0.612376772632893, 
+                    0.5751636692103275, 
+                    0.5751636692103275, 
+                    0.537445337734149, 
+                    0.537445337734149, 
+                    0.5029530603251229, 
+                    0.5029530603251229, 
+                    0.4694004075631785, 
+                    0.4694004075631785, 
+                    0.4368884301423819, 
+                    0.4368884301423819, 
+                    0.4089555479353804, 
+                    0.4089555479353804, 
+                    0.38357347751923, 
+                    0.38357347751923, 
+                    0.3609864070698631, 
+                    0.3609864070698631, 
+                    0.3411449937085882, 
+                    0.3411449937085882, 
+                    0.32281901958186554, 
+                    0.32281901958186554, 
+                    0.3065582787425512, 
+                    0.3065582787425512, 
+                    0.291605033078093, 
+                    0.291605033078093, 
+                    0.2782714404125483, 
+                    0.2782714404125483, 
+                    0.2674466594897278, 
+                    0.2674466594897278, 
+                    0.2532355766376834, 
+                    0.2532355766376834, 
+                    0.23472190185618522, 
+                    0.23472190185618522, 
+                    0.21282101337968257, 
+                    0.21282101337968257, 
+                    0.18782952643250247, 
+                    0.18782952643250247, 
+                    0.15939020040554713, 
+                    0.15939020040554713, 
+                    0.12562391603301948, 
+                    0.12562391603301948
+                ], 
+                0.27489104866981506
+            ], 
+            [
+                1.024458646774292, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998653115660681, 
+                    0.9998653115660681, 
+                    0.9984303177146252, 
+                    0.9984303177146252, 
+                    0.9919330209959121, 
+                    0.9919330209959121, 
+                    0.976420471125529, 
+                    0.976420471125529, 
+                    0.9573304452286975, 
+                    0.9573304452286975, 
+                    0.9280234370955983, 
+                    0.9280234370955983, 
+                    0.8925711570169278, 
+                    0.8925711570169278, 
+                    0.8535287082067666, 
+                    0.8535287082067666, 
+                    0.8125213868040493, 
+                    0.8125213868040493, 
+                    0.770195632005032, 
+                    0.770195632005032, 
+                    0.7288724759432774, 
+                    0.7288724759432774, 
+                    0.688450189077616, 
+                    0.688450189077616, 
+                    0.6469215225441697, 
+                    0.6469215225441697, 
+                    0.6085911662112824, 
+                    0.6085911662112824, 
+                    0.571430766526285, 
+                    0.571430766526285, 
+                    0.5337883856690334, 
+                    0.5337883856690334, 
+                    0.4993797455227739, 
+                    0.4993797455227739, 
+                    0.4659549681624418, 
+                    0.4659549681624418, 
+                    0.4335724327859236, 
+                    0.4335724327859236, 
+                    0.40579904537540656, 
+                    0.40579904537540656, 
+                    0.38056057853316055, 
+                    0.38056057853316055, 
+                    0.35810642172970425, 
+                    0.35810642172970425, 
+                    0.33837744321031343, 
+                    0.33837744321031343, 
+                    0.32016742532926157, 
+                    0.32016742532926157, 
+                    0.30399619746705037, 
+                    0.30399619746705037, 
+                    0.28877716163268097, 
+                    0.28877716163268097, 
+                    0.27499237991653924, 
+                    0.27499237991653924, 
+                    0.265929834023869, 
+                    0.265929834023869, 
+                    0.25354082940292094, 
+                    0.25354082940292094, 
+                    0.2363193852675313, 
+                    0.2363193852675313, 
+                    0.21532415862856172, 
+                    0.21532415862856172, 
+                    0.19090991413065372, 
+                    0.19090991413065372, 
+                    0.16270893272816375, 
+                    0.16270893272816375, 
+                    0.12867741842792565, 
+                    0.12867741842792565
+                ], 
+                0.26071760058403015
+            ], 
+            [
+                1.0327438116073608, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999860887283353, 
+                    0.9999860887283353, 
+                    0.998234124153038, 
+                    0.998234124153038, 
+                    0.9895061949535344, 
+                    0.9895061949535344, 
+                    0.975449225466032, 
+                    0.975449225466032, 
+                    0.9557514978691743, 
+                    0.9557514978691743, 
+                    0.9257792591515713, 
+                    0.9257792591515713, 
+                    0.8899581988230628, 
+                    0.8899581988230628, 
+                    0.8503881096945217, 
+                    0.8503881096945217, 
+                    0.8088492274657628, 
+                    0.8088492274657628, 
+                    0.7664629299260253, 
+                    0.7664629299260253, 
+                    0.7250779729084784, 
+                    0.7250779729084784, 
+                    0.6846451138812218, 
+                    0.6846451138812218, 
+                    0.6430395280827056, 
+                    0.6430395280827056, 
+                    0.6048299112368621, 
+                    0.6048299112368621, 
+                    0.567729570837054, 
+                    0.567729570837054, 
+                    0.5300708381096969, 
+                    0.5300708381096969, 
+                    0.4959626612998562, 
+                    0.4959626612998562, 
+                    0.4626749270238953, 
+                    0.4626749270238953, 
+                    0.43009804857875283, 
+                    0.43009804857875283, 
+                    0.4028608247235846, 
+                    0.4028608247235846, 
+                    0.3774978578593559, 
+                    0.3774978578593559, 
+                    0.35521797637298586, 
+                    0.35521797637298586, 
+                    0.3356219052101645, 
+                    0.3356219052101645, 
+                    0.3175390181602083, 
+                    0.3175390181602083, 
+                    0.3014816306829133, 
+                    0.3014816306829133, 
+                    0.28640266372617224, 
+                    0.28640266372617224, 
+                    0.27184110507375087, 
+                    0.27184110507375087, 
+                    0.26406390723194545, 
+                    0.26406390723194545, 
+                    0.25427625510354884, 
+                    0.25427625510354884, 
+                    0.23892971923218087, 
+                    0.23892971923218087, 
+                    0.21923676939188597, 
+                    0.21923676939188597, 
+                    0.1956492503021768, 
+                    0.1956492503021768, 
+                    0.16780212007096668, 
+                    0.16780212007096668, 
+                    0.13343359120529447, 
+                    0.13343359120529447
+                ], 
+                0.24694381654262543
+            ], 
+            [
+                1.0410958528518677, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999947619320029, 
+                    0.999947619320029, 
+                    0.9988522240023914, 
+                    0.9988522240023914, 
+                    0.9913725206123485, 
+                    0.9913725206123485, 
+                    0.9740427060575292, 
+                    0.9740427060575292, 
+                    0.9525967563940683, 
+                    0.9525967563940683, 
+                    0.9231018117644783, 
+                    0.9231018117644783, 
+                    0.8872550986763137, 
+                    0.8872550986763137, 
+                    0.8472466597576437, 
+                    0.8472466597576437, 
+                    0.8054798802741613, 
+                    0.8054798802741613, 
+                    0.7629084542148289, 
+                    0.7629084542148289, 
+                    0.721334094040638, 
+                    0.721334094040638, 
+                    0.6808027055430302, 
+                    0.6808027055430302, 
+                    0.6392583593242132, 
+                    0.6392583593242132, 
+                    0.600990616723495, 
+                    0.600990616723495, 
+                    0.5639505251139229, 
+                    0.5639505251139229, 
+                    0.5265407707251717, 
+                    0.5265407707251717, 
+                    0.492394168535558, 
+                    0.492394168535558, 
+                    0.4592799563252407, 
+                    0.4592799563252407, 
+                    0.4271384752385365, 
+                    0.4271384752385365, 
+                    0.3995799802474215, 
+                    0.3995799802474215, 
+                    0.3745425664686163, 
+                    0.3745425664686163, 
+                    0.35237094058631735, 
+                    0.35237094058631735, 
+                    0.33290725856153974, 
+                    0.33290725856153974, 
+                    0.31495933990521, 
+                    0.31495933990521, 
+                    0.2990001976186369, 
+                    0.2990001976186369, 
+                    0.2835397502508573, 
+                    0.2835397502508573, 
+                    0.2703010149802467, 
+                    0.2703010149802467, 
+                    0.26056487070459816, 
+                    0.26056487070459816, 
+                    0.24699609814296855, 
+                    0.24699609814296855, 
+                    0.22900578739245447, 
+                    0.22900578739245447, 
+                    0.2076314034944006, 
+                    0.2076314034944006, 
+                    0.18319662980684287, 
+                    0.18319662980684287, 
+                    0.15536270416870748, 
+                    0.15536270416870748, 
+                    0.12231777699599423, 
+                    0.12231777699599423
+                ], 
+                0.23282276093959808
+            ], 
+            [
+                1.0495156049728394, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999894374178276, 
+                    0.9999894374178276, 
+                    0.9986977020006337, 
+                    0.9986977020006337, 
+                    0.9927322764081576, 
+                    0.9927322764081576, 
+                    0.9766132258389424, 
+                    0.9766132258389424, 
+                    0.9515146508042882, 
+                    0.9515146508042882, 
+                    0.9209149285961287, 
+                    0.9209149285961287, 
+                    0.8845482491450662, 
+                    0.8845482491450662, 
+                    0.8441099812625477, 
+                    0.8441099812625477, 
+                    0.8020754053775274, 
+                    0.8020754053775274, 
+                    0.7592844290501548, 
+                    0.7592844290501548, 
+                    0.7175990990171176, 
+                    0.7175990990171176, 
+                    0.6770120515362046, 
+                    0.6770120515362046, 
+                    0.6354418578081744, 
+                    0.6354418578081744, 
+                    0.5971936221808555, 
+                    0.5971936221808555, 
+                    0.5603163995137476, 
+                    0.5603163995137476, 
+                    0.5227552083127411, 
+                    0.5227552083127411, 
+                    0.4891257710404453, 
+                    0.4891257710404453, 
+                    0.45552006436653386, 
+                    0.45552006436653386, 
+                    0.42427665657142377, 
+                    0.42427665657142377, 
+                    0.3962920066461775, 
+                    0.3962920066461775, 
+                    0.37169975242557873, 
+                    0.37169975242557873, 
+                    0.34957048474933616, 
+                    0.34957048474933616, 
+                    0.3302402703310792, 
+                    0.3302402703310792, 
+                    0.31240609708714817, 
+                    0.31240609708714817, 
+                    0.2964957563530117, 
+                    0.2964957563530117, 
+                    0.2809217493971731, 
+                    0.2809217493971731, 
+                    0.2697116719461367, 
+                    0.2697116719461367, 
+                    0.25785399868926884, 
+                    0.25785399868926884, 
+                    0.24164470823029818, 
+                    0.24164470823029818, 
+                    0.22185894061386807, 
+                    0.22185894061386807, 
+                    0.19937250018875094, 
+                    0.19937250018875094, 
+                    0.1744390390978839, 
+                    0.1744390390978839, 
+                    0.14677363842717345, 
+                    0.14677363842717345, 
+                    0.11494228905393275, 
+                    0.11494228905393275
+                ], 
+                0.21924331784248352
+            ], 
+            [
+                1.058003306388855, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999877418131288, 
+                    0.9999877418131288, 
+                    0.9984541258392393, 
+                    0.9984541258392393, 
+                    0.9929081259156115, 
+                    0.9929081259156115, 
+                    0.9780358199335095, 
+                    0.9780358199335095, 
+                    0.9516178444725467, 
+                    0.9516178444725467, 
+                    0.919037918252048, 
+                    0.919037918252048, 
+                    0.8818965114903395, 
+                    0.8818965114903395, 
+                    0.8409858086068769, 
+                    0.8409858086068769, 
+                    0.7986588710984693, 
+                    0.7986588710984693, 
+                    0.7556571555653763, 
+                    0.7556571555653763, 
+                    0.7138739464098777, 
+                    0.7138739464098777, 
+                    0.6731989233941188, 
+                    0.6731989233941188, 
+                    0.6316897394998882, 
+                    0.6316897394998882, 
+                    0.5933485681909698, 
+                    0.5933485681909698, 
+                    0.5567476328772152, 
+                    0.5567476328772152, 
+                    0.519006463435702, 
+                    0.519006463435702, 
+                    0.4858088035934382, 
+                    0.4858088035934382, 
+                    0.4520898128698235, 
+                    0.4520898128698235, 
+                    0.4211594319185181, 
+                    0.4211594319185181, 
+                    0.3932357771551054, 
+                    0.3932357771551054, 
+                    0.3687941702436932, 
+                    0.3687941702436932, 
+                    0.34679650236209636, 
+                    0.34679650236209636, 
+                    0.32757714115631986, 
+                    0.32757714115631986, 
+                    0.30984582689363055, 
+                    0.30984582689363055, 
+                    0.294138472051617, 
+                    0.294138472051617, 
+                    0.2801086679007012, 
+                    0.2801086679007012, 
+                    0.26905849804817333, 
+                    0.26905849804817333, 
+                    0.25607321302352787, 
+                    0.25607321302352787, 
+                    0.23895414491182074, 
+                    0.23895414491182074, 
+                    0.21857227765639267, 
+                    0.21857227765639267, 
+                    0.19575757637449917, 
+                    0.19575757637449917, 
+                    0.1707555740417115, 
+                    0.1707555740417115, 
+                    0.14332900493864878, 
+                    0.14332900493864878, 
+                    0.11223224958871196, 
+                    0.11223224958871196
+                ], 
+                0.20679889619350433
+            ], 
+            [
+                1.0665596723556519, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9983688414604497, 
+                    0.9983688414604497, 
+                    0.9907814512278345, 
+                    0.9907814512278345, 
+                    0.9751921503276982, 
+                    0.9751921503276982, 
+                    0.950718041185304, 
+                    0.950718041185304, 
+                    0.9169675370398441, 
+                    0.9169675370398441, 
+                    0.8791348296307828, 
+                    0.8791348296307828, 
+                    0.8377651958093586, 
+                    0.8377651958093586, 
+                    0.7951912644654184, 
+                    0.7951912644654184, 
+                    0.7520054876937367, 
+                    0.7520054876937367, 
+                    0.7101690486564385, 
+                    0.7101690486564385, 
+                    0.6695007313161306, 
+                    0.6695007313161306, 
+                    0.6278502520994047, 
+                    0.6278502520994047, 
+                    0.589675292967205, 
+                    0.589675292967205, 
+                    0.552833863119093, 
+                    0.552833863119093, 
+                    0.5155705935191157, 
+                    0.5155705935191157, 
+                    0.48171855194781366, 
+                    0.48171855194781366, 
+                    0.4488659587976069, 
+                    0.4488659587976069, 
+                    0.4174366909361162, 
+                    0.4174366909361162, 
+                    0.39036065081310206, 
+                    0.39036065081310206, 
+                    0.36592452193610164, 
+                    0.36592452193610164, 
+                    0.3440982575247375, 
+                    0.3440982575247375, 
+                    0.32492255976715534, 
+                    0.32492255976715534, 
+                    0.3072683665205941, 
+                    0.3072683665205941, 
+                    0.29172767762736146, 
+                    0.29172767762736146, 
+                    0.27932989286971976, 
+                    0.27932989286971976, 
+                    0.2647892838845806, 
+                    0.2647892838845806, 
+                    0.2541267820307669, 
+                    0.2541267820307669, 
+                    0.23956251245638935, 
+                    0.23956251245638935, 
+                    0.2209814576610258, 
+                    0.2209814576610258, 
+                    0.19941530135545557, 
+                    0.19941530135545557, 
+                    0.1751853938270719, 
+                    0.1751853938270719, 
+                    0.14803032660527346, 
+                    0.14803032660527346, 
+                    0.11645319816497036, 
+                    0.11645319816497036
+                ], 
+                0.19507087767124176
+            ], 
+            [
+                1.0751852989196777, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999738283868426, 
+                    0.9999738283868426, 
+                    0.9981829011275629, 
+                    0.9981829011275629, 
+                    0.9906582499578647, 
+                    0.9906582499578647, 
+                    0.9742242732784501, 
+                    0.9742242732784501, 
+                    0.9481365916618835, 
+                    0.9481365916618835, 
+                    0.9144636356561733, 
+                    0.9144636356561733, 
+                    0.876289647405466, 
+                    0.876289647405466, 
+                    0.8345837364060688, 
+                    0.8345837364060688, 
+                    0.7916811213735322, 
+                    0.7916811213735322, 
+                    0.7482988596102705, 
+                    0.7482988596102705, 
+                    0.7063377026725756, 
+                    0.7063377026725756, 
+                    0.6655468928022242, 
+                    0.6655468928022242, 
+                    0.6239795366259551, 
+                    0.6239795366259551, 
+                    0.5858246567806136, 
+                    0.5858246567806136, 
+                    0.5492615652047776, 
+                    0.5492615652047776, 
+                    0.5120307957791311, 
+                    0.5120307957791311, 
+                    0.47861866358575295, 
+                    0.47861866358575295, 
+                    0.4456079578765891, 
+                    0.4456079578765891, 
+                    0.41429149926045533, 
+                    0.41429149926045533, 
+                    0.3876563570090634, 
+                    0.3876563570090634, 
+                    0.3629845776674924, 
+                    0.3629845776674924, 
+                    0.34127875711073175, 
+                    0.34127875711073175, 
+                    0.3222274376296433, 
+                    0.3222274376296433, 
+                    0.304772636971699, 
+                    0.304772636971699, 
+                    0.28933158070622755, 
+                    0.28933158070622755, 
+                    0.27568639419418167, 
+                    0.27568639419418167, 
+                    0.26353754943360913, 
+                    0.26353754943360913, 
+                    0.25239476232921637, 
+                    0.25239476232921637, 
+                    0.2369480552918259, 
+                    0.2369480552918259, 
+                    0.21777989345036225, 
+                    0.21777989345036225, 
+                    0.1958776419768993, 
+                    0.1958776419768993, 
+                    0.1715406268889428, 
+                    0.1715406268889428, 
+                    0.14452954140377977, 
+                    0.14452954140377977, 
+                    0.11349959702647423, 
+                    0.11349959702647423
+                ], 
+                0.18329443037509918
+            ], 
+            [
+                1.0838806629180908, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999588195824598, 
+                    0.9999588195824598, 
+                    0.998062881208669, 
+                    0.998062881208669, 
+                    0.9902796669234735, 
+                    0.9902796669234735, 
+                    0.9743156080740148, 
+                    0.9743156080740148, 
+                    0.9463331553078906, 
+                    0.9463331553078906, 
+                    0.9119869167448185, 
+                    0.9119869167448185, 
+                    0.8734788501327885, 
+                    0.8734788501327885, 
+                    0.8314293100890024, 
+                    0.8314293100890024, 
+                    0.788006294491789, 
+                    0.788006294491789, 
+                    0.744811496333112, 
+                    0.744811496333112, 
+                    0.7022959383511607, 
+                    0.7022959383511607, 
+                    0.6617798924295892, 
+                    0.6617798924295892, 
+                    0.6200471234347766, 
+                    0.6200471234347766, 
+                    0.5821988411905837, 
+                    0.5821988411905837, 
+                    0.5454171534036586, 
+                    0.5454171534036586, 
+                    0.5085634265048461, 
+                    0.5085634265048461, 
+                    0.47510760913198397, 
+                    0.47510760913198397, 
+                    0.44263234879357055, 
+                    0.44263234879357055, 
+                    0.4114158410136818, 
+                    0.4114158410136818, 
+                    0.3843072799992287, 
+                    0.3843072799992287, 
+                    0.3600261390407989, 
+                    0.3600261390407989, 
+                    0.33854654812056034, 
+                    0.33854654812056034, 
+                    0.31968026533453414, 
+                    0.31968026533453414, 
+                    0.30228367449696136, 
+                    0.30228367449696136, 
+                    0.28693071183236557, 
+                    0.28693071183236557, 
+                    0.27388046866323734, 
+                    0.27388046866323734, 
+                    0.2600736611958997, 
+                    0.2600736611958997, 
+                    0.24997308492086795, 
+                    0.24997308492086795, 
+                    0.23727929085368435, 
+                    0.23727929085368435, 
+                    0.22008093714447044, 
+                    0.22008093714447044, 
+                    0.19955975381421073, 
+                    0.19955975381421073, 
+                    0.17611734541872193, 
+                    0.17611734541872193, 
+                    0.1495199152087552, 
+                    0.1495199152087552, 
+                    0.11819871141412937, 
+                    0.11819871141412937
+                ], 
+                0.1724548488855362
+            ]
+        ]
+    }, 
+    {
+        "block_size": 74, 
+        "preprocessing_block_sizes": [
+            56
+        ], 
+        "pruning_parameters": [
+            [
+                0.9235959053039551, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988333013129314, 
+                    0.9988333013129314, 
+                    0.9905769674285262, 
+                    0.9905769674285262, 
+                    0.9779774652863678, 
+                    0.9779774652863678, 
+                    0.9587722069456079, 
+                    0.9587722069456079, 
+                    0.9330133862181084, 
+                    0.9330133862181084, 
+                    0.9025764185778199, 
+                    0.9025764185778199, 
+                    0.8681182144669064, 
+                    0.8681182144669064, 
+                    0.8302540467601444, 
+                    0.8302540467601444, 
+                    0.7914042169661637, 
+                    0.7914042169661637, 
+                    0.7514648958066851, 
+                    0.7514648958066851, 
+                    0.7123655512904769, 
+                    0.7123655512904769, 
+                    0.671532379546744, 
+                    0.671532379546744, 
+                    0.6311488887792265, 
+                    0.6311488887792265, 
+                    0.5932696783931799, 
+                    0.5932696783931799, 
+                    0.5578899928181873, 
+                    0.5578899928181873, 
+                    0.5239447370805665, 
+                    0.5239447370805665, 
+                    0.4912307955051448, 
+                    0.4912307955051448, 
+                    0.4612047338610075, 
+                    0.4612047338610075, 
+                    0.4326910962013867, 
+                    0.4326910962013867, 
+                    0.40824916361818375, 
+                    0.40824916361818375, 
+                    0.38548824306777907, 
+                    0.38548824306777907, 
+                    0.3655381026853518, 
+                    0.3655381026853518, 
+                    0.347350646635578, 
+                    0.347350646635578, 
+                    0.33079703157081125, 
+                    0.33079703157081125, 
+                    0.3154078603767771, 
+                    0.3154078603767771, 
+                    0.30145976345877945, 
+                    0.30145976345877945, 
+                    0.2877287432437982, 
+                    0.2877287432437982, 
+                    0.27083309641361253, 
+                    0.27083309641361253, 
+                    0.2503223677735404, 
+                    0.2503223677735404, 
+                    0.22655706293612227, 
+                    0.22655706293612227, 
+                    0.19977132997363553, 
+                    0.19977132997363553, 
+                    0.1695095328787454, 
+                    0.1695095328787454, 
+                    0.13374403072283103, 
+                    0.13374403072283103
+                ], 
+                0.4545787274837494
+            ], 
+            [
+                0.9309659600257874, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999797008652078, 
+                    0.9999797008652078, 
+                    0.9992094661800568, 
+                    0.9992094661800568, 
+                    0.9991831434685122, 
+                    0.9991831434685122, 
+                    0.9903342788838805, 
+                    0.9903342788838805, 
+                    0.977721739140056, 
+                    0.977721739140056, 
+                    0.9578055987199412, 
+                    0.9578055987199412, 
+                    0.9316621506285323, 
+                    0.9316621506285323, 
+                    0.8998993228866573, 
+                    0.8998993228866573, 
+                    0.8652802977540589, 
+                    0.8652802977540589, 
+                    0.8269378899062124, 
+                    0.8269378899062124, 
+                    0.7881310494548641, 
+                    0.7881310494548641, 
+                    0.7481128912677303, 
+                    0.7481128912677303, 
+                    0.7086595350247892, 
+                    0.7086595350247892, 
+                    0.6677990802641645, 
+                    0.6677990802641645, 
+                    0.6275756220845791, 
+                    0.6275756220845791, 
+                    0.5891587310401626, 
+                    0.5891587310401626, 
+                    0.5547158788164555, 
+                    0.5547158788164555, 
+                    0.5197105505933317, 
+                    0.5197105505933317, 
+                    0.48822314009782697, 
+                    0.48822314009782697, 
+                    0.4574602303460486, 
+                    0.4574602303460486, 
+                    0.4294973942473663, 
+                    0.4294973942473663, 
+                    0.4050462213327407, 
+                    0.4050462213327407, 
+                    0.38240969555444687, 
+                    0.38240969555444687, 
+                    0.36257586033677863, 
+                    0.36257586033677863, 
+                    0.3444937717037841, 
+                    0.3444937717037841, 
+                    0.32801910360871644, 
+                    0.32801910360871644, 
+                    0.31273131347789834, 
+                    0.31273131347789834, 
+                    0.298997118043625, 
+                    0.298997118043625, 
+                    0.28559700395293586, 
+                    0.28559700395293586, 
+                    0.2686182888340104, 
+                    0.2686182888340104, 
+                    0.24800862678103153, 
+                    0.24800862678103153, 
+                    0.22421368125363653, 
+                    0.22421368125363653, 
+                    0.19745810337848965, 
+                    0.19745810337848965, 
+                    0.16727663627524045, 
+                    0.16727663627524045, 
+                    0.13164292795838883, 
+                    0.13164292795838883
+                ], 
+                0.43683695793151855
+            ], 
+            [
+                0.9383947849273682, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999539278797707, 
+                    0.9999539278797707, 
+                    0.999842420105424, 
+                    0.999842420105424, 
+                    0.9997895577661897, 
+                    0.9997895577661897, 
+                    0.9900813044950463, 
+                    0.9900813044950463, 
+                    0.9755799624853367, 
+                    0.9755799624853367, 
+                    0.9565383550086136, 
+                    0.9565383550086136, 
+                    0.9299103575006273, 
+                    0.9299103575006273, 
+                    0.897970093633789, 
+                    0.897970093633789, 
+                    0.862569309512572, 
+                    0.862569309512572, 
+                    0.8238855424035959, 
+                    0.8238855424035959, 
+                    0.784745656864801, 
+                    0.784745656864801, 
+                    0.7444786534359713, 
+                    0.7444786534359713, 
+                    0.7050079549213514, 
+                    0.7050079549213514, 
+                    0.6641418166294811, 
+                    0.6641418166294811, 
+                    0.6237119352655176, 
+                    0.6237119352655176, 
+                    0.5857143211731058, 
+                    0.5857143211731058, 
+                    0.5506678640359424, 
+                    0.5506678640359424, 
+                    0.5164689595509835, 
+                    0.5164689595509835, 
+                    0.48446518681789347, 
+                    0.48446518681789347, 
+                    0.4541563894508983, 
+                    0.4541563894508983, 
+                    0.42623503503489174, 
+                    0.42623503503489174, 
+                    0.40185936427752117, 
+                    0.40185936427752117, 
+                    0.3793707684963907, 
+                    0.3793707684963907, 
+                    0.3596409366789665, 
+                    0.3596409366789665, 
+                    0.34167350690720427, 
+                    0.34167350690720427, 
+                    0.32532927120554794, 
+                    0.32532927120554794, 
+                    0.3101551242266, 
+                    0.3101551242266, 
+                    0.29660264552384963, 
+                    0.29660264552384963, 
+                    0.2829867012058057, 
+                    0.2829867012058057, 
+                    0.26578984334822814, 
+                    0.26578984334822814, 
+                    0.24507992870476616, 
+                    0.24507992870476616, 
+                    0.22129288006332606, 
+                    0.22129288006332606, 
+                    0.19463401403831793, 
+                    0.19463401403831793, 
+                    0.16463989903501322, 
+                    0.16463989903501322, 
+                    0.1293321260195346, 
+                    0.1293321260195346
+                ], 
+                0.41926753520965576
+            ], 
+            [
+                0.9458829164505005, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999746321763072, 
+                    0.9999746321763072, 
+                    0.9999646074333467, 
+                    0.9999646074333467, 
+                    0.9999298766641624, 
+                    0.9999298766641624, 
+                    0.9989303483581196, 
+                    0.9989303483581196, 
+                    0.9757293381140341, 
+                    0.9757293381140341, 
+                    0.9552121309536843, 
+                    0.9552121309536843, 
+                    0.9275568804167487, 
+                    0.9275568804167487, 
+                    0.8953551650242985, 
+                    0.8953551650242985, 
+                    0.8597450038746319, 
+                    0.8597450038746319, 
+                    0.8207305393412201, 
+                    0.8207305393412201, 
+                    0.7813781592253125, 
+                    0.7813781592253125, 
+                    0.7409518231143757, 
+                    0.7409518231143757, 
+                    0.7013740474571916, 
+                    0.7013740474571916, 
+                    0.6604201534318029, 
+                    0.6604201534318029, 
+                    0.619974480173505, 
+                    0.619974480173505, 
+                    0.5819800165036946, 
+                    0.5819800165036946, 
+                    0.5470080815461953, 
+                    0.5470080815461953, 
+                    0.5128937875694051, 
+                    0.5128937875694051, 
+                    0.48096392090110446, 
+                    0.48096392090110446, 
+                    0.4507877379345469, 
+                    0.4507877379345469, 
+                    0.42296779765163095, 
+                    0.42296779765163095, 
+                    0.3987234184774002, 
+                    0.3987234184774002, 
+                    0.37634697396881917, 
+                    0.37634697396881917, 
+                    0.35673433059399823, 
+                    0.35673433059399823, 
+                    0.33887929989690047, 
+                    0.33887929989690047, 
+                    0.3226463964115117, 
+                    0.3226463964115117, 
+                    0.30757766652678153, 
+                    0.30757766652678153, 
+                    0.2939521664266959, 
+                    0.2939521664266959, 
+                    0.28006302956177215, 
+                    0.28006302956177215, 
+                    0.2627691019389157, 
+                    0.2627691019389157, 
+                    0.24208723221546946, 
+                    0.24208723221546946, 
+                    0.21842248453955215, 
+                    0.21842248453955215, 
+                    0.19197259493778537, 
+                    0.19197259493778537, 
+                    0.16229330455318652, 
+                    0.16229330455318652, 
+                    0.12748047097141318, 
+                    0.12748047097141318
+                ], 
+                0.4018591046333313
+            ], 
+            [
+                0.9534308314323425, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997729164083524, 
+                    0.9997729164083524, 
+                    0.9995427062111775, 
+                    0.9995427062111775, 
+                    0.9980574114695401, 
+                    0.9980574114695401, 
+                    0.9747904077381679, 
+                    0.9747904077381679, 
+                    0.9536790480917418, 
+                    0.9536790480917418, 
+                    0.9255517775878793, 
+                    0.9255517775878793, 
+                    0.8928797421031239, 
+                    0.8928797421031239, 
+                    0.8568893325524417, 
+                    0.8568893325524417, 
+                    0.81758051247664, 
+                    0.81758051247664, 
+                    0.7780154720356842, 
+                    0.7780154720356842, 
+                    0.7374502502312056, 
+                    0.7374502502312056, 
+                    0.697773708805265, 
+                    0.697773708805265, 
+                    0.6566982739947794, 
+                    0.6566982739947794, 
+                    0.6162183539805977, 
+                    0.6162183539805977, 
+                    0.5783399605771026, 
+                    0.5783399605771026, 
+                    0.543359982609608, 
+                    0.543359982609608, 
+                    0.5093321030477133, 
+                    0.5093321030477133, 
+                    0.47750966783320165, 
+                    0.47750966783320165, 
+                    0.4474214571661588, 
+                    0.4474214571661588, 
+                    0.4197479519039267, 
+                    0.4197479519039267, 
+                    0.39560978777351313, 
+                    0.39560978777351313, 
+                    0.37335702036911506, 
+                    0.37335702036911506, 
+                    0.3538567354807861, 
+                    0.3538567354807861, 
+                    0.336110831429571, 
+                    0.336110831429571, 
+                    0.31998460458554967, 
+                    0.31998460458554967, 
+                    0.30502084683740643, 
+                    0.30502084683740643, 
+                    0.29146508376872887, 
+                    0.29146508376872887, 
+                    0.2776136541609074, 
+                    0.2776136541609074, 
+                    0.26038410833553777, 
+                    0.26038410833553777, 
+                    0.23980962480236126, 
+                    0.23980962480236126, 
+                    0.21629562710134342, 
+                    0.21629562710134342, 
+                    0.19004223122213285, 
+                    0.19004223122213285, 
+                    0.1606202460786585, 
+                    0.1606202460786585, 
+                    0.1261782053162297, 
+                    0.1261782053162297
+                ], 
+                0.3848738968372345
+            ], 
+            [
+                0.9610389471054077, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998895766915868, 
+                    0.9998895766915868, 
+                    0.9996694802227074, 
+                    0.9996694802227074, 
+                    0.9964333447023801, 
+                    0.9964333447023801, 
+                    0.9741493741583443, 
+                    0.9741493741583443, 
+                    0.9521728283052702, 
+                    0.9521728283052702, 
+                    0.923587210832332, 
+                    0.923587210832332, 
+                    0.8905290811101552, 
+                    0.8905290811101552, 
+                    0.8540585047956164, 
+                    0.8540585047956164, 
+                    0.8144344843261002, 
+                    0.8144344843261002, 
+                    0.7745821658204343, 
+                    0.7745821658204343, 
+                    0.7338634504527313, 
+                    0.7338634504527313, 
+                    0.6941392056050977, 
+                    0.6941392056050977, 
+                    0.6529606437224245, 
+                    0.6529606437224245, 
+                    0.612634064118704, 
+                    0.612634064118704, 
+                    0.5743696294300367, 
+                    0.5743696294300367, 
+                    0.5401301786870587, 
+                    0.5401301786870587, 
+                    0.505350631918059, 
+                    0.505350631918059, 
+                    0.47442551766608665, 
+                    0.47442551766608665, 
+                    0.44384975526630516, 
+                    0.44384975526630516, 
+                    0.4166623998244365, 
+                    0.4166623998244365, 
+                    0.3925026412115968, 
+                    0.3925026412115968, 
+                    0.370398237502372, 
+                    0.370398237502372, 
+                    0.3510075038372995, 
+                    0.3510075038372995, 
+                    0.3333722481383359, 
+                    0.3333722481383359, 
+                    0.3173521211968178, 
+                    0.3173521211968178, 
+                    0.30248777216396516, 
+                    0.30248777216396516, 
+                    0.28901816643865474, 
+                    0.28901816643865474, 
+                    0.2753413785381571, 
+                    0.2753413785381571, 
+                    0.25837304518813203, 
+                    0.25837304518813203, 
+                    0.23805767272307632, 
+                    0.23805767272307632, 
+                    0.21479413907944436, 
+                    0.21479413907944436, 
+                    0.18879618814724666, 
+                    0.18879618814724666, 
+                    0.15965268176553749, 
+                    0.15965268176553749, 
+                    0.12555572845718127, 
+                    0.12555572845718127
+                ], 
+                0.36824294924736023
+            ], 
+            [
+                0.968707799911499, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999221987889207, 
+                    0.9999221987889207, 
+                    0.9996103343839421, 
+                    0.9996103343839421, 
+                    0.9992450818321734, 
+                    0.9992450818321734, 
+                    0.9949275722172545, 
+                    0.9949275722172545, 
+                    0.9729539455182925, 
+                    0.9729539455182925, 
+                    0.9505672475410943, 
+                    0.9505672475410943, 
+                    0.9214025930245997, 
+                    0.9214025930245997, 
+                    0.8879605641829013, 
+                    0.8879605641829013, 
+                    0.8511359372136257, 
+                    0.8511359372136257, 
+                    0.8112708041892911, 
+                    0.8112708041892911, 
+                    0.7711697583835534, 
+                    0.7711697583835534, 
+                    0.730277698333834, 
+                    0.730277698333834, 
+                    0.6904551823085406, 
+                    0.6904551823085406, 
+                    0.6492758757884272, 
+                    0.6492758757884272, 
+                    0.6087626423319956, 
+                    0.6087626423319956, 
+                    0.5710355855313527, 
+                    0.5710355855313527, 
+                    0.5360717875268414, 
+                    0.5360717875268414, 
+                    0.5023141173922981, 
+                    0.5023141173922981, 
+                    0.47062349318170454, 
+                    0.47062349318170454, 
+                    0.44078911263023857, 
+                    0.44078911263023857, 
+                    0.4133623679606478, 
+                    0.4133623679606478, 
+                    0.38946525807112253, 
+                    0.38946525807112253, 
+                    0.3674518145566243, 
+                    0.3674518145566243, 
+                    0.3481818299640703, 
+                    0.3481818299640703, 
+                    0.33065773484177735, 
+                    0.33065773484177735, 
+                    0.31474737206981124, 
+                    0.31474737206981124, 
+                    0.29999578431044743, 
+                    0.29999578431044743, 
+                    0.28660894573534745, 
+                    0.28660894573534745, 
+                    0.27266477068594336, 
+                    0.27266477068594336, 
+                    0.2553417880191574, 
+                    0.2553417880191574, 
+                    0.2348091800668504, 
+                    0.2348091800668504, 
+                    0.21147833807049024, 
+                    0.21147833807049024, 
+                    0.18554462893253099, 
+                    0.18554462893253099, 
+                    0.1566084500570305, 
+                    0.1566084500570305, 
+                    0.12294852553595083, 
+                    0.12294852553595083
+                ], 
+                0.35164782404899597
+            ], 
+            [
+                0.9764378070831299, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999595233946575, 
+                    0.9999595233946575, 
+                    0.99993598746436, 
+                    0.99993598746436, 
+                    0.9995580656472911, 
+                    0.9995580656472911, 
+                    0.993337408216713, 
+                    0.993337408216713, 
+                    0.9720138252909731, 
+                    0.9720138252909731, 
+                    0.949226291370029, 
+                    0.949226291370029, 
+                    0.9193045077187391, 
+                    0.9193045077187391, 
+                    0.8854141996650332, 
+                    0.8854141996650332, 
+                    0.8482409072189845, 
+                    0.8482409072189845, 
+                    0.8080325892716245, 
+                    0.8080325892716245, 
+                    0.7677529483859088, 
+                    0.7677529483859088, 
+                    0.7266797204947617, 
+                    0.7266797204947617, 
+                    0.6868057900456577, 
+                    0.6868057900456577, 
+                    0.6455036242656446, 
+                    0.6455036242656446, 
+                    0.6052361782547321, 
+                    0.6052361782547321, 
+                    0.5669502598496963, 
+                    0.5669502598496963, 
+                    0.5329727636329552, 
+                    0.5329727636329552, 
+                    0.49828489140914484, 
+                    0.49828489140914484, 
+                    0.4676035078323369, 
+                    0.4676035078323369, 
+                    0.4372631165254912, 
+                    0.4372631165254912, 
+                    0.41031731875534866, 
+                    0.41031731875534866, 
+                    0.38641154390807303, 
+                    0.38641154390807303, 
+                    0.36454492556101065, 
+                    0.36454492556101065, 
+                    0.34538527415157644, 
+                    0.34538527415157644, 
+                    0.32797142935024043, 
+                    0.32797142935024043, 
+                    0.3121650978742787, 
+                    0.3121650978742787, 
+                    0.2975133728669041, 
+                    0.2975133728669041, 
+                    0.28425572031765634, 
+                    0.28425572031765634, 
+                    0.27051124832520956, 
+                    0.27051124832520956, 
+                    0.25337510670856755, 
+                    0.25337510670856755, 
+                    0.23301988132299878, 
+                    0.23301988132299878, 
+                    0.2098690902406981, 
+                    0.2098690902406981, 
+                    0.18412725040561095, 
+                    0.18412725040561095, 
+                    0.15540555369118403, 
+                    0.15540555369118403, 
+                    0.12201513769496465, 
+                    0.12201513769496465
+                ], 
+                0.335603266954422
+            ], 
+            [
+                0.984229564666748, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999913573551023, 
+                    0.999913573551023, 
+                    0.9991106510607995, 
+                    0.9991106510607995, 
+                    0.9917597965102223, 
+                    0.9917597965102223, 
+                    0.9709388413948569, 
+                    0.9709388413948569, 
+                    0.9475384715330974, 
+                    0.9475384715330974, 
+                    0.917291518420218, 
+                    0.917291518420218, 
+                    0.8828156541183869, 
+                    0.8828156541183869, 
+                    0.8452900651950989, 
+                    0.8452900651950989, 
+                    0.8047773109324374, 
+                    0.8047773109324374, 
+                    0.7643009549919347, 
+                    0.7643009549919347, 
+                    0.7231243555948125, 
+                    0.7231243555948125, 
+                    0.6831287145657705, 
+                    0.6831287145657705, 
+                    0.6418823256222888, 
+                    0.6418823256222888, 
+                    0.6012925464179028, 
+                    0.6012925464179028, 
+                    0.5638095008723423, 
+                    0.5638095008723423, 
+                    0.5288257769973146, 
+                    0.5288257769973146, 
+                    0.49536766808111826, 
+                    0.49536766808111826, 
+                    0.4638180005341473, 
+                    0.4638180005341473, 
+                    0.434247880228972, 
+                    0.434247880228972, 
+                    0.4070788003698289, 
+                    0.4070788003698289, 
+                    0.3834231487940106, 
+                    0.3834231487940106, 
+                    0.3616536011494765, 
+                    0.3616536011494765, 
+                    0.34261239093362816, 
+                    0.34261239093362816, 
+                    0.3253101078095326, 
+                    0.3253101078095326, 
+                    0.3096100468792412, 
+                    0.3096100468792412, 
+                    0.2950577928392164, 
+                    0.2950577928392164, 
+                    0.2819407523074473, 
+                    0.2819407523074473, 
+                    0.26821127960032404, 
+                    0.26821127960032404, 
+                    0.2510170344075119, 
+                    0.2510170344075119, 
+                    0.23065484941748277, 
+                    0.23065484941748277, 
+                    0.20756414390946795, 
+                    0.20756414390946795, 
+                    0.18194708717818986, 
+                    0.18194708717818986, 
+                    0.1534257636863116, 
+                    0.1534257636863116, 
+                    0.12036841336595452, 
+                    0.12036841336595452
+                ], 
+                0.31987765431404114
+            ], 
+            [
+                0.9920834302902222, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999676403606274, 
+                    0.9999676403606274, 
+                    0.999822006949323, 
+                    0.999822006949323, 
+                    0.9990989898454584, 
+                    0.9990989898454584, 
+                    0.9904392199238928, 
+                    0.9904392199238928, 
+                    0.969950507131967, 
+                    0.969950507131967, 
+                    0.9461012708615467, 
+                    0.9461012708615467, 
+                    0.915068966550208, 
+                    0.915068966550208, 
+                    0.8801822380405641, 
+                    0.8801822380405641, 
+                    0.8422836136982087, 
+                    0.8422836136982087, 
+                    0.8014935129071387, 
+                    0.8014935129071387, 
+                    0.7608421792903716, 
+                    0.7608421792903716, 
+                    0.7194997004742515, 
+                    0.7194997004742515, 
+                    0.6794664634934385, 
+                    0.6794664634934385, 
+                    0.6380670032583081, 
+                    0.6380670032583081, 
+                    0.597944999639579, 
+                    0.597944999639579, 
+                    0.5595343934665737, 
+                    0.5595343934665737, 
+                    0.5259884445695578, 
+                    0.5259884445695578, 
+                    0.4912213248622385, 
+                    0.4912213248622385, 
+                    0.4609236291037945, 
+                    0.4609236291037945, 
+                    0.4307389030309546, 
+                    0.4307389030309546, 
+                    0.4040851226959262, 
+                    0.4040851226959262, 
+                    0.3804183958416015, 
+                    0.3804183958416015, 
+                    0.35879546157566955, 
+                    0.35879546157566955, 
+                    0.3398676271539967, 
+                    0.3398676271539967, 
+                    0.3226761190880784, 
+                    0.3226761190880784, 
+                    0.30708015283361534, 
+                    0.30708015283361534, 
+                    0.2926282260382966, 
+                    0.2926282260382966, 
+                    0.27966510630606023, 
+                    0.27966510630606023, 
+                    0.2659535267049588, 
+                    0.2659535267049588, 
+                    0.24871758459625218, 
+                    0.24871758459625218, 
+                    0.22836410408389585, 
+                    0.22836410408389585, 
+                    0.20534529633386317, 
+                    0.20534529633386317, 
+                    0.1798641879536013, 
+                    0.1798641879536013, 
+                    0.1515573081749452, 
+                    0.1515573081749452, 
+                    0.11885666162871478, 
+                    0.11885666162871478
+                ], 
+                0.3044542670249939
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993453152464744, 
+                    0.9993453152464744, 
+                    0.998931580468528, 
+                    0.998931580468528, 
+                    0.9876045056856761, 
+                    0.9876045056856761, 
+                    0.9697645974222329, 
+                    0.9697645974222329, 
+                    0.944722133438157, 
+                    0.944722133438157, 
+                    0.9134599129683434, 
+                    0.9134599129683434, 
+                    0.8774577237840114, 
+                    0.8774577237840114, 
+                    0.839265156192729, 
+                    0.839265156192729, 
+                    0.7982857977420542, 
+                    0.7982857977420542, 
+                    0.7570771946284217, 
+                    0.7570771946284217, 
+                    0.7157677983154979, 
+                    0.7157677983154979, 
+                    0.6757605343585069, 
+                    0.6757605343585069, 
+                    0.6344324313124723, 
+                    0.6344324313124723, 
+                    0.594052083085237, 
+                    0.594052083085237, 
+                    0.5562455498227258, 
+                    0.5562455498227258, 
+                    0.5220390037691183, 
+                    0.5220390037691183, 
+                    0.4881266217230592, 
+                    0.4881266217230592, 
+                    0.45733295251605827, 
+                    0.45733295251605827, 
+                    0.4276523766824678, 
+                    0.4276523766824678, 
+                    0.40093191639502, 
+                    0.40093191639502, 
+                    0.37746149664451395, 
+                    0.37746149664451395, 
+                    0.35594932956123926, 
+                    0.35594932956123926, 
+                    0.337132223364802, 
+                    0.337132223364802, 
+                    0.3200524494247891, 
+                    0.3200524494247891, 
+                    0.3044988656310077, 
+                    0.3044988656310077, 
+                    0.289430658248334, 
+                    0.289430658248334, 
+                    0.27690748470874066, 
+                    0.27690748470874066, 
+                    0.26581157835289604, 
+                    0.26581157835289604, 
+                    0.25078550638734964, 
+                    0.25078550638734964, 
+                    0.23201525186915944, 
+                    0.23201525186915944, 
+                    0.21005291910772633, 
+                    0.21005291910772633, 
+                    0.18518353776159752, 
+                    0.18518353776159752, 
+                    0.1570142987477464, 
+                    0.1570142987477464, 
+                    0.12371603420453134, 
+                    0.12371603420453134
+                ], 
+                0.2901653051376343
+            ], 
+            [
+                1.0079797506332397, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999952370637503, 
+                    0.9999952370637503, 
+                    0.9994839286610643, 
+                    0.9994839286610643, 
+                    0.9992904902840517, 
+                    0.9992904902840517, 
+                    0.9811709569640781, 
+                    0.9811709569640781, 
+                    0.9694548667620742, 
+                    0.9694548667620742, 
+                    0.9440844188365123, 
+                    0.9440844188365123, 
+                    0.9112202525961973, 
+                    0.9112202525961973, 
+                    0.8743422223493136, 
+                    0.8743422223493136, 
+                    0.8363836467414544, 
+                    0.8363836467414544, 
+                    0.795206076556347, 
+                    0.795206076556347, 
+                    0.7537709995224041, 
+                    0.7537709995224041, 
+                    0.7123217310611043, 
+                    0.7123217310611043, 
+                    0.6721489888539726, 
+                    0.6721489888539726, 
+                    0.6307495616172735, 
+                    0.6307495616172735, 
+                    0.5903601940951607, 
+                    0.5903601940951607, 
+                    0.5526092479238898, 
+                    0.5526092479238898, 
+                    0.5184625071739133, 
+                    0.5184625071739133, 
+                    0.48465909764753323, 
+                    0.48465909764753323, 
+                    0.4539933504259205, 
+                    0.4539933504259205, 
+                    0.42444939801910503, 
+                    0.42444939801910503, 
+                    0.39786837907294215, 
+                    0.39786837907294215, 
+                    0.37452530232515074, 
+                    0.37452530232515074, 
+                    0.3531286556533553, 
+                    0.3531286556533553, 
+                    0.3344331120501173, 
+                    0.3344331120501173, 
+                    0.31745809351121285, 
+                    0.31745809351121285, 
+                    0.30190053045534226, 
+                    0.30190053045534226, 
+                    0.2856122352306939, 
+                    0.2856122352306939, 
+                    0.27309289628063493, 
+                    0.27309289628063493, 
+                    0.26623367105691503, 
+                    0.26623367105691503, 
+                    0.2551041917747456, 
+                    0.2551041917747456, 
+                    0.23910277271386923, 
+                    0.23910277271386923, 
+                    0.21894012170196853, 
+                    0.21894012170196853, 
+                    0.1950411854793982, 
+                    0.1950411854793982, 
+                    0.16694176982305292, 
+                    0.16694176982305292, 
+                    0.13230174772326336, 
+                    0.13230174772326336
+                ], 
+                0.2760356664657593
+            ], 
+            [
+                1.0160231590270996, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994661634366754, 
+                    0.9994661634366754, 
+                    0.9974891159357752, 
+                    0.9974891159357752, 
+                    0.9843821153668274, 
+                    0.9843821153668274, 
+                    0.9680308784728711, 
+                    0.9680308784728711, 
+                    0.9422648884426154, 
+                    0.9422648884426154, 
+                    0.9081409143881288, 
+                    0.9081409143881288, 
+                    0.8717778360570225, 
+                    0.8717778360570225, 
+                    0.8330541279148084, 
+                    0.8330541279148084, 
+                    0.7916649092700235, 
+                    0.7916649092700235, 
+                    0.7503686755361966, 
+                    0.7503686755361966, 
+                    0.7086531157830497, 
+                    0.7086531157830497, 
+                    0.6683287820213606, 
+                    0.6683287820213606, 
+                    0.6269818540056802, 
+                    0.6269818540056802, 
+                    0.5867745543692707, 
+                    0.5867745543692707, 
+                    0.5487171794619755, 
+                    0.5487171794619755, 
+                    0.5153745620372184, 
+                    0.5153745620372184, 
+                    0.4808638969698741, 
+                    0.4808638969698741, 
+                    0.4509869618485578, 
+                    0.4509869618485578, 
+                    0.42104630671151366, 
+                    0.42104630671151366, 
+                    0.3949075814836016, 
+                    0.3949075814836016, 
+                    0.37157296475945095, 
+                    0.37157296475945095, 
+                    0.3503370136062065, 
+                    0.3503370136062065, 
+                    0.331766638632155, 
+                    0.331766638632155, 
+                    0.3149341960305485, 
+                    0.3149341960305485, 
+                    0.2994066097193963, 
+                    0.2994066097193963, 
+                    0.28247455622314116, 
+                    0.28247455622314116, 
+                    0.27081339630857054, 
+                    0.27081339630857054, 
+                    0.26246101632561575, 
+                    0.26246101632561575, 
+                    0.2494780296179055, 
+                    0.2494780296179055, 
+                    0.23218725191232562, 
+                    0.23218725191232562, 
+                    0.21127100767628668, 
+                    0.21127100767628668, 
+                    0.18707650369748288, 
+                    0.18707650369748288, 
+                    0.15916925427039902, 
+                    0.15916925427039902, 
+                    0.1254922231216127, 
+                    0.1254922231216127
+                ], 
+                0.26132452487945557
+            ], 
+            [
+                1.0241307020187378, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999826646953753, 
+                    0.9999826646953753, 
+                    0.999712330045643, 
+                    0.999712330045643, 
+                    0.9984755413325566, 
+                    0.9984755413325566, 
+                    0.9866047306894062, 
+                    0.9866047306894062, 
+                    0.9655463428332085, 
+                    0.9655463428332085, 
+                    0.9391614089185326, 
+                    0.9391614089185326, 
+                    0.9061232781657564, 
+                    0.9061232781657564, 
+                    0.8694868284264441, 
+                    0.8694868284264441, 
+                    0.8301578685819537, 
+                    0.8301578685819537, 
+                    0.7882422078134294, 
+                    0.7882422078134294, 
+                    0.7468426359811383, 
+                    0.7468426359811383, 
+                    0.7050590393093306, 
+                    0.7050590393093306, 
+                    0.6647269324398671, 
+                    0.6647269324398671, 
+                    0.6234312896196517, 
+                    0.6234312896196517, 
+                    0.5827948472347191, 
+                    0.5827948472347191, 
+                    0.5459067959437225, 
+                    0.5459067959437225, 
+                    0.5110674903937314, 
+                    0.5110674903937314, 
+                    0.47822929248894336, 
+                    0.47822929248894336, 
+                    0.44725074208520366, 
+                    0.44725074208520366, 
+                    0.4182537037774158, 
+                    0.4182537037774158, 
+                    0.39180118224445815, 
+                    0.39180118224445815, 
+                    0.368750084866063, 
+                    0.368750084866063, 
+                    0.3475992035399618, 
+                    0.3475992035399618, 
+                    0.32913697333798436, 
+                    0.32913697333798436, 
+                    0.3123832338352421, 
+                    0.3123832338352421, 
+                    0.29721054036890265, 
+                    0.29721054036890265, 
+                    0.2833756101008567, 
+                    0.2833756101008567, 
+                    0.2713853118593845, 
+                    0.2713853118593845, 
+                    0.2576453063299133, 
+                    0.2576453063299133, 
+                    0.2400983330695681, 
+                    0.2400983330695681, 
+                    0.21966384030926153, 
+                    0.21966384030926153, 
+                    0.19685125177212198, 
+                    0.19685125177212198, 
+                    0.17187959356192486, 
+                    0.17187959356192486, 
+                    0.1444657141516696, 
+                    0.1444657141516696, 
+                    0.1133446712890949, 
+                    0.1133446712890949
+                ], 
+                0.24709323048591614
+            ], 
+            [
+                1.0323030948638916, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993884354346234, 
+                    0.9993884354346234, 
+                    0.998064688856052, 
+                    0.998064688856052, 
+                    0.9926253593341822, 
+                    0.9926253593341822, 
+                    0.967350514708148, 
+                    0.967350514708148, 
+                    0.9376867600736848, 
+                    0.9376867600736848, 
+                    0.9037843233609012, 
+                    0.9037843233609012, 
+                    0.8666996338971488, 
+                    0.8666996338971488, 
+                    0.8270476850387378, 
+                    0.8270476850387378, 
+                    0.7848749851844886, 
+                    0.7848749851844886, 
+                    0.7433289876858752, 
+                    0.7433289876858752, 
+                    0.7014377702679073, 
+                    0.7014377702679073, 
+                    0.6610403248741623, 
+                    0.6610403248741623, 
+                    0.6197877502543713, 
+                    0.6197877502543713, 
+                    0.5790701342344166, 
+                    0.5790701342344166, 
+                    0.542448630996118, 
+                    0.542448630996118, 
+                    0.50749002613511, 
+                    0.50749002613511, 
+                    0.47490653574097236, 
+                    0.47490653574097236, 
+                    0.4439678721623872, 
+                    0.4439678721623872, 
+                    0.41513396971364647, 
+                    0.41513396971364647, 
+                    0.38880849658278616, 
+                    0.38880849658278616, 
+                    0.36588659593096995, 
+                    0.36588659593096995, 
+                    0.34485981708195224, 
+                    0.34485981708195224, 
+                    0.3265138074504238, 
+                    0.3265138074504238, 
+                    0.30986962809977847, 
+                    0.30986962809977847, 
+                    0.29479156244561316, 
+                    0.29479156244561316, 
+                    0.2810453241681612, 
+                    0.2810453241681612, 
+                    0.26926669747174176, 
+                    0.26926669747174176, 
+                    0.255734546193262, 
+                    0.255734546193262, 
+                    0.23835354027289846, 
+                    0.23835354027289846, 
+                    0.21807923948214497, 
+                    0.21807923948214497, 
+                    0.19543085231203267, 
+                    0.19543085231203267, 
+                    0.1706336979408513, 
+                    0.1706336979408513, 
+                    0.1434121172369168, 
+                    0.1434121172369168, 
+                    0.11251422416044712, 
+                    0.11251422416044712
+                ], 
+                0.23388724029064178
+            ], 
+            [
+                1.0405405759811401, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990233536442897, 
+                    0.9990233536442897, 
+                    0.9969377961520114, 
+                    0.9969377961520114, 
+                    0.9885662270157528, 
+                    0.9885662270157528, 
+                    0.9627686707429756, 
+                    0.9627686707429756, 
+                    0.9353646346552935, 
+                    0.9353646346552935, 
+                    0.9013319399569806, 
+                    0.9013319399569806, 
+                    0.8638450003678265, 
+                    0.8638450003678265, 
+                    0.8238816548749656, 
+                    0.8238816548749656, 
+                    0.7814537663999738, 
+                    0.7814537663999738, 
+                    0.7397850119673365, 
+                    0.7397850119673365, 
+                    0.6977562976213887, 
+                    0.6977562976213887, 
+                    0.6574709730337971, 
+                    0.6574709730337971, 
+                    0.6157630005315647, 
+                    0.6157630005315647, 
+                    0.5761764001088164, 
+                    0.5761764001088164, 
+                    0.5377958568498268, 
+                    0.5377958568498268, 
+                    0.505039279076562, 
+                    0.505039279076562, 
+                    0.4707524081744287, 
+                    0.4707524081744287, 
+                    0.44113692679577143, 
+                    0.44113692679577143, 
+                    0.41181221285576003, 
+                    0.41181221285576003, 
+                    0.385888215371015, 
+                    0.385888215371015, 
+                    0.36301560550274714, 
+                    0.36301560550274714, 
+                    0.34213103722764454, 
+                    0.34213103722764454, 
+                    0.32390493970665085, 
+                    0.32390493970665085, 
+                    0.3073796732590069, 
+                    0.3073796732590069, 
+                    0.29234251410465734, 
+                    0.29234251410465734, 
+                    0.27781551876331906, 
+                    0.27781551876331906, 
+                    0.2661071747178693, 
+                    0.2661071747178693, 
+                    0.25444013891228956, 
+                    0.25444013891228956, 
+                    0.2385541536925586, 
+                    0.2385541536925586, 
+                    0.21935625563326366, 
+                    0.21935625563326366, 
+                    0.19744950881373557, 
+                    0.19744950881373557, 
+                    0.17312071637647972, 
+                    0.17312071637647972, 
+                    0.14608047385021217, 
+                    0.14608047385021217, 
+                    0.11492724365619447, 
+                    0.11492724365619447
+                ], 
+                0.22126425802707672
+            ], 
+            [
+                1.0488437414169312, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999143739308893, 
+                    0.9999143739308893, 
+                    0.9990832948653126, 
+                    0.9990832948653126, 
+                    0.9967383067925202, 
+                    0.9967383067925202, 
+                    0.9886308411916442, 
+                    0.9886308411916442, 
+                    0.9606052306068985, 
+                    0.9606052306068985, 
+                    0.933084350282651, 
+                    0.933084350282651, 
+                    0.8987166886261986, 
+                    0.8987166886261986, 
+                    0.8609912867686497, 
+                    0.8609912867686497, 
+                    0.8207259712605656, 
+                    0.8207259712605656, 
+                    0.7780747604360684, 
+                    0.7780747604360684, 
+                    0.7362161423069448, 
+                    0.7362161423069448, 
+                    0.6941303886835182, 
+                    0.6941303886835182, 
+                    0.6537066365495944, 
+                    0.6537066365495944, 
+                    0.6121662918725714, 
+                    0.6121662918725714, 
+                    0.5723726465878377, 
+                    0.5723726465878377, 
+                    0.5343648927815926, 
+                    0.5343648927815926, 
+                    0.5013923881920854, 
+                    0.5013923881920854, 
+                    0.46755357151273397, 
+                    0.46755357151273397, 
+                    0.437835136553598, 
+                    0.437835136553598, 
+                    0.4087624321530167, 
+                    0.4087624321530167, 
+                    0.38293186155909337, 
+                    0.38293186155909337, 
+                    0.36020487224984105, 
+                    0.36020487224984105, 
+                    0.33944260479120636, 
+                    0.33944260479120636, 
+                    0.3213404485945087, 
+                    0.3213404485945087, 
+                    0.3049196036219691, 
+                    0.3049196036219691, 
+                    0.2897126960783189, 
+                    0.2897126960783189, 
+                    0.2745060251964431, 
+                    0.2745060251964431, 
+                    0.2641664182418833, 
+                    0.2641664182418833, 
+                    0.25250989275860175, 
+                    0.25250989275860175, 
+                    0.2363405540643163, 
+                    0.2363405540643163, 
+                    0.21696611659158663, 
+                    0.21696611659158663, 
+                    0.1949983710674647, 
+                    0.1949983710674647, 
+                    0.17071588484459552, 
+                    0.17071588484459552, 
+                    0.14384353223451893, 
+                    0.14384353223451893, 
+                    0.11306864016449063, 
+                    0.11306864016449063
+                ], 
+                0.20864389836788177
+            ], 
+            [
+                1.057213306427002, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999492302868129, 
+                    0.9999492302868129, 
+                    0.9990810184832231, 
+                    0.9990810184832231, 
+                    0.9955128048836012, 
+                    0.9955128048836012, 
+                    0.9837672840747568, 
+                    0.9837672840747568, 
+                    0.9605993364292018, 
+                    0.9605993364292018, 
+                    0.9317711910353631, 
+                    0.9317711910353631, 
+                    0.8964242841777119, 
+                    0.8964242841777119, 
+                    0.8580693829066018, 
+                    0.8580693829066018, 
+                    0.8173813285511868, 
+                    0.8173813285511868, 
+                    0.7747376233321864, 
+                    0.7747376233321864, 
+                    0.7327056812198618, 
+                    0.7327056812198618, 
+                    0.6906125248862172, 
+                    0.6906125248862172, 
+                    0.6498960292411567, 
+                    0.6498960292411567, 
+                    0.6083696192004984, 
+                    0.6083696192004984, 
+                    0.5687850914417965, 
+                    0.5687850914417965, 
+                    0.5309707276630351, 
+                    0.5309707276630351, 
+                    0.49799898413930227, 
+                    0.49799898413930227, 
+                    0.4642208616503193, 
+                    0.4642208616503193, 
+                    0.4345500143120639, 
+                    0.4345500143120639, 
+                    0.40566429572621504, 
+                    0.40566429572621504, 
+                    0.37996295718792067, 
+                    0.37996295718792067, 
+                    0.3573798774870383, 
+                    0.3573798774870383, 
+                    0.33675700264179365, 
+                    0.33675700264179365, 
+                    0.31875359775093653, 
+                    0.31875359775093653, 
+                    0.3024049802681058, 
+                    0.3024049802681058, 
+                    0.28720136133920354, 
+                    0.28720136133920354, 
+                    0.2739134470088042, 
+                    0.2739134470088042, 
+                    0.26181223227234923, 
+                    0.26181223227234923, 
+                    0.2508115029482555, 
+                    0.2508115029482555, 
+                    0.23592162531696773, 
+                    0.23592162531696773, 
+                    0.21751506712213592, 
+                    0.21751506712213592, 
+                    0.19623947412439904, 
+                    0.19623947412439904, 
+                    0.17244065478696916, 
+                    0.17244065478696916, 
+                    0.14585384775783453, 
+                    0.14585384775783453, 
+                    0.11507707802932422, 
+                    0.11507707802932422
+                ], 
+                0.19706758856773376
+            ], 
+            [
+                1.0656495094299316, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999595418022648, 
+                    0.9999595418022648, 
+                    0.998964754740639, 
+                    0.998964754740639, 
+                    0.9953378618751425, 
+                    0.9953378618751425, 
+                    0.9839762053961816, 
+                    0.9839762053961816, 
+                    0.9592085779630648, 
+                    0.9592085779630648, 
+                    0.9298086853109694, 
+                    0.9298086853109694, 
+                    0.8940491716157718, 
+                    0.8940491716157718, 
+                    0.855295936550932, 
+                    0.855295936550932, 
+                    0.8143944347901569, 
+                    0.8143944347901569, 
+                    0.771242871626374, 
+                    0.771242871626374, 
+                    0.729068070546586, 
+                    0.729068070546586, 
+                    0.6868405237386571, 
+                    0.6868405237386571, 
+                    0.6463621454308562, 
+                    0.6463621454308562, 
+                    0.6047375929135587, 
+                    0.6047375929135587, 
+                    0.565420573049065, 
+                    0.565420573049065, 
+                    0.527247756522604, 
+                    0.527247756522604, 
+                    0.4948656204691725, 
+                    0.4948656204691725, 
+                    0.4608557776352138, 
+                    0.4608557776352138, 
+                    0.43144976428232507, 
+                    0.43144976428232507, 
+                    0.4026053932784581, 
+                    0.4026053932784581, 
+                    0.3770871478484174, 
+                    0.3770871478484174, 
+                    0.3546269787434581, 
+                    0.3546269787434581, 
+                    0.3341283706381072, 
+                    0.3341283706381072, 
+                    0.3162556670173863, 
+                    0.3162556670173863, 
+                    0.30002866128335737, 
+                    0.30002866128335737, 
+                    0.28534589640121544, 
+                    0.28534589640121544, 
+                    0.2717669361375988, 
+                    0.2717669361375988, 
+                    0.26028018281344173, 
+                    0.26028018281344173, 
+                    0.24910717571515617, 
+                    0.24910717571515617, 
+                    0.23362383054498734, 
+                    0.23362383054498734, 
+                    0.2148130092450851, 
+                    0.2148130092450851, 
+                    0.1933256938383591, 
+                    0.1933256938383591, 
+                    0.16948869827551127, 
+                    0.16948869827551127, 
+                    0.14305707347998753, 
+                    0.14305707347998753, 
+                    0.11275287597226297, 
+                    0.11275287597226297
+                ], 
+                0.185690239071846
+            ], 
+            [
+                1.074153184890747, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99887636581496, 
+                    0.99887636581496, 
+                    0.9958689165025795, 
+                    0.9958689165025795, 
+                    0.9860389601010444, 
+                    0.9860389601010444, 
+                    0.9573861930101765, 
+                    0.9573861930101765, 
+                    0.92737124496634, 
+                    0.92737124496634, 
+                    0.8913539529236308, 
+                    0.8913539529236308, 
+                    0.8523338050657554, 
+                    0.8523338050657554, 
+                    0.8111217592020867, 
+                    0.8111217592020867, 
+                    0.7677771145268508, 
+                    0.7677771145268508, 
+                    0.7254845249739431, 
+                    0.7254845249739431, 
+                    0.6831417428678359, 
+                    0.6831417428678359, 
+                    0.6426622557421692, 
+                    0.6426622557421692, 
+                    0.6012163194209614, 
+                    0.6012163194209614, 
+                    0.5613916847940499, 
+                    0.5613916847940499, 
+                    0.5240426992770185, 
+                    0.5240426992770185, 
+                    0.4909245597143925, 
+                    0.4909245597143925, 
+                    0.4578025029831959, 
+                    0.4578025029831959, 
+                    0.4282236306279359, 
+                    0.4282236306279359, 
+                    0.399691507125464, 
+                    0.399691507125464, 
+                    0.37422216583084056, 
+                    0.37422216583084056, 
+                    0.3519011466873114, 
+                    0.3519011466873114, 
+                    0.331514706450422, 
+                    0.331514706450422, 
+                    0.3137627451138426, 
+                    0.3137627451138426, 
+                    0.2976312845826647, 
+                    0.2976312845826647, 
+                    0.282481102296223, 
+                    0.282481102296223, 
+                    0.2687468007282729, 
+                    0.2687468007282729, 
+                    0.2599213866028393, 
+                    0.2599213866028393, 
+                    0.24776818965986275, 
+                    0.24776818965986275, 
+                    0.2310379920091517, 
+                    0.2310379920091517, 
+                    0.21137067262898707, 
+                    0.21137067262898707, 
+                    0.18937372043269288, 
+                    0.18937372043269288, 
+                    0.1653298426678617, 
+                    0.1653298426678617, 
+                    0.13902439369088257, 
+                    0.13902439369088257, 
+                    0.10938275045690254, 
+                    0.10938275045690254
+                ], 
+                0.17435131967067719
+            ], 
+            [
+                1.0827245712280273, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999997088614726, 
+                    0.9999997088614726, 
+                    0.9986078998929969, 
+                    0.9986078998929969, 
+                    0.9937530286518717, 
+                    0.9937530286518717, 
+                    0.9794004581790056, 
+                    0.9794004581790056, 
+                    0.9561535236279464, 
+                    0.9561535236279464, 
+                    0.9257305522609407, 
+                    0.9257305522609407, 
+                    0.8888084780606086, 
+                    0.8888084780606086, 
+                    0.8491521286002928, 
+                    0.8491521286002928, 
+                    0.8078568242204562, 
+                    0.8078568242204562, 
+                    0.7644778140676556, 
+                    0.7644778140676556, 
+                    0.7219554953118006, 
+                    0.7219554953118006, 
+                    0.6794824955893487, 
+                    0.6794824955893487, 
+                    0.6388576939131781, 
+                    0.6388576939131781, 
+                    0.5974413342038027, 
+                    0.5974413342038027, 
+                    0.5573545506259565, 
+                    0.5573545506259565, 
+                    0.5205938188362556, 
+                    0.5205938188362556, 
+                    0.48711537607971966, 
+                    0.48711537607971966, 
+                    0.45460941384856, 
+                    0.45460941384856, 
+                    0.4250350475564281, 
+                    0.4250350475564281, 
+                    0.3967599726426977, 
+                    0.3967599726426977, 
+                    0.3713729986270121, 
+                    0.3713729986270121, 
+                    0.3491748320965425, 
+                    0.3491748320965425, 
+                    0.3288767979627651, 
+                    0.3288767979627651, 
+                    0.31120147091858913, 
+                    0.31120147091858913, 
+                    0.2953008632433671, 
+                    0.2953008632433671, 
+                    0.2806573937787347, 
+                    0.2806573937787347, 
+                    0.2671339017797028, 
+                    0.2671339017797028, 
+                    0.2554672449689406, 
+                    0.2554672449689406, 
+                    0.24550595404840458, 
+                    0.24550595404840458, 
+                    0.2308568870218998, 
+                    0.2308568870218998, 
+                    0.21270180417980433, 
+                    0.21270180417980433, 
+                    0.19175299529999743, 
+                    0.19175299529999743, 
+                    0.16837992925114256, 
+                    0.16837992925114256, 
+                    0.1423502179556828, 
+                    0.1423502179556828, 
+                    0.11238311189538976, 
+                    0.11238311189538976
+                ], 
+                0.1639585793018341
+            ]
+        ]
+    }, 
+    {
+        "block_size": 75, 
+        "preprocessing_block_sizes": [
+            56
+        ], 
+        "pruning_parameters": [
+            [
+                0.9245561957359314, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996487914581882, 
+                    0.9996487914581882, 
+                    0.9991044826275326, 
+                    0.9991044826275326, 
+                    0.9957108195222905, 
+                    0.9957108195222905, 
+                    0.9721337447036383, 
+                    0.9721337447036383, 
+                    0.9485913093348723, 
+                    0.9485913093348723, 
+                    0.9195119568094705, 
+                    0.9195119568094705, 
+                    0.8850086756177091, 
+                    0.8850086756177091, 
+                    0.847393952977637, 
+                    0.847393952977637, 
+                    0.8080247794592794, 
+                    0.8080247794592794, 
+                    0.7677370616897577, 
+                    0.7677370616897577, 
+                    0.7273985605227745, 
+                    0.7273985605227745, 
+                    0.6874915261178542, 
+                    0.6874915261178542, 
+                    0.6468415383158815, 
+                    0.6468415383158815, 
+                    0.6095086215277046, 
+                    0.6095086215277046, 
+                    0.5733693000237635, 
+                    0.5733693000237635, 
+                    0.5383167023278143, 
+                    0.5383167023278143, 
+                    0.5028409603507263, 
+                    0.5028409603507263, 
+                    0.47034536209270295, 
+                    0.47034536209270295, 
+                    0.44088990032818504, 
+                    0.44088990032818504, 
+                    0.4145544049363815, 
+                    0.4145544049363815, 
+                    0.38999543694004857, 
+                    0.38999543694004857, 
+                    0.3680799939349497, 
+                    0.3680799939349497, 
+                    0.3477871550227196, 
+                    0.3477871550227196, 
+                    0.32933641942039515, 
+                    0.32933641942039515, 
+                    0.3128577641465409, 
+                    0.3128577641465409, 
+                    0.2977979906632687, 
+                    0.2977979906632687, 
+                    0.2845215260306552, 
+                    0.2845215260306552, 
+                    0.2712372491697821, 
+                    0.2712372491697821, 
+                    0.25462143197523296, 
+                    0.25462143197523296, 
+                    0.23445397717667416, 
+                    0.23445397717667416, 
+                    0.21136330885099594, 
+                    0.21136330885099594, 
+                    0.1855543549706389, 
+                    0.1855543549706389, 
+                    0.15664281998199525, 
+                    0.15664281998199525, 
+                    0.12287643937777305, 
+                    0.12287643937777305
+                ], 
+                0.3512953221797943
+            ], 
+            [
+                0.9318370819091797, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998310122554024, 
+                    0.9998310122554024, 
+                    0.9998310122554024, 
+                    0.9998310122554024, 
+                    0.9937171296871977, 
+                    0.9937171296871977, 
+                    0.9709589007815795, 
+                    0.9709589007815795, 
+                    0.9468005390582256, 
+                    0.9468005390582256, 
+                    0.9173146219586359, 
+                    0.9173146219586359, 
+                    0.8823750042551899, 
+                    0.8823750042551899, 
+                    0.8444232259631085, 
+                    0.8444232259631085, 
+                    0.8047459797139183, 
+                    0.8047459797139183, 
+                    0.7642506112589889, 
+                    0.7642506112589889, 
+                    0.7238404528423149, 
+                    0.7238404528423149, 
+                    0.683844764359839, 
+                    0.683844764359839, 
+                    0.6431500604464657, 
+                    0.6431500604464657, 
+                    0.6058105731023717, 
+                    0.6058105731023717, 
+                    0.5697206419686539, 
+                    0.5697206419686539, 
+                    0.5347592078738498, 
+                    0.5347592078738498, 
+                    0.4993224292783291, 
+                    0.4993224292783291, 
+                    0.4670308289335997, 
+                    0.4670308289335997, 
+                    0.43761883995835515, 
+                    0.43761883995835515, 
+                    0.41143891659754384, 
+                    0.41143891659754384, 
+                    0.3869893707943421, 
+                    0.3869893707943421, 
+                    0.3651973804447789, 
+                    0.3651973804447789, 
+                    0.3450268921036328, 
+                    0.3450268921036328, 
+                    0.3266900554877917, 
+                    0.3266900554877917, 
+                    0.31031989088515527, 
+                    0.31031989088515527, 
+                    0.29538234021459553, 
+                    0.29538234021459553, 
+                    0.28219024316600483, 
+                    0.28219024316600483, 
+                    0.26884494543542714, 
+                    0.26884494543542714, 
+                    0.2522101445224444, 
+                    0.2522101445224444, 
+                    0.2321025631786504, 
+                    0.2321025631786504, 
+                    0.20914898023939157, 
+                    0.20914898023939157, 
+                    0.18356388341881377, 
+                    0.18356388341881377, 
+                    0.15499675119605005, 
+                    0.15499675119605005, 
+                    0.12179330197137825, 
+                    0.12179330197137825
+                ], 
+                0.33531758189201355
+            ], 
+            [
+                0.9391753077507019, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998785553896358, 
+                    0.9998785553896358, 
+                    0.9986312785344322, 
+                    0.9986312785344322, 
+                    0.9974773792489529, 
+                    0.9974773792489529, 
+                    0.9894791542793465, 
+                    0.9894791542793465, 
+                    0.9721745850353299, 
+                    0.9721745850353299, 
+                    0.9454958537872497, 
+                    0.9454958537872497, 
+                    0.9136627763736586, 
+                    0.9136627763736586, 
+                    0.8795003930590498, 
+                    0.8795003930590498, 
+                    0.8417632668363816, 
+                    0.8417632668363816, 
+                    0.8018460834377394, 
+                    0.8018460834377394, 
+                    0.7608805649365306, 
+                    0.7608805649365306, 
+                    0.7200712173835062, 
+                    0.7200712173835062, 
+                    0.6802683958584796, 
+                    0.6802683958584796, 
+                    0.6395463106716278, 
+                    0.6395463106716278, 
+                    0.6022544379814347, 
+                    0.6022544379814347, 
+                    0.5662101625216843, 
+                    0.5662101625216843, 
+                    0.5310678949877843, 
+                    0.5310678949877843, 
+                    0.496061105287797, 
+                    0.496061105287797, 
+                    0.463296560381898, 
+                    0.463296560381898, 
+                    0.434620530817572, 
+                    0.434620530817572, 
+                    0.40828758404618803, 
+                    0.40828758404618803, 
+                    0.38406715448274925, 
+                    0.38406715448274925, 
+                    0.3623698511659752, 
+                    0.3623698511659752, 
+                    0.34230581972048796, 
+                    0.34230581972048796, 
+                    0.32406294682111203, 
+                    0.32406294682111203, 
+                    0.30778466749896444, 
+                    0.30778466749896444, 
+                    0.2928513627138121, 
+                    0.2928513627138121, 
+                    0.2796331648670867, 
+                    0.2796331648670867, 
+                    0.2690907593180208, 
+                    0.2690907593180208, 
+                    0.2561618108018225, 
+                    0.2561618108018225, 
+                    0.2387555834074333, 
+                    0.2387555834074333, 
+                    0.21761168689525712, 
+                    0.21761168689525712, 
+                    0.1930915375443146, 
+                    0.1930915375443146, 
+                    0.16484768042278888, 
+                    0.16484768042278888, 
+                    0.1308922532269409, 
+                    0.1308922532269409
+                ], 
+                0.32094821333885193
+            ], 
+            [
+                0.9465712904930115, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999953033409517, 
+                    0.9999953033409517, 
+                    0.998137545588168, 
+                    0.998137545588168, 
+                    0.9866979745224429, 
+                    0.9866979745224429, 
+                    0.9686221344525219, 
+                    0.9686221344525219, 
+                    0.9425279239145926, 
+                    0.9425279239145926, 
+                    0.9120373328047604, 
+                    0.9120373328047604, 
+                    0.8773905528590841, 
+                    0.8773905528590841, 
+                    0.8382378475220735, 
+                    0.8382378475220735, 
+                    0.7979660422298833, 
+                    0.7979660422298833, 
+                    0.7572284330014513, 
+                    0.7572284330014513, 
+                    0.7166351682655218, 
+                    0.7166351682655218, 
+                    0.6764471445017586, 
+                    0.6764471445017586, 
+                    0.6357810276334988, 
+                    0.6357810276334988, 
+                    0.5984879167726428, 
+                    0.5984879167726428, 
+                    0.5625208762136863, 
+                    0.5625208762136863, 
+                    0.5275215336080888, 
+                    0.5275215336080888, 
+                    0.49260386793325867, 
+                    0.49260386793325867, 
+                    0.4599344688631422, 
+                    0.4599344688631422, 
+                    0.4314130788942293, 
+                    0.4314130788942293, 
+                    0.40520808506280726, 
+                    0.40520808506280726, 
+                    0.3810925098313914, 
+                    0.3810925098313914, 
+                    0.3595223333985147, 
+                    0.3595223333985147, 
+                    0.33958582527225767, 
+                    0.33958582527225767, 
+                    0.3214707319540281, 
+                    0.3214707319540281, 
+                    0.30528776327440765, 
+                    0.30528776327440765, 
+                    0.29033387621641893, 
+                    0.29033387621641893, 
+                    0.2770982145811523, 
+                    0.2770982145811523, 
+                    0.26707484790075664, 
+                    0.26707484790075664, 
+                    0.25415028003049345, 
+                    0.25415028003049345, 
+                    0.23672744013438363, 
+                    0.23672744013438363, 
+                    0.21561860707267236, 
+                    0.21561860707267236, 
+                    0.19117438239726828, 
+                    0.19117438239726828, 
+                    0.16303339968053143, 
+                    0.16303339968053143, 
+                    0.12920186176105042, 
+                    0.12920186176105042
+                ], 
+                0.3054875433444977
+            ], 
+            [
+                0.9540255069732666, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999909188036562, 
+                    0.9999909188036562, 
+                    0.9999646302846148, 
+                    0.9999646302846148, 
+                    0.9810010407199411, 
+                    0.9810010407199411, 
+                    0.969197660882071, 
+                    0.969197660882071, 
+                    0.9419669077159554, 
+                    0.9419669077159554, 
+                    0.9122073016267933, 
+                    0.9122073016267933, 
+                    0.874791082620309, 
+                    0.874791082620309, 
+                    0.835547659910879, 
+                    0.835547659910879, 
+                    0.7953031210043283, 
+                    0.7953031210043283, 
+                    0.7543684919271364, 
+                    0.7543684919271364, 
+                    0.713349426232455, 
+                    0.713349426232455, 
+                    0.6729614722827961, 
+                    0.6729614722827961, 
+                    0.6321464461833094, 
+                    0.6321464461833094, 
+                    0.5947960674669759, 
+                    0.5947960674669759, 
+                    0.5589558772351608, 
+                    0.5589558772351608, 
+                    0.5240158533717678, 
+                    0.5240158533717678, 
+                    0.48927340238052985, 
+                    0.48927340238052985, 
+                    0.45675539970523754, 
+                    0.45675539970523754, 
+                    0.42828087898243383, 
+                    0.42828087898243383, 
+                    0.4021216894521587, 
+                    0.4021216894521587, 
+                    0.37816810472635337, 
+                    0.37816810472635337, 
+                    0.35672211042724006, 
+                    0.35672211042724006, 
+                    0.3369061499347695, 
+                    0.3369061499347695, 
+                    0.31889315338340835, 
+                    0.31889315338340835, 
+                    0.3027947878942778, 
+                    0.3027947878942778, 
+                    0.28781589584309847, 
+                    0.28781589584309847, 
+                    0.27391858606416003, 
+                    0.27391858606416003, 
+                    0.26699159701897845, 
+                    0.26699159701897845, 
+                    0.25881123471395423, 
+                    0.25881123471395423, 
+                    0.2448033208817852, 
+                    0.2448033208817852, 
+                    0.2259653977214928, 
+                    0.2259653977214928, 
+                    0.2028369395670485, 
+                    0.2028369395670485, 
+                    0.17504534408354935, 
+                    0.17504534408354935, 
+                    0.1401235167393587, 
+                    0.1401235167393587
+                ], 
+                0.2914329469203949
+            ], 
+            [
+                0.9615384340286255, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.998406253311127, 
+                    0.998406253311127, 
+                    0.9972831360047734, 
+                    0.9972831360047734, 
+                    0.985592368954778, 
+                    0.985592368954778, 
+                    0.967275539253187, 
+                    0.967275539253187, 
+                    0.9409885078860377, 
+                    0.9409885078860377, 
+                    0.9085613922001481, 
+                    0.9085613922001481, 
+                    0.8721861139902533, 
+                    0.8721861139902533, 
+                    0.8324976883633467, 
+                    0.8324976883633467, 
+                    0.7916215609440931, 
+                    0.7916215609440931, 
+                    0.7507281223758396, 
+                    0.7507281223758396, 
+                    0.7094763142907683, 
+                    0.7094763142907683, 
+                    0.6690113789846538, 
+                    0.6690113789846538, 
+                    0.6282956990854703, 
+                    0.6282956990854703, 
+                    0.591102732774563, 
+                    0.591102732774563, 
+                    0.5553137331459836, 
+                    0.5553137331459836, 
+                    0.5204612020627511, 
+                    0.5204612020627511, 
+                    0.4858298892289362, 
+                    0.4858298892289362, 
+                    0.45338428778886164, 
+                    0.45338428778886164, 
+                    0.42509346939093134, 
+                    0.42509346939093134, 
+                    0.3990785035883769, 
+                    0.3990785035883769, 
+                    0.37523827366150964, 
+                    0.37523827366150964, 
+                    0.35391502315789025, 
+                    0.35391502315789025, 
+                    0.33422421342768965, 
+                    0.33422421342768965, 
+                    0.3163457659723933, 
+                    0.3163457659723933, 
+                    0.3003397302901002, 
+                    0.3003397302901002, 
+                    0.2845844859819539, 
+                    0.2845844859819539, 
+                    0.27136117768784734, 
+                    0.27136117768784734, 
+                    0.26274884104793267, 
+                    0.26274884104793267, 
+                    0.2502476822524773, 
+                    0.2502476822524773, 
+                    0.23311070277550835, 
+                    0.23311070277550835, 
+                    0.2122816552770678, 
+                    0.2122816552770678, 
+                    0.18811067026543804, 
+                    0.18811067026543804, 
+                    0.16021565576350671, 
+                    0.16021565576350671, 
+                    0.1265774455968147, 
+                    0.1265774455968147
+                ], 
+                0.2759222090244293
+            ], 
+            [
+                0.9691105484962463, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9964774936771474, 
+                    0.9964774936771474, 
+                    0.982233353487245, 
+                    0.982233353487245, 
+                    0.9662087739367705, 
+                    0.9662087739367705, 
+                    0.9389212894396668, 
+                    0.9389212894396668, 
+                    0.9062309097501418, 
+                    0.9062309097501418, 
+                    0.8690924753867079, 
+                    0.8690924753867079, 
+                    0.8292296299762648, 
+                    0.8292296299762648, 
+                    0.7882390078692608, 
+                    0.7882390078692608, 
+                    0.7468542490833853, 
+                    0.7468542490833853, 
+                    0.7057859893372279, 
+                    0.7057859893372279, 
+                    0.6654958608040213, 
+                    0.6654958608040213, 
+                    0.6246524775573002, 
+                    0.6246524775573002, 
+                    0.5875255051180586, 
+                    0.5875255051180586, 
+                    0.5516449155010951, 
+                    0.5516449155010951, 
+                    0.5171960325333025, 
+                    0.5171960325333025, 
+                    0.4822062229722894, 
+                    0.4822062229722894, 
+                    0.45022365102895134, 
+                    0.45022365102895134, 
+                    0.42186494598553376, 
+                    0.42186494598553376, 
+                    0.39616523259150976, 
+                    0.39616523259150976, 
+                    0.37232888114850593, 
+                    0.37232888114850593, 
+                    0.35114290410851035, 
+                    0.35114290410851035, 
+                    0.33157869056652023, 
+                    0.33157869056652023, 
+                    0.3138297809489098, 
+                    0.3138297809489098, 
+                    0.2979289627753617, 
+                    0.2979289627753617, 
+                    0.28221358606690433, 
+                    0.28221358606690433, 
+                    0.26828967286758076, 
+                    0.26828967286758076, 
+                    0.2612385557372872, 
+                    0.2612385557372872, 
+                    0.2515836895474653, 
+                    0.2515836895474653, 
+                    0.236441621927877, 
+                    0.236441621927877, 
+                    0.21694168533172767, 
+                    0.21694168533172767, 
+                    0.19353799207691091, 
+                    0.19353799207691091, 
+                    0.16581920629069988, 
+                    0.16581920629069988, 
+                    0.13145411670495918, 
+                    0.13145411670495918
+                ], 
+                0.2620938718318939
+            ], 
+            [
+                0.9767423272132874, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999874663417474, 
+                    0.9999874663417474, 
+                    0.9980070127828992, 
+                    0.9980070127828992, 
+                    0.9853510141226738, 
+                    0.9853510141226738, 
+                    0.963930297955206, 
+                    0.963930297955206, 
+                    0.9368505056036132, 
+                    0.9368505056036132, 
+                    0.9038548369198915, 
+                    0.9038548369198915, 
+                    0.8663135164908549, 
+                    0.8663135164908549, 
+                    0.8261931449459686, 
+                    0.8261931449459686, 
+                    0.7849019796202396, 
+                    0.7849019796202396, 
+                    0.7433662365617256, 
+                    0.7433662365617256, 
+                    0.7021769936309962, 
+                    0.7021769936309962, 
+                    0.6618015437045601, 
+                    0.6618015437045601, 
+                    0.6209815461199848, 
+                    0.6209815461199848, 
+                    0.5838103137042783, 
+                    0.5838103137042783, 
+                    0.5481737832714066, 
+                    0.5481737832714066, 
+                    0.5135209659995401, 
+                    0.5135209659995401, 
+                    0.47914423607040135, 
+                    0.47914423607040135, 
+                    0.44690444678811203, 
+                    0.44690444678811203, 
+                    0.41887906853437196, 
+                    0.41887906853437196, 
+                    0.39307535123573684, 
+                    0.39307535123573684, 
+                    0.369481055229324, 
+                    0.369481055229324, 
+                    0.3484117466711512, 
+                    0.3484117466711512, 
+                    0.32897672042822046, 
+                    0.32897672042822046, 
+                    0.31134809508541667, 
+                    0.31134809508541667, 
+                    0.2954828298401924, 
+                    0.2954828298401924, 
+                    0.27973136945938043, 
+                    0.27973136945938043, 
+                    0.2678078671483876, 
+                    0.2678078671483876, 
+                    0.25690317209087593, 
+                    0.25690317209087593, 
+                    0.24172053288078485, 
+                    0.24172053288078485, 
+                    0.22279068985595143, 
+                    0.22279068985595143, 
+                    0.2009438909904413, 
+                    0.2009438909904413, 
+                    0.17645322595177135, 
+                    0.17645322595177135, 
+                    0.14900738209260944, 
+                    0.14900738209260944, 
+                    0.11706931679016429, 
+                    0.11706931679016429
+                ], 
+                0.2475479543209076
+            ], 
+            [
+                0.9844341278076172, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999840572407196, 
+                    0.9999840572407196, 
+                    0.9996381536443544, 
+                    0.9996381536443544, 
+                    0.9983416099078252, 
+                    0.9983416099078252, 
+                    0.9855998204642832, 
+                    0.9855998204642832, 
+                    0.9626895310065068, 
+                    0.9626895310065068, 
+                    0.9347967264256823, 
+                    0.9347967264256823, 
+                    0.90146192738627, 
+                    0.90146192738627, 
+                    0.8635108399825889, 
+                    0.8635108399825889, 
+                    0.8230155745927655, 
+                    0.8230155745927655, 
+                    0.7815555600944715, 
+                    0.7815555600944715, 
+                    0.7397984323521372, 
+                    0.7397984323521372, 
+                    0.6985489151138153, 
+                    0.6985489151138153, 
+                    0.6581088420725795, 
+                    0.6581088420725795, 
+                    0.6173290201406876, 
+                    0.6173290201406876, 
+                    0.5802591581457449, 
+                    0.5802591581457449, 
+                    0.5444963153067515, 
+                    0.5444963153067515, 
+                    0.510266846606829, 
+                    0.510266846606829, 
+                    0.4753373356938283, 
+                    0.4753373356938283, 
+                    0.44419661912615005, 
+                    0.44419661912615005, 
+                    0.4154541682605875, 
+                    0.4154541682605875, 
+                    0.3902319417763525, 
+                    0.3902319417763525, 
+                    0.3666436228699308, 
+                    0.3666436228699308, 
+                    0.34571471562127876, 
+                    0.34571471562127876, 
+                    0.3263966921761998, 
+                    0.3263966921761998, 
+                    0.30886792324610984, 
+                    0.30886792324610984, 
+                    0.29297248720483626, 
+                    0.29297248720483626, 
+                    0.2775503358222494, 
+                    0.2775503358222494, 
+                    0.2665779621739242, 
+                    0.2665779621739242, 
+                    0.25460617935715163, 
+                    0.25460617935715163, 
+                    0.23832301223619448, 
+                    0.23832301223619448, 
+                    0.2186711652459287, 
+                    0.2186711652459287, 
+                    0.19642340375413217, 
+                    0.19642340375413217, 
+                    0.17182684555724176, 
+                    0.17182684555724176, 
+                    0.14460908887075413, 
+                    0.14460908887075413, 
+                    0.11345320988826818, 
+                    0.11345320988826818
+                ], 
+                0.2340777963399887
+            ], 
+            [
+                0.9921865463256836, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994444007179747, 
+                    0.9994444007179747, 
+                    0.9977901822465607, 
+                    0.9977901822465607, 
+                    0.9916673163449956, 
+                    0.9916673163449956, 
+                    0.9639539977459205, 
+                    0.9639539977459205, 
+                    0.9331586749846782, 
+                    0.9331586749846782, 
+                    0.8991267580629051, 
+                    0.8991267580629051, 
+                    0.8606949596734015, 
+                    0.8606949596734015, 
+                    0.8198711023214641, 
+                    0.8198711023214641, 
+                    0.7781685238204971, 
+                    0.7781685238204971, 
+                    0.7362855716527452, 
+                    0.7362855716527452, 
+                    0.6949216394873209, 
+                    0.6949216394873209, 
+                    0.6544813981454948, 
+                    0.6544813981454948, 
+                    0.6136228674601203, 
+                    0.6136228674601203, 
+                    0.576724618728859, 
+                    0.576724618728859, 
+                    0.5409053350225718, 
+                    0.5409053350225718, 
+                    0.5069082085789174, 
+                    0.5069082085789174, 
+                    0.47193890579749626, 
+                    0.47193890579749626, 
+                    0.4410875109777713, 
+                    0.4410875109777713, 
+                    0.41236891844305845, 
+                    0.41236891844305845, 
+                    0.38732074660609334, 
+                    0.38732074660609334, 
+                    0.3638439747600938, 
+                    0.3638439747600938, 
+                    0.3430366071260462, 
+                    0.3430366071260462, 
+                    0.3238275529567878, 
+                    0.3238275529567878, 
+                    0.3064061905794581, 
+                    0.3064061905794581, 
+                    0.290883481478803, 
+                    0.290883481478803, 
+                    0.2769650732051424, 
+                    0.2769650732051424, 
+                    0.26581630230119907, 
+                    0.26581630230119907, 
+                    0.2528489877686557, 
+                    0.2528489877686557, 
+                    0.23580689306333422, 
+                    0.23580689306333422, 
+                    0.2156722616910266, 
+                    0.2156722616910266, 
+                    0.1931841718355083, 
+                    0.1931841718355083, 
+                    0.16858566545222645, 
+                    0.16858566545222645, 
+                    0.1416534648365011, 
+                    0.1416534648365011, 
+                    0.11122720920276362, 
+                    0.11122720920276362
+                ], 
+                0.22151510417461395
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993049215892167, 
+                    0.9993049215892167, 
+                    0.996383175937121, 
+                    0.996383175937121, 
+                    0.9863902048726502, 
+                    0.9863902048726502, 
+                    0.9594862312390021, 
+                    0.9594862312390021, 
+                    0.9307961470505526, 
+                    0.9307961470505526, 
+                    0.8966365289427608, 
+                    0.8966365289427608, 
+                    0.8578014162618913, 
+                    0.8578014162618913, 
+                    0.8166236401439962, 
+                    0.8166236401439962, 
+                    0.7748051939575247, 
+                    0.7748051939575247, 
+                    0.732637977522785, 
+                    0.732637977522785, 
+                    0.6913260532195833, 
+                    0.6913260532195833, 
+                    0.6507846742748671, 
+                    0.6507846742748671, 
+                    0.6098910108307661, 
+                    0.6098910108307661, 
+                    0.5732844154100772, 
+                    0.5732844154100772, 
+                    0.5373490993638551, 
+                    0.5373490993638551, 
+                    0.5035471275909701, 
+                    0.5035471275909701, 
+                    0.46855784389757765, 
+                    0.46855784389757765, 
+                    0.4380019357634306, 
+                    0.4380019357634306, 
+                    0.4092651940538737, 
+                    0.4092651940538737, 
+                    0.3843726120997807, 
+                    0.3843726120997807, 
+                    0.3610289673919078, 
+                    0.3610289673919078, 
+                    0.34034807593801253, 
+                    0.34034807593801253, 
+                    0.321262216063963, 
+                    0.321262216063963, 
+                    0.3039686301502423, 
+                    0.3039686301502423, 
+                    0.2885408413457717, 
+                    0.2885408413457717, 
+                    0.2741935540261713, 
+                    0.2741935540261713, 
+                    0.2619063513493577, 
+                    0.2619063513493577, 
+                    0.2511680263265303, 
+                    0.2511680263265303, 
+                    0.23635163255662794, 
+                    0.23635163255662794, 
+                    0.2177821874470047, 
+                    0.2177821874470047, 
+                    0.19636506491466585, 
+                    0.19636506491466585, 
+                    0.1724181512199351, 
+                    0.1724181512199351, 
+                    0.14569686555052533, 
+                    0.14569686555052533, 
+                    0.11481692973011089, 
+                    0.11481692973011089
+                ], 
+                0.20954231917858124
+            ], 
+            [
+                1.0078749656677246, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999914781534057, 
+                    0.9999914781534057, 
+                    0.9992974428448309, 
+                    0.9992974428448309, 
+                    0.996114698108871, 
+                    0.996114698108871, 
+                    0.9855804616688024, 
+                    0.9855804616688024, 
+                    0.9574513448863892, 
+                    0.9574513448863892, 
+                    0.9286808435895272, 
+                    0.9286808435895272, 
+                    0.894127551493558, 
+                    0.894127551493558, 
+                    0.8548839780199963, 
+                    0.8548839780199963, 
+                    0.8134718868220483, 
+                    0.8134718868220483, 
+                    0.7712960492995106, 
+                    0.7712960492995106, 
+                    0.7290964458515922, 
+                    0.7290964458515922, 
+                    0.6876079974953162, 
+                    0.6876079974953162, 
+                    0.6470887161277493, 
+                    0.6470887161277493, 
+                    0.6064622634575082, 
+                    0.6064622634575082, 
+                    0.5692071798549803, 
+                    0.5692071798549803, 
+                    0.5342441366330845, 
+                    0.5342441366330845, 
+                    0.499437011400717, 
+                    0.499437011400717, 
+                    0.4663187601746644, 
+                    0.4663187601746644, 
+                    0.43356783605022464, 
+                    0.43356783605022464, 
+                    0.40696705585055154, 
+                    0.40696705585055154, 
+                    0.38126275489139677, 
+                    0.38126275489139677, 
+                    0.3583028049150409, 
+                    0.3583028049150409, 
+                    0.3377023077398942, 
+                    0.3377023077398942, 
+                    0.31874844272602404, 
+                    0.31874844272602404, 
+                    0.3015716492735522, 
+                    0.3015716492735522, 
+                    0.2862130885762141, 
+                    0.2862130885762141, 
+                    0.27136684604591205, 
+                    0.27136684604591205, 
+                    0.2598342687839364, 
+                    0.2598342687839364, 
+                    0.24938209753757576, 
+                    0.24938209753757576, 
+                    0.23436226076519143, 
+                    0.23436226076519143, 
+                    0.21566763004191794, 
+                    0.21566763004191794, 
+                    0.19421964510562986, 
+                    0.19421964510562986, 
+                    0.17033302750748294, 
+                    0.17033302750748294, 
+                    0.14377582337090533, 
+                    0.14377582337090533, 
+                    0.11323821597152842, 
+                    0.11323821597152842
+                ], 
+                0.19746966660022736
+            ], 
+            [
+                1.0158120393753052, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999999177242429, 
+                    0.9999999177242429, 
+                    0.9986880719388478, 
+                    0.9986880719388478, 
+                    0.9939718131604912, 
+                    0.9939718131604912, 
+                    0.9801784600110609, 
+                    0.9801784600110609, 
+                    0.9580318506325844, 
+                    0.9580318506325844, 
+                    0.9270896094809511, 
+                    0.9270896094809511, 
+                    0.8916452850862139, 
+                    0.8916452850862139, 
+                    0.8520678631320379, 
+                    0.8520678631320379, 
+                    0.8102515740018352, 
+                    0.8102515740018352, 
+                    0.7680042392937407, 
+                    0.7680042392937407, 
+                    0.7255314800706912, 
+                    0.7255314800706912, 
+                    0.6839079027841982, 
+                    0.6839079027841982, 
+                    0.6433056237378811, 
+                    0.6433056237378811, 
+                    0.602619989371278, 
+                    0.602619989371278, 
+                    0.5657703658068023, 
+                    0.5657703658068023, 
+                    0.5303559184020841, 
+                    0.5303559184020841, 
+                    0.49613655009492413, 
+                    0.49613655009492413, 
+                    0.4621561005578111, 
+                    0.4621561005578111, 
+                    0.43087131334133577, 
+                    0.43087131334133577, 
+                    0.40344393548784535, 
+                    0.40344393548784535, 
+                    0.37856026044250735, 
+                    0.37856026044250735, 
+                    0.35563708725078347, 
+                    0.35563708725078347, 
+                    0.33511574216210815, 
+                    0.33511574216210815, 
+                    0.31623081268875314, 
+                    0.31623081268875314, 
+                    0.2990996386102028, 
+                    0.2990996386102028, 
+                    0.2838213301942755, 
+                    0.2838213301942755, 
+                    0.2713166903137696, 
+                    0.2713166903137696, 
+                    0.257109765044944, 
+                    0.257109765044944, 
+                    0.2472035403997673, 
+                    0.2472035403997673, 
+                    0.23433383409103825, 
+                    0.23433383409103825, 
+                    0.21720765912313206, 
+                    0.21720765912313206, 
+                    0.19685660935622273, 
+                    0.19685660935622273, 
+                    0.17368346955983285, 
+                    0.17368346955983285, 
+                    0.1474600489542045, 
+                    0.1474600489542045, 
+                    0.11669342812428779, 
+                    0.11669342812428779
+                ], 
+                0.18628016114234924
+            ], 
+            [
+                1.0238114595413208, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987123027334932, 
+                    0.9987123027334932, 
+                    0.9947860366566079, 
+                    0.9947860366566079, 
+                    0.9815606811805434, 
+                    0.9815606811805434, 
+                    0.9561303477403127, 
+                    0.9561303477403127, 
+                    0.9249557527055337, 
+                    0.9249557527055337, 
+                    0.8891699109796005, 
+                    0.8891699109796005, 
+                    0.8489966838126884, 
+                    0.8489966838126884, 
+                    0.8069753976904392, 
+                    0.8069753976904392, 
+                    0.7642943892304164, 
+                    0.7642943892304164, 
+                    0.7218626149530007, 
+                    0.7218626149530007, 
+                    0.6803148267900505, 
+                    0.6803148267900505, 
+                    0.6397651320287255, 
+                    0.6397651320287255, 
+                    0.5990891994869015, 
+                    0.5990891994869015, 
+                    0.5621544732938825, 
+                    0.5621544732938825, 
+                    0.5270158388205588, 
+                    0.5270158388205588, 
+                    0.4928104397010229, 
+                    0.4928104397010229, 
+                    0.459223581869098, 
+                    0.459223581869098, 
+                    0.42770731304803783, 
+                    0.42770731304803783, 
+                    0.40063762106941325, 
+                    0.40063762106941325, 
+                    0.37565679441465916, 
+                    0.37565679441465916, 
+                    0.3528475052844661, 
+                    0.3528475052844661, 
+                    0.33249401666718487, 
+                    0.33249401666718487, 
+                    0.31375218268966926, 
+                    0.31375218268966926, 
+                    0.29676435182396754, 
+                    0.29676435182396754, 
+                    0.2816318287419436, 
+                    0.2816318287419436, 
+                    0.26802474767886225, 
+                    0.26802474767886225, 
+                    0.2561456455927453, 
+                    0.2561456455927453, 
+                    0.24595759971516215, 
+                    0.24595759971516215, 
+                    0.2314727637787108, 
+                    0.2314727637787108, 
+                    0.2132107322698559, 
+                    0.2132107322698559, 
+                    0.19215829778848817, 
+                    0.19215829778848817, 
+                    0.1686644087242911, 
+                    0.1686644087242911, 
+                    0.142527179537001, 
+                    0.142527179537001, 
+                    0.1124874232393334, 
+                    0.1124874232393334
+                ], 
+                0.17518006265163422
+            ], 
+            [
+                1.0318740606307983, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999898083783748, 
+                    0.9999898083783748, 
+                    0.9989016627131085, 
+                    0.9989016627131085, 
+                    0.9943981424803018, 
+                    0.9943981424803018, 
+                    0.9807062789549282, 
+                    0.9807062789549282, 
+                    0.9545188146162601, 
+                    0.9545188146162601, 
+                    0.9228840544992314, 
+                    0.9228840544992314, 
+                    0.8864970632528583, 
+                    0.8864970632528583, 
+                    0.8460260884384672, 
+                    0.8460260884384672, 
+                    0.803739052084659, 
+                    0.803739052084659, 
+                    0.7608082137150709, 
+                    0.7608082137150709, 
+                    0.7183602098754109, 
+                    0.7183602098754109, 
+                    0.6766293505064841, 
+                    0.6766293505064841, 
+                    0.6360067452614142, 
+                    0.6360067452614142, 
+                    0.5953323678177489, 
+                    0.5953323678177489, 
+                    0.5586760609396065, 
+                    0.5586760609396065, 
+                    0.5234593058055433, 
+                    0.5234593058055433, 
+                    0.48957772650363407, 
+                    0.48957772650363407, 
+                    0.4557934537982503, 
+                    0.4557934537982503, 
+                    0.4248048673888965, 
+                    0.4248048673888965, 
+                    0.3975551880580299, 
+                    0.3975551880580299, 
+                    0.3728561173287106, 
+                    0.3728561173287106, 
+                    0.35014167804415897, 
+                    0.35014167804415897, 
+                    0.3299135526335521, 
+                    0.3299135526335521, 
+                    0.3113002856108828, 
+                    0.3113002856108828, 
+                    0.2944297075052777, 
+                    0.2944297075052777, 
+                    0.2794216724548157, 
+                    0.2794216724548157, 
+                    0.2657772165436376, 
+                    0.2657772165436376, 
+                    0.2544034471347379, 
+                    0.2544034471347379, 
+                    0.24436814232806506, 
+                    0.24436814232806506, 
+                    0.22974919999901458, 
+                    0.22974919999901458, 
+                    0.21142243176174003, 
+                    0.21142243176174003, 
+                    0.19038252777128972, 
+                    0.19038252777128972, 
+                    0.1669772284545323, 
+                    0.1669772284545323, 
+                    0.14101864766678948, 
+                    0.14101864766678948, 
+                    0.11131237353290308, 
+                    0.11131237353290308
+                ], 
+                0.16462062299251556
+            ], 
+            [
+                1.0399999618530273, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999913297267682, 
+                    0.9999913297267682, 
+                    0.9987536598901472, 
+                    0.9987536598901472, 
+                    0.9926111598313249, 
+                    0.9926111598313249, 
+                    0.9772688191241413, 
+                    0.9772688191241413, 
+                    0.9521252207656509, 
+                    0.9521252207656509, 
+                    0.9204176033933499, 
+                    0.9204176033933499, 
+                    0.8838520165275074, 
+                    0.8838520165275074, 
+                    0.8429423769968607, 
+                    0.8429423769968607, 
+                    0.8003369013664441, 
+                    0.8003369013664441, 
+                    0.7573955452295164, 
+                    0.7573955452295164, 
+                    0.7146611576978088, 
+                    0.7146611576978088, 
+                    0.6729414092396854, 
+                    0.6729414092396854, 
+                    0.6323139994514063, 
+                    0.6323139994514063, 
+                    0.5917762566036024, 
+                    0.5917762566036024, 
+                    0.5549263384521855, 
+                    0.5549263384521855, 
+                    0.5200693964861459, 
+                    0.5200693964861459, 
+                    0.4861511256547393, 
+                    0.4861511256547393, 
+                    0.45285509816386116, 
+                    0.45285509816386116, 
+                    0.4216503377159068, 
+                    0.4216503377159068, 
+                    0.39473117955930426, 
+                    0.39473117955930426, 
+                    0.3699464847259442, 
+                    0.3699464847259442, 
+                    0.34741233201967153, 
+                    0.34741233201967153, 
+                    0.3273513304958752, 
+                    0.3273513304958752, 
+                    0.30884411334839496, 
+                    0.30884411334839496, 
+                    0.29199400022390615, 
+                    0.29199400022390615, 
+                    0.2766569754287011, 
+                    0.2766569754287011, 
+                    0.2626994433445529, 
+                    0.2626994433445529, 
+                    0.2512198480543654, 
+                    0.2512198480543654, 
+                    0.2419927760642543, 
+                    0.2419927760642543, 
+                    0.2290673740394557, 
+                    0.2290673740394557, 
+                    0.2119334560937441, 
+                    0.2119334560937441, 
+                    0.19173834841834075, 
+                    0.19173834841834075, 
+                    0.16890041339384487, 
+                    0.16890041339384487, 
+                    0.14323531275800472, 
+                    0.14323531275800472, 
+                    0.11341868570479847, 
+                    0.11341868570479847
+                ], 
+                0.15445327758789062
+            ], 
+            [
+                1.0481899976730347, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999788214261895, 
+                    0.9999788214261895, 
+                    0.9986002849184685, 
+                    0.9986002849184685, 
+                    0.993080875824032, 
+                    0.993080875824032, 
+                    0.9774012820713426, 
+                    0.9774012820713426, 
+                    0.9516310277478184, 
+                    0.9516310277478184, 
+                    0.9185890566988302, 
+                    0.9185890566988302, 
+                    0.8812989770630043, 
+                    0.8812989770630043, 
+                    0.8400433634538309, 
+                    0.8400433634538309, 
+                    0.7970564728331712, 
+                    0.7970564728331712, 
+                    0.7538668392099891, 
+                    0.7538668392099891, 
+                    0.7110724357018472, 
+                    0.7110724357018472, 
+                    0.6693624136253035, 
+                    0.6693624136253035, 
+                    0.6285243801427831, 
+                    0.6285243801427831, 
+                    0.5882359402354652, 
+                    0.5882359402354652, 
+                    0.5510792368801054, 
+                    0.5510792368801054, 
+                    0.5168265292827551, 
+                    0.5168265292827551, 
+                    0.4824051438709238, 
+                    0.4824051438709238, 
+                    0.449684722646733, 
+                    0.449684722646733, 
+                    0.4180611453947739, 
+                    0.4180611453947739, 
+                    0.3919027347736587, 
+                    0.3919027347736587, 
+                    0.3672143421110605, 
+                    0.3672143421110605, 
+                    0.34484805469544705, 
+                    0.34484805469544705, 
+                    0.324820206872625, 
+                    0.324820206872625, 
+                    0.30644500425572485, 
+                    0.30644500425572485, 
+                    0.28979072216188256, 
+                    0.28979072216188256, 
+                    0.2750194579802798, 
+                    0.2750194579802798, 
+                    0.26186624271944386, 
+                    0.26186624271944386, 
+                    0.2505574058261013, 
+                    0.2505574058261013, 
+                    0.24136424811602378, 
+                    0.24136424811602378, 
+                    0.22696224855301256, 
+                    0.22696224855301256, 
+                    0.20882306612676874, 
+                    0.20882306612676874, 
+                    0.1880044902351661, 
+                    0.1880044902351661, 
+                    0.16487248928293485, 
+                    0.16487248928293485, 
+                    0.13926277423459507, 
+                    0.13926277423459507, 
+                    0.11004722908190105, 
+                    0.11004722908190105
+                ], 
+                0.14480093121528625
+            ], 
+            [
+                1.056444525718689, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999978031392664, 
+                    0.999978031392664, 
+                    0.9985226374781937, 
+                    0.9985226374781937, 
+                    0.9916871439844054, 
+                    0.9916871439844054, 
+                    0.9758569832449148, 
+                    0.9758569832449148, 
+                    0.94947884689145, 
+                    0.94947884689145, 
+                    0.9162934639167932, 
+                    0.9162934639167932, 
+                    0.878641399594755, 
+                    0.878641399594755, 
+                    0.8366655184995151, 
+                    0.8366655184995151, 
+                    0.7937815581453619, 
+                    0.7937815581453619, 
+                    0.7506765250167109, 
+                    0.7506765250167109, 
+                    0.7075896107781234, 
+                    0.7075896107781234, 
+                    0.665417275974048, 
+                    0.665417275974048, 
+                    0.6247226078265192, 
+                    0.6247226078265192, 
+                    0.5848665371997761, 
+                    0.5848665371997761, 
+                    0.5475311727272666, 
+                    0.5475311727272666, 
+                    0.5133521374525442, 
+                    0.5133521374525442, 
+                    0.47866147192879677, 
+                    0.47866147192879677, 
+                    0.4459023516068366, 
+                    0.4459023516068366, 
+                    0.4148116816821803, 
+                    0.4148116816821803, 
+                    0.3887996760698988, 
+                    0.3887996760698988, 
+                    0.3645373939529015, 
+                    0.3645373939529015, 
+                    0.34226967657681806, 
+                    0.34226967657681806, 
+                    0.3223022927515712, 
+                    0.3223022927515712, 
+                    0.3039845042730605, 
+                    0.3039845042730605, 
+                    0.28733858423771824, 
+                    0.28733858423771824, 
+                    0.2725695228802577, 
+                    0.2725695228802577, 
+                    0.2596910369267354, 
+                    0.2596910369267354, 
+                    0.2475016340864073, 
+                    0.2475016340864073, 
+                    0.23916201613011015, 
+                    0.23916201613011015, 
+                    0.22581913878964238, 
+                    0.22581913878964238, 
+                    0.20842839099743485, 
+                    0.20842839099743485, 
+                    0.18816075094061788, 
+                    0.18816075094061788, 
+                    0.16542338284287253, 
+                    0.16542338284287253, 
+                    0.14005348229632103, 
+                    0.14005348229632103, 
+                    0.11085622883863863, 
+                    0.11085622883863863
+                ], 
+                0.13527414202690125
+            ], 
+            [
+                1.0647639036178589, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984522710030573, 
+                    0.9984522710030573, 
+                    0.9916155653354491, 
+                    0.9916155653354491, 
+                    0.9745836755588508, 
+                    0.9745836755588508, 
+                    0.9484944612604356, 
+                    0.9484944612604356, 
+                    0.9141806836470109, 
+                    0.9141806836470109, 
+                    0.8758977650529549, 
+                    0.8758977650529549, 
+                    0.8338696789093281, 
+                    0.8338696789093281, 
+                    0.7903484735095143, 
+                    0.7903484735095143, 
+                    0.7468262058840514, 
+                    0.7468262058840514, 
+                    0.7038598102922785, 
+                    0.7038598102922785, 
+                    0.6618660228929241, 
+                    0.6618660228929241, 
+                    0.6215649995925814, 
+                    0.6215649995925814, 
+                    0.5805064950964017, 
+                    0.5805064950964017, 
+                    0.5448017511654971, 
+                    0.5448017511654971, 
+                    0.5093624338554913, 
+                    0.5093624338554913, 
+                    0.4764010371421538, 
+                    0.4764010371421538, 
+                    0.4428139892528576, 
+                    0.4428139892528576, 
+                    0.412593131057365, 
+                    0.412593131057365, 
+                    0.3858237308666777, 
+                    0.3858237308666777, 
+                    0.3617677236594816, 
+                    0.3617677236594816, 
+                    0.33953319281588434, 
+                    0.33953319281588434, 
+                    0.31980449592973453, 
+                    0.31980449592973453, 
+                    0.30167465307394065, 
+                    0.30167465307394065, 
+                    0.28528153903010833, 
+                    0.28528153903010833, 
+                    0.27089680912137637, 
+                    0.27089680912137637, 
+                    0.25804750171135715, 
+                    0.25804750171135715, 
+                    0.24711923445445508, 
+                    0.24711923445445508, 
+                    0.23856584848595214, 
+                    0.23856584848595214, 
+                    0.22430081931170653, 
+                    0.22430081931170653, 
+                    0.20630634624772426, 
+                    0.20630634624772426, 
+                    0.18568051313432163, 
+                    0.18568051313432163, 
+                    0.16280314522011524, 
+                    0.16280314522011524, 
+                    0.13753187765786884, 
+                    0.13753187765786884, 
+                    0.10880594520884052, 
+                    0.10880594520884052
+                ], 
+                0.12694701552391052
+            ], 
+            [
+                1.0731489658355713, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999713536141245, 
+                    0.9999713536141245, 
+                    0.9982763885561062, 
+                    0.9982763885561062, 
+                    0.9913182307725779, 
+                    0.9913182307725779, 
+                    0.9741222928147494, 
+                    0.9741222928147494, 
+                    0.9466449115993142, 
+                    0.9466449115993142, 
+                    0.9118743920723998, 
+                    0.9118743920723998, 
+                    0.8731298562573006, 
+                    0.8731298562573006, 
+                    0.8307143976268128, 
+                    0.8307143976268128, 
+                    0.7869739993179182, 
+                    0.7869739993179182, 
+                    0.7433209357059254, 
+                    0.7433209357059254, 
+                    0.7001871542411893, 
+                    0.7001871542411893, 
+                    0.6581616265365979, 
+                    0.6581616265365979, 
+                    0.6178510288720719, 
+                    0.6178510288720719, 
+                    0.5769447417062282, 
+                    0.5769447417062282, 
+                    0.5412223018867787, 
+                    0.5412223018867787, 
+                    0.5059555358969223, 
+                    0.5059555358969223, 
+                    0.4730932475850275, 
+                    0.4730932475850275, 
+                    0.43962609799176505, 
+                    0.43962609799176505, 
+                    0.409632954106904, 
+                    0.409632954106904, 
+                    0.382951618335007, 
+                    0.382951618335007, 
+                    0.35904732478307433, 
+                    0.35904732478307433, 
+                    0.336935160558533, 
+                    0.336935160558533, 
+                    0.31734010979427585, 
+                    0.31734010979427585, 
+                    0.2993291331426405, 
+                    0.2993291331426405, 
+                    0.283040508991165, 
+                    0.283040508991165, 
+                    0.2685703757355408, 
+                    0.2685703757355408, 
+                    0.25544869842877427, 
+                    0.25544869842877427, 
+                    0.24682626327480514, 
+                    0.24682626327480514, 
+                    0.2378517192105293, 
+                    0.2378517192105293, 
+                    0.22314675046871862, 
+                    0.22314675046871862, 
+                    0.2048691874617777, 
+                    0.2048691874617777, 
+                    0.18409332957002136, 
+                    0.18409332957002136, 
+                    0.16119124426963316, 
+                    0.16119124426963316, 
+                    0.13603786099470203, 
+                    0.13603786099470203, 
+                    0.10765197674303299, 
+                    0.10765197674303299
+                ], 
+                0.11854759603738785
+            ], 
+            [
+                1.0815999507904053, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999977376049803, 
+                    0.9999977376049803, 
+                    0.9981829954326453, 
+                    0.9981829954326453, 
+                    0.9898843311394894, 
+                    0.9898843311394894, 
+                    0.9727419301958329, 
+                    0.9727419301958329, 
+                    0.9446741206413422, 
+                    0.9446741206413422, 
+                    0.9094947306347763, 
+                    0.9094947306347763, 
+                    0.8703690497607249, 
+                    0.8703690497607249, 
+                    0.8275570886376187, 
+                    0.8275570886376187, 
+                    0.7835148352328227, 
+                    0.7835148352328227, 
+                    0.7397132996122127, 
+                    0.7397132996122127, 
+                    0.6965322055247405, 
+                    0.6965322055247405, 
+                    0.6544539720312444, 
+                    0.6544539720312444, 
+                    0.6139239846350886, 
+                    0.6139239846350886, 
+                    0.5734663245028698, 
+                    0.5734663245028698, 
+                    0.5373431612842974, 
+                    0.5373431612842974, 
+                    0.5029046939338911, 
+                    0.5029046939338911, 
+                    0.46956175927885346, 
+                    0.46956175927885346, 
+                    0.43698927200654497, 
+                    0.43698927200654497, 
+                    0.4063517234304103, 
+                    0.4063517234304103, 
+                    0.3803293144117374, 
+                    0.3803293144117374, 
+                    0.3562193419027856, 
+                    0.3562193419027856, 
+                    0.33432365546007714, 
+                    0.33432365546007714, 
+                    0.3148362001129243, 
+                    0.3148362001129243, 
+                    0.2969215972127677, 
+                    0.2969215972127677, 
+                    0.2806871355704325, 
+                    0.2806871355704325, 
+                    0.2664696212337595, 
+                    0.2664696212337595, 
+                    0.25505570766841357, 
+                    0.25505570766841357, 
+                    0.24209973522705264, 
+                    0.24209973522705264, 
+                    0.2346260976451427, 
+                    0.2346260976451427, 
+                    0.22163411255339854, 
+                    0.22163411255339854, 
+                    0.2045930563998961, 
+                    0.2045930563998961, 
+                    0.18471075647678653, 
+                    0.18471075647678653, 
+                    0.1624235249607953, 
+                    0.1624235249607953, 
+                    0.1376020860209914, 
+                    0.1376020860209914, 
+                    0.10914263302829444, 
+                    0.10914263302829444
+                ], 
+                0.11061763763427734
+            ]
+        ]
+    }, 
+    {
+        "block_size": 76, 
+        "preprocessing_block_sizes": [
+            56
+        ], 
+        "pruning_parameters": [
+            [
+                0.9254927039146423, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999692601169068, 
+                    0.9999692601169068, 
+                    0.999761283632474, 
+                    0.999761283632474, 
+                    0.9996014160144202, 
+                    0.9996014160144202, 
+                    0.9948932446167362, 
+                    0.9948932446167362, 
+                    0.9749044806106744, 
+                    0.9749044806106744, 
+                    0.9538926133357962, 
+                    0.9538926133357962, 
+                    0.9259157157718091, 
+                    0.9259157157718091, 
+                    0.8931605178080836, 
+                    0.8931605178080836, 
+                    0.8569797198205362, 
+                    0.8569797198205362, 
+                    0.8178455405568626, 
+                    0.8178455405568626, 
+                    0.7783745702332592, 
+                    0.7783745702332592, 
+                    0.7392229194532856, 
+                    0.7392229194532856, 
+                    0.6993701164411292, 
+                    0.6993701164411292, 
+                    0.6614128011385183, 
+                    0.6614128011385183, 
+                    0.6231427850767549, 
+                    0.6231427850767549, 
+                    0.5864293138776229, 
+                    0.5864293138776229, 
+                    0.5507425007146137, 
+                    0.5507425007146137, 
+                    0.5145261934501889, 
+                    0.5145261934501889, 
+                    0.48227144543700384, 
+                    0.48227144543700384, 
+                    0.45203961111926205, 
+                    0.45203961111926205, 
+                    0.4255489058979834, 
+                    0.4255489058979834, 
+                    0.39948206150505017, 
+                    0.39948206150505017, 
+                    0.376522475790702, 
+                    0.376522475790702, 
+                    0.35576833181987827, 
+                    0.35576833181987827, 
+                    0.3371814396831039, 
+                    0.3371814396831039, 
+                    0.3201333206207846, 
+                    0.3201333206207846, 
+                    0.30427399485172485, 
+                    0.30427399485172485, 
+                    0.28965050311953283, 
+                    0.28965050311953283, 
+                    0.27659059450450424, 
+                    0.27659059450450424, 
+                    0.2630979143208897, 
+                    0.2630979143208897, 
+                    0.24636121460937935, 
+                    0.24636121460937935, 
+                    0.22638412794569784, 
+                    0.22638412794569784, 
+                    0.203759727330445, 
+                    0.203759727330445, 
+                    0.17868969166546494, 
+                    0.17868969166546494, 
+                    0.15083688606319987, 
+                    0.15083688606319987, 
+                    0.11868280975488567, 
+                    0.11868280975488567
+                ], 
+                0.32974737882614136
+            ], 
+            [
+                0.9326865077018738, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999288612807893, 
+                    0.9999288612807893, 
+                    0.9943139458990884, 
+                    0.9943139458990884, 
+                    0.9747655182501471, 
+                    0.9747655182501471, 
+                    0.9523937530480112, 
+                    0.9523937530480112, 
+                    0.9241692083687866, 
+                    0.9241692083687866, 
+                    0.8907588298923935, 
+                    0.8907588298923935, 
+                    0.8542376747993704, 
+                    0.8542376747993704, 
+                    0.8147951730197721, 
+                    0.8147951730197721, 
+                    0.7751104654703879, 
+                    0.7751104654703879, 
+                    0.7357255337506984, 
+                    0.7357255337506984, 
+                    0.6958533169119736, 
+                    0.6958533169119736, 
+                    0.6578339150730333, 
+                    0.6578339150730333, 
+                    0.619528646934554, 
+                    0.619528646934554, 
+                    0.5828363713453167, 
+                    0.5828363713453167, 
+                    0.5472515529285602, 
+                    0.5472515529285602, 
+                    0.5110446905465913, 
+                    0.5110446905465913, 
+                    0.47899023266051194, 
+                    0.47899023266051194, 
+                    0.44879223087597775, 
+                    0.44879223087597775, 
+                    0.42245064976197505, 
+                    0.42245064976197505, 
+                    0.3964946707127427, 
+                    0.3964946707127427, 
+                    0.37365731266567037, 
+                    0.37365731266567037, 
+                    0.3530188916708124, 
+                    0.3530188916708124, 
+                    0.33454513949549775, 
+                    0.33454513949549775, 
+                    0.31760367188092237, 
+                    0.31760367188092237, 
+                    0.3018486567656866, 
+                    0.3018486567656866, 
+                    0.28733535361125495, 
+                    0.28733535361125495, 
+                    0.2744258395165366, 
+                    0.2744258395165366, 
+                    0.26095493385912827, 
+                    0.26095493385912827, 
+                    0.24417142830573685, 
+                    0.24417142830573685, 
+                    0.22419871292295665, 
+                    0.22419871292295665, 
+                    0.20164104070884217, 
+                    0.20164104070884217, 
+                    0.17670197411049793, 
+                    0.17670197411049793, 
+                    0.14905986113179603, 
+                    0.14905986113179603, 
+                    0.11726243949128021, 
+                    0.11726243949128021
+                ], 
+                0.31443852186203003
+            ], 
+            [
+                0.9399362802505493, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9979323280529436, 
+                    0.9979323280529436, 
+                    0.9909849536217401, 
+                    0.9909849536217401, 
+                    0.9750714007093001, 
+                    0.9750714007093001, 
+                    0.9514870208769757, 
+                    0.9514870208769757, 
+                    0.9207929014472702, 
+                    0.9207929014472702, 
+                    0.8883579355317522, 
+                    0.8883579355317522, 
+                    0.8520525463206876, 
+                    0.8520525463206876, 
+                    0.8111494909812911, 
+                    0.8111494909812911, 
+                    0.7721073764392226, 
+                    0.7721073764392226, 
+                    0.7322801788203356, 
+                    0.7322801788203356, 
+                    0.6923542629999763, 
+                    0.6923542629999763, 
+                    0.6545249527579633, 
+                    0.6545249527579633, 
+                    0.6162913680605843, 
+                    0.6162913680605843, 
+                    0.5794605758732729, 
+                    0.5794605758732729, 
+                    0.5435626361488697, 
+                    0.5435626361488697, 
+                    0.5079204698068857, 
+                    0.5079204698068857, 
+                    0.47519095703053454, 
+                    0.47519095703053454, 
+                    0.4459347948753031, 
+                    0.4459347948753031, 
+                    0.4192385728526461, 
+                    0.4192385728526461, 
+                    0.393583318348953, 
+                    0.393583318348953, 
+                    0.3708285710187978, 
+                    0.3708285710187978, 
+                    0.350299582098867, 
+                    0.350299582098867, 
+                    0.33193033722842474, 
+                    0.33193033722842474, 
+                    0.3150815624714025, 
+                    0.3150815624714025, 
+                    0.2992683328081823, 
+                    0.2992683328081823, 
+                    0.2833185082511851, 
+                    0.2833185082511851, 
+                    0.27069280143765345, 
+                    0.27069280143765345, 
+                    0.26357231504559603, 
+                    0.26357231504559603, 
+                    0.252644970994985, 
+                    0.252644970994985, 
+                    0.23666474472679874, 
+                    0.23666474472679874, 
+                    0.21661964825692487, 
+                    0.21661964825692487, 
+                    0.1929033001587144, 
+                    0.1929033001587144, 
+                    0.16507223197875606, 
+                    0.16507223197875606, 
+                    0.13084116979973986, 
+                    0.13084116979973986
+                ], 
+                0.30090785026550293
+            ], 
+            [
+                0.9472423195838928, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999626245630523, 
+                    0.9999626245630523, 
+                    0.9922350864165878, 
+                    0.9922350864165878, 
+                    0.9738091670789794, 
+                    0.9738091670789794, 
+                    0.9511701718060491, 
+                    0.9511701718060491, 
+                    0.9212352537871759, 
+                    0.9212352537871759, 
+                    0.8857136413696515, 
+                    0.8857136413696515, 
+                    0.8482984577360301, 
+                    0.8482984577360301, 
+                    0.8085826343383327, 
+                    0.8085826343383327, 
+                    0.7683619990393554, 
+                    0.7683619990393554, 
+                    0.7288744135653621, 
+                    0.7288744135653621, 
+                    0.6888107435005801, 
+                    0.6888107435005801, 
+                    0.6505562270141164, 
+                    0.6505562270141164, 
+                    0.612317719328102, 
+                    0.612317719328102, 
+                    0.5756874934906616, 
+                    0.5756874934906616, 
+                    0.5400699958637533, 
+                    0.5400699958637533, 
+                    0.5042971233386035, 
+                    0.5042971233386035, 
+                    0.4723782087284007, 
+                    0.4723782087284007, 
+                    0.4424682894122793, 
+                    0.4424682894122793, 
+                    0.4161932145238186, 
+                    0.4161932145238186, 
+                    0.39056945066342286, 
+                    0.39056945066342286, 
+                    0.36797093693206556, 
+                    0.36797093693206556, 
+                    0.3475747766530934, 
+                    0.3475747766530934, 
+                    0.3293305097162464, 
+                    0.3293305097162464, 
+                    0.3125971623777403, 
+                    0.3125971623777403, 
+                    0.2967782400303518, 
+                    0.2967782400303518, 
+                    0.2804276042805525, 
+                    0.2804276042805525, 
+                    0.2683168537662833, 
+                    0.2683168537662833, 
+                    0.25975493935426086, 
+                    0.25975493935426086, 
+                    0.24701223803153483, 
+                    0.24701223803153483, 
+                    0.22981755214058205, 
+                    0.22981755214058205, 
+                    0.2090778966375468, 
+                    0.2090778966375468, 
+                    0.18512086873794606, 
+                    0.18512086873794606, 
+                    0.15753982136859232, 
+                    0.15753982136859232, 
+                    0.12435648244941028, 
+                    0.12435648244941028
+                ], 
+                0.28562483191490173
+            ], 
+            [
+                0.954605221748352, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999666055998371, 
+                    0.9999666055998371, 
+                    0.9998617707182377, 
+                    0.9998617707182377, 
+                    0.9996955852610652, 
+                    0.9996955852610652, 
+                    0.9914864542986641, 
+                    0.9914864542986641, 
+                    0.9718672918949817, 
+                    0.9718672918949817, 
+                    0.948110623992176, 
+                    0.948110623992176, 
+                    0.9179437081681374, 
+                    0.9179437081681374, 
+                    0.883376309484931, 
+                    0.883376309484931, 
+                    0.8457400147910582, 
+                    0.8457400147910582, 
+                    0.8053449986083845, 
+                    0.8053449986083845, 
+                    0.765029960948555, 
+                    0.765029960948555, 
+                    0.7252529291508099, 
+                    0.7252529291508099, 
+                    0.6851039127830213, 
+                    0.6851039127830213, 
+                    0.6470356637108731, 
+                    0.6470356637108731, 
+                    0.6087648230212703, 
+                    0.6087648230212703, 
+                    0.5721626590373652, 
+                    0.5721626590373652, 
+                    0.5367787849422984, 
+                    0.5367787849422984, 
+                    0.5008843011066841, 
+                    0.5008843011066841, 
+                    0.4690426975174809, 
+                    0.4690426975174809, 
+                    0.4393157342168478, 
+                    0.4393157342168478, 
+                    0.4132328866221635, 
+                    0.4132328866221635, 
+                    0.3876804251281918, 
+                    0.3876804251281918, 
+                    0.36519791248443, 
+                    0.36519791248443, 
+                    0.3449153001920495, 
+                    0.3449153001920495, 
+                    0.326773618997283, 
+                    0.326773618997283, 
+                    0.310150788271908, 
+                    0.310150788271908, 
+                    0.2947080660669524, 
+                    0.2947080660669524, 
+                    0.2805794319631628, 
+                    0.2805794319631628, 
+                    0.2683265755698932, 
+                    0.2683265755698932, 
+                    0.2549256687995403, 
+                    0.2549256687995403, 
+                    0.23796460283635282, 
+                    0.23796460283635282, 
+                    0.2179705360106794, 
+                    0.2179705360106794, 
+                    0.195584572588008, 
+                    0.195584572588008, 
+                    0.17102034973204366, 
+                    0.17102034973204366, 
+                    0.14400902891426953, 
+                    0.14400902891426953, 
+                    0.11331065418860724, 
+                    0.11331065418860724
+                ], 
+                0.27076783776283264
+            ], 
+            [
+                0.9620253443717957, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999078847950448, 
+                    0.9999078847950448, 
+                    0.9997646670485062, 
+                    0.9997646670485062, 
+                    0.9907195256307872, 
+                    0.9907195256307872, 
+                    0.9709426283842335, 
+                    0.9709426283842335, 
+                    0.946545205457154, 
+                    0.946545205457154, 
+                    0.9158034979734243, 
+                    0.9158034979734243, 
+                    0.8807523533131189, 
+                    0.8807523533131189, 
+                    0.8427937826638722, 
+                    0.8427937826638722, 
+                    0.8021506422757092, 
+                    0.8021506422757092, 
+                    0.7616391622289286, 
+                    0.7616391622289286, 
+                    0.7218092146632787, 
+                    0.7218092146632787, 
+                    0.6815295038484817, 
+                    0.6815295038484817, 
+                    0.6434105680319802, 
+                    0.6434105680319802, 
+                    0.605170666280886, 
+                    0.605170666280886, 
+                    0.5685923095012837, 
+                    0.5685923095012837, 
+                    0.5333555942407661, 
+                    0.5333555942407661, 
+                    0.4974277183780549, 
+                    0.4974277183780549, 
+                    0.4658821858438781, 
+                    0.4658821858438781, 
+                    0.4361171714175045, 
+                    0.4361171714175045, 
+                    0.4102343745212037, 
+                    0.4102343745212037, 
+                    0.3847799490212873, 
+                    0.3847799490212873, 
+                    0.36242449537463395, 
+                    0.36242449537463395, 
+                    0.34225986234600253, 
+                    0.34225986234600253, 
+                    0.3242287257633566, 
+                    0.3242287257633566, 
+                    0.3077111465237889, 
+                    0.3077111465237889, 
+                    0.2923760358498663, 
+                    0.2923760358498663, 
+                    0.2784464497344599, 
+                    0.2784464497344599, 
+                    0.2665543291420527, 
+                    0.2665543291420527, 
+                    0.253069779439783, 
+                    0.253069779439783, 
+                    0.23592931239060488, 
+                    0.23592931239060488, 
+                    0.21584091536301414, 
+                    0.21584091536301414, 
+                    0.19345192640043893, 
+                    0.19345192640043893, 
+                    0.16897724037492456, 
+                    0.16897724037492456, 
+                    0.14216898612850434, 
+                    0.14216898612850434, 
+                    0.11187470819168331, 
+                    0.11187470819168331
+                ], 
+                0.25698551535606384
+            ], 
+            [
+                0.9695031046867371, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998562271384366, 
+                    0.9998562271384366, 
+                    0.9995626312821436, 
+                    0.9995626312821436, 
+                    0.9990084324479, 
+                    0.9990084324479, 
+                    0.989046189416897, 
+                    0.989046189416897, 
+                    0.9717221324838344, 
+                    0.9717221324838344, 
+                    0.9453614311042832, 
+                    0.9453614311042832, 
+                    0.9135954929041731, 
+                    0.9135954929041731, 
+                    0.8786599854855878, 
+                    0.8786599854855878, 
+                    0.839873188641018, 
+                    0.839873188641018, 
+                    0.7991370936027661, 
+                    0.7991370936027661, 
+                    0.7582648772277614, 
+                    0.7582648772277614, 
+                    0.718185938178954, 
+                    0.718185938178954, 
+                    0.6777370778582265, 
+                    0.6777370778582265, 
+                    0.6396374121660815, 
+                    0.6396374121660815, 
+                    0.6014672986185341, 
+                    0.6014672986185341, 
+                    0.5650992097228832, 
+                    0.5650992097228832, 
+                    0.5297229428985601, 
+                    0.5297229428985601, 
+                    0.4943974230502956, 
+                    0.4943974230502956, 
+                    0.46215370511238946, 
+                    0.46215370511238946, 
+                    0.4332759906290087, 
+                    0.4332759906290087, 
+                    0.4071100640596467, 
+                    0.4071100640596467, 
+                    0.3819200904033182, 
+                    0.3819200904033182, 
+                    0.3596534549773296, 
+                    0.3596534549773296, 
+                    0.33961150342026153, 
+                    0.33961150342026153, 
+                    0.3216941036051254, 
+                    0.3216941036051254, 
+                    0.30528977617871433, 
+                    0.30528977617871433, 
+                    0.28997429942417374, 
+                    0.28997429942417374, 
+                    0.2751413738405918, 
+                    0.2751413738405918, 
+                    0.26271603692197715, 
+                    0.26271603692197715, 
+                    0.2520573759803058, 
+                    0.2520573759803058, 
+                    0.2374899096686393, 
+                    0.2374899096686393, 
+                    0.2191830217674962, 
+                    0.2191830217674962, 
+                    0.19797507521180288, 
+                    0.19797507521180288, 
+                    0.17416983994037824, 
+                    0.17416983994037824, 
+                    0.1474818894208735, 
+                    0.1474818894208735, 
+                    0.11644982889850158, 
+                    0.11644982889850158
+                ], 
+                0.24404942989349365
+            ], 
+            [
+                0.9770389795303345, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999586505917363, 
+                    0.9999586505917363, 
+                    0.9993333498792573, 
+                    0.9993333498792573, 
+                    0.9890859101199806, 
+                    0.9890859101199806, 
+                    0.9698747690759714, 
+                    0.9698747690759714, 
+                    0.9438181837844987, 
+                    0.9438181837844987, 
+                    0.9115248544245165, 
+                    0.9115248544245165, 
+                    0.8756350478786963, 
+                    0.8756350478786963, 
+                    0.8368834468937795, 
+                    0.8368834468937795, 
+                    0.7957497862400883, 
+                    0.7957497862400883, 
+                    0.754846201330374, 
+                    0.754846201330374, 
+                    0.714744499050286, 
+                    0.714744499050286, 
+                    0.6743868216049764, 
+                    0.6743868216049764, 
+                    0.6362167055286096, 
+                    0.6362167055286096, 
+                    0.5979749543132239, 
+                    0.5979749543132239, 
+                    0.5616222472509039, 
+                    0.5616222472509039, 
+                    0.5262434875273584, 
+                    0.5262434875273584, 
+                    0.49120040211994254, 
+                    0.49120040211994254, 
+                    0.45884647371632753, 
+                    0.45884647371632753, 
+                    0.430283221644818, 
+                    0.430283221644818, 
+                    0.4040887003936944, 
+                    0.4040887003936944, 
+                    0.37905788065373763, 
+                    0.37905788065373763, 
+                    0.35691470293339345, 
+                    0.35691470293339345, 
+                    0.33699827197288357, 
+                    0.33699827197288357, 
+                    0.31919917799709946, 
+                    0.31919917799709946, 
+                    0.3029012979185537, 
+                    0.3029012979185537, 
+                    0.2876869477373409, 
+                    0.2876869477373409, 
+                    0.27314680878821584, 
+                    0.27314680878821584, 
+                    0.2613949492929254, 
+                    0.2613949492929254, 
+                    0.2499552289224287, 
+                    0.2499552289224287, 
+                    0.23448119045129032, 
+                    0.23448119045129032, 
+                    0.21558568704076603, 
+                    0.21558568704076603, 
+                    0.19405928504196968, 
+                    0.19405928504196968, 
+                    0.17017963924804697, 
+                    0.17017963924804697, 
+                    0.14369107205532378, 
+                    0.14369107205532378, 
+                    0.11331680910087384, 
+                    0.11331680910087384
+                ], 
+                0.23103681206703186
+            ], 
+            [
+                0.9846335053443909, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998260788885049, 
+                    0.9998260788885049, 
+                    0.998880163898193, 
+                    0.998880163898193, 
+                    0.9963656183109388, 
+                    0.9963656183109388, 
+                    0.9734298333597629, 
+                    0.9734298333597629, 
+                    0.9411293633330245, 
+                    0.9411293633330245, 
+                    0.9089268514169897, 
+                    0.9089268514169897, 
+                    0.8726566710292651, 
+                    0.8726566710292651, 
+                    0.8338266322191651, 
+                    0.8338266322191651, 
+                    0.7924705830485491, 
+                    0.7924705830485491, 
+                    0.7514274609586455, 
+                    0.7514274609586455, 
+                    0.7111295284505377, 
+                    0.7111295284505377, 
+                    0.670842202323482, 
+                    0.670842202323482, 
+                    0.6325885787333103, 
+                    0.6325885787333103, 
+                    0.594385871275642, 
+                    0.594385871275642, 
+                    0.5582140737420168, 
+                    0.5582140737420168, 
+                    0.5225163974819106, 
+                    0.5225163974819106, 
+                    0.4883873911180453, 
+                    0.4883873911180453, 
+                    0.4550358044654145, 
+                    0.4550358044654145, 
+                    0.4275910443653656, 
+                    0.4275910443653656, 
+                    0.40097000739165656, 
+                    0.40097000739165656, 
+                    0.3762566611642036, 
+                    0.3762566611642036, 
+                    0.35420474788719397, 
+                    0.35420474788719397, 
+                    0.33441094698508983, 
+                    0.33441094698508983, 
+                    0.3167293436041769, 
+                    0.3167293436041769, 
+                    0.3005278974988682, 
+                    0.3005278974988682, 
+                    0.28514263649162475, 
+                    0.28514263649162475, 
+                    0.2700711970548478, 
+                    0.2700711970548478, 
+                    0.25947526572582913, 
+                    0.25947526572582913, 
+                    0.24813124697218067, 
+                    0.24813124697218067, 
+                    0.23245887135781296, 
+                    0.23245887135781296, 
+                    0.21345375298443492, 
+                    0.21345375298443492, 
+                    0.19191244879715916, 
+                    0.19191244879715916, 
+                    0.16810848886255775, 
+                    0.16810848886255775, 
+                    0.14180146947688063, 
+                    0.14180146947688063, 
+                    0.1117828042662559, 
+                    0.1117828042662559
+                ], 
+                0.21830211579799652
+            ], 
+            [
+                0.9922869801521301, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996069296520139, 
+                    0.9996069296520139, 
+                    0.9985849846285321, 
+                    0.9985849846285321, 
+                    0.9940229706645004, 
+                    0.9940229706645004, 
+                    0.9691893048015172, 
+                    0.9691893048015172, 
+                    0.9404197839665756, 
+                    0.9404197839665756, 
+                    0.9072475368599909, 
+                    0.9072475368599909, 
+                    0.8702953120501092, 
+                    0.8702953120501092, 
+                    0.8308777612340258, 
+                    0.8308777612340258, 
+                    0.7892420974640866, 
+                    0.7892420974640866, 
+                    0.7480390536995492, 
+                    0.7480390536995492, 
+                    0.7078746197330188, 
+                    0.7078746197330188, 
+                    0.6670912036832438, 
+                    0.6670912036832438, 
+                    0.6290681524581346, 
+                    0.6290681524581346, 
+                    0.5909046676624073, 
+                    0.5909046676624073, 
+                    0.5544841321101798, 
+                    0.5544841321101798, 
+                    0.5193235578385363, 
+                    0.5193235578385363, 
+                    0.48482871763110985, 
+                    0.48482871763110985, 
+                    0.45232987397516, 
+                    0.45232987397516, 
+                    0.42432516783682733, 
+                    0.42432516783682733, 
+                    0.39808085821419115, 
+                    0.39808085821419115, 
+                    0.37341034344464996, 
+                    0.37341034344464996, 
+                    0.35153474950897373, 
+                    0.35153474950897373, 
+                    0.3318331171047887, 
+                    0.3318331171047887, 
+                    0.3142316721859607, 
+                    0.3142316721859607, 
+                    0.29815084281480253, 
+                    0.29815084281480253, 
+                    0.28343639809226306, 
+                    0.28343639809226306, 
+                    0.2703860644876219, 
+                    0.2703860644876219, 
+                    0.25695476697662745, 
+                    0.25695476697662745, 
+                    0.24643308816055795, 
+                    0.24643308816055795, 
+                    0.23214153449874833, 
+                    0.23214153449874833, 
+                    0.21412758619319436, 
+                    0.21412758619319436, 
+                    0.19328695877048185, 
+                    0.19328695877048185, 
+                    0.16995450358513317, 
+                    0.16995450358513317, 
+                    0.143893145087926, 
+                    0.143893145087926, 
+                    0.11377837662590888, 
+                    0.11377837662590888
+                ], 
+                0.20688116550445557
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996292994646929, 
+                    0.9996292994646929, 
+                    0.9982215701741299, 
+                    0.9982215701741299, 
+                    0.9934902093692256, 
+                    0.9934902093692256, 
+                    0.9682338660678697, 
+                    0.9682338660678697, 
+                    0.9383905732913179, 
+                    0.9383905732913179, 
+                    0.9048467655207146, 
+                    0.9048467655207146, 
+                    0.8675385371274954, 
+                    0.8675385371274954, 
+                    0.827849992629838, 
+                    0.827849992629838, 
+                    0.7859843957471855, 
+                    0.7859843957471855, 
+                    0.7448532263042837, 
+                    0.7448532263042837, 
+                    0.7041009462776733, 
+                    0.7041009462776733, 
+                    0.6633854685808643, 
+                    0.6633854685808643, 
+                    0.6253108721566398, 
+                    0.6253108721566398, 
+                    0.5874048009973611, 
+                    0.5874048009973611, 
+                    0.5509732302701933, 
+                    0.5509732302701933, 
+                    0.5164800529117597, 
+                    0.5164800529117597, 
+                    0.48060772338975133, 
+                    0.48060772338975133, 
+                    0.4503986049672067, 
+                    0.4503986049672067, 
+                    0.42059096686889497, 
+                    0.42059096686889497, 
+                    0.3954136162404707, 
+                    0.3954136162404707, 
+                    0.3705004806967492, 
+                    0.3705004806967492, 
+                    0.3488479743809799, 
+                    0.3488479743809799, 
+                    0.32929310949822344, 
+                    0.32929310949822344, 
+                    0.31182179921344233, 
+                    0.31182179921344233, 
+                    0.2958198397217823, 
+                    0.2958198397217823, 
+                    0.28100021765508065, 
+                    0.28100021765508065, 
+                    0.267296000194431, 
+                    0.267296000194431, 
+                    0.2555739292228392, 
+                    0.2555739292228392, 
+                    0.2448094696259649, 
+                    0.2448094696259649, 
+                    0.23008406145762964, 
+                    0.23008406145762964, 
+                    0.21179380484490576, 
+                    0.21179380484490576, 
+                    0.19082807016229325, 
+                    0.19082807016229325, 
+                    0.1675142706353425, 
+                    0.1675142706353425, 
+                    0.14163935878168243, 
+                    0.14163935878168243, 
+                    0.111994701841085, 
+                    0.111994701841085
+                ], 
+                0.19509828090667725
+            ], 
+            [
+                1.0077729225158691, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999524399264084, 
+                    0.9999524399264084, 
+                    0.9992258159443, 
+                    0.9992258159443, 
+                    0.9984956191115556, 
+                    0.9984956191115556, 
+                    0.9939283461003522, 
+                    0.9939283461003522, 
+                    0.9674861785031916, 
+                    0.9674861785031916, 
+                    0.9367157060098821, 
+                    0.9367157060098821, 
+                    0.9025353744272078, 
+                    0.9025353744272078, 
+                    0.8647970847499419, 
+                    0.8647970847499419, 
+                    0.8248525141828758, 
+                    0.8248525141828758, 
+                    0.7825870568758009, 
+                    0.7825870568758009, 
+                    0.7409627603028928, 
+                    0.7409627603028928, 
+                    0.7007102854252543, 
+                    0.7007102854252543, 
+                    0.6600052968475906, 
+                    0.6600052968475906, 
+                    0.6217502968078455, 
+                    0.6217502968078455, 
+                    0.58362144017405, 
+                    0.58362144017405, 
+                    0.5475857909293177, 
+                    0.5475857909293177, 
+                    0.51248706961431, 
+                    0.51248706961431, 
+                    0.47790542596709834, 
+                    0.47790542596709834, 
+                    0.4459602405043615, 
+                    0.4459602405043615, 
+                    0.41803126512509825, 
+                    0.41803126512509825, 
+                    0.39239097462330014, 
+                    0.39239097462330014, 
+                    0.367902349329303, 
+                    0.367902349329303, 
+                    0.34622712850917553, 
+                    0.34622712850917553, 
+                    0.3267638357177113, 
+                    0.3267638357177113, 
+                    0.3093849772083139, 
+                    0.3093849772083139, 
+                    0.29351482001382045, 
+                    0.29351482001382045, 
+                    0.27866151139207085, 
+                    0.27866151139207085, 
+                    0.2651742981880498, 
+                    0.2651742981880498, 
+                    0.2540967896320113, 
+                    0.2540967896320113, 
+                    0.2433278919272885, 
+                    0.2433278919272885, 
+                    0.2281687125392354, 
+                    0.2281687125392354, 
+                    0.20960020683529934, 
+                    0.20960020683529934, 
+                    0.1885041825299963, 
+                    0.1885041825299963, 
+                    0.16519615539704952, 
+                    0.16519615539704952, 
+                    0.13948158978010705, 
+                    0.13948158978010705, 
+                    0.11025659603637715, 
+                    0.11025659603637715
+                ], 
+                0.1836560219526291
+            ], 
+            [
+                1.0156062841415405, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993891280349015, 
+                    0.9993891280349015, 
+                    0.9981060529334965, 
+                    0.9981060529334965, 
+                    0.9920700942432295, 
+                    0.9920700942432295, 
+                    0.9651059966437194, 
+                    0.9651059966437194, 
+                    0.9349867433840603, 
+                    0.9349867433840603, 
+                    0.9001850263066143, 
+                    0.9001850263066143, 
+                    0.8621544486402358, 
+                    0.8621544486402358, 
+                    0.8218013797279122, 
+                    0.8218013797279122, 
+                    0.7793254465914533, 
+                    0.7793254465914533, 
+                    0.7376274968264248, 
+                    0.7376274968264248, 
+                    0.6969850890106656, 
+                    0.6969850890106656, 
+                    0.6564077317617977, 
+                    0.6564077317617977, 
+                    0.6182175680879876, 
+                    0.6182175680879876, 
+                    0.580116014441846, 
+                    0.580116014441846, 
+                    0.5441121235591732, 
+                    0.5441121235591732, 
+                    0.5091452649483643, 
+                    0.5091452649483643, 
+                    0.47480556754747416, 
+                    0.47480556754747416, 
+                    0.44330858309896126, 
+                    0.44330858309896126, 
+                    0.41507005413900766, 
+                    0.41507005413900766, 
+                    0.38937458411142883, 
+                    0.38937458411142883, 
+                    0.36510434634315486, 
+                    0.36510434634315486, 
+                    0.3435705223463739, 
+                    0.3435705223463739, 
+                    0.3242347546197884, 
+                    0.3242347546197884, 
+                    0.3070311871864825, 
+                    0.3070311871864825, 
+                    0.2918329017694334, 
+                    0.2918329017694334, 
+                    0.27636112768859944, 
+                    0.27636112768859944, 
+                    0.26304512620446097, 
+                    0.26304512620446097, 
+                    0.2518499375067806, 
+                    0.2518499375067806, 
+                    0.24166175585128638, 
+                    0.24166175585128638, 
+                    0.22697865555935404, 
+                    0.22697865555935404, 
+                    0.2087593036388913, 
+                    0.2087593036388913, 
+                    0.18794188248496094, 
+                    0.18794188248496094, 
+                    0.16486539877617853, 
+                    0.16486539877617853, 
+                    0.13934299263461888, 
+                    0.13934299263461888, 
+                    0.11026256426777498, 
+                    0.11026256426777498
+                ], 
+                0.17317317426204681
+            ], 
+            [
+                1.0235005617141724, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999965752002039, 
+                    0.9999965752002039, 
+                    0.9992769655948811, 
+                    0.9992769655948811, 
+                    0.9968339701827201, 
+                    0.9968339701827201, 
+                    0.9890125888274076, 
+                    0.9890125888274076, 
+                    0.9613556495922337, 
+                    0.9613556495922337, 
+                    0.9330365551939381, 
+                    0.9330365551939381, 
+                    0.8979760664448172, 
+                    0.8979760664448172, 
+                    0.8592998874214148, 
+                    0.8592998874214148, 
+                    0.8185325614933106, 
+                    0.8185325614933106, 
+                    0.7760084693851963, 
+                    0.7760084693851963, 
+                    0.7339958790199127, 
+                    0.7339958790199127, 
+                    0.6935617825704102, 
+                    0.6935617825704102, 
+                    0.6527833360353027, 
+                    0.6527833360353027, 
+                    0.614612723235402, 
+                    0.614612723235402, 
+                    0.5764914213127883, 
+                    0.5764914213127883, 
+                    0.540775621080862, 
+                    0.540775621080862, 
+                    0.505714734801369, 
+                    0.505714734801369, 
+                    0.47173029919375825, 
+                    0.47173029919375825, 
+                    0.43958054942843305, 
+                    0.43958054942843305, 
+                    0.41223652850973297, 
+                    0.41223652850973297, 
+                    0.3864856926790074, 
+                    0.3864856926790074, 
+                    0.3623921639998393, 
+                    0.3623921639998393, 
+                    0.34097313535816975, 
+                    0.34097313535816975, 
+                    0.3217565503170747, 
+                    0.3217565503170747, 
+                    0.3046089925881211, 
+                    0.3046089925881211, 
+                    0.2890386478040312, 
+                    0.2890386478040312, 
+                    0.2751320937852658, 
+                    0.2751320937852658, 
+                    0.26072285685675517, 
+                    0.26072285685675517, 
+                    0.24791379643680284, 
+                    0.24791379643680284, 
+                    0.23921651609678574, 
+                    0.23921651609678574, 
+                    0.22622130289373918, 
+                    0.22622130289373918, 
+                    0.20919182557386848, 
+                    0.20919182557386848, 
+                    0.18920896895999434, 
+                    0.18920896895999434, 
+                    0.16667269694562714, 
+                    0.16667269694562714, 
+                    0.14138124206427588, 
+                    0.14138124206427588, 
+                    0.11207084521032862, 
+                    0.11207084521032862
+                ], 
+                0.16279557347297668
+            ], 
+            [
+                1.0314562320709229, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999964230591781, 
+                    0.9999964230591781, 
+                    0.9996386996195196, 
+                    0.9996386996195196, 
+                    0.9974395386597626, 
+                    0.9974395386597626, 
+                    0.9893440853693032, 
+                    0.9893440853693032, 
+                    0.9606157699212678, 
+                    0.9606157699212678, 
+                    0.9311888330967552, 
+                    0.9311888330967552, 
+                    0.8956156640060937, 
+                    0.8956156640060937, 
+                    0.8565947313313711, 
+                    0.8565947313313711, 
+                    0.8154754180727676, 
+                    0.8154754180727676, 
+                    0.7726372775856527, 
+                    0.7726372775856527, 
+                    0.7305939389366641, 
+                    0.7305939389366641, 
+                    0.6898507810638768, 
+                    0.6898507810638768, 
+                    0.6490948529052485, 
+                    0.6490948529052485, 
+                    0.6110778107982681, 
+                    0.6110778107982681, 
+                    0.5730750962304252, 
+                    0.5730750962304252, 
+                    0.537235913264614, 
+                    0.537235913264614, 
+                    0.5021333654528535, 
+                    0.5021333654528535, 
+                    0.46841675772793157, 
+                    0.46841675772793157, 
+                    0.4363958887021621, 
+                    0.4363958887021621, 
+                    0.4093859523566091, 
+                    0.4093859523566091, 
+                    0.38374585524409194, 
+                    0.38374585524409194, 
+                    0.3597039470868938, 
+                    0.3597039470868938, 
+                    0.3384117760394701, 
+                    0.3384117760394701, 
+                    0.31929480039198455, 
+                    0.31929480039198455, 
+                    0.30225482703999407, 
+                    0.30225482703999407, 
+                    0.2867747359743274, 
+                    0.2867747359743274, 
+                    0.2736577254772765, 
+                    0.2736577254772765, 
+                    0.2586436407114099, 
+                    0.2586436407114099, 
+                    0.24721252393329943, 
+                    0.24721252393329943, 
+                    0.2383430760752131, 
+                    0.2383430760752131, 
+                    0.22436757069882746, 
+                    0.22436757069882746, 
+                    0.20667583199450235, 
+                    0.20667583199450235, 
+                    0.1863058121259589, 
+                    0.1863058121259589, 
+                    0.16363083544961593, 
+                    0.16363083544961593, 
+                    0.13847939551096763, 
+                    0.13847939551096763, 
+                    0.10975299694613358, 
+                    0.10975299694613358
+                ], 
+                0.1529199481010437
+            ], 
+            [
+                1.0394736528396606, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999749662788908, 
+                    0.9999749662788908, 
+                    0.9988147673702096, 
+                    0.9988147673702096, 
+                    0.9963049721801863, 
+                    0.9963049721801863, 
+                    0.985350162289516, 
+                    0.985350162289516, 
+                    0.9586245271445326, 
+                    0.9586245271445326, 
+                    0.9293153543579925, 
+                    0.9293153543579925, 
+                    0.8931312786678585, 
+                    0.8931312786678585, 
+                    0.8535126109369544, 
+                    0.8535126109369544, 
+                    0.8123809670234741, 
+                    0.8123809670234741, 
+                    0.769109192840832, 
+                    0.769109192840832, 
+                    0.7270233030328986, 
+                    0.7270233030328986, 
+                    0.686283273810823, 
+                    0.686283273810823, 
+                    0.6452853490717954, 
+                    0.6452853490717954, 
+                    0.6076785315868625, 
+                    0.6076785315868625, 
+                    0.569396498960031, 
+                    0.569396498960031, 
+                    0.5336151238784984, 
+                    0.5336151238784984, 
+                    0.498399515259227, 
+                    0.498399515259227, 
+                    0.46518717620608085, 
+                    0.46518717620608085, 
+                    0.4337199403645478, 
+                    0.4337199403645478, 
+                    0.4063434851488451, 
+                    0.4063434851488451, 
+                    0.38100603608246103, 
+                    0.38100603608246103, 
+                    0.35694127258140207, 
+                    0.35694127258140207, 
+                    0.3358172933427063, 
+                    0.3358172933427063, 
+                    0.3168219455570777, 
+                    0.3168219455570777, 
+                    0.2998964083657778, 
+                    0.2998964083657778, 
+                    0.2844514348566531, 
+                    0.2844514348566531, 
+                    0.2705258636629654, 
+                    0.2705258636629654, 
+                    0.25713446125677364, 
+                    0.25713446125677364, 
+                    0.24372791142507713, 
+                    0.24372791142507713, 
+                    0.23591406228492529, 
+                    0.23591406228492529, 
+                    0.2233417051807636, 
+                    0.2233417051807636, 
+                    0.20662398561835923, 
+                    0.20662398561835923, 
+                    0.1869474708050393, 
+                    0.1869474708050393, 
+                    0.16474284267377573, 
+                    0.16474284267377573, 
+                    0.13983496413313667, 
+                    0.13983496413313667, 
+                    0.11101979023208278, 
+                    0.11101979023208278
+                ], 
+                0.14331436157226562
+            ], 
+            [
+                1.0475534200668335, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992003225830276, 
+                    0.9992003225830276, 
+                    0.997095834066149, 
+                    0.997095834066149, 
+                    0.9882836272219989, 
+                    0.9882836272219989, 
+                    0.9595543086758125, 
+                    0.9595543086758125, 
+                    0.9271603780766848, 
+                    0.9271603780766848, 
+                    0.890494982764861, 
+                    0.890494982764861, 
+                    0.8507556756798689, 
+                    0.8507556756798689, 
+                    0.8091347826920526, 
+                    0.8091347826920526, 
+                    0.7658098080406226, 
+                    0.7658098080406226, 
+                    0.7236018475846628, 
+                    0.7236018475846628, 
+                    0.6827203353110163, 
+                    0.6827203353110163, 
+                    0.6419219083660703, 
+                    0.6419219083660703, 
+                    0.6038526482677834, 
+                    0.6038526482677834, 
+                    0.5660636513549347, 
+                    0.5660636513549347, 
+                    0.5301516093200405, 
+                    0.5301516093200405, 
+                    0.49610837159638205, 
+                    0.49610837159638205, 
+                    0.4612314153995243, 
+                    0.4612314153995243, 
+                    0.4311884546768352, 
+                    0.4311884546768352, 
+                    0.4028409015949658, 
+                    0.4028409015949658, 
+                    0.37829768771558125, 
+                    0.37829768771558125, 
+                    0.3543028056671752, 
+                    0.3543028056671752, 
+                    0.33331233821219436, 
+                    0.33331233821219436, 
+                    0.3144512009979581, 
+                    0.3144512009979581, 
+                    0.2976377104678258, 
+                    0.2976377104678258, 
+                    0.2822780907475612, 
+                    0.2822780907475612, 
+                    0.2680376424740201, 
+                    0.2680376424740201, 
+                    0.2548695779237915, 
+                    0.2548695779237915, 
+                    0.24618896241774482, 
+                    0.24618896241774482, 
+                    0.23653501838011826, 
+                    0.23653501838011826, 
+                    0.22166077129798334, 
+                    0.22166077129798334, 
+                    0.2033990845523869, 
+                    0.2033990845523869, 
+                    0.18274208170929856, 
+                    0.18274208170929856, 
+                    0.1600490810249027, 
+                    0.1600490810249027, 
+                    0.13519256008741667, 
+                    0.13519256008741667, 
+                    0.10726046002391072, 
+                    0.10726046002391072
+                ], 
+                0.13432936370372772
+            ], 
+            [
+                1.0556960105895996, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999983537770628, 
+                    0.9999983537770628, 
+                    0.9992846737580566, 
+                    0.9992846737580566, 
+                    0.9967313684207163, 
+                    0.9967313684207163, 
+                    0.9875982715751901, 
+                    0.9875982715751901, 
+                    0.9578654672987905, 
+                    0.9578654672987905, 
+                    0.9254344698260983, 
+                    0.9254344698260983, 
+                    0.8881289897419239, 
+                    0.8881289897419239, 
+                    0.8478653121521814, 
+                    0.8478653121521814, 
+                    0.8059770365399641, 
+                    0.8059770365399641, 
+                    0.7623973652968213, 
+                    0.7623973652968213, 
+                    0.7200276811122774, 
+                    0.7200276811122774, 
+                    0.6791169779866967, 
+                    0.6791169779866967, 
+                    0.6383093106235398, 
+                    0.6383093106235398, 
+                    0.600340552056798, 
+                    0.600340552056798, 
+                    0.5625199754354439, 
+                    0.5625199754354439, 
+                    0.5268830151224607, 
+                    0.5268830151224607, 
+                    0.49262107631402463, 
+                    0.49262107631402463, 
+                    0.45846927859108577, 
+                    0.45846927859108577, 
+                    0.42790317411313367, 
+                    0.42790317411313367, 
+                    0.40021663806386754, 
+                    0.40021663806386754, 
+                    0.37547515584638863, 
+                    0.37547515584638863, 
+                    0.3516417062152171, 
+                    0.3516417062152171, 
+                    0.3307811065716968, 
+                    0.3307811065716968, 
+                    0.312050751315317, 
+                    0.312050751315317, 
+                    0.2953475982176267, 
+                    0.2953475982176267, 
+                    0.2801174599752403, 
+                    0.2801174599752403, 
+                    0.2671505012291658, 
+                    0.2671505012291658, 
+                    0.2525401543700703, 
+                    0.2525401543700703, 
+                    0.24540447472166196, 
+                    0.24540447472166196, 
+                    0.23561218119740135, 
+                    0.23561218119740135, 
+                    0.22050443066300987, 
+                    0.22050443066300987, 
+                    0.2021168168010147, 
+                    0.2021168168010147, 
+                    0.18141904522336041, 
+                    0.18141904522336041, 
+                    0.15876535614998036, 
+                    0.15876535614998036, 
+                    0.1340391265691085, 
+                    0.1340391265691085, 
+                    0.10638451215535982, 
+                    0.10638451215535982
+                ], 
+                0.12589411437511444
+            ], 
+            [
+                1.0639019012451172, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991259753859205, 
+                    0.9991259753859205, 
+                    0.9965685260509042, 
+                    0.9965685260509042, 
+                    0.9876287765686672, 
+                    0.9876287765686672, 
+                    0.9567071051769609, 
+                    0.9567071051769609, 
+                    0.9231618956068414, 
+                    0.9231618956068414, 
+                    0.885412453866706, 
+                    0.885412453866706, 
+                    0.8449351462514287, 
+                    0.8449351462514287, 
+                    0.8027222715722181, 
+                    0.8027222715722181, 
+                    0.7589451153920267, 
+                    0.7589451153920267, 
+                    0.716511081373095, 
+                    0.716511081373095, 
+                    0.6755020696374302, 
+                    0.6755020696374302, 
+                    0.6347416841999762, 
+                    0.6347416841999762, 
+                    0.5966418756792079, 
+                    0.5966418756792079, 
+                    0.5591955733722905, 
+                    0.5591955733722905, 
+                    0.5231671801954161, 
+                    0.5231671801954161, 
+                    0.48955123805617395, 
+                    0.48955123805617395, 
+                    0.45480285418834, 
+                    0.45480285418834, 
+                    0.4250876953254347, 
+                    0.4250876953254347, 
+                    0.39708327183410397, 
+                    0.39708327183410397, 
+                    0.37271094963435597, 
+                    0.37271094963435597, 
+                    0.3490546143985329, 
+                    0.3490546143985329, 
+                    0.32829362881359897, 
+                    0.32829362881359897, 
+                    0.309632016462352, 
+                    0.309632016462352, 
+                    0.29305537887279404, 
+                    0.29305537887279404, 
+                    0.27794487440793053, 
+                    0.27794487440793053, 
+                    0.2646830619871986, 
+                    0.2646830619871986, 
+                    0.2504940964904774, 
+                    0.2504940964904774, 
+                    0.24514598179202657, 
+                    0.24514598179202657, 
+                    0.2346773419218017, 
+                    0.2346773419218017, 
+                    0.21914571516909148, 
+                    0.21914571516909148, 
+                    0.20051845290063539, 
+                    0.20051845290063539, 
+                    0.17971742566748833, 
+                    0.17971742566748833, 
+                    0.1570849679232076, 
+                    0.1570849679232076, 
+                    0.13252317164039465, 
+                    0.13252317164039465, 
+                    0.105259276037482, 
+                    0.105259276037482
+                ], 
+                0.11752227693796158
+            ], 
+            [
+                1.0721715688705444, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999843216487746, 
+                    0.9999843216487746, 
+                    0.9989992275355025, 
+                    0.9989992275355025, 
+                    0.9962555376210879, 
+                    0.9962555376210879, 
+                    0.9865171332487497, 
+                    0.9865171332487497, 
+                    0.9552394564671908, 
+                    0.9552394564671908, 
+                    0.9212765794565041, 
+                    0.9212765794565041, 
+                    0.8828867455820062, 
+                    0.8828867455820062, 
+                    0.8420145348450847, 
+                    0.8420145348450847, 
+                    0.7994622679982443, 
+                    0.7994622679982443, 
+                    0.7555439293252674, 
+                    0.7555439293252674, 
+                    0.712993850349405, 
+                    0.712993850349405, 
+                    0.6719492070460721, 
+                    0.6719492070460721, 
+                    0.631127415999421, 
+                    0.631127415999421, 
+                    0.5932283038120097, 
+                    0.5932283038120097, 
+                    0.5555005296428389, 
+                    0.5555005296428389, 
+                    0.5201803023493802, 
+                    0.5201803023493802, 
+                    0.485904332666428, 
+                    0.485904332666428, 
+                    0.4524126290050305, 
+                    0.4524126290050305, 
+                    0.42150659942474517, 
+                    0.42150659942474517, 
+                    0.3945861095565094, 
+                    0.3945861095565094, 
+                    0.3698989454759085, 
+                    0.3698989454759085, 
+                    0.34644380435117156, 
+                    0.34644380435117156, 
+                    0.3258114690302642, 
+                    0.3258114690302642, 
+                    0.30731965558420343, 
+                    0.30731965558420343, 
+                    0.29082643140726866, 
+                    0.29082643140726866, 
+                    0.2757228149276877, 
+                    0.2757228149276877, 
+                    0.2632733814353598, 
+                    0.2632733814353598, 
+                    0.24913591866124643, 
+                    0.24913591866124643, 
+                    0.2445987946771444, 
+                    0.2445987946771444, 
+                    0.23390266843035398, 
+                    0.23390266843035398, 
+                    0.21823563740544372, 
+                    0.21823563740544372, 
+                    0.19953488366371863, 
+                    0.19953488366371863, 
+                    0.1787209703002974, 
+                    0.1787209703002974, 
+                    0.1561388376586323, 
+                    0.1561388376586323, 
+                    0.1317033867949979, 
+                    0.1317033867949979, 
+                    0.10471575857527377, 
+                    0.10471575857527377
+                ], 
+                0.10991907119750977
+            ], 
+            [
+                1.0805054903030396, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999994426893832, 
+                    0.9999994426893832, 
+                    0.9988548154114018, 
+                    0.9988548154114018, 
+                    0.9955439980674841, 
+                    0.9955439980674841, 
+                    0.984025642590295, 
+                    0.984025642590295, 
+                    0.9534460854957082, 
+                    0.9534460854957082, 
+                    0.9189635012586014, 
+                    0.9189635012586014, 
+                    0.8802314982828493, 
+                    0.8802314982828493, 
+                    0.8389773717799522, 
+                    0.8389773717799522, 
+                    0.7962160690163579, 
+                    0.7962160690163579, 
+                    0.7520458341696882, 
+                    0.7520458341696882, 
+                    0.7094115188356462, 
+                    0.7094115188356462, 
+                    0.6683053360168921, 
+                    0.6683053360168921, 
+                    0.6275080145137616, 
+                    0.6275080145137616, 
+                    0.5895653007752912, 
+                    0.5895653007752912, 
+                    0.552060385216055, 
+                    0.552060385216055, 
+                    0.5165767292261496, 
+                    0.5165767292261496, 
+                    0.4827174190209936, 
+                    0.4827174190209936, 
+                    0.44883863306820404, 
+                    0.44883863306820404, 
+                    0.41872578488997414, 
+                    0.41872578488997414, 
+                    0.3914948605728734, 
+                    0.3914948605728734, 
+                    0.3672219538370335, 
+                    0.3672219538370335, 
+                    0.3438565868750171, 
+                    0.3438565868750171, 
+                    0.3233378218236786, 
+                    0.3233378218236786, 
+                    0.3049459878221469, 
+                    0.3049459878221469, 
+                    0.28855189959203775, 
+                    0.28855189959203775, 
+                    0.2736502487698088, 
+                    0.2736502487698088, 
+                    0.2606332855523064, 
+                    0.2606332855523064, 
+                    0.2471131808372927, 
+                    0.2471131808372927, 
+                    0.24264909868583587, 
+                    0.24264909868583587, 
+                    0.2325460018291918, 
+                    0.2325460018291918, 
+                    0.21723650027611777, 
+                    0.21723650027611777, 
+                    0.1987975407321533, 
+                    0.1987975407321533, 
+                    0.17819868030077649, 
+                    0.17819868030077649, 
+                    0.15580302035180843, 
+                    0.15580302035180843, 
+                    0.13153133803294217, 
+                    0.13153133803294217, 
+                    0.1047075002015303, 
+                    0.1047075002015303
+                ], 
+                0.10234986245632172
+            ]
+        ]
+    }, 
+    {
+        "block_size": 77, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9264062643051147, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9765105450238522, 
+                    0.9765105450238522, 
+                    0.9569601598676173, 
+                    0.9569601598676173, 
+                    0.9304994890358507, 
+                    0.9304994890358507, 
+                    0.9002237598687521, 
+                    0.9002237598687521, 
+                    0.8660736438157457, 
+                    0.8660736438157457, 
+                    0.828483810720887, 
+                    0.828483810720887, 
+                    0.7907707493639098, 
+                    0.7907707493639098, 
+                    0.7517618305045735, 
+                    0.7517618305045735, 
+                    0.7117131650868188, 
+                    0.7117131650868188, 
+                    0.6721969132143478, 
+                    0.6721969132143478, 
+                    0.6339942277774162, 
+                    0.6339942277774162, 
+                    0.5973709550213897, 
+                    0.5973709550213897, 
+                    0.5621171066413361, 
+                    0.5621171066413361, 
+                    0.5287005357730261, 
+                    0.5287005357730261, 
+                    0.496386833201744, 
+                    0.496386833201744, 
+                    0.4660982044716397, 
+                    0.4660982044716397, 
+                    0.4374440039055129, 
+                    0.4374440039055129, 
+                    0.41198467886090284, 
+                    0.41198467886090284, 
+                    0.3886998403250603, 
+                    0.3886998403250603, 
+                    0.3675328939694931, 
+                    0.3675328939694931, 
+                    0.3488708558441769, 
+                    0.3488708558441769, 
+                    0.33133318343401014, 
+                    0.33133318343401014, 
+                    0.3160385181113348, 
+                    0.3160385181113348, 
+                    0.30288964596704127, 
+                    0.30288964596704127, 
+                    0.29027535394366866, 
+                    0.29027535394366866, 
+                    0.27617850701853214, 
+                    0.27617850701853214, 
+                    0.2585948460668473, 
+                    0.2585948460668473, 
+                    0.23781514911611343, 
+                    0.23781514911611343, 
+                    0.2143759023110993, 
+                    0.2143759023110993, 
+                    0.18836436097928136, 
+                    0.18836436097928136, 
+                    0.1593023567739082, 
+                    0.1593023567739082, 
+                    0.12533631892389846, 
+                    0.12533631892389846
+                ], 
+                0.39424973726272583
+            ], 
+            [
+                0.9335150718688965, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999920179510011, 
+                    0.9999920179510011, 
+                    0.9999515266156891, 
+                    0.9999515266156891, 
+                    0.9986188985954237, 
+                    0.9986188985954237, 
+                    0.9761186883682024, 
+                    0.9761186883682024, 
+                    0.9555651926750559, 
+                    0.9555651926750559, 
+                    0.9286863564138186, 
+                    0.9286863564138186, 
+                    0.8981369701825568, 
+                    0.8981369701825568, 
+                    0.8635197654778096, 
+                    0.8635197654778096, 
+                    0.8254592527867022, 
+                    0.8254592527867022, 
+                    0.7875358734201569, 
+                    0.7875358734201569, 
+                    0.7483630613916741, 
+                    0.7483630613916741, 
+                    0.7081036452375129, 
+                    0.7081036452375129, 
+                    0.6685881018954524, 
+                    0.6685881018954524, 
+                    0.6305741474293389, 
+                    0.6305741474293389, 
+                    0.5935497711196908, 
+                    0.5935497711196908, 
+                    0.559033455226553, 
+                    0.559033455226553, 
+                    0.5245955886618234, 
+                    0.5245955886618234, 
+                    0.4936673182464287, 
+                    0.4936673182464287, 
+                    0.4621787508656763, 
+                    0.4621787508656763, 
+                    0.43468176737175074, 
+                    0.43468176737175074, 
+                    0.40880109213674476, 
+                    0.40880109213674476, 
+                    0.3857913340892701, 
+                    0.3857913340892701, 
+                    0.36470953098244513, 
+                    0.36470953098244513, 
+                    0.34615540734962197, 
+                    0.34615540734962197, 
+                    0.32872465085599445, 
+                    0.32872465085599445, 
+                    0.3135266583520965, 
+                    0.3135266583520965, 
+                    0.30046628878891285, 
+                    0.30046628878891285, 
+                    0.28788657898106784, 
+                    0.28788657898106784, 
+                    0.27388720209438805, 
+                    0.27388720209438805, 
+                    0.25645411462731627, 
+                    0.25645411462731627, 
+                    0.2358491234482766, 
+                    0.2358491234482766, 
+                    0.21260752526809287, 
+                    0.21260752526809287, 
+                    0.1868251559890897, 
+                    0.1868251559890897, 
+                    0.15804388795488047, 
+                    0.15804388795488047, 
+                    0.12446704311531818, 
+                    0.12446704311531818
+                ], 
+                0.3777891993522644
+            ], 
+            [
+                0.9406784176826477, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999485113318264, 
+                    0.9999485113318264, 
+                    0.9998083136137408, 
+                    0.9998083136137408, 
+                    0.9993084787231206, 
+                    0.9993084787231206, 
+                    0.9969530651356363, 
+                    0.9969530651356363, 
+                    0.9752290826343876, 
+                    0.9752290826343876, 
+                    0.9540164622075914, 
+                    0.9540164622075914, 
+                    0.9266474240567536, 
+                    0.9266474240567536, 
+                    0.8954491728792833, 
+                    0.8954491728792833, 
+                    0.8607415668949691, 
+                    0.8607415668949691, 
+                    0.8224477487162998, 
+                    0.8224477487162998, 
+                    0.7845202956598368, 
+                    0.7845202956598368, 
+                    0.7449669154322295, 
+                    0.7449669154322295, 
+                    0.7047207993682078, 
+                    0.7047207993682078, 
+                    0.6650989658541286, 
+                    0.6650989658541286, 
+                    0.6267933627453852, 
+                    0.6267933627453852, 
+                    0.5902879430532952, 
+                    0.5902879430532952, 
+                    0.5548405900053777, 
+                    0.5548405900053777, 
+                    0.5220891167941678, 
+                    0.5220891167941678, 
+                    0.4892882421959054, 
+                    0.4892882421959054, 
+                    0.4598342342770443, 
+                    0.4598342342770443, 
+                    0.4309608159972477, 
+                    0.4309608159972477, 
+                    0.4059668171100672, 
+                    0.4059668171100672, 
+                    0.38283359473656636, 
+                    0.38283359473656636, 
+                    0.3619107617331549, 
+                    0.3619107617331549, 
+                    0.34346620833686714, 
+                    0.34346620833686714, 
+                    0.3261387318925529, 
+                    0.3261387318925529, 
+                    0.31104265769394307, 
+                    0.31104265769394307, 
+                    0.29807963810670257, 
+                    0.29807963810670257, 
+                    0.2855434670742893, 
+                    0.2855434670742893, 
+                    0.27144789570006733, 
+                    0.27144789570006733, 
+                    0.25393844525123177, 
+                    0.25393844525123177, 
+                    0.23333503251053234, 
+                    0.23333503251053234, 
+                    0.21016705081895565, 
+                    0.21016705081895565, 
+                    0.1845295565796903, 
+                    0.1845295565796903, 
+                    0.15598033645230813, 
+                    0.15598033645230813, 
+                    0.12279126768878211, 
+                    0.12279126768878211
+                ], 
+                0.3615248501300812
+            ], 
+            [
+                0.9478967189788818, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999821383599156, 
+                    0.999821383599156, 
+                    0.999808652228329, 
+                    0.999808652228329, 
+                    0.9952275592968914, 
+                    0.9952275592968914, 
+                    0.9748358332276312, 
+                    0.9748358332276312, 
+                    0.9528140023896903, 
+                    0.9528140023896903, 
+                    0.924319226446858, 
+                    0.924319226446858, 
+                    0.8931265061170235, 
+                    0.8931265061170235, 
+                    0.8582309847422873, 
+                    0.8582309847422873, 
+                    0.8197381352744698, 
+                    0.8197381352744698, 
+                    0.7811290860345569, 
+                    0.7811290860345569, 
+                    0.741522676003623, 
+                    0.741522676003623, 
+                    0.7011133576245505, 
+                    0.7011133576245505, 
+                    0.6615225069317646, 
+                    0.6615225069317646, 
+                    0.6232196243627147, 
+                    0.6232196243627147, 
+                    0.5866632183268758, 
+                    0.5866632183268758, 
+                    0.5515078543951168, 
+                    0.5515078543951168, 
+                    0.5184196056112319, 
+                    0.5184196056112319, 
+                    0.48621673683481975, 
+                    0.48621673683481975, 
+                    0.45638703645315115, 
+                    0.45638703645315115, 
+                    0.4279749085881799, 
+                    0.4279749085881799, 
+                    0.40291735548687707, 
+                    0.40291735548687707, 
+                    0.3799587147703638, 
+                    0.3799587147703638, 
+                    0.3591348484714841, 
+                    0.3591348484714841, 
+                    0.34078603611752784, 
+                    0.34078603611752784, 
+                    0.3235493433680966, 
+                    0.3235493433680966, 
+                    0.3088716693986418, 
+                    0.3088716693986418, 
+                    0.29555632861268294, 
+                    0.29555632861268294, 
+                    0.2836040592968498, 
+                    0.2836040592968498, 
+                    0.26994775722999326, 
+                    0.26994775722999326, 
+                    0.25265350437663, 
+                    0.25265350437663, 
+                    0.23221206049905113, 
+                    0.23221206049905113, 
+                    0.20917612119133133, 
+                    0.20917612119133133, 
+                    0.18363739428794076, 
+                    0.18363739428794076, 
+                    0.15513575599093035, 
+                    0.15513575599093035, 
+                    0.12189957562020691, 
+                    0.12189957562020691
+                ], 
+                0.3458295464515686
+            ], 
+            [
+                0.9551704525947571, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996351976220618, 
+                    0.9996351976220618, 
+                    0.9990047085553941, 
+                    0.9990047085553941, 
+                    0.9938450176155181, 
+                    0.9938450176155181, 
+                    0.9731519973056164, 
+                    0.9731519973056164, 
+                    0.9511436502396745, 
+                    0.9511436502396745, 
+                    0.9229389949651403, 
+                    0.9229389949651403, 
+                    0.8907723200898249, 
+                    0.8907723200898249, 
+                    0.8552343808605061, 
+                    0.8552343808605061, 
+                    0.8164404706136572, 
+                    0.8164404706136572, 
+                    0.7777552794331151, 
+                    0.7777552794331151, 
+                    0.7380765186796968, 
+                    0.7380765186796968, 
+                    0.69760616087057, 
+                    0.69760616087057, 
+                    0.657908904932086, 
+                    0.657908904932086, 
+                    0.6195930040152892, 
+                    0.6195930040152892, 
+                    0.5830938661858152, 
+                    0.5830938661858152, 
+                    0.547993831774863, 
+                    0.547993831774863, 
+                    0.5149546144685783, 
+                    0.5149546144685783, 
+                    0.48293797776003994, 
+                    0.48293797776003994, 
+                    0.45307724385996373, 
+                    0.45307724385996373, 
+                    0.4249141404161464, 
+                    0.4249141404161464, 
+                    0.3999134392835103, 
+                    0.3999134392835103, 
+                    0.37709283457318593, 
+                    0.37709283457318593, 
+                    0.35638284932151654, 
+                    0.35638284932151654, 
+                    0.3381535163210083, 
+                    0.3381535163210083, 
+                    0.3210427307398812, 
+                    0.3210427307398812, 
+                    0.30614268550272994, 
+                    0.30614268550272994, 
+                    0.29337937644168044, 
+                    0.29337937644168044, 
+                    0.2810379326774679, 
+                    0.2810379326774679, 
+                    0.26690913438583685, 
+                    0.26690913438583685, 
+                    0.24935473509451622, 
+                    0.24935473509451622, 
+                    0.22881243673965845, 
+                    0.22881243673965845, 
+                    0.20581424634440693, 
+                    0.20581424634440693, 
+                    0.18045734173333167, 
+                    0.18045734173333167, 
+                    0.1523261599832388, 
+                    0.1523261599832388, 
+                    0.11980734257659181, 
+                    0.11980734257659181
+                ], 
+                0.329943984746933
+            ], 
+            [
+                0.9624999761581421, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999460368653231, 
+                    0.9999460368653231, 
+                    0.9997437404232764, 
+                    0.9997437404232764, 
+                    0.998791949202498, 
+                    0.998791949202498, 
+                    0.9927480802399669, 
+                    0.9927480802399669, 
+                    0.9725235334062593, 
+                    0.9725235334062593, 
+                    0.949777450107677, 
+                    0.949777450107677, 
+                    0.9208066982748824, 
+                    0.9208066982748824, 
+                    0.8883193777315046, 
+                    0.8883193777315046, 
+                    0.8524210775882513, 
+                    0.8524210775882513, 
+                    0.8133486024464774, 
+                    0.8133486024464774, 
+                    0.7745614412806345, 
+                    0.7745614412806345, 
+                    0.7346536496708898, 
+                    0.7346536496708898, 
+                    0.6940604279747459, 
+                    0.6940604279747459, 
+                    0.6543387881425731, 
+                    0.6543387881425731, 
+                    0.6160113778927573, 
+                    0.6160113778927573, 
+                    0.5796033563282371, 
+                    0.5796033563282371, 
+                    0.5444531867804354, 
+                    0.5444531867804354, 
+                    0.511602676222492, 
+                    0.511602676222492, 
+                    0.4795879167623494, 
+                    0.4795879167623494, 
+                    0.4499053051375167, 
+                    0.4499053051375167, 
+                    0.421829772711837, 
+                    0.421829772711837, 
+                    0.39695918301235844, 
+                    0.39695918301235844, 
+                    0.3742496089544442, 
+                    0.3742496089544442, 
+                    0.3536546200408083, 
+                    0.3536546200408083, 
+                    0.33553386326809, 
+                    0.33553386326809, 
+                    0.3185295285848614, 
+                    0.3185295285848614, 
+                    0.30372521815686476, 
+                    0.30372521815686476, 
+                    0.29106265571282325, 
+                    0.29106265571282325, 
+                    0.2788712392854096, 
+                    0.2788712392854096, 
+                    0.26489276418652946, 
+                    0.26489276418652946, 
+                    0.24747060555548928, 
+                    0.24747060555548928, 
+                    0.22706667298136965, 
+                    0.22706667298136965, 
+                    0.20422675068098833, 
+                    0.20422675068098833, 
+                    0.17905784924255197, 
+                    0.17905784924255197, 
+                    0.1511617708980905, 
+                    0.1511617708980905, 
+                    0.11897525143531235, 
+                    0.11897525143531235
+                ], 
+                0.314771443605423
+            ], 
+            [
+                0.9698857665061951, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999304667430227, 
+                    0.9999304667430227, 
+                    0.9996963026739688, 
+                    0.9996963026739688, 
+                    0.9991863855946512, 
+                    0.9991863855946512, 
+                    0.9914212012485065, 
+                    0.9914212012485065, 
+                    0.9716970976208578, 
+                    0.9716970976208578, 
+                    0.9480858525657943, 
+                    0.9480858525657943, 
+                    0.9187178826256827, 
+                    0.9187178826256827, 
+                    0.8858380805197474, 
+                    0.8858380805197474, 
+                    0.8495654085721097, 
+                    0.8495654085721097, 
+                    0.8101931966549026, 
+                    0.8101931966549026, 
+                    0.7712139664438036, 
+                    0.7712139664438036, 
+                    0.7311982160359031, 
+                    0.7311982160359031, 
+                    0.6905444155790078, 
+                    0.6905444155790078, 
+                    0.6507245088888014, 
+                    0.6507245088888014, 
+                    0.6125953502568701, 
+                    0.6125953502568701, 
+                    0.5757587073058509, 
+                    0.5757587073058509, 
+                    0.5414539909440472, 
+                    0.5414539909440472, 
+                    0.5076377263014514, 
+                    0.5076377263014514, 
+                    0.4768213827594483, 
+                    0.4768213827594483, 
+                    0.4462973380967431, 
+                    0.4462973380967431, 
+                    0.41901091923912365, 
+                    0.41901091923912365, 
+                    0.3939416067230615, 
+                    0.3939416067230615, 
+                    0.3714467220996027, 
+                    0.3714467220996027, 
+                    0.3509524648115899, 
+                    0.3509524648115899, 
+                    0.3329415918904196, 
+                    0.3329415918904196, 
+                    0.31604175389980926, 
+                    0.31604175389980926, 
+                    0.30133785161628607, 
+                    0.30133785161628607, 
+                    0.288826690532865, 
+                    0.288826690532865, 
+                    0.27673215217033875, 
+                    0.27673215217033875, 
+                    0.26254597059008655, 
+                    0.26254597059008655, 
+                    0.24491510720633963, 
+                    0.24491510720633963, 
+                    0.2244082436806285, 
+                    0.2244082436806285, 
+                    0.20156557428316435, 
+                    0.20156557428316435, 
+                    0.17649232654730757, 
+                    0.17649232654730757, 
+                    0.1488101765247569, 
+                    0.1488101765247569, 
+                    0.11704584518472001, 
+                    0.11704584518472001
+                ], 
+                0.29977068305015564
+            ], 
+            [
+                0.9773282408714294, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999859689194713, 
+                    0.9999859689194713, 
+                    0.996817118803622, 
+                    0.996817118803622, 
+                    0.9888250253133289, 
+                    0.9888250253133289, 
+                    0.9707940415702752, 
+                    0.9707940415702752, 
+                    0.9471938875542513, 
+                    0.9471938875542513, 
+                    0.9162411803565648, 
+                    0.9162411803565648, 
+                    0.8832487140758665, 
+                    0.8832487140758665, 
+                    0.8471283167069146, 
+                    0.8471283167069146, 
+                    0.8071405998144969, 
+                    0.8071405998144969, 
+                    0.7681440975157282, 
+                    0.7681440975157282, 
+                    0.7278999674271516, 
+                    0.7278999674271516, 
+                    0.6868269910957132, 
+                    0.6868269910957132, 
+                    0.6470666869844229, 
+                    0.6470666869844229, 
+                    0.6089343250669467, 
+                    0.6089343250669467, 
+                    0.5723969422341916, 
+                    0.5723969422341916, 
+                    0.5377546187098502, 
+                    0.5377546187098502, 
+                    0.5045185777296816, 
+                    0.5045185777296816, 
+                    0.4732868058010447, 
+                    0.4732868058010447, 
+                    0.44332450277931046, 
+                    0.44332450277931046, 
+                    0.4158550777333956, 
+                    0.4158550777333956, 
+                    0.39105072695450055, 
+                    0.39105072695450055, 
+                    0.368632780123143, 
+                    0.368632780123143, 
+                    0.348258156415379, 
+                    0.348258156415379, 
+                    0.33035645731128205, 
+                    0.33035645731128205, 
+                    0.3135642411623262, 
+                    0.3135642411623262, 
+                    0.2988789938715521, 
+                    0.2988789938715521, 
+                    0.2852023826335739, 
+                    0.2852023826335739, 
+                    0.27460898796975064, 
+                    0.27460898796975064, 
+                    0.2630617945163644, 
+                    0.2630617945163644, 
+                    0.24750057060369451, 
+                    0.24750057060369451, 
+                    0.22843863435086983, 
+                    0.22843863435086983, 
+                    0.2065538526516068, 
+                    0.2065538526516068, 
+                    0.18199950464623305, 
+                    0.18199950464623305, 
+                    0.15434104878834926, 
+                    0.15434104878834926, 
+                    0.12179883561811018, 
+                    0.12179883561811018
+                ], 
+                0.2859105169773102
+            ], 
+            [
+                0.9848278164863586, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999949163025145, 
+                    0.9999949163025145, 
+                    0.9999949163025145, 
+                    0.9999949163025145, 
+                    0.9999949163025145, 
+                    0.9999949163025145, 
+                    0.9850747721228714, 
+                    0.9850747721228714, 
+                    0.9716279048502542, 
+                    0.9716279048502542, 
+                    0.9483387998760767, 
+                    0.9483387998760767, 
+                    0.9140942586558316, 
+                    0.9140942586558316, 
+                    0.8802909488767837, 
+                    0.8802909488767837, 
+                    0.843283787176638, 
+                    0.843283787176638, 
+                    0.8033801210921531, 
+                    0.8033801210921531, 
+                    0.764326885554571, 
+                    0.764326885554571, 
+                    0.7241149975396947, 
+                    0.7241149975396947, 
+                    0.6832387566821851, 
+                    0.6832387566821851, 
+                    0.6434922909855817, 
+                    0.6434922909855817, 
+                    0.6053326565974406, 
+                    0.6053326565974406, 
+                    0.5688482478529211, 
+                    0.5688482478529211, 
+                    0.5342378753133924, 
+                    0.5342378753133924, 
+                    0.501147569024608, 
+                    0.501147569024608, 
+                    0.47002203924320457, 
+                    0.47002203924320457, 
+                    0.4401632109021533, 
+                    0.4401632109021533, 
+                    0.4128158945868796, 
+                    0.4128158945868796, 
+                    0.38813646458456785, 
+                    0.38813646458456785, 
+                    0.3658469585466994, 
+                    0.3658469585466994, 
+                    0.3455942956345765, 
+                    0.3455942956345765, 
+                    0.32778717600959906, 
+                    0.32778717600959906, 
+                    0.3111097290527836, 
+                    0.3111097290527836, 
+                    0.2964831926204196, 
+                    0.2964831926204196, 
+                    0.28133189721459156, 
+                    0.28133189721459156, 
+                    0.2718740944692297, 
+                    0.2718740944692297, 
+                    0.2642371483546353, 
+                    0.2642371483546353, 
+                    0.2519561041152075, 
+                    0.2519561041152075, 
+                    0.23517675706614333, 
+                    0.23517675706614333, 
+                    0.21479762962521431, 
+                    0.21479762962521431, 
+                    0.19105427137383282, 
+                    0.19105427137383282, 
+                    0.16343074234195856, 
+                    0.16343074234195856, 
+                    0.12965879045210082, 
+                    0.12965879045210082
+                ], 
+                0.2720670998096466
+            ], 
+            [
+                0.9923849105834961, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9975645460245011, 
+                    0.9975645460245011, 
+                    0.9854559757584217, 
+                    0.9854559757584217, 
+                    0.968313216956304, 
+                    0.968313216956304, 
+                    0.9436704531721448, 
+                    0.9436704531721448, 
+                    0.9126494579215821, 
+                    0.9126494579215821, 
+                    0.8784623731252652, 
+                    0.8784623731252652, 
+                    0.8408416460119763, 
+                    0.8408416460119763, 
+                    0.8006038317886806, 
+                    0.8006038317886806, 
+                    0.7609502066601158, 
+                    0.7609502066601158, 
+                    0.7206040599465515, 
+                    0.7206040599465515, 
+                    0.6797541277407467, 
+                    0.6797541277407467, 
+                    0.6399212005109085, 
+                    0.6399212005109085, 
+                    0.6018754675920586, 
+                    0.6018754675920586, 
+                    0.5652258601123891, 
+                    0.5652258601123891, 
+                    0.5309673632512132, 
+                    0.5309673632512132, 
+                    0.49768196107192597, 
+                    0.49768196107192597, 
+                    0.46690658972610655, 
+                    0.46690658972610655, 
+                    0.4369790759046526, 
+                    0.4369790759046526, 
+                    0.4098854129656179, 
+                    0.4098854129656179, 
+                    0.38527486484143564, 
+                    0.38527486484143564, 
+                    0.36310253835591894, 
+                    0.36310253835591894, 
+                    0.34295863061918086, 
+                    0.34295863061918086, 
+                    0.3252641013907987, 
+                    0.3252641013907987, 
+                    0.30869192297961556, 
+                    0.30869192297961556, 
+                    0.2943700871452726, 
+                    0.2943700871452726, 
+                    0.2822425153427311, 
+                    0.2822425153427311, 
+                    0.269664058959841, 
+                    0.269664058959841, 
+                    0.26011475337128076, 
+                    0.26011475337128076, 
+                    0.2467182468274559, 
+                    0.2467182468274559, 
+                    0.22921849946150238, 
+                    0.22921849946150238, 
+                    0.20844773058142055, 
+                    0.20844773058142055, 
+                    0.18462950288837127, 
+                    0.18462950288837127, 
+                    0.15730637440204218, 
+                    0.15730637440204218, 
+                    0.12449520849228062, 
+                    0.12449520849228062
+                ], 
+                0.25849583745002747
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999979525768316, 
+                    0.999979525768316, 
+                    0.9997847553695458, 
+                    0.9997847553695458, 
+                    0.9975666765858332, 
+                    0.9975666765858332, 
+                    0.9858015575911142, 
+                    0.9858015575911142, 
+                    0.9675892533594176, 
+                    0.9675892533594176, 
+                    0.9416546338232723, 
+                    0.9416546338232723, 
+                    0.9102763461589851, 
+                    0.9102763461589851, 
+                    0.8756261359127734, 
+                    0.8756261359127734, 
+                    0.8381218741413581, 
+                    0.8381218741413581, 
+                    0.797344991818883, 
+                    0.797344991818883, 
+                    0.7580417433718376, 
+                    0.7580417433718376, 
+                    0.7169850042778751, 
+                    0.7169850042778751, 
+                    0.6762366073504346, 
+                    0.6762366073504346, 
+                    0.6363000409209638, 
+                    0.6363000409209638, 
+                    0.5982536746333493, 
+                    0.5982536746333493, 
+                    0.5619216777819931, 
+                    0.5619216777819931, 
+                    0.5275763246334284, 
+                    0.5275763246334284, 
+                    0.49455101828472375, 
+                    0.49455101828472375, 
+                    0.4636022829412435, 
+                    0.4636022829412435, 
+                    0.43395969033833964, 
+                    0.43395969033833964, 
+                    0.40683871573640795, 
+                    0.40683871573640795, 
+                    0.3823847786096972, 
+                    0.3823847786096972, 
+                    0.3603472189385282, 
+                    0.3603472189385282, 
+                    0.34033988003028937, 
+                    0.34033988003028937, 
+                    0.3227871549712254, 
+                    0.3227871549712254, 
+                    0.30632989617233375, 
+                    0.30632989617233375, 
+                    0.29175107775742604, 
+                    0.29175107775742604, 
+                    0.27760762294569474, 
+                    0.27760762294569474, 
+                    0.2674466495672827, 
+                    0.2674466495672827, 
+                    0.25676825596396247, 
+                    0.25676825596396247, 
+                    0.2417836235716164, 
+                    0.2417836235716164, 
+                    0.22322712422442162, 
+                    0.22322712422442162, 
+                    0.20184280324390722, 
+                    0.20184280324390722, 
+                    0.17780232109008764, 
+                    0.17780232109008764, 
+                    0.15068763506413077, 
+                    0.15068763506413077, 
+                    0.11880032123595251, 
+                    0.11880032123595251
+                ], 
+                0.24457135796546936
+            ], 
+            [
+                1.0076735019683838, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994666781357984, 
+                    0.9994666781357984, 
+                    0.9982644625912114, 
+                    0.9982644625912114, 
+                    0.9937962137149031, 
+                    0.9937962137149031, 
+                    0.9705074526193231, 
+                    0.9705074526193231, 
+                    0.9403865673441013, 
+                    0.9403865673441013, 
+                    0.907984297247604, 
+                    0.907984297247604, 
+                    0.8730121620222363, 
+                    0.8730121620222363, 
+                    0.8350468027700005, 
+                    0.8350468027700005, 
+                    0.7943109728407898, 
+                    0.7943109728407898, 
+                    0.7544558572629362, 
+                    0.7544558572629362, 
+                    0.7138060747629918, 
+                    0.7138060747629918, 
+                    0.6727632500498772, 
+                    0.6727632500498772, 
+                    0.6327317180520711, 
+                    0.6327317180520711, 
+                    0.5949121862779789, 
+                    0.5949121862779789, 
+                    0.5580111373454959, 
+                    0.5580111373454959, 
+                    0.5244255358095723, 
+                    0.5244255358095723, 
+                    0.49081566247784153, 
+                    0.49081566247784153, 
+                    0.46063909807717773, 
+                    0.46063909807717773, 
+                    0.43073099035611706, 
+                    0.43073099035611706, 
+                    0.40400869198695294, 
+                    0.40400869198695294, 
+                    0.37960335699082726, 
+                    0.37960335699082726, 
+                    0.35769047198675463, 
+                    0.35769047198675463, 
+                    0.3377795316914312, 
+                    0.3377795316914312, 
+                    0.32030725580544384, 
+                    0.32030725580544384, 
+                    0.3039298305752806, 
+                    0.3039298305752806, 
+                    0.28970766233361134, 
+                    0.28970766233361134, 
+                    0.27837941795876847, 
+                    0.27837941795876847, 
+                    0.26725362673499936, 
+                    0.26725362673499936, 
+                    0.2529966755429137, 
+                    0.2529966755429137, 
+                    0.23521477195692755, 
+                    0.23521477195692755, 
+                    0.21479620753959008, 
+                    0.21479620753959008, 
+                    0.19230963379694666, 
+                    0.19230963379694666, 
+                    0.16788296518591622, 
+                    0.16788296518591622, 
+                    0.14122526167482527, 
+                    0.14122526167482527, 
+                    0.11117028054818627, 
+                    0.11117028054818627
+                ], 
+                0.2312561571598053
+            ], 
+            [
+                1.0154058933258057, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999991375302148, 
+                    0.999991375302148, 
+                    0.9993719334634167, 
+                    0.9993719334634167, 
+                    0.9979827969175334, 
+                    0.9979827969175334, 
+                    0.9932299584750398, 
+                    0.9932299584750398, 
+                    0.9692961820924315, 
+                    0.9692961820924315, 
+                    0.9386473517597185, 
+                    0.9386473517597185, 
+                    0.9057530674222953, 
+                    0.9057530674222953, 
+                    0.8703596518730149, 
+                    0.8703596518730149, 
+                    0.8320540020814454, 
+                    0.8320540020814454, 
+                    0.7910394030653882, 
+                    0.7910394030653882, 
+                    0.7510514742095057, 
+                    0.7510514742095057, 
+                    0.7103068589227081, 
+                    0.7103068589227081, 
+                    0.6691429903959105, 
+                    0.6691429903959105, 
+                    0.6293671991586529, 
+                    0.6293671991586529, 
+                    0.5908710965144399, 
+                    0.5908710965144399, 
+                    0.5553180607968753, 
+                    0.5553180607968753, 
+                    0.5201169418008407, 
+                    0.5201169418008407, 
+                    0.488353164819029, 
+                    0.488353164819029, 
+                    0.4568466887245628, 
+                    0.4568466887245628, 
+                    0.42805391395510284, 
+                    0.42805391395510284, 
+                    0.4008975528202218, 
+                    0.4008975528202218, 
+                    0.3768475591795673, 
+                    0.3768475591795673, 
+                    0.3549962896552015, 
+                    0.3549962896552015, 
+                    0.3352119653056839, 
+                    0.3352119653056839, 
+                    0.31784586436059675, 
+                    0.31784586436059675, 
+                    0.30156904628952935, 
+                    0.30156904628952935, 
+                    0.2874446893823135, 
+                    0.2874446893823135, 
+                    0.27662873856174064, 
+                    0.27662873856174064, 
+                    0.2656563595536592, 
+                    0.2656563595536592, 
+                    0.2513064226867454, 
+                    0.2513064226867454, 
+                    0.23343789716693356, 
+                    0.23343789716693356, 
+                    0.21299478492699578, 
+                    0.21299478492699578, 
+                    0.19054708938923498, 
+                    0.19054708938923498, 
+                    0.1662256809119678, 
+                    0.1662256809119678, 
+                    0.1397578727905349, 
+                    0.1397578727905349, 
+                    0.1100486626424456, 
+                    0.1100486626424456
+                ], 
+                0.21882189810276031
+            ], 
+            [
+                1.0231976509094238, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999964968528826, 
+                    0.9999964968528826, 
+                    0.9992095005450043, 
+                    0.9992095005450043, 
+                    0.9968506960080707, 
+                    0.9968506960080707, 
+                    0.9892977006953632, 
+                    0.9892977006953632, 
+                    0.9634476321897997, 
+                    0.9634476321897997, 
+                    0.9361341818040182, 
+                    0.9361341818040182, 
+                    0.9032856891452747, 
+                    0.9032856891452747, 
+                    0.8675902941025859, 
+                    0.8675902941025859, 
+                    0.8290157375506613, 
+                    0.8290157375506613, 
+                    0.787808909048804, 
+                    0.787808909048804, 
+                    0.747619403161714, 
+                    0.747619403161714, 
+                    0.7067682628242923, 
+                    0.7067682628242923, 
+                    0.6655912611714778, 
+                    0.6655912611714778, 
+                    0.6254940207653157, 
+                    0.6254940207653157, 
+                    0.5879223618451712, 
+                    0.5879223618451712, 
+                    0.5509685089833076, 
+                    0.5509685089833076, 
+                    0.5176589788129659, 
+                    0.5176589788129659, 
+                    0.48427046045623645, 
+                    0.48427046045623645, 
+                    0.45425220550012785, 
+                    0.45425220550012785, 
+                    0.4246075106736048, 
+                    0.4246075106736048, 
+                    0.3981330870079925, 
+                    0.3981330870079925, 
+                    0.3739832378679638, 
+                    0.3739832378679638, 
+                    0.3523187396229456, 
+                    0.3523187396229456, 
+                    0.33264760229511586, 
+                    0.33264760229511586, 
+                    0.315399304610018, 
+                    0.315399304610018, 
+                    0.2992442831092511, 
+                    0.2992442831092511, 
+                    0.2850923030752557, 
+                    0.2850923030752557, 
+                    0.2720543652042079, 
+                    0.2720543652042079, 
+                    0.2625338267927028, 
+                    0.2625338267927028, 
+                    0.2503987893173634, 
+                    0.2503987893173634, 
+                    0.23417522518945463, 
+                    0.23417522518945463, 
+                    0.2148868200581434, 
+                    0.2148868200581434, 
+                    0.19323290799093873, 
+                    0.19323290799093873, 
+                    0.16938486202506148, 
+                    0.16938486202506148, 
+                    0.143031664443473, 
+                    0.143031664443473, 
+                    0.11286975469157674, 
+                    0.11286975469157674
+                ], 
+                0.2069293111562729
+            ], 
+            [
+                1.0310492515563965, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999964059405364, 
+                    0.9999964059405364, 
+                    0.9991033117431933, 
+                    0.9991033117431933, 
+                    0.9968297093408736, 
+                    0.9968297093408736, 
+                    0.9887551503001134, 
+                    0.9887551503001134, 
+                    0.9618535468309737, 
+                    0.9618535468309737, 
+                    0.9339105406263237, 
+                    0.9339105406263237, 
+                    0.9008452112434142, 
+                    0.9008452112434142, 
+                    0.8647898287941828, 
+                    0.8647898287941828, 
+                    0.8259168993154704, 
+                    0.8259168993154704, 
+                    0.784467593269926, 
+                    0.784467593269926, 
+                    0.7441810661710527, 
+                    0.7441810661710527, 
+                    0.7032194663405604, 
+                    0.7032194663405604, 
+                    0.6619706024293606, 
+                    0.6619706024293606, 
+                    0.6221610074471072, 
+                    0.6221610074471072, 
+                    0.5838832135043559, 
+                    0.5838832135043559, 
+                    0.5481856210124127, 
+                    0.5481856210124127, 
+                    0.5135644022507974, 
+                    0.5135644022507974, 
+                    0.48153554287447137, 
+                    0.48153554287447137, 
+                    0.45068394720351795, 
+                    0.45068394720351795, 
+                    0.42183822891555817, 
+                    0.42183822891555817, 
+                    0.395119734996104, 
+                    0.395119734996104, 
+                    0.3712549137329591, 
+                    0.3712549137329591, 
+                    0.3496723048840346, 
+                    0.3496723048840346, 
+                    0.3301232599103485, 
+                    0.3301232599103485, 
+                    0.3129901760486592, 
+                    0.3129901760486592, 
+                    0.2969175312030127, 
+                    0.2969175312030127, 
+                    0.28253267821795774, 
+                    0.28253267821795774, 
+                    0.26948532405682635, 
+                    0.26948532405682635, 
+                    0.26085906217480836, 
+                    0.26085906217480836, 
+                    0.2486220377449056, 
+                    0.2486220377449056, 
+                    0.23223025151252935, 
+                    0.23223025151252935, 
+                    0.21285573271463368, 
+                    0.21285573271463368, 
+                    0.19119818465754362, 
+                    0.19119818465754362, 
+                    0.16742725108984066, 
+                    0.16742725108984066, 
+                    0.1412478439256354, 
+                    0.1412478439256354, 
+                    0.11143608036069688, 
+                    0.11143608036069688
+                ], 
+                0.19516827166080475
+            ], 
+            [
+                1.0389610528945923, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990040337022863, 
+                    0.9990040337022863, 
+                    0.9953598610466381, 
+                    0.9953598610466381, 
+                    0.9836280961366201, 
+                    0.9836280961366201, 
+                    0.9615860459835807, 
+                    0.9615860459835807, 
+                    0.9326012991631243, 
+                    0.9326012991631243, 
+                    0.8986838987105884, 
+                    0.8986838987105884, 
+                    0.8620875677807063, 
+                    0.8620875677807063, 
+                    0.822884700435513, 
+                    0.822884700435513, 
+                    0.7816156820515205, 
+                    0.7816156820515205, 
+                    0.7402126183691933, 
+                    0.7402126183691933, 
+                    0.6995725543623509, 
+                    0.6995725543623509, 
+                    0.659238945900139, 
+                    0.659238945900139, 
+                    0.6185983305158581, 
+                    0.6185983305158581, 
+                    0.5802518959522147, 
+                    0.5802518959522147, 
+                    0.5447985530846607, 
+                    0.5447985530846607, 
+                    0.5108405524080665, 
+                    0.5108405524080665, 
+                    0.4786234468197948, 
+                    0.4786234468197948, 
+                    0.44771537046462584, 
+                    0.44771537046462584, 
+                    0.41866134716338876, 
+                    0.41866134716338876, 
+                    0.39205112567541994, 
+                    0.39205112567541994, 
+                    0.36829571780969605, 
+                    0.36829571780969605, 
+                    0.34697970243015086, 
+                    0.34697970243015086, 
+                    0.32760474678178897, 
+                    0.32760474678178897, 
+                    0.3105785521733742, 
+                    0.3105785521733742, 
+                    0.29458909800520644, 
+                    0.29458909800520644, 
+                    0.2806067639000505, 
+                    0.2806067639000505, 
+                    0.26878087533655437, 
+                    0.26878087533655437, 
+                    0.258319454555559, 
+                    0.258319454555559, 
+                    0.24731278929646813, 
+                    0.24731278929646813, 
+                    0.23216620773690932, 
+                    0.23216620773690932, 
+                    0.21369013717407753, 
+                    0.21369013717407753, 
+                    0.19268263660220133, 
+                    0.19268263660220133, 
+                    0.1693583807129228, 
+                    0.1693583807129228, 
+                    0.14341872906988656, 
+                    0.14341872906988656, 
+                    0.11352232178966157, 
+                    0.11352232178966157
+                ], 
+                0.18446214497089386
+            ], 
+            [
+                1.0469335317611694, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999953167918008, 
+                    0.999953167918008, 
+                    0.9989605519300798, 
+                    0.9989605519300798, 
+                    0.9955394930743624, 
+                    0.9955394930743624, 
+                    0.9851058327278748, 
+                    0.9851058327278748, 
+                    0.9601896129278356, 
+                    0.9601896129278356, 
+                    0.9308156869880428, 
+                    0.9308156869880428, 
+                    0.8962316311639655, 
+                    0.8962316311639655, 
+                    0.8594291092026614, 
+                    0.8594291092026614, 
+                    0.81992639272603, 
+                    0.81992639272603, 
+                    0.777926198495657, 
+                    0.777926198495657, 
+                    0.7372773205784963, 
+                    0.7372773205784963, 
+                    0.6961810187365891, 
+                    0.6961810187365891, 
+                    0.6548447761469731, 
+                    0.6548447761469731, 
+                    0.6149806145389896, 
+                    0.6149806145389896, 
+                    0.5769210747797144, 
+                    0.5769210747797144, 
+                    0.5410627144628085, 
+                    0.5410627144628085, 
+                    0.5069648333755842, 
+                    0.5069648333755842, 
+                    0.4748512374910125, 
+                    0.4748512374910125, 
+                    0.44452082943377985, 
+                    0.44452082943377985, 
+                    0.41579071281810986, 
+                    0.41579071281810986, 
+                    0.38944857361190205, 
+                    0.38944857361190205, 
+                    0.3657965594013792, 
+                    0.3657965594013792, 
+                    0.34445996103761434, 
+                    0.34445996103761434, 
+                    0.32512895599407315, 
+                    0.32512895599407315, 
+                    0.3081867790142476, 
+                    0.3081867790142476, 
+                    0.29240624886008343, 
+                    0.29240624886008343, 
+                    0.2784525424346821, 
+                    0.2784525424346821, 
+                    0.26688501310483037, 
+                    0.26688501310483037, 
+                    0.2574978576512535, 
+                    0.2574978576512535, 
+                    0.24559477579919065, 
+                    0.24559477579919065, 
+                    0.2295039656531181, 
+                    0.2295039656531181, 
+                    0.21040578183127356, 
+                    0.21040578183127356, 
+                    0.18904011099452053, 
+                    0.18904011099452053, 
+                    0.1655965401942942, 
+                    0.1655965401942942, 
+                    0.13980659347226643, 
+                    0.13980659347226643, 
+                    0.11050948067867927, 
+                    0.11050948067867927
+                ], 
+                0.17348486185073853
+            ], 
+            [
+                1.0549671649932861, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999804862946996, 
+                    0.9999804862946996, 
+                    0.9988844340975449, 
+                    0.9988844340975449, 
+                    0.9954718598636324, 
+                    0.9954718598636324, 
+                    0.9844280679769152, 
+                    0.9844280679769152, 
+                    0.9583841071743298, 
+                    0.9583841071743298, 
+                    0.9287823099253208, 
+                    0.9287823099253208, 
+                    0.8937797649543626, 
+                    0.8937797649543626, 
+                    0.8565144473003518, 
+                    0.8565144473003518, 
+                    0.8167641839364201, 
+                    0.8167641839364201, 
+                    0.7744102170337337, 
+                    0.7744102170337337, 
+                    0.7337996498112541, 
+                    0.7337996498112541, 
+                    0.6927562094253682, 
+                    0.6927562094253682, 
+                    0.6510398339753874, 
+                    0.6510398339753874, 
+                    0.6118296691937096, 
+                    0.6118296691937096, 
+                    0.5728082706145061, 
+                    0.5728082706145061, 
+                    0.5382950940818076, 
+                    0.5382950940818076, 
+                    0.5033420852324745, 
+                    0.5033420852324745, 
+                    0.4716799245071731, 
+                    0.4716799245071731, 
+                    0.44165026042632494, 
+                    0.44165026042632494, 
+                    0.41264895853776223, 
+                    0.41264895853776223, 
+                    0.38672903724551827, 
+                    0.38672903724551827, 
+                    0.36303762516773314, 
+                    0.36303762516773314, 
+                    0.34187748449736016, 
+                    0.34187748449736016, 
+                    0.32266889685948197, 
+                    0.32266889685948197, 
+                    0.3058513894330311, 
+                    0.3058513894330311, 
+                    0.2900940117152342, 
+                    0.2900940117152342, 
+                    0.27634021394818087, 
+                    0.27634021394818087, 
+                    0.26499817695506395, 
+                    0.26499817695506395, 
+                    0.2564151598089862, 
+                    0.2564151598089862, 
+                    0.24418413908499384, 
+                    0.24418413908499384, 
+                    0.22774721725856648, 
+                    0.22774721725856648, 
+                    0.20843792391249408, 
+                    0.20843792391249408, 
+                    0.1869835591244516, 
+                    0.1869835591244516, 
+                    0.16357045794247746, 
+                    0.16357045794247746, 
+                    0.137953292834837, 
+                    0.137953292834837, 
+                    0.1090687424182451, 
+                    0.1090687424182451
+                ], 
+                0.16316772997379303
+            ], 
+            [
+                1.0630625486373901, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988309645492431, 
+                    0.9988309645492431, 
+                    0.9943729389728703, 
+                    0.9943729389728703, 
+                    0.9812756006590081, 
+                    0.9812756006590081, 
+                    0.957409942567766, 
+                    0.957409942567766, 
+                    0.9269060956619938, 
+                    0.9269060956619938, 
+                    0.8913084328041779, 
+                    0.8913084328041779, 
+                    0.853746697556164, 
+                    0.853746697556164, 
+                    0.8135183125587032, 
+                    0.8135183125587032, 
+                    0.7712558240206832, 
+                    0.7712558240206832, 
+                    0.7302940782095124, 
+                    0.7302940782095124, 
+                    0.6891483754198979, 
+                    0.6891483754198979, 
+                    0.6475248058181378, 
+                    0.6475248058181378, 
+                    0.6079367403119484, 
+                    0.6079367403119484, 
+                    0.5698406204872984, 
+                    0.5698406204872984, 
+                    0.5346318184662174, 
+                    0.5346318184662174, 
+                    0.5002985571935118, 
+                    0.5002985571935118, 
+                    0.4687284997209305, 
+                    0.4687284997209305, 
+                    0.43838221390083565, 
+                    0.43838221390083565, 
+                    0.40994962300957205, 
+                    0.40994962300957205, 
+                    0.3838271506211907, 
+                    0.3838271506211907, 
+                    0.3604137092693166, 
+                    0.3604137092693166, 
+                    0.33931565507037537, 
+                    0.33931565507037537, 
+                    0.32041440364045504, 
+                    0.32041440364045504, 
+                    0.303535478389694, 
+                    0.303535478389694, 
+                    0.28786888496836804, 
+                    0.28786888496836804, 
+                    0.2736338027481687, 
+                    0.2736338027481687, 
+                    0.26212966109520414, 
+                    0.26212966109520414, 
+                    0.2539108357415952, 
+                    0.2539108357415952, 
+                    0.24262220126963602, 
+                    0.24262220126963602, 
+                    0.22686635278399137, 
+                    0.22686635278399137, 
+                    0.20805372936111247, 
+                    0.20805372936111247, 
+                    0.18698038415198004, 
+                    0.18698038415198004, 
+                    0.16385377286485703, 
+                    0.16385377286485703, 
+                    0.13842530872130818, 
+                    0.13842530872130818, 
+                    0.10958327015653768, 
+                    0.10958327015653768
+                ], 
+                0.1534235179424286
+            ], 
+            [
+                1.07122004032135, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9986147486237181, 
+                    0.9986147486237181, 
+                    0.9941607832205094, 
+                    0.9941607832205094, 
+                    0.9808618716492824, 
+                    0.9808618716492824, 
+                    0.956076099700323, 
+                    0.956076099700323, 
+                    0.9247859841551728, 
+                    0.9247859841551728, 
+                    0.8887109698937747, 
+                    0.8887109698937747, 
+                    0.8508981624341562, 
+                    0.8508981624341562, 
+                    0.8104716809989365, 
+                    0.8104716809989365, 
+                    0.7677551681967523, 
+                    0.7677551681967523, 
+                    0.7267337544634996, 
+                    0.7267337544634996, 
+                    0.6853349451345688, 
+                    0.6853349451345688, 
+                    0.6440922426868059, 
+                    0.6440922426868059, 
+                    0.6042281555228105, 
+                    0.6042281555228105, 
+                    0.5664537745477468, 
+                    0.5664537745477468, 
+                    0.5304709087716353, 
+                    0.5304709087716353, 
+                    0.4970512082768012, 
+                    0.4970512082768012, 
+                    0.4649421650736525, 
+                    0.4649421650736525, 
+                    0.43534609259166923, 
+                    0.43534609259166923, 
+                    0.4068693094962073, 
+                    0.4068693094962073, 
+                    0.3810438462298582, 
+                    0.3810438462298582, 
+                    0.35771666141546926, 
+                    0.35771666141546926, 
+                    0.3367595114522983, 
+                    0.3367595114522983, 
+                    0.3177655836614573, 
+                    0.3177655836614573, 
+                    0.3010810354660814, 
+                    0.3010810354660814, 
+                    0.28575905513662647, 
+                    0.28575905513662647, 
+                    0.2717608696719157, 
+                    0.2717608696719157, 
+                    0.2615437650335716, 
+                    0.2615437650335716, 
+                    0.253197909269464, 
+                    0.253197909269464, 
+                    0.2414637528808623, 
+                    0.2414637528808623, 
+                    0.22533335902646978, 
+                    0.22533335902646978, 
+                    0.2062836435197364, 
+                    0.2062836435197364, 
+                    0.18509832132677156, 
+                    0.18509832132677156, 
+                    0.16198129690971944, 
+                    0.16198129690971944, 
+                    0.1367066973563539, 
+                    0.1367066973563539, 
+                    0.10825747432023863, 
+                    0.10825747432023863
+                ], 
+                0.14370442926883698
+            ], 
+            [
+                1.0794399976730347, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999917739622749, 
+                    0.9999917739622749, 
+                    0.9985649417439465, 
+                    0.9985649417439465, 
+                    0.9933566409185717, 
+                    0.9933566409185717, 
+                    0.9791577179800419, 
+                    0.9791577179800419, 
+                    0.9546023798637351, 
+                    0.9546023798637351, 
+                    0.9226812790417901, 
+                    0.9226812790417901, 
+                    0.8863148588117961, 
+                    0.8863148588117961, 
+                    0.8479598599308228, 
+                    0.8479598599308228, 
+                    0.8073602010695342, 
+                    0.8073602010695342, 
+                    0.764461977653095, 
+                    0.764461977653095, 
+                    0.7233858524804931, 
+                    0.7233858524804931, 
+                    0.6819020139474877, 
+                    0.6819020139474877, 
+                    0.6404204325361457, 
+                    0.6404204325361457, 
+                    0.6005366566455699, 
+                    0.6005366566455699, 
+                    0.5629318492363032, 
+                    0.5629318492363032, 
+                    0.5271856323016365, 
+                    0.5271856323016365, 
+                    0.49359363128499906, 
+                    0.49359363128499906, 
+                    0.461925305185614, 
+                    0.461925305185614, 
+                    0.43212048077430115, 
+                    0.43212048077430115, 
+                    0.4040223834482152, 
+                    0.4040223834482152, 
+                    0.3781867384617338, 
+                    0.3781867384617338, 
+                    0.3550644119108335, 
+                    0.3550644119108335, 
+                    0.33418798106397146, 
+                    0.33418798106397146, 
+                    0.31530513724024817, 
+                    0.31530513724024817, 
+                    0.29871961219180354, 
+                    0.29871961219180354, 
+                    0.28357499803842073, 
+                    0.28357499803842073, 
+                    0.2696711761683292, 
+                    0.2696711761683292, 
+                    0.25962396932273013, 
+                    0.25962396932273013, 
+                    0.2515860267539, 
+                    0.2515860267539, 
+                    0.2401198584613978, 
+                    0.2401198584613978, 
+                    0.22410137114998188, 
+                    0.22410137114998188, 
+                    0.20515469514838797, 
+                    0.20515469514838797, 
+                    0.18408666590793196, 
+                    0.18408666590793196, 
+                    0.1611077379151025, 
+                    0.1611077379151025, 
+                    0.13600161987349904, 
+                    0.13600161987349904, 
+                    0.10777870151854556, 
+                    0.10777870151854556
+                ], 
+                0.13462314009666443
+            ]
+        ]
+    }, 
+    {
+        "block_size": 78, 
+        "preprocessing_block_sizes": [
+            54
+        ], 
+        "pruning_parameters": [
+            [
+                0.9272976517677307, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999816756696107, 
+                    0.9999816756696107, 
+                    0.9999038330498456, 
+                    0.9999038330498456, 
+                    0.9997725790325785, 
+                    0.9997725790325785, 
+                    0.9993377507856362, 
+                    0.9993377507856362, 
+                    0.9855597953316503, 
+                    0.9855597953316503, 
+                    0.9568807788944019, 
+                    0.9568807788944019, 
+                    0.9258202041178708, 
+                    0.9258202041178708, 
+                    0.8910948526176696, 
+                    0.8910948526176696, 
+                    0.8533564245761018, 
+                    0.8533564245761018, 
+                    0.8136617024278368, 
+                    0.8136617024278368, 
+                    0.7725872885420119, 
+                    0.7725872885420119, 
+                    0.7314113341563854, 
+                    0.7314113341563854, 
+                    0.6906421352322385, 
+                    0.6906421352322385, 
+                    0.6504856318497334, 
+                    0.6504856318497334, 
+                    0.6110478297469518, 
+                    0.6110478297469518, 
+                    0.5742853928000491, 
+                    0.5742853928000491, 
+                    0.5387719918053643, 
+                    0.5387719918053643, 
+                    0.5059916359482257, 
+                    0.5059916359482257, 
+                    0.4726819411694737, 
+                    0.4726819411694737, 
+                    0.441290212130088, 
+                    0.441290212130088, 
+                    0.41176269735789506, 
+                    0.41176269735789506, 
+                    0.38540937257195484, 
+                    0.38540937257195484, 
+                    0.36090176673484287, 
+                    0.36090176673484287, 
+                    0.33918943053206924, 
+                    0.33918943053206924, 
+                    0.3190555167201237, 
+                    0.3190555167201237, 
+                    0.3013875996830136, 
+                    0.3013875996830136, 
+                    0.284851759721338, 
+                    0.284851759721338, 
+                    0.2701942156934652, 
+                    0.2701942156934652, 
+                    0.2581196814225459, 
+                    0.2581196814225459, 
+                    0.2510527047763696, 
+                    0.2510527047763696, 
+                    0.23841125612666927, 
+                    0.23841125612666927, 
+                    0.221805869960887, 
+                    0.221805869960887, 
+                    0.20244631753098588, 
+                    0.20244631753098588, 
+                    0.18107928174382326, 
+                    0.18107928174382326, 
+                    0.15797891776447096, 
+                    0.15797891776447096, 
+                    0.13305253428189914, 
+                    0.13305253428189914, 
+                    0.10560856958229646, 
+                    0.10560856958229646
+                ], 
+                0.20032885670661926
+            ], 
+            [
+                0.9343234300613403, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998399487770997, 
+                    0.9998399487770997, 
+                    0.9994100970562795, 
+                    0.9994100970562795, 
+                    0.9986192728745782, 
+                    0.9986192728745782, 
+                    0.9824081710186165, 
+                    0.9824081710186165, 
+                    0.9535470352733074, 
+                    0.9535470352733074, 
+                    0.9231511515170622, 
+                    0.9231511515170622, 
+                    0.8885283591353742, 
+                    0.8885283591353742, 
+                    0.8507950408046459, 
+                    0.8507950408046459, 
+                    0.8106237989958749, 
+                    0.8106237989958749, 
+                    0.769119294895816, 
+                    0.769119294895816, 
+                    0.728080746009491, 
+                    0.728080746009491, 
+                    0.6872769376865359, 
+                    0.6872769376865359, 
+                    0.6472103371610644, 
+                    0.6472103371610644, 
+                    0.6077722718343613, 
+                    0.6077722718343613, 
+                    0.5707606433458969, 
+                    0.5707606433458969, 
+                    0.5355004136250555, 
+                    0.5355004136250555, 
+                    0.5025412538259574, 
+                    0.5025412538259574, 
+                    0.47000749326510144, 
+                    0.47000749326510144, 
+                    0.4377343612529294, 
+                    0.4377343612529294, 
+                    0.4094815859974443, 
+                    0.4094815859974443, 
+                    0.3823311953286589, 
+                    0.3823311953286589, 
+                    0.35838024939386026, 
+                    0.35838024939386026, 
+                    0.33662662831080614, 
+                    0.33662662831080614, 
+                    0.3166550716111859, 
+                    0.3166550716111859, 
+                    0.2991064203121446, 
+                    0.2991064203121446, 
+                    0.28270303909675254, 
+                    0.28270303909675254, 
+                    0.26818640148345324, 
+                    0.26818640148345324, 
+                    0.2567511617063777, 
+                    0.2567511617063777, 
+                    0.2438236510294519, 
+                    0.2438236510294519, 
+                    0.23506971657586315, 
+                    0.23506971657586315, 
+                    0.2216896452668632, 
+                    0.2216896452668632, 
+                    0.2045532941491072, 
+                    0.2045532941491072, 
+                    0.1846884013210243, 
+                    0.1846884013210243, 
+                    0.1624721916302019, 
+                    0.1624721916302019, 
+                    0.1377750782633072, 
+                    0.1377750782633072, 
+                    0.10957044894600847, 
+                    0.10957044894600847
+                ], 
+                0.1897173970937729
+            ], 
+            [
+                0.9414024949073792, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999968982555207, 
+                    0.9999968982555207, 
+                    0.9988908445804621, 
+                    0.9988908445804621, 
+                    0.9810721401157055, 
+                    0.9810721401157055, 
+                    0.9518227371490172, 
+                    0.9518227371490172, 
+                    0.9211182860199402, 
+                    0.9211182860199402, 
+                    0.886009549741041, 
+                    0.886009549741041, 
+                    0.8478355892870161, 
+                    0.8478355892870161, 
+                    0.8078323629659381, 
+                    0.8078323629659381, 
+                    0.7661586700476982, 
+                    0.7661586700476982, 
+                    0.7248586277334158, 
+                    0.7248586277334158, 
+                    0.6838160681203025, 
+                    0.6838160681203025, 
+                    0.6437238512461326, 
+                    0.6437238512461326, 
+                    0.6043227668481254, 
+                    0.6043227668481254, 
+                    0.5674098148940429, 
+                    0.5674098148940429, 
+                    0.5322148997224319, 
+                    0.5322148997224319, 
+                    0.4995686055136733, 
+                    0.4995686055136733, 
+                    0.46654292854714075, 
+                    0.46654292854714075, 
+                    0.4351047584016513, 
+                    0.4351047584016513, 
+                    0.4061643282406438, 
+                    0.4061643282406438, 
+                    0.379801917236347, 
+                    0.379801917236347, 
+                    0.355768839422125, 
+                    0.355768839422125, 
+                    0.3341899944024732, 
+                    0.3341899944024732, 
+                    0.3143103596802579, 
+                    0.3143103596802579, 
+                    0.29686274374845156, 
+                    0.29686274374845156, 
+                    0.28055956394401377, 
+                    0.28055956394401377, 
+                    0.26614446347528375, 
+                    0.26614446347528375, 
+                    0.2556400292258649, 
+                    0.2556400292258649, 
+                    0.2420427964689139, 
+                    0.2420427964689139, 
+                    0.23365417688678508, 
+                    0.23365417688678508, 
+                    0.22035732663960778, 
+                    0.22035732663960778, 
+                    0.20329334932887042, 
+                    0.20329334932887042, 
+                    0.18352159515982372, 
+                    0.18352159515982372, 
+                    0.1614286674715181, 
+                    0.1614286674715181, 
+                    0.13689750423020985, 
+                    0.13689750423020985, 
+                    0.10894075341614613, 
+                    0.10894075341614613
+                ], 
+                0.17934124171733856
+            ], 
+            [
+                0.948535144329071, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999182740799345, 
+                    0.9999182740799345, 
+                    0.9997006602795901, 
+                    0.9997006602795901, 
+                    0.9988676747720246, 
+                    0.9988676747720246, 
+                    0.9981498492994416, 
+                    0.9981498492994416, 
+                    0.9793101249933956, 
+                    0.9793101249933956, 
+                    0.9503676915840971, 
+                    0.9503676915840971, 
+                    0.9192656849771577, 
+                    0.9192656849771577, 
+                    0.8834219178263493, 
+                    0.8834219178263493, 
+                    0.8452212329459714, 
+                    0.8452212329459714, 
+                    0.8043063377707513, 
+                    0.8043063377707513, 
+                    0.7632290600622705, 
+                    0.7632290600622705, 
+                    0.7214727526280458, 
+                    0.7214727526280458, 
+                    0.680582883969053, 
+                    0.680582883969053, 
+                    0.6402625513702529, 
+                    0.6402625513702529, 
+                    0.6008752392480624, 
+                    0.6008752392480624, 
+                    0.5641108553191043, 
+                    0.5641108553191043, 
+                    0.5290057127367416, 
+                    0.5290057127367416, 
+                    0.4960523828913429, 
+                    0.4960523828913429, 
+                    0.4636707875738093, 
+                    0.4636707875738093, 
+                    0.43161332047805856, 
+                    0.43161332047805856, 
+                    0.40371169934184764, 
+                    0.40371169934184764, 
+                    0.3768573197508823, 
+                    0.3768573197508823, 
+                    0.35323260091890535, 
+                    0.35323260091890535, 
+                    0.33173642242502444, 
+                    0.33173642242502444, 
+                    0.3119678269106688, 
+                    0.3119678269106688, 
+                    0.2946059128595912, 
+                    0.2946059128595912, 
+                    0.2783633464472217, 
+                    0.2783633464472217, 
+                    0.2640074927338913, 
+                    0.2640074927338913, 
+                    0.25078267935819004, 
+                    0.25078267935819004, 
+                    0.24076447123335443, 
+                    0.24076447123335443, 
+                    0.23240689510281676, 
+                    0.23240689510281676, 
+                    0.21913993702519202, 
+                    0.21913993702519202, 
+                    0.2021061947510236, 
+                    0.2021061947510236, 
+                    0.18239757059837453, 
+                    0.18239757059837453, 
+                    0.16041158736448313, 
+                    0.16041158736448313, 
+                    0.13604750822553158, 
+                    0.13604750822553158, 
+                    0.10836176724205854, 
+                    0.10836176724205854
+                ], 
+                0.16893959045410156
+            ], 
+            [
+                0.9557217955589294, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999504930903069, 
+                    0.9999504930903069, 
+                    0.9998965063632906, 
+                    0.9998965063632906, 
+                    0.9994866334327686, 
+                    0.9994866334327686, 
+                    0.9982808147790322, 
+                    0.9982808147790322, 
+                    0.9790225798636305, 
+                    0.9790225798636305, 
+                    0.9494707274329541, 
+                    0.9494707274329541, 
+                    0.9175231946388361, 
+                    0.9175231946388361, 
+                    0.88124917310022, 
+                    0.88124917310022, 
+                    0.8422364694506841, 
+                    0.8422364694506841, 
+                    0.8016715894284971, 
+                    0.8016715894284971, 
+                    0.7595386624401469, 
+                    0.7595386624401469, 
+                    0.7181564521750912, 
+                    0.7181564521750912, 
+                    0.67707302199338, 
+                    0.67707302199338, 
+                    0.6368015977525904, 
+                    0.6368015977525904, 
+                    0.5974897783536498, 
+                    0.5974897783536498, 
+                    0.5608588611005622, 
+                    0.5608588611005622, 
+                    0.5257172058333649, 
+                    0.5257172058333649, 
+                    0.49301274131249, 
+                    0.49301274131249, 
+                    0.46054421747668556, 
+                    0.46054421747668556, 
+                    0.42888882582129484, 
+                    0.42888882582129484, 
+                    0.4007745647795664, 
+                    0.4007745647795664, 
+                    0.3742714147758816, 
+                    0.3742714147758816, 
+                    0.3506570529987572, 
+                    0.3506570529987572, 
+                    0.3293132678246006, 
+                    0.3293132678246006, 
+                    0.30965107768814215, 
+                    0.30965107768814215, 
+                    0.2924036425479554, 
+                    0.2924036425479554, 
+                    0.2762737148839163, 
+                    0.2762737148839163, 
+                    0.26201435618646735, 
+                    0.26201435618646735, 
+                    0.24913193804215114, 
+                    0.24913193804215114, 
+                    0.23969962679660833, 
+                    0.23969962679660833, 
+                    0.2312763499792611, 
+                    0.2312763499792611, 
+                    0.21778385602692626, 
+                    0.21778385602692626, 
+                    0.20062991055181903, 
+                    0.20062991055181903, 
+                    0.18089197212210256, 
+                    0.18089197212210256, 
+                    0.15896383968494068, 
+                    0.15896383968494068, 
+                    0.13475871239026105, 
+                    0.13475871239026105, 
+                    0.10740007318038523, 
+                    0.10740007318038523
+                ], 
+                0.15939870476722717
+            ], 
+            [
+                0.9629629850387573, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999986552645114, 
+                    0.999986552645114, 
+                    0.9999486071040806, 
+                    0.9999486071040806, 
+                    0.9995910237188003, 
+                    0.9995910237188003, 
+                    0.9980223244526749, 
+                    0.9980223244526749, 
+                    0.979038185077713, 
+                    0.979038185077713, 
+                    0.9483025521885883, 
+                    0.9483025521885883, 
+                    0.9154534164700316, 
+                    0.9154534164700316, 
+                    0.8788670658554883, 
+                    0.8788670658554883, 
+                    0.8394839928787842, 
+                    0.8394839928787842, 
+                    0.7987058097825226, 
+                    0.7987058097825226, 
+                    0.7566466195049506, 
+                    0.7566466195049506, 
+                    0.7149042809608727, 
+                    0.7149042809608727, 
+                    0.6737737937245831, 
+                    0.6737737937245831, 
+                    0.6334449538827919, 
+                    0.6334449538827919, 
+                    0.5940782994426964, 
+                    0.5940782994426964, 
+                    0.5575283590777402, 
+                    0.5575283590777402, 
+                    0.5225031726461095, 
+                    0.5225031726461095, 
+                    0.48993128900618516, 
+                    0.48993128900618516, 
+                    0.45756537589725654, 
+                    0.45756537589725654, 
+                    0.42606702620386855, 
+                    0.42606702620386855, 
+                    0.398058170190712, 
+                    0.398058170190712, 
+                    0.3716479817756887, 
+                    0.3716479817756887, 
+                    0.34810777229450895, 
+                    0.34810777229450895, 
+                    0.3268780487681358, 
+                    0.3268780487681358, 
+                    0.30736109006914103, 
+                    0.30736109006914103, 
+                    0.29024842079548646, 
+                    0.29024842079548646, 
+                    0.274275587075997, 
+                    0.274275587075997, 
+                    0.26003782655953844, 
+                    0.26003782655953844, 
+                    0.2482811331307065, 
+                    0.2482811331307065, 
+                    0.23950919150386224, 
+                    0.23950919150386224, 
+                    0.23067522989998016, 
+                    0.23067522989998016, 
+                    0.2166683498691029, 
+                    0.2166683498691029, 
+                    0.1991902132415224, 
+                    0.1991902132415224, 
+                    0.17927781733833675, 
+                    0.17927781733833675, 
+                    0.1573118796619347, 
+                    0.1573118796619347, 
+                    0.1332199345362437, 
+                    0.1332199345362437, 
+                    0.10621317281004587, 
+                    0.10621317281004587
+                ], 
+                0.15041908621788025
+            ], 
+            [
+                0.9702589511871338, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999990075639751, 
+                    0.9999990075639751, 
+                    0.9998650577968574, 
+                    0.9998650577968574, 
+                    0.9995176729501134, 
+                    0.9995176729501134, 
+                    0.9978736515160088, 
+                    0.9978736515160088, 
+                    0.9772302913019791, 
+                    0.9772302913019791, 
+                    0.9463983978206922, 
+                    0.9463983978206922, 
+                    0.9133162405332168, 
+                    0.9133162405332168, 
+                    0.8763040168237157, 
+                    0.8763040168237157, 
+                    0.8367052179175993, 
+                    0.8367052179175993, 
+                    0.7955606805339999, 
+                    0.7955606805339999, 
+                    0.7534711255156897, 
+                    0.7534711255156897, 
+                    0.7114000774792724, 
+                    0.7114000774792724, 
+                    0.6701987902938134, 
+                    0.6701987902938134, 
+                    0.6300798968503085, 
+                    0.6300798968503085, 
+                    0.59068098784962, 
+                    0.59068098784962, 
+                    0.5540615572472504, 
+                    0.5540615572472504, 
+                    0.5191400200951098, 
+                    0.5191400200951098, 
+                    0.4866762473703786, 
+                    0.4866762473703786, 
+                    0.4545350049752144, 
+                    0.4545350049752144, 
+                    0.4229793092571441, 
+                    0.4229793092571441, 
+                    0.39511738215884146, 
+                    0.39511738215884146, 
+                    0.3688663493297254, 
+                    0.3688663493297254, 
+                    0.34559159968495445, 
+                    0.34559159968495445, 
+                    0.32450748094882426, 
+                    0.32450748094882426, 
+                    0.30507921647091396, 
+                    0.30507921647091396, 
+                    0.28778619602541655, 
+                    0.28778619602541655, 
+                    0.27177241111309053, 
+                    0.27177241111309053, 
+                    0.2581593982409784, 
+                    0.2581593982409784, 
+                    0.24523530302097754, 
+                    0.24523530302097754, 
+                    0.23842400971426284, 
+                    0.23842400971426284, 
+                    0.2292886663471899, 
+                    0.2292886663471899, 
+                    0.2156040518030269, 
+                    0.2156040518030269, 
+                    0.1984025940700925, 
+                    0.1984025940700925, 
+                    0.1787159616172262, 
+                    0.1787159616172262, 
+                    0.15694198247982444, 
+                    0.15694198247982444, 
+                    0.13301356277931883, 
+                    0.13301356277931883, 
+                    0.10612234015533649, 
+                    0.10612234015533649
+                ], 
+                0.14116933941841125
+            ], 
+            [
+                0.9776102304458618, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997482559264284, 
+                    0.9997482559264284, 
+                    0.9992718561829358, 
+                    0.9992718561829358, 
+                    0.9971159078823076, 
+                    0.9971159078823076, 
+                    0.9758290743179662, 
+                    0.9758290743179662, 
+                    0.944629902976362, 
+                    0.944629902976362, 
+                    0.9112882036250427, 
+                    0.9112882036250427, 
+                    0.8738029697645823, 
+                    0.8738029697645823, 
+                    0.8339458480856541, 
+                    0.8339458480856541, 
+                    0.792610875800063, 
+                    0.792610875800063, 
+                    0.7500040038655637, 
+                    0.7500040038655637, 
+                    0.7081513436170871, 
+                    0.7081513436170871, 
+                    0.6668072439938473, 
+                    0.6668072439938473, 
+                    0.6266460222612718, 
+                    0.6266460222612718, 
+                    0.5871367025516131, 
+                    0.5871367025516131, 
+                    0.551074939408984, 
+                    0.551074939408984, 
+                    0.5156974102740443, 
+                    0.5156974102740443, 
+                    0.4839525768065424, 
+                    0.4839525768065424, 
+                    0.4512814508462067, 
+                    0.4512814508462067, 
+                    0.42083054122447566, 
+                    0.42083054122447566, 
+                    0.3922614754582834, 
+                    0.3922614754582834, 
+                    0.36657704532991825, 
+                    0.36657704532991825, 
+                    0.34298463592822204, 
+                    0.34298463592822204, 
+                    0.3220551972797116, 
+                    0.3220551972797116, 
+                    0.3028028824136339, 
+                    0.3028028824136339, 
+                    0.2859236685816484, 
+                    0.2859236685816484, 
+                    0.2701587691508382, 
+                    0.2701587691508382, 
+                    0.2560768672448612, 
+                    0.2560768672448612, 
+                    0.2434031418955554, 
+                    0.2434031418955554, 
+                    0.23528712241085842, 
+                    0.23528712241085842, 
+                    0.22913824999525575, 
+                    0.22913824999525575, 
+                    0.21491069506745106, 
+                    0.21491069506745106, 
+                    0.1976013468903349, 
+                    0.1976013468903349, 
+                    0.17791453613763306, 
+                    0.17791453613763306, 
+                    0.15620139818139048, 
+                    0.15620139818139048, 
+                    0.1323946293523503, 
+                    0.1323946293523503, 
+                    0.1057326262720073, 
+                    0.1057326262720073
+                ], 
+                0.1329810619354248
+            ], 
+            [
+                0.9850172400474548, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998112129820713, 
+                    0.9998112129820713, 
+                    0.9993855151383101, 
+                    0.9993855151383101, 
+                    0.9971339483677036, 
+                    0.9971339483677036, 
+                    0.9751631062446995, 
+                    0.9751631062446995, 
+                    0.9431647585455647, 
+                    0.9431647585455647, 
+                    0.9092199276070057, 
+                    0.9092199276070057, 
+                    0.8712911716140476, 
+                    0.8712911716140476, 
+                    0.8310877386115437, 
+                    0.8310877386115437, 
+                    0.7894594677913565, 
+                    0.7894594677913565, 
+                    0.7468451059509202, 
+                    0.7468451059509202, 
+                    0.7047421531064987, 
+                    0.7047421531064987, 
+                    0.6634679497181156, 
+                    0.6634679497181156, 
+                    0.6231232912839765, 
+                    0.6231232912839765, 
+                    0.5840602196585977, 
+                    0.5840602196585977, 
+                    0.5472822119005996, 
+                    0.5472822119005996, 
+                    0.5130641545097898, 
+                    0.5130641545097898, 
+                    0.48025799041495043, 
+                    0.48025799041495043, 
+                    0.4489089930184029, 
+                    0.4489089930184029, 
+                    0.4169705128604324, 
+                    0.4169705128604324, 
+                    0.3900430986594402, 
+                    0.3900430986594402, 
+                    0.36354198254539527, 
+                    0.36354198254539527, 
+                    0.3406170212217983, 
+                    0.3406170212217983, 
+                    0.3197221983647251, 
+                    0.3197221983647251, 
+                    0.3005625564751518, 
+                    0.3005625564751518, 
+                    0.2837585651022767, 
+                    0.2837585651022767, 
+                    0.2680857374636591, 
+                    0.2680857374636591, 
+                    0.25419509528516615, 
+                    0.25419509528516615, 
+                    0.2415242278815551, 
+                    0.2415242278815551, 
+                    0.23415674104823997, 
+                    0.23415674104823997, 
+                    0.22850627263915685, 
+                    0.22850627263915685, 
+                    0.2139605669185663, 
+                    0.2139605669185663, 
+                    0.19651524909271878, 
+                    0.19651524909271878, 
+                    0.17679110992157945, 
+                    0.17679110992157945, 
+                    0.15512133849141907, 
+                    0.15512133849141907, 
+                    0.13144593688867454, 
+                    0.13144593688867454, 
+                    0.10506961339365473, 
+                    0.10506961339365473
+                ], 
+                0.12478187680244446
+            ], 
+            [
+                0.9924803376197815, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999630757803128, 
+                    0.9999630757803128, 
+                    0.9998749944082341, 
+                    0.9998749944082341, 
+                    0.9992506406023294, 
+                    0.9992506406023294, 
+                    0.9976524465051817, 
+                    0.9976524465051817, 
+                    0.9755384426678083, 
+                    0.9755384426678083, 
+                    0.9423665248690839, 
+                    0.9423665248690839, 
+                    0.9072106321807581, 
+                    0.9072106321807581, 
+                    0.868806507920382, 
+                    0.868806507920382, 
+                    0.8282440045083673, 
+                    0.8282440045083673, 
+                    0.7863450728748336, 
+                    0.7863450728748336, 
+                    0.7435770670976898, 
+                    0.7435770670976898, 
+                    0.7014009518313702, 
+                    0.7014009518313702, 
+                    0.6600913209338704, 
+                    0.6600913209338704, 
+                    0.6197428271660046, 
+                    0.6197428271660046, 
+                    0.5806220839247601, 
+                    0.5806220839247601, 
+                    0.5441074920791796, 
+                    0.5441074920791796, 
+                    0.5096965677920113, 
+                    0.5096965677920113, 
+                    0.4772405470056192, 
+                    0.4772405470056192, 
+                    0.4456461693410362, 
+                    0.4456461693410362, 
+                    0.4142968956387426, 
+                    0.4142968956387426, 
+                    0.3871826910840106, 
+                    0.3871826910840106, 
+                    0.36108511854449826, 
+                    0.36108511854449826, 
+                    0.33818122930245886, 
+                    0.33818122930245886, 
+                    0.31740390274386826, 
+                    0.31740390274386826, 
+                    0.2983542361277109, 
+                    0.2983542361277109, 
+                    0.2816654271526985, 
+                    0.2816654271526985, 
+                    0.2660853093720807, 
+                    0.2660853093720807, 
+                    0.25220379089368117, 
+                    0.25220379089368117, 
+                    0.23959243835711247, 
+                    0.23959243835711247, 
+                    0.2360089744114291, 
+                    0.2360089744114291, 
+                    0.22896122934003912, 
+                    0.22896122934003912, 
+                    0.21348945947306575, 
+                    0.21348945947306575, 
+                    0.19534591104616836, 
+                    0.19534591104616836, 
+                    0.1751771924834612, 
+                    0.1751771924834612, 
+                    0.1532965678909744, 
+                    0.1532965678909744, 
+                    0.1296641375721492, 
+                    0.1296641375721492, 
+                    0.10370332104356669, 
+                    0.10370332104356669
+                ], 
+                0.11708991229534149
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999678859919334, 
+                    0.9999678859919334, 
+                    0.9997190213140308, 
+                    0.9997190213140308, 
+                    0.9992154588865212, 
+                    0.9992154588865212, 
+                    0.9973487768178956, 
+                    0.9973487768178956, 
+                    0.9747595850875104, 
+                    0.9747595850875104, 
+                    0.9407567717302047, 
+                    0.9407567717302047, 
+                    0.9049234767454696, 
+                    0.9049234767454696, 
+                    0.8661738316012043, 
+                    0.8661738316012043, 
+                    0.8253652992203142, 
+                    0.8253652992203142, 
+                    0.7832420566275099, 
+                    0.7832420566275099, 
+                    0.7403160782550849, 
+                    0.7403160782550849, 
+                    0.6980405173678792, 
+                    0.6980405173678792, 
+                    0.6567054128768708, 
+                    0.6567054128768708, 
+                    0.6163424125497197, 
+                    0.6163424125497197, 
+                    0.5772716100355132, 
+                    0.5772716100355132, 
+                    0.5407944411246091, 
+                    0.5407944411246091, 
+                    0.5064979892178992, 
+                    0.5064979892178992, 
+                    0.4741214418957389, 
+                    0.4741214418957389, 
+                    0.4426677286303888, 
+                    0.4426677286303888, 
+                    0.4114508340016577, 
+                    0.4114508340016577, 
+                    0.38446626989803795, 
+                    0.38446626989803795, 
+                    0.35850249588290894, 
+                    0.35850249588290894, 
+                    0.3357276605729456, 
+                    0.3357276605729456, 
+                    0.31507918149670333, 
+                    0.31507918149670333, 
+                    0.296137339279065, 
+                    0.296137339279065, 
+                    0.27953781572093656, 
+                    0.27953781572093656, 
+                    0.26406630096630934, 
+                    0.26406630096630934, 
+                    0.25045665368438735, 
+                    0.25045665368438735, 
+                    0.2376285180848254, 
+                    0.2376285180848254, 
+                    0.23484724532406212, 
+                    0.23484724532406212, 
+                    0.2281981079791062, 
+                    0.2281981079791062, 
+                    0.21247111007767502, 
+                    0.21247111007767502, 
+                    0.19423844989775804, 
+                    0.19423844989775804, 
+                    0.1740668015086791, 
+                    0.1740668015086791, 
+                    0.15225748567180197, 
+                    0.15225748567180197, 
+                    0.12877899108605248, 
+                    0.12877899108605248, 
+                    0.10319627053854649, 
+                    0.10319627053854649
+                ], 
+                0.10968320816755295
+            ], 
+            [
+                1.007576584815979, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999986689185395, 
+                    0.999986689185395, 
+                    0.9996763143898368, 
+                    0.9996763143898368, 
+                    0.9992513611370524, 
+                    0.9992513611370524, 
+                    0.9963288483146487, 
+                    0.9963288483146487, 
+                    0.9719683749807067, 
+                    0.9719683749807067, 
+                    0.9384010575926259, 
+                    0.9384010575926259, 
+                    0.902799838857597, 
+                    0.902799838857597, 
+                    0.8636192392074479, 
+                    0.8636192392074479, 
+                    0.8224078762194615, 
+                    0.8224078762194615, 
+                    0.7800906314693187, 
+                    0.7800906314693187, 
+                    0.737013197149563, 
+                    0.737013197149563, 
+                    0.6946797705056328, 
+                    0.6946797705056328, 
+                    0.6532102145187729, 
+                    0.6532102145187729, 
+                    0.6131221083588027, 
+                    0.6131221083588027, 
+                    0.5734657985086403, 
+                    0.5734657985086403, 
+                    0.5380549847407965, 
+                    0.5380549847407965, 
+                    0.5027345775676353, 
+                    0.5027345775676353, 
+                    0.47144795745373574, 
+                    0.47144795745373574, 
+                    0.43936297146160647, 
+                    0.43936297146160647, 
+                    0.408927978032822, 
+                    0.408927978032822, 
+                    0.3815685215964326, 
+                    0.3815685215964326, 
+                    0.35604547292156485, 
+                    0.35604547292156485, 
+                    0.33327252772135185, 
+                    0.33327252772135185, 
+                    0.3127672750389947, 
+                    0.3127672750389947, 
+                    0.29394016808505335, 
+                    0.29394016808505335, 
+                    0.27745646092598264, 
+                    0.27745646092598264, 
+                    0.26207401636707867, 
+                    0.26207401636707867, 
+                    0.24840654642552523, 
+                    0.24840654642552523, 
+                    0.23600766889423222, 
+                    0.23600766889423222, 
+                    0.23103806520567993, 
+                    0.23103806520567993, 
+                    0.22706384342008598, 
+                    0.22706384342008598, 
+                    0.21164763375357903, 
+                    0.21164763375357903, 
+                    0.19382559115700027, 
+                    0.19382559115700027, 
+                    0.17398953175110618, 
+                    0.17398953175110618, 
+                    0.1524302415462344, 
+                    0.1524302415462344, 
+                    0.12911345977038163, 
+                    0.12911345977038163, 
+                    0.1036017935389472, 
+                    0.1036017935389472
+                ], 
+                0.10263404995203018
+            ], 
+            [
+                1.0152106285095215, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997427529485579, 
+                    0.9997427529485579, 
+                    0.9992009697612955, 
+                    0.9992009697612955, 
+                    0.9962036819423429, 
+                    0.9962036819423429, 
+                    0.9718912148235402, 
+                    0.9718912148235402, 
+                    0.9371829834819414, 
+                    0.9371829834819414, 
+                    0.9006227733303467, 
+                    0.9006227733303467, 
+                    0.8610066495403571, 
+                    0.8610066495403571, 
+                    0.8195098751274142, 
+                    0.8195098751274142, 
+                    0.7769392050686145, 
+                    0.7769392050686145, 
+                    0.7337392671402614, 
+                    0.7337392671402614, 
+                    0.6912575491134157, 
+                    0.6912575491134157, 
+                    0.6499156214356454, 
+                    0.6499156214356454, 
+                    0.6093852069226433, 
+                    0.6093852069226433, 
+                    0.5708347284713962, 
+                    0.5708347284713962, 
+                    0.5338802995053246, 
+                    0.5338802995053246, 
+                    0.5004615955206002, 
+                    0.5004615955206002, 
+                    0.46773650824220536, 
+                    0.46773650824220536, 
+                    0.43691152696350893, 
+                    0.43691152696350893, 
+                    0.40566300641202213, 
+                    0.40566300641202213, 
+                    0.37918287446099597, 
+                    0.37918287446099597, 
+                    0.3533731592900257, 
+                    0.3533731592900257, 
+                    0.33090287265249474, 
+                    0.33090287265249474, 
+                    0.31048109622626946, 
+                    0.31048109622626946, 
+                    0.2917823536588085, 
+                    0.2917823536588085, 
+                    0.2754100299558094, 
+                    0.2754100299558094, 
+                    0.2601332305379195, 
+                    0.2601332305379195, 
+                    0.24652817176487546, 
+                    0.24652817176487546, 
+                    0.23381915036550313, 
+                    0.23381915036550313, 
+                    0.23161419298747765, 
+                    0.23161419298747765, 
+                    0.2272850061143818, 
+                    0.2272850061143818, 
+                    0.21131010168286374, 
+                    0.21131010168286374, 
+                    0.19303604355945153, 
+                    0.19303604355945153, 
+                    0.17291487256375224, 
+                    0.17291487256375224, 
+                    0.1512294501227278, 
+                    0.1512294501227278, 
+                    0.127958737349405, 
+                    0.127958737349405, 
+                    0.102783665965299, 
+                    0.102783665965299
+                ], 
+                0.09593980014324188
+            ], 
+            [
+                1.022902488708496, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999967257527033, 
+                    0.9999967257527033, 
+                    0.9996110007983142, 
+                    0.9996110007983142, 
+                    0.999051395104949, 
+                    0.999051395104949, 
+                    0.9957394156517463, 
+                    0.9957394156517463, 
+                    0.9700943443670939, 
+                    0.9700943443670939, 
+                    0.9350316072820009, 
+                    0.9350316072820009, 
+                    0.8983240777845201, 
+                    0.8983240777845201, 
+                    0.8583658514494128, 
+                    0.8583658514494128, 
+                    0.8165630859457297, 
+                    0.8165630859457297, 
+                    0.7737555423231274, 
+                    0.7737555423231274, 
+                    0.7303910781501192, 
+                    0.7303910781501192, 
+                    0.6878562664337451, 
+                    0.6878562664337451, 
+                    0.6465166837198245, 
+                    0.6465166837198245, 
+                    0.6059367653578485, 
+                    0.6059367653578485, 
+                    0.5675295645542545, 
+                    0.5675295645542545, 
+                    0.5305552829103335, 
+                    0.5305552829103335, 
+                    0.49733059241087335, 
+                    0.49733059241087335, 
+                    0.4646449581496059, 
+                    0.4646449581496059, 
+                    0.4340107796595345, 
+                    0.4340107796595345, 
+                    0.4028454725577529, 
+                    0.4028454725577529, 
+                    0.3765404054594251, 
+                    0.3765404054594251, 
+                    0.35084153401397145, 
+                    0.35084153401397145, 
+                    0.32850732668244403, 
+                    0.32850732668244403, 
+                    0.308205355903721, 
+                    0.308205355903721, 
+                    0.28962284488033263, 
+                    0.28962284488033263, 
+                    0.27335332493026254, 
+                    0.27335332493026254, 
+                    0.2581779976969902, 
+                    0.2581779976969902, 
+                    0.24468358330091566, 
+                    0.24468358330091566, 
+                    0.2322194915939059, 
+                    0.2322194915939059, 
+                    0.2303993979217019, 
+                    0.2303993979217019, 
+                    0.22600955497098946, 
+                    0.22600955497098946, 
+                    0.21037530651174016, 
+                    0.21037530651174016, 
+                    0.19226014214517664, 
+                    0.19226014214517664, 
+                    0.17226673042702148, 
+                    0.17226673042702148, 
+                    0.15070999787849879, 
+                    0.15070999787849879, 
+                    0.12757991805300303, 
+                    0.12757991805300303, 
+                    0.10260114806406613, 
+                    0.10260114806406613
+                ], 
+                0.08959748595952988
+            ], 
+            [
+                1.030652642250061, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996890147703208, 
+                    0.9996890147703208, 
+                    0.9989401770942556, 
+                    0.9989401770942556, 
+                    0.9950435985423559, 
+                    0.9950435985423559, 
+                    0.9681994218070822, 
+                    0.9681994218070822, 
+                    0.9330735563903574, 
+                    0.9330735563903574, 
+                    0.896016192699099, 
+                    0.896016192699099, 
+                    0.8556385567137106, 
+                    0.8556385567137106, 
+                    0.8135775498624527, 
+                    0.8135775498624527, 
+                    0.7705754838357574, 
+                    0.7705754838357574, 
+                    0.7270797981993379, 
+                    0.7270797981993379, 
+                    0.6845001513001777, 
+                    0.6845001513001777, 
+                    0.6429964110439578, 
+                    0.6429964110439578, 
+                    0.602809760925784, 
+                    0.602809760925784, 
+                    0.5636579183086609, 
+                    0.5636579183086609, 
+                    0.5279661888939525, 
+                    0.5279661888939525, 
+                    0.493514668208499, 
+                    0.493514668208499, 
+                    0.4620787106590588, 
+                    0.4620787106590588, 
+                    0.43068541243632585, 
+                    0.43068541243632585, 
+                    0.4004409747794989, 
+                    0.4004409747794989, 
+                    0.37364019670838344, 
+                    0.37364019670838344, 
+                    0.3484520169083561, 
+                    0.3484520169083561, 
+                    0.32609257596045726, 
+                    0.32609257596045726, 
+                    0.3059504780202423, 
+                    0.3059504780202423, 
+                    0.2874789799975225, 
+                    0.2874789799975225, 
+                    0.27131977971653787, 
+                    0.27131977971653787, 
+                    0.2562488971094905, 
+                    0.2562488971094905, 
+                    0.24283419242269613, 
+                    0.24283419242269613, 
+                    0.23028948526377807, 
+                    0.23028948526377807, 
+                    0.22716836642215035, 
+                    0.22716836642215035, 
+                    0.22680516011787188, 
+                    0.22680516011787188, 
+                    0.21036707288633338, 
+                    0.21036707288633338, 
+                    0.19204010635532465, 
+                    0.19204010635532465, 
+                    0.1719885259194083, 
+                    0.1719885259194083, 
+                    0.1504374329117629, 
+                    0.1504374329117629, 
+                    0.12735725825395175, 
+                    0.12735725825395175, 
+                    0.10248461730049181, 
+                    0.10248461730049181
+                ], 
+                0.08355392515659332
+            ], 
+            [
+                1.0384615659713745, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999995913244875, 
+                    0.999995913244875, 
+                    0.9997450839595385, 
+                    0.9997450839595385, 
+                    0.9987684898614716, 
+                    0.9987684898614716, 
+                    0.9943267033838529, 
+                    0.9943267033838529, 
+                    0.9667872583813557, 
+                    0.9667872583813557, 
+                    0.931144555385051, 
+                    0.931144555385051, 
+                    0.8936999904138431, 
+                    0.8936999904138431, 
+                    0.8529486303103961, 
+                    0.8529486303103961, 
+                    0.8106035109278037, 
+                    0.8106035109278037, 
+                    0.7673866252554551, 
+                    0.7673866252554551, 
+                    0.723750217572857, 
+                    0.723750217572857, 
+                    0.6811117010362309, 
+                    0.6811117010362309, 
+                    0.6395338433123768, 
+                    0.6395338433123768, 
+                    0.5994898483990938, 
+                    0.5994898483990938, 
+                    0.5602461633900819, 
+                    0.5602461633900819, 
+                    0.524776128416531, 
+                    0.524776128416531, 
+                    0.49036534310877883, 
+                    0.49036534310877883, 
+                    0.45896492771494524, 
+                    0.45896492771494524, 
+                    0.4278579733602727, 
+                    0.4278579733602727, 
+                    0.3975104259748185, 
+                    0.3975104259748185, 
+                    0.37112476728875415, 
+                    0.37112476728875415, 
+                    0.3458983024046442, 
+                    0.3458983024046442, 
+                    0.3237531995905398, 
+                    0.3237531995905398, 
+                    0.30371319695008975, 
+                    0.30371319695008975, 
+                    0.28536646076801536, 
+                    0.28536646076801536, 
+                    0.2693251365369288, 
+                    0.2693251365369288, 
+                    0.25433037421581084, 
+                    0.25433037421581084, 
+                    0.24099667224254254, 
+                    0.24099667224254254, 
+                    0.22886724301933226, 
+                    0.22886724301933226, 
+                    0.22638081964880105, 
+                    0.22638081964880105, 
+                    0.22638081964880105, 
+                    0.22638081964880105, 
+                    0.2097019505716085, 
+                    0.2097019505716085, 
+                    0.19127199377437512, 
+                    0.19127199377437512, 
+                    0.17120305435235364, 
+                    0.17120305435235364, 
+                    0.1497003318445641, 
+                    0.1497003318445641, 
+                    0.1267367878695698, 
+                    0.1267367878695698, 
+                    0.10212644887246963, 
+                    0.10212644887246963
+                ], 
+                0.07786422222852707
+            ], 
+            [
+                1.0463296175003052, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991571953482785, 
+                    0.9991571953482785, 
+                    0.9972508315714259, 
+                    0.9972508315714259, 
+                    0.9922520473321313, 
+                    0.9922520473321313, 
+                    0.9733766398181666, 
+                    0.9733766398181666, 
+                    0.9308089054855883, 
+                    0.9308089054855883, 
+                    0.8914725584996823, 
+                    0.8914725584996823, 
+                    0.8501856874607652, 
+                    0.8501856874607652, 
+                    0.8075346116382808, 
+                    0.8075346116382808, 
+                    0.7641435347491573, 
+                    0.7641435347491573, 
+                    0.7203955315055669, 
+                    0.7203955315055669, 
+                    0.6776557542648597, 
+                    0.6776557542648597, 
+                    0.6362133444862998, 
+                    0.6362133444862998, 
+                    0.5958496155242121, 
+                    0.5958496155242121, 
+                    0.5573028397070058, 
+                    0.5573028397070058, 
+                    0.5211011230712195, 
+                    0.5211011230712195, 
+                    0.4875598739301098, 
+                    0.4875598739301098, 
+                    0.4557819966302516, 
+                    0.4557819966302516, 
+                    0.42504162023453734, 
+                    0.42504162023453734, 
+                    0.3947633591531453, 
+                    0.3947633591531453, 
+                    0.368491001347105, 
+                    0.368491001347105, 
+                    0.3434428721787017, 
+                    0.3434428721787017, 
+                    0.32140188026652433, 
+                    0.32140188026652433, 
+                    0.30148673211054144, 
+                    0.30148673211054144, 
+                    0.2832484804393345, 
+                    0.2832484804393345, 
+                    0.26729703120838266, 
+                    0.26729703120838266, 
+                    0.25241941627460057, 
+                    0.25241941627460057, 
+                    0.2391924611648121, 
+                    0.2391924611648121, 
+                    0.22698313233854378, 
+                    0.22698313233854378, 
+                    0.22500358898009026, 
+                    0.22500358898009026, 
+                    0.22500358898009026, 
+                    0.22500358898009026, 
+                    0.2093994192576537, 
+                    0.2093994192576537, 
+                    0.1910425889887562, 
+                    0.1910425889887562, 
+                    0.17105476288835025, 
+                    0.17105476288835025, 
+                    0.14962507377668574, 
+                    0.14962507377668574, 
+                    0.12672454580435155, 
+                    0.12672454580435155, 
+                    0.10213992638882109, 
+                    0.10213992638882109
+                ], 
+                0.0724601075053215
+            ], 
+            [
+                1.0542572736740112, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988922051177286, 
+                    0.9988922051177286, 
+                    0.9970267405874221, 
+                    0.9970267405874221, 
+                    0.9914133548284643, 
+                    0.9914133548284643, 
+                    0.970966574505463, 
+                    0.970966574505463, 
+                    0.9285785257931327, 
+                    0.9285785257931327, 
+                    0.889067583484709, 
+                    0.889067583484709, 
+                    0.8474292131789779, 
+                    0.8474292131789779, 
+                    0.8044892229368156, 
+                    0.8044892229368156, 
+                    0.7608990828778612, 
+                    0.7608990828778612, 
+                    0.7170343493798526, 
+                    0.7170343493798526, 
+                    0.674221876663728, 
+                    0.674221876663728, 
+                    0.6328370120606894, 
+                    0.6328370120606894, 
+                    0.5923445790308524, 
+                    0.5923445790308524, 
+                    0.5541139205748916, 
+                    0.5541139205748916, 
+                    0.5176753483343931, 
+                    0.5176753483343931, 
+                    0.48454798646995073, 
+                    0.48454798646995073, 
+                    0.4526878712678567, 
+                    0.4526878712678567, 
+                    0.42219954515413854, 
+                    0.42219954515413854, 
+                    0.3919985353157922, 
+                    0.3919985353157922, 
+                    0.36590419794718754, 
+                    0.36590419794718754, 
+                    0.3409747739565636, 
+                    0.3409747739565636, 
+                    0.3190690663085721, 
+                    0.3190690663085721, 
+                    0.2992722481898943, 
+                    0.2992722481898943, 
+                    0.281149508265917, 
+                    0.281149508265917, 
+                    0.2653031717342417, 
+                    0.2653031717342417, 
+                    0.25052987888268186, 
+                    0.25052987888268186, 
+                    0.23739437506604047, 
+                    0.23739437506604047, 
+                    0.22526149922497624, 
+                    0.22526149922497624, 
+                    0.22196410593323468, 
+                    0.22196410593323468, 
+                    0.22196410593323468, 
+                    0.22196410593323468, 
+                    0.20981551408012913, 
+                    0.20981551408012913, 
+                    0.19097347827659505, 
+                    0.19097347827659505, 
+                    0.17079784215031935, 
+                    0.17079784215031935, 
+                    0.14930112197517206, 
+                    0.14930112197517206, 
+                    0.12641553795878974, 
+                    0.12641553795878974, 
+                    0.1019683556404308, 
+                    0.1019683556404308
+                ], 
+                0.06733083724975586
+            ], 
+            [
+                1.0622448921203613, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988454160259391, 
+                    0.9988454160259391, 
+                    0.9969390854458167, 
+                    0.9969390854458167, 
+                    0.9907751700031872, 
+                    0.9907751700031872, 
+                    0.9688027994000176, 
+                    0.9688027994000176, 
+                    0.9261988909161307, 
+                    0.9261988909161307, 
+                    0.8866416965194628, 
+                    0.8866416965194628, 
+                    0.844648050097568, 
+                    0.844648050097568, 
+                    0.8014360379446476, 
+                    0.8014360379446476, 
+                    0.7576582386833486, 
+                    0.7576582386833486, 
+                    0.7136592968430017, 
+                    0.7136592968430017, 
+                    0.6708526378513847, 
+                    0.6708526378513847, 
+                    0.62924744007042, 
+                    0.62924744007042, 
+                    0.5893058031888229, 
+                    0.5893058031888229, 
+                    0.550226098091147, 
+                    0.550226098091147, 
+                    0.5150909117948089, 
+                    0.5150909117948089, 
+                    0.48093597007710454, 
+                    0.48093597007710454, 
+                    0.4499795533671791, 
+                    0.4499795533671791, 
+                    0.41917237627649423, 
+                    0.41917237627649423, 
+                    0.38937797191997187, 
+                    0.38937797191997187, 
+                    0.36327283075276673, 
+                    0.36327283075276673, 
+                    0.3385555171153513, 
+                    0.3385555171153513, 
+                    0.3167555048884913, 
+                    0.3167555048884913, 
+                    0.297087255800606, 
+                    0.297087255800606, 
+                    0.279077954590281, 
+                    0.279077954590281, 
+                    0.26333757896380977, 
+                    0.26333757896380977, 
+                    0.24867714243206407, 
+                    0.24867714243206407, 
+                    0.23586560520860808, 
+                    0.23586560520860808, 
+                    0.22347827419253868, 
+                    0.22347827419253868, 
+                    0.22118475020398076, 
+                    0.22118475020398076, 
+                    0.22118475020398076, 
+                    0.22118475020398076, 
+                    0.20910458973208246, 
+                    0.20910458973208246, 
+                    0.19030174101260858, 
+                    0.19030174101260858, 
+                    0.1701494413569744, 
+                    0.1701494413569744, 
+                    0.14871081461191193, 
+                    0.14871081461191193, 
+                    0.1259321654898097, 
+                    0.1259321654898097, 
+                    0.10172281734694626, 
+                    0.10172281734694626
+                ], 
+                0.06253234297037125
+            ], 
+            [
+                1.0702931880950928, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989197192808645, 
+                    0.9989197192808645, 
+                    0.9964137620496117, 
+                    0.9964137620496117, 
+                    0.9887648270674124, 
+                    0.9887648270674124, 
+                    0.9631423999628211, 
+                    0.9631423999628211, 
+                    0.923204830736879, 
+                    0.923204830736879, 
+                    0.8840558758640885, 
+                    0.8840558758640885, 
+                    0.8418148177588225, 
+                    0.8418148177588225, 
+                    0.7983536047567117, 
+                    0.7983536047567117, 
+                    0.7543927096913516, 
+                    0.7543927096913516, 
+                    0.7102729690837992, 
+                    0.7102729690837992, 
+                    0.6674576248491583, 
+                    0.6674576248491583, 
+                    0.6257550097314492, 
+                    0.6257550097314492, 
+                    0.5860597335394157, 
+                    0.5860597335394157, 
+                    0.5466753780353226, 
+                    0.5466753780353226, 
+                    0.5120550932638378, 
+                    0.5120550932638378, 
+                    0.47765888028215053, 
+                    0.47765888028215053, 
+                    0.44707809132290277, 
+                    0.44707809132290277, 
+                    0.41628250296767083, 
+                    0.41628250296767083, 
+                    0.3866944443690105, 
+                    0.3866944443690105, 
+                    0.360694347377295, 
+                    0.360694347377295, 
+                    0.3361271534850367, 
+                    0.3361271534850367, 
+                    0.3144490991867192, 
+                    0.3144490991867192, 
+                    0.2948996163217252, 
+                    0.2948996163217252, 
+                    0.27700716927190056, 
+                    0.27700716927190056, 
+                    0.26137451197979694, 
+                    0.26137451197979694, 
+                    0.2468078119266268, 
+                    0.2468078119266268, 
+                    0.2338512087492367, 
+                    0.2338512087492367, 
+                    0.22218642814660966, 
+                    0.22218642814660966, 
+                    0.2171063477489975, 
+                    0.2171063477489975, 
+                    0.2171063477489975, 
+                    0.2171063477489975, 
+                    0.20877237931368844, 
+                    0.20877237931368844, 
+                    0.1899282309225192, 
+                    0.1899282309225192, 
+                    0.16989514663691507, 
+                    0.16989514663691507, 
+                    0.14859685660049948, 
+                    0.14859685660049948, 
+                    0.12594010052259139, 
+                    0.12594010052259139, 
+                    0.10181015192506879, 
+                    0.10181015192506879
+                ], 
+                0.05795729160308838
+            ], 
+            [
+                1.0784024000167847, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987928790165876, 
+                    0.9987928790165876, 
+                    0.9962656079861947, 
+                    0.9962656079861947, 
+                    0.9881076125794985, 
+                    0.9881076125794985, 
+                    0.9617567547502894, 
+                    0.9617567547502894, 
+                    0.9215044067980495, 
+                    0.9215044067980495, 
+                    0.8816187639204807, 
+                    0.8816187639204807, 
+                    0.8389871297835527, 
+                    0.8389871297835527, 
+                    0.7952579508048824, 
+                    0.7952579508048824, 
+                    0.7511103518798519, 
+                    0.7511103518798519, 
+                    0.7069213378016646, 
+                    0.7069213378016646, 
+                    0.6639246507372177, 
+                    0.6639246507372177, 
+                    0.6226102601789638, 
+                    0.6226102601789638, 
+                    0.5820878800392799, 
+                    0.5820878800392799, 
+                    0.5442978110550872, 
+                    0.5442978110550872, 
+                    0.5079036335205159, 
+                    0.5079036335205159, 
+                    0.4752899732352503, 
+                    0.4752899732352503, 
+                    0.44369574819774904, 
+                    0.44369574819774904, 
+                    0.4136473277133816, 
+                    0.4136473277133816, 
+                    0.38386846818342757, 
+                    0.38386846818342757, 
+                    0.35820510916128173, 
+                    0.35820510916128173, 
+                    0.33369322030338505, 
+                    0.33369322030338505, 
+                    0.3121783213127884, 
+                    0.3121783213127884, 
+                    0.29274451883111074, 
+                    0.29274451883111074, 
+                    0.27496864423635736, 
+                    0.27496864423635736, 
+                    0.25943669530304303, 
+                    0.25943669530304303, 
+                    0.2449634418286382, 
+                    0.2449634418286382, 
+                    0.2320993937572983, 
+                    0.2320993937572983, 
+                    0.22019614664475148, 
+                    0.22019614664475148, 
+                    0.2165779451837866, 
+                    0.2165779451837866, 
+                    0.2165779451837866, 
+                    0.2165779451837866, 
+                    0.21009679810463783, 
+                    0.21009679810463783, 
+                    0.19039611809941245, 
+                    0.19039611809941245, 
+                    0.16993079524524618, 
+                    0.16993079524524618, 
+                    0.14839877256832573, 
+                    0.14839877256832573, 
+                    0.1256483642714271, 
+                    0.1256483642714271, 
+                    0.1016001592496126, 
+                    0.1016001592496126
+                ], 
+                0.053685735911130905
+            ]
+        ]
+    }, 
+    {
+        "block_size": 79, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9281677603721619, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999987441347967, 
+                    0.9999987441347967, 
+                    0.999618952634948, 
+                    0.999618952634948, 
+                    0.9991987257910789, 
+                    0.9991987257910789, 
+                    0.9930398186328759, 
+                    0.9930398186328759, 
+                    0.9752191786082585, 
+                    0.9752191786082585, 
+                    0.9551944824959412, 
+                    0.9551944824959412, 
+                    0.9291822406260432, 
+                    0.9291822406260432, 
+                    0.8972412826821933, 
+                    0.8972412826821933, 
+                    0.8620166741578161, 
+                    0.8620166741578161, 
+                    0.8241065300348028, 
+                    0.8241065300348028, 
+                    0.7851133373849203, 
+                    0.7851133373849203, 
+                    0.7458848786422357, 
+                    0.7458848786422357, 
+                    0.7078119463443752, 
+                    0.7078119463443752, 
+                    0.6688536802673579, 
+                    0.6688536802673579, 
+                    0.6305893180988181, 
+                    0.6305893180988181, 
+                    0.5938395261312382, 
+                    0.5938395261312382, 
+                    0.5590868936918962, 
+                    0.5590868936918962, 
+                    0.5257871353825356, 
+                    0.5257871353825356, 
+                    0.4937937406966169, 
+                    0.4937937406966169, 
+                    0.46331515203365314, 
+                    0.46331515203365314, 
+                    0.43508872437858315, 
+                    0.43508872437858315, 
+                    0.40965286573079, 
+                    0.40965286573079, 
+                    0.38633107199486294, 
+                    0.38633107199486294, 
+                    0.3656034464210917, 
+                    0.3656034464210917, 
+                    0.3463316248345858, 
+                    0.3463316248345858, 
+                    0.32939730563226466, 
+                    0.32939730563226466, 
+                    0.3137161760358261, 
+                    0.3137161760358261, 
+                    0.29932701377205195, 
+                    0.29932701377205195, 
+                    0.2869841379724286, 
+                    0.2869841379724286, 
+                    0.27495102043989733, 
+                    0.27495102043989733, 
+                    0.2602118275547291, 
+                    0.2602118275547291, 
+                    0.24235599351091036, 
+                    0.24235599351091036, 
+                    0.22186495744652562, 
+                    0.22186495744652562, 
+                    0.1991960906228446, 
+                    0.1991960906228446, 
+                    0.1744167241011607, 
+                    0.1744167241011607, 
+                    0.14714095473664193, 
+                    0.14714095473664193, 
+                    0.11595800263990858, 
+                    0.11595800263990858
+                ], 
+                0.30782192945480347
+            ], 
+            [
+                0.9351124167442322, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999197270521502, 
+                    0.9999197270521502, 
+                    0.9999197270521502, 
+                    0.9999197270521502, 
+                    0.9937400858294723, 
+                    0.9937400858294723, 
+                    0.9780954862134505, 
+                    0.9780954862134505, 
+                    0.9576958002219975, 
+                    0.9576958002219975, 
+                    0.9283727443585296, 
+                    0.9283727443585296, 
+                    0.8950407710912466, 
+                    0.8950407710912466, 
+                    0.8588855795104474, 
+                    0.8588855795104474, 
+                    0.8201119647829207, 
+                    0.8201119647829207, 
+                    0.7808188404905873, 
+                    0.7808188404905873, 
+                    0.7424646547414345, 
+                    0.7424646547414345, 
+                    0.7045560680930731, 
+                    0.7045560680930731, 
+                    0.6653638168193903, 
+                    0.6653638168193903, 
+                    0.6271732056208524, 
+                    0.6271732056208524, 
+                    0.5904293927797974, 
+                    0.5904293927797974, 
+                    0.5555466045726982, 
+                    0.5555466045726982, 
+                    0.5225373961350135, 
+                    0.5225373961350135, 
+                    0.4905241725485749, 
+                    0.4905241725485749, 
+                    0.46009526702818787, 
+                    0.46009526702818787, 
+                    0.43209843027763, 
+                    0.43209843027763, 
+                    0.40669500784128176, 
+                    0.40669500784128176, 
+                    0.3835073078328474, 
+                    0.3835073078328474, 
+                    0.36289020881821676, 
+                    0.36289020881821676, 
+                    0.3437289024862783, 
+                    0.3437289024862783, 
+                    0.3268936923091805, 
+                    0.3268936923091805, 
+                    0.3112851521137072, 
+                    0.3112851521137072, 
+                    0.296698356704565, 
+                    0.296698356704565, 
+                    0.2823186762712432, 
+                    0.2823186762712432, 
+                    0.2738417860471585, 
+                    0.2738417860471585, 
+                    0.265027543634751, 
+                    0.265027543634751, 
+                    0.251773868284617, 
+                    0.251773868284617, 
+                    0.23440485291568566, 
+                    0.23440485291568566, 
+                    0.21368945313469095, 
+                    0.21368945313469095, 
+                    0.18979321400710203, 
+                    0.18979321400710203, 
+                    0.1621657752977277, 
+                    0.1621657752977277, 
+                    0.12857409573192094, 
+                    0.12857409573192094
+                ], 
+                0.29447290301322937
+            ], 
+            [
+                0.9421090483665466, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987427173177426, 
+                    0.9987427173177426, 
+                    0.9916063000693591, 
+                    0.9916063000693591, 
+                    0.9764894277521702, 
+                    0.9764894277521702, 
+                    0.9540077819935737, 
+                    0.9540077819935737, 
+                    0.925896470120159, 
+                    0.925896470120159, 
+                    0.8927359358798093, 
+                    0.8927359358798093, 
+                    0.856678220598983, 
+                    0.856678220598983, 
+                    0.8179142783965944, 
+                    0.8179142783965944, 
+                    0.7787290679252005, 
+                    0.7787290679252005, 
+                    0.7392542993275724, 
+                    0.7392542993275724, 
+                    0.701048370636941, 
+                    0.701048370636941, 
+                    0.6617365538664511, 
+                    0.6617365538664511, 
+                    0.623752010074798, 
+                    0.623752010074798, 
+                    0.5868010768415075, 
+                    0.5868010768415075, 
+                    0.5523491458149309, 
+                    0.5523491458149309, 
+                    0.5190223159492434, 
+                    0.5190223159492434, 
+                    0.4874045197787531, 
+                    0.4874045197787531, 
+                    0.4568594964155995, 
+                    0.4568594964155995, 
+                    0.4291819907285242, 
+                    0.4291819907285242, 
+                    0.40376984270850097, 
+                    0.40376984270850097, 
+                    0.38074101337186056, 
+                    0.38074101337186056, 
+                    0.3602234427834413, 
+                    0.3602234427834413, 
+                    0.34117149973289207, 
+                    0.34117149973289207, 
+                    0.32443176548162994, 
+                    0.32443176548162994, 
+                    0.3089691106420955, 
+                    0.3089691106420955, 
+                    0.29512547508214704, 
+                    0.29512547508214704, 
+                    0.2821287775405551, 
+                    0.2821287775405551, 
+                    0.27103309284705124, 
+                    0.27103309284705124, 
+                    0.2591897853827104, 
+                    0.2591897853827104, 
+                    0.24366485498324159, 
+                    0.24366485498324159, 
+                    0.2248151928119261, 
+                    0.2248151928119261, 
+                    0.20325383359222324, 
+                    0.20325383359222324, 
+                    0.17910135329717536, 
+                    0.17910135329717536, 
+                    0.1519053320315169, 
+                    0.1519053320315169, 
+                    0.1199355977490164, 
+                    0.1199355977490164
+                ], 
+                0.2800584137439728
+            ], 
+            [
+                0.9491580724716187, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999940938530288, 
+                    0.9999940938530288, 
+                    0.9999940938530288, 
+                    0.9999940938530288, 
+                    0.9911453343338806, 
+                    0.9911453343338806, 
+                    0.9751094810543688, 
+                    0.9751094810543688, 
+                    0.9525684762421299, 
+                    0.9525684762421299, 
+                    0.9242114693705878, 
+                    0.9242114693705878, 
+                    0.8909478209101739, 
+                    0.8909478209101739, 
+                    0.8539087237002185, 
+                    0.8539087237002185, 
+                    0.8153366208641232, 
+                    0.8153366208641232, 
+                    0.7755888605056923, 
+                    0.7755888605056923, 
+                    0.7359252314345556, 
+                    0.7359252314345556, 
+                    0.6975320086223395, 
+                    0.6975320086223395, 
+                    0.658428577357879, 
+                    0.658428577357879, 
+                    0.6201063488493548, 
+                    0.6201063488493548, 
+                    0.5835295236478633, 
+                    0.5835295236478633, 
+                    0.548744057944506, 
+                    0.548744057944506, 
+                    0.5158537809434462, 
+                    0.5158537809434462, 
+                    0.4840793137226166, 
+                    0.4840793137226166, 
+                    0.4537933310375946, 
+                    0.4537933310375946, 
+                    0.4261496368673144, 
+                    0.4261496368673144, 
+                    0.4008823903291166, 
+                    0.4008823903291166, 
+                    0.37797631289035666, 
+                    0.37797631289035666, 
+                    0.3575648534128994, 
+                    0.3575648534128994, 
+                    0.33862984816168806, 
+                    0.33862984816168806, 
+                    0.3220194378523162, 
+                    0.3220194378523162, 
+                    0.30656604393771686, 
+                    0.30656604393771686, 
+                    0.2913149847490233, 
+                    0.2913149847490233, 
+                    0.27887878718900283, 
+                    0.27887878718900283, 
+                    0.26899559335350776, 
+                    0.26899559335350776, 
+                    0.25556223443923604, 
+                    0.25556223443923604, 
+                    0.23863160862959576, 
+                    0.23863160862959576, 
+                    0.2188738421415122, 
+                    0.2188738421415122, 
+                    0.19681547688910622, 
+                    0.19681547688910622, 
+                    0.17254151460854422, 
+                    0.17254151460854422, 
+                    0.14565712851862936, 
+                    0.14565712851862936, 
+                    0.11473863335545985, 
+                    0.11473863335545985
+                ], 
+                0.2655041217803955
+            ], 
+            [
+                0.9562597870826721, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999928687427354, 
+                    0.9999928687427354, 
+                    0.9999928687427354, 
+                    0.9999928687427354, 
+                    0.9999928687427354, 
+                    0.9999928687427354, 
+                    0.9895577339163996, 
+                    0.9895577339163996, 
+                    0.9754318954058718, 
+                    0.9754318954058718, 
+                    0.9511236909136417, 
+                    0.9511236909136417, 
+                    0.922489004418044, 
+                    0.922489004418044, 
+                    0.888229367648387, 
+                    0.888229367648387, 
+                    0.8509958097888, 
+                    0.8509958097888, 
+                    0.8117084483788217, 
+                    0.8117084483788217, 
+                    0.7720284500600036, 
+                    0.7720284500600036, 
+                    0.732379409047845, 
+                    0.732379409047845, 
+                    0.694035686014747, 
+                    0.694035686014747, 
+                    0.6547955217651145, 
+                    0.6547955217651145, 
+                    0.6168231746131333, 
+                    0.6168231746131333, 
+                    0.5796968681911501, 
+                    0.5796968681911501, 
+                    0.5458360790737637, 
+                    0.5458360790737637, 
+                    0.5120121596944986, 
+                    0.5120121596944986, 
+                    0.48131518491067615, 
+                    0.48131518491067615, 
+                    0.45027665806105016, 
+                    0.45027665806105016, 
+                    0.4234133327862987, 
+                    0.4234133327862987, 
+                    0.3978913689253302, 
+                    0.3978913689253302, 
+                    0.3752449224470107, 
+                    0.3752449224470107, 
+                    0.3549059671400594, 
+                    0.3549059671400594, 
+                    0.3360835770442178, 
+                    0.3360835770442178, 
+                    0.3195795092341689, 
+                    0.3195795092341689, 
+                    0.30430119178876386, 
+                    0.30430119178876386, 
+                    0.28924319493967987, 
+                    0.28924319493967987, 
+                    0.27461007401373844, 
+                    0.27461007401373844, 
+                    0.26624259834261976, 
+                    0.26624259834261976, 
+                    0.2564934324717141, 
+                    0.2564934324717141, 
+                    0.24241275168482054, 
+                    0.24241275168482054, 
+                    0.22461454034523276, 
+                    0.22461454034523276, 
+                    0.20382472065082102, 
+                    0.20382472065082102, 
+                    0.1801889032235479, 
+                    0.1801889032235479, 
+                    0.1532145350435375, 
+                    0.1532145350435375, 
+                    0.12100070829500516, 
+                    0.12100070829500516
+                ], 
+                0.2525395452976227
+            ], 
+            [
+                0.9634146094322205, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997483633477926, 
+                    0.9997483633477926, 
+                    0.9994667510870024, 
+                    0.9994667510870024, 
+                    0.98982597077746, 
+                    0.98982597077746, 
+                    0.971474986082803, 
+                    0.971474986082803, 
+                    0.9485127728671437, 
+                    0.9485127728671437, 
+                    0.9197786832386, 
+                    0.9197786832386, 
+                    0.8857104001814926, 
+                    0.8857104001814926, 
+                    0.8484114280334052, 
+                    0.8484114280334052, 
+                    0.8091305297382114, 
+                    0.8091305297382114, 
+                    0.7691216169491686, 
+                    0.7691216169491686, 
+                    0.7291564868025173, 
+                    0.7291564868025173, 
+                    0.6906693728084793, 
+                    0.6906693728084793, 
+                    0.6513881070985256, 
+                    0.6513881070985256, 
+                    0.6133043349371042, 
+                    0.6133043349371042, 
+                    0.5763415358072309, 
+                    0.5763415358072309, 
+                    0.5425256868756216, 
+                    0.5425256868756216, 
+                    0.5086297591402357, 
+                    0.5086297591402357, 
+                    0.4783888593319803, 
+                    0.4783888593319803, 
+                    0.4470342667499204, 
+                    0.4470342667499204, 
+                    0.4205988815730362, 
+                    0.4205988815730362, 
+                    0.3950731680559271, 
+                    0.3950731680559271, 
+                    0.37255882522555256, 
+                    0.37255882522555256, 
+                    0.3523314876473541, 
+                    0.3523314876473541, 
+                    0.33360959711775895, 
+                    0.33360959711775895, 
+                    0.31717746229064453, 
+                    0.31717746229064453, 
+                    0.301973808134198, 
+                    0.301973808134198, 
+                    0.28809561596141603, 
+                    0.28809561596141603, 
+                    0.2772411794083315, 
+                    0.2772411794083315, 
+                    0.26587728191159415, 
+                    0.26587728191159415, 
+                    0.2508014476399167, 
+                    0.2508014476399167, 
+                    0.23269051162952767, 
+                    0.23269051162952767, 
+                    0.21222114839997386, 
+                    0.21222114839997386, 
+                    0.18986303072344352, 
+                    0.18986303072344352, 
+                    0.16570497802304748, 
+                    0.16570497802304748, 
+                    0.13945733513418737, 
+                    0.13945733513418737, 
+                    0.11007075059944989, 
+                    0.11007075059944989
+                ], 
+                0.23915886878967285
+            ], 
+            [
+                0.9706230163574219, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999449234321399, 
+                    0.9999449234321399, 
+                    0.9999380995019925, 
+                    0.9999380995019925, 
+                    0.9990082037689209, 
+                    0.9990082037689209, 
+                    0.9958113993787221, 
+                    0.9958113993787221, 
+                    0.9728805792136521, 
+                    0.9728805792136521, 
+                    0.9466245473157588, 
+                    0.9466245473157588, 
+                    0.9172547766264075, 
+                    0.9172547766264075, 
+                    0.8833129824546171, 
+                    0.8833129824546171, 
+                    0.8454852578013693, 
+                    0.8454852578013693, 
+                    0.8061457483955752, 
+                    0.8061457483955752, 
+                    0.7657529743967496, 
+                    0.7657529743967496, 
+                    0.725664532936727, 
+                    0.725664532936727, 
+                    0.6871758134927818, 
+                    0.6871758134927818, 
+                    0.6478728834851086, 
+                    0.6478728834851086, 
+                    0.6097166956441866, 
+                    0.6097166956441866, 
+                    0.5732015669756183, 
+                    0.5732015669756183, 
+                    0.5386677628851047, 
+                    0.5386677628851047, 
+                    0.5059324395097747, 
+                    0.5059324395097747, 
+                    0.47456917360926004, 
+                    0.47456917360926004, 
+                    0.4445622138991403, 
+                    0.4445622138991403, 
+                    0.417242332150648, 
+                    0.417242332150648, 
+                    0.3923753821717718, 
+                    0.3923753821717718, 
+                    0.36978839061116514, 
+                    0.36978839061116514, 
+                    0.34972140022527054, 
+                    0.34972140022527054, 
+                    0.33110813445778214, 
+                    0.33110813445778214, 
+                    0.3147901808739237, 
+                    0.3147901808739237, 
+                    0.2996834091373264, 
+                    0.2996834091373264, 
+                    0.28554708480160323, 
+                    0.28554708480160323, 
+                    0.27222473532175906, 
+                    0.27222473532175906, 
+                    0.2629821051625299, 
+                    0.2629821051625299, 
+                    0.2508038152316909, 
+                    0.2508038152316909, 
+                    0.23487858342124054, 
+                    0.23487858342124054, 
+                    0.21592945283670503, 
+                    0.21592945283670503, 
+                    0.1945805072257888, 
+                    0.1945805072257888, 
+                    0.1709684625387096, 
+                    0.1709684625387096, 
+                    0.1447346414769563, 
+                    0.1447346414769563, 
+                    0.11447509623667476, 
+                    0.11447509623667476
+                ], 
+                0.2269519865512848
+            ], 
+            [
+                0.977885365486145, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999142023824603, 
+                    0.9999142023824603, 
+                    0.9992994569949487, 
+                    0.9992994569949487, 
+                    0.9992994569949487, 
+                    0.9992994569949487, 
+                    0.9942708105831672, 
+                    0.9942708105831672, 
+                    0.9713686850144613, 
+                    0.9713686850144613, 
+                    0.9461468899484361, 
+                    0.9461468899484361, 
+                    0.9158454351092903, 
+                    0.9158454351092903, 
+                    0.8806602324501921, 
+                    0.8806602324501921, 
+                    0.8428691929482383, 
+                    0.8428691929482383, 
+                    0.8028878618843444, 
+                    0.8028878618843444, 
+                    0.7625538195018049, 
+                    0.7625538195018049, 
+                    0.7228991483252883, 
+                    0.7228991483252883, 
+                    0.6836319083704607, 
+                    0.6836319083704607, 
+                    0.6447856082346839, 
+                    0.6447856082346839, 
+                    0.6064094407297919, 
+                    0.6064094407297919, 
+                    0.569585812549147, 
+                    0.569585812549147, 
+                    0.5359619522645686, 
+                    0.5359619522645686, 
+                    0.5026294950460051, 
+                    0.5026294950460051, 
+                    0.4724902643627419, 
+                    0.4724902643627419, 
+                    0.4413020744637766, 
+                    0.4413020744637766, 
+                    0.4145340768900806, 
+                    0.4145340768900806, 
+                    0.38914487369436185, 
+                    0.38914487369436185, 
+                    0.3670024920801866, 
+                    0.3670024920801866, 
+                    0.34693429685648786, 
+                    0.34693429685648786, 
+                    0.3285839102887338, 
+                    0.3285839102887338, 
+                    0.3124087303577017, 
+                    0.3124087303577017, 
+                    0.297405226578366, 
+                    0.297405226578366, 
+                    0.2836371017536301, 
+                    0.2836371017536301, 
+                    0.27170125778654947, 
+                    0.27170125778654947, 
+                    0.2610671337807772, 
+                    0.2610671337807772, 
+                    0.2493277419893944, 
+                    0.2493277419893944, 
+                    0.2340072829374523, 
+                    0.2340072829374523, 
+                    0.21552419921799493, 
+                    0.21552419921799493, 
+                    0.19454309597133562, 
+                    0.19454309597133562, 
+                    0.17123081366504916, 
+                    0.17123081366504916, 
+                    0.14524248070252901, 
+                    0.14524248070252901, 
+                    0.115157592678764, 
+                    0.115157592678764
+                ], 
+                0.21527957916259766
+            ], 
+            [
+                0.9852020144462585, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998078397808837, 
+                    0.9998078397808837, 
+                    0.9985380720167816, 
+                    0.9985380720167816, 
+                    0.9950922154856003, 
+                    0.9950922154856003, 
+                    0.9726271242589662, 
+                    0.9726271242589662, 
+                    0.9437359210959133, 
+                    0.9437359210959133, 
+                    0.9132442928877614, 
+                    0.9132442928877614, 
+                    0.8779376520165129, 
+                    0.8779376520165129, 
+                    0.8398036256561243, 
+                    0.8398036256561243, 
+                    0.7998086363751413, 
+                    0.7998086363751413, 
+                    0.7592621238429131, 
+                    0.7592621238429131, 
+                    0.7189382776481156, 
+                    0.7189382776481156, 
+                    0.680326267041596, 
+                    0.680326267041596, 
+                    0.6409265566631711, 
+                    0.6409265566631711, 
+                    0.6028316026190453, 
+                    0.6028316026190453, 
+                    0.566206488282488, 
+                    0.566206488282488, 
+                    0.5322370337405529, 
+                    0.5322370337405529, 
+                    0.49915206058106654, 
+                    0.49915206058106654, 
+                    0.4685711488011638, 
+                    0.4685711488011638, 
+                    0.43824907683073305, 
+                    0.43824907683073305, 
+                    0.411598904258156, 
+                    0.411598904258156, 
+                    0.3867348578184702, 
+                    0.3867348578184702, 
+                    0.36446828952298405, 
+                    0.36446828952298405, 
+                    0.34460453649149325, 
+                    0.34460453649149325, 
+                    0.32621864778460585, 
+                    0.32621864778460585, 
+                    0.3101136768308239, 
+                    0.3101136768308239, 
+                    0.2951364750993839, 
+                    0.2951364750993839, 
+                    0.28041825529777137, 
+                    0.28041825529777137, 
+                    0.26912453073287135, 
+                    0.26912453073287135, 
+                    0.2601072298844867, 
+                    0.2601072298844867, 
+                    0.24681805332227838, 
+                    0.24681805332227838, 
+                    0.23003415086262285, 
+                    0.23003415086262285, 
+                    0.2105700700841926, 
+                    0.2105700700841926, 
+                    0.18900380001353442, 
+                    0.18900380001353442, 
+                    0.1654595848438133, 
+                    0.1654595848438133, 
+                    0.13963683504163307, 
+                    0.13963683504163307, 
+                    0.11039749504753746, 
+                    0.11039749504753746
+                ], 
+                0.20289549231529236
+            ], 
+            [
+                0.9925734400749207, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999808674365237, 
+                    0.999808674365237, 
+                    0.9985229967054329, 
+                    0.9985229967054329, 
+                    0.9932118565761148, 
+                    0.9932118565761148, 
+                    0.9696454417833896, 
+                    0.9696454417833896, 
+                    0.9424943713868373, 
+                    0.9424943713868373, 
+                    0.9114939327568902, 
+                    0.9114939327568902, 
+                    0.8756944691352966, 
+                    0.8756944691352966, 
+                    0.8371355653480901, 
+                    0.8371355653480901, 
+                    0.7967063719680695, 
+                    0.7967063719680695, 
+                    0.7556518843699765, 
+                    0.7556518843699765, 
+                    0.7162842589649213, 
+                    0.7162842589649213, 
+                    0.6765716829492987, 
+                    0.6765716829492987, 
+                    0.6375029429151242, 
+                    0.6375029429151242, 
+                    0.5995070828966138, 
+                    0.5995070828966138, 
+                    0.5630098150751862, 
+                    0.5630098150751862, 
+                    0.5285270959989727, 
+                    0.5285270959989727, 
+                    0.49647599872443204, 
+                    0.49647599872443204, 
+                    0.46534884200742127, 
+                    0.46534884200742127, 
+                    0.43570559113098484, 
+                    0.43570559113098484, 
+                    0.40852573626600935, 
+                    0.40852573626600935, 
+                    0.3839884895190913, 
+                    0.3839884895190913, 
+                    0.36180643684112185, 
+                    0.36180643684112185, 
+                    0.342066344056615, 
+                    0.342066344056615, 
+                    0.3237818808457193, 
+                    0.3237818808457193, 
+                    0.30788662699430697, 
+                    0.30788662699430697, 
+                    0.2929270291551866, 
+                    0.2929270291551866, 
+                    0.2793666561321269, 
+                    0.2793666561321269, 
+                    0.26763055824115833, 
+                    0.26763055824115833, 
+                    0.2580561446082011, 
+                    0.2580561446082011, 
+                    0.24558678039018636, 
+                    0.24558678039018636, 
+                    0.22949056524486408, 
+                    0.22949056524486408, 
+                    0.21053352184874718, 
+                    0.21053352184874718, 
+                    0.18935288102452094, 
+                    0.18935288102452094, 
+                    0.16610065983337838, 
+                    0.16610065983337838, 
+                    0.1404788349387995, 
+                    0.1404788349387995, 
+                    0.1112941825213034, 
+                    0.1112941825213034
+                ], 
+                0.1921209692955017
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999390669001215, 
+                    0.999390669001215, 
+                    0.9984544219598119, 
+                    0.9984544219598119, 
+                    0.9933354329597697, 
+                    0.9933354329597697, 
+                    0.9683973236452715, 
+                    0.9683973236452715, 
+                    0.9408562117530647, 
+                    0.9408562117530647, 
+                    0.9094537763367629, 
+                    0.9094537763367629, 
+                    0.873107376025277, 
+                    0.873107376025277, 
+                    0.8342992939694743, 
+                    0.8342992939694743, 
+                    0.7934727428570092, 
+                    0.7934727428570092, 
+                    0.7528647495380696, 
+                    0.7528647495380696, 
+                    0.7121737914148197, 
+                    0.7121737914148197, 
+                    0.6733115348140933, 
+                    0.6733115348140933, 
+                    0.633998390311723, 
+                    0.633998390311723, 
+                    0.5960857866058213, 
+                    0.5960857866058213, 
+                    0.55918050609247, 
+                    0.55918050609247, 
+                    0.5260199892948364, 
+                    0.5260199892948364, 
+                    0.49245908005460676, 
+                    0.49245908005460676, 
+                    0.46282469913985846, 
+                    0.46282469913985846, 
+                    0.4320129796386496, 
+                    0.4320129796386496, 
+                    0.40599653111101486, 
+                    0.40599653111101486, 
+                    0.3811556681211208, 
+                    0.3811556681211208, 
+                    0.3591879882064408, 
+                    0.3591879882064408, 
+                    0.3395615642005058, 
+                    0.3395615642005058, 
+                    0.32139474513106603, 
+                    0.32139474513106603, 
+                    0.30547385294101864, 
+                    0.30547385294101864, 
+                    0.2907336331113727, 
+                    0.2907336331113727, 
+                    0.27722510417932344, 
+                    0.27722510417932344, 
+                    0.2657839065190976, 
+                    0.2657839065190976, 
+                    0.25664745528583854, 
+                    0.25664745528583854, 
+                    0.24409790758421887, 
+                    0.24409790758421887, 
+                    0.22791269336099973, 
+                    0.22791269336099973, 
+                    0.20892232960053553, 
+                    0.20892232960053553, 
+                    0.18777056643995585, 
+                    0.18777056643995585, 
+                    0.16461294772911175, 
+                    0.16461294772911175, 
+                    0.1391692080434991, 
+                    0.1391692080434991, 
+                    0.11031174218760936, 
+                    0.11031174218760936
+                ], 
+                0.18113204836845398
+            ], 
+            [
+                1.0074821710586548, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999578921949296, 
+                    0.9999578921949296, 
+                    0.9995414458713544, 
+                    0.9995414458713544, 
+                    0.9980370886483751, 
+                    0.9980370886483751, 
+                    0.9919238421903913, 
+                    0.9919238421903913, 
+                    0.9665056572414191, 
+                    0.9665056572414191, 
+                    0.9391495315178959, 
+                    0.9391495315178959, 
+                    0.9073245701732251, 
+                    0.9073245701732251, 
+                    0.8705903636674718, 
+                    0.8705903636674718, 
+                    0.8311394085856035, 
+                    0.8311394085856035, 
+                    0.7903795312465283, 
+                    0.7903795312465283, 
+                    0.749597499437289, 
+                    0.749597499437289, 
+                    0.7086080304018454, 
+                    0.7086080304018454, 
+                    0.6694796853958788, 
+                    0.6694796853958788, 
+                    0.6307234756695286, 
+                    0.6307234756695286, 
+                    0.5926855029732953, 
+                    0.5926855029732953, 
+                    0.5563367088773439, 
+                    0.5563367088773439, 
+                    0.5221218871743794, 
+                    0.5221218871743794, 
+                    0.4898445398816407, 
+                    0.4898445398816407, 
+                    0.45917648883325723, 
+                    0.45917648883325723, 
+                    0.42959761676297786, 
+                    0.42959761676297786, 
+                    0.4029319052372644, 
+                    0.4029319052372644, 
+                    0.3784642407463105, 
+                    0.3784642407463105, 
+                    0.3565267006074998, 
+                    0.3565267006074998, 
+                    0.3370441854488907, 
+                    0.3370441854488907, 
+                    0.31899745603047813, 
+                    0.31899745603047813, 
+                    0.30317760441324837, 
+                    0.30317760441324837, 
+                    0.28852332071460896, 
+                    0.28852332071460896, 
+                    0.27472890779255327, 
+                    0.27472890779255327, 
+                    0.26343546488692576, 
+                    0.26343546488692576, 
+                    0.2546132535240848, 
+                    0.2546132535240848, 
+                    0.24264923174730604, 
+                    0.24264923174730604, 
+                    0.22689663799352885, 
+                    0.22689663799352885, 
+                    0.20823300361621294, 
+                    0.20823300361621294, 
+                    0.18734575424855965, 
+                    0.18734575424855965, 
+                    0.1644070742341432, 
+                    0.1644070742341432, 
+                    0.13913948406820661, 
+                    0.13913948406820661, 
+                    0.11039934544839956, 
+                    0.11039934544839956
+                ], 
+                0.17070165276527405
+            ], 
+            [
+                1.0150202512741089, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999684500804623, 
+                    0.9999684500804623, 
+                    0.9992471419716384, 
+                    0.9992471419716384, 
+                    0.9984982347308557, 
+                    0.9984982347308557, 
+                    0.9915118727509549, 
+                    0.9915118727509549, 
+                    0.9651567750688661, 
+                    0.9651567750688661, 
+                    0.9375876533562122, 
+                    0.9375876533562122, 
+                    0.9051642147012199, 
+                    0.9051642147012199, 
+                    0.8679931541929631, 
+                    0.8679931541929631, 
+                    0.8281158368151555, 
+                    0.8281158368151555, 
+                    0.7871775467798019, 
+                    0.7871775467798019, 
+                    0.7459332742524718, 
+                    0.7459332742524718, 
+                    0.7051866409312901, 
+                    0.7051866409312901, 
+                    0.6664508235160096, 
+                    0.6664508235160096, 
+                    0.6271872294181846, 
+                    0.6271872294181846, 
+                    0.5890041907721715, 
+                    0.5890041907721715, 
+                    0.5526826591349573, 
+                    0.5526826591349573, 
+                    0.5187168910044296, 
+                    0.5187168910044296, 
+                    0.48637739217571563, 
+                    0.48637739217571563, 
+                    0.4559462780326673, 
+                    0.4559462780326673, 
+                    0.426449413864166, 
+                    0.426449413864166, 
+                    0.4001225238885893, 
+                    0.4001225238885893, 
+                    0.37585910654004273, 
+                    0.37585910654004273, 
+                    0.35403546738481134, 
+                    0.35403546738481134, 
+                    0.33460954719954655, 
+                    0.33460954719954655, 
+                    0.31660854460197047, 
+                    0.31660854460197047, 
+                    0.300808304854936, 
+                    0.300808304854936, 
+                    0.2862802268680348, 
+                    0.2862802268680348, 
+                    0.2732470688880825, 
+                    0.2732470688880825, 
+                    0.2615952736624385, 
+                    0.2615952736624385, 
+                    0.25348687792447716, 
+                    0.25348687792447716, 
+                    0.24116919808220602, 
+                    0.24116919808220602, 
+                    0.22513291926420237, 
+                    0.22513291926420237, 
+                    0.20630820304880435, 
+                    0.20630820304880435, 
+                    0.18536879966044412, 
+                    0.18536879966044412, 
+                    0.1624821707871919, 
+                    0.1624821707871919, 
+                    0.13739161099027117, 
+                    0.13739161099027117, 
+                    0.10904493300993409, 
+                    0.10904493300993409
+                ], 
+                0.16050253808498383
+            ], 
+            [
+                1.0226147174835205, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994055280157386, 
+                    0.9994055280157386, 
+                    0.9974339293645549, 
+                    0.9974339293645549, 
+                    0.9903599235217319, 
+                    0.9903599235217319, 
+                    0.9637238292562997, 
+                    0.9637238292562997, 
+                    0.9359357853475692, 
+                    0.9359357853475692, 
+                    0.9029797539855328, 
+                    0.9029797539855328, 
+                    0.8652319177868604, 
+                    0.8652319177868604, 
+                    0.8254419810412029, 
+                    0.8254419810412029, 
+                    0.7839949507974767, 
+                    0.7839949507974767, 
+                    0.7426114055779737, 
+                    0.7426114055779737, 
+                    0.7018946439947613, 
+                    0.7018946439947613, 
+                    0.6629359296723203, 
+                    0.6629359296723203, 
+                    0.6235578490223055, 
+                    0.6235578490223055, 
+                    0.5855054272435366, 
+                    0.5855054272435366, 
+                    0.5493911690908788, 
+                    0.5493911690908788, 
+                    0.5154954384278055, 
+                    0.5154954384278055, 
+                    0.48325446560003593, 
+                    0.48325446560003593, 
+                    0.4528956204198296, 
+                    0.4528956204198296, 
+                    0.42351726972543746, 
+                    0.42351726972543746, 
+                    0.3973108780778574, 
+                    0.3973108780778574, 
+                    0.3731649928696668, 
+                    0.3731649928696668, 
+                    0.3514535065480601, 
+                    0.3514535065480601, 
+                    0.33213198125662763, 
+                    0.33213198125662763, 
+                    0.3142641699062888, 
+                    0.3142641699062888, 
+                    0.29858603528584543, 
+                    0.29858603528584543, 
+                    0.2842419220999577, 
+                    0.2842419220999577, 
+                    0.2723493851197316, 
+                    0.2723493851197316, 
+                    0.2598463925710363, 
+                    0.2598463925710363, 
+                    0.252239291394329, 
+                    0.252239291394329, 
+                    0.23987088627244657, 
+                    0.23987088627244657, 
+                    0.2237902042497495, 
+                    0.2237902042497495, 
+                    0.20496112640159794, 
+                    0.20496112640159794, 
+                    0.18406610711849122, 
+                    0.18406610711849122, 
+                    0.16127574845617, 
+                    0.16127574845617, 
+                    0.13634734335639753, 
+                    0.13634734335639753, 
+                    0.10827984555552592, 
+                    0.10827984555552592
+                ], 
+                0.15102940797805786
+            ], 
+            [
+                1.0302660465240479, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999894768199339, 
+                    0.9999894768199339, 
+                    0.9994532558678112, 
+                    0.9994532558678112, 
+                    0.9976641990916439, 
+                    0.9976641990916439, 
+                    0.9895264549120765, 
+                    0.9895264549120765, 
+                    0.9627435188756305, 
+                    0.9627435188756305, 
+                    0.9340402062840427, 
+                    0.9340402062840427, 
+                    0.9006223993891349, 
+                    0.9006223993891349, 
+                    0.862643383183987, 
+                    0.862643383183987, 
+                    0.8223380484114655, 
+                    0.8223380484114655, 
+                    0.7809672887274229, 
+                    0.7809672887274229, 
+                    0.7392549679336324, 
+                    0.7392549679336324, 
+                    0.6984248843223347, 
+                    0.6984248843223347, 
+                    0.6595294965383025, 
+                    0.6595294965383025, 
+                    0.6200026016475711, 
+                    0.6200026016475711, 
+                    0.5824299522732265, 
+                    0.5824299522732265, 
+                    0.545584157353313, 
+                    0.545584157353313, 
+                    0.5131503729231561, 
+                    0.5131503729231561, 
+                    0.4796708210879714, 
+                    0.4796708210879714, 
+                    0.4504535432238462, 
+                    0.4504535432238462, 
+                    0.42022776008542495, 
+                    0.42022776008542495, 
+                    0.3946221023762571, 
+                    0.3946221023762571, 
+                    0.370402853351888, 
+                    0.370402853351888, 
+                    0.34889664014979493, 
+                    0.34889664014979493, 
+                    0.32971619683469855, 
+                    0.32971619683469855, 
+                    0.3120038513985375, 
+                    0.3120038513985375, 
+                    0.2964837935273271, 
+                    0.2964837935273271, 
+                    0.2820756869988753, 
+                    0.2820756869988753, 
+                    0.26890268859367056, 
+                    0.26890268859367056, 
+                    0.2588744938619634, 
+                    0.2588744938619634, 
+                    0.2512259527954999, 
+                    0.2512259527954999, 
+                    0.23877052656320016, 
+                    0.23877052656320016, 
+                    0.22263329036547969, 
+                    0.22263329036547969, 
+                    0.20378548565123106, 
+                    0.20378548565123106, 
+                    0.18292224095720847, 
+                    0.18292224095720847, 
+                    0.16022004211803353, 
+                    0.16022004211803353, 
+                    0.13545251144526335, 
+                    0.13545251144526335, 
+                    0.10766537296931339, 
+                    0.10766537296931339
+                ], 
+                0.1418672353029251
+            ], 
+            [
+                1.0379747152328491, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999865632534657, 
+                    0.9999865632534657, 
+                    0.9993524240290279, 
+                    0.9993524240290279, 
+                    0.9968508536434828, 
+                    0.9968508536434828, 
+                    0.9875221857420615, 
+                    0.9875221857420615, 
+                    0.9608455019330434, 
+                    0.9608455019330434, 
+                    0.9322051866058028, 
+                    0.9322051866058028, 
+                    0.8983272489753675, 
+                    0.8983272489753675, 
+                    0.8599680803017099, 
+                    0.8599680803017099, 
+                    0.8193910604761655, 
+                    0.8193910604761655, 
+                    0.7776408403665064, 
+                    0.7776408403665064, 
+                    0.7359405079709022, 
+                    0.7359405079709022, 
+                    0.6950079698544886, 
+                    0.6950079698544886, 
+                    0.6560109673335492, 
+                    0.6560109673335492, 
+                    0.6166734141132943, 
+                    0.6166734141132943, 
+                    0.5786229630487559, 
+                    0.5786229630487559, 
+                    0.5428425076285666, 
+                    0.5428425076285666, 
+                    0.5089438066811303, 
+                    0.5089438066811303, 
+                    0.4770985951975735, 
+                    0.4770985951975735, 
+                    0.4467893195546315, 
+                    0.4467893195546315, 
+                    0.41772667357170934, 
+                    0.41772667357170934, 
+                    0.3917127475258755, 
+                    0.3917127475258755, 
+                    0.3678422175560116, 
+                    0.3678422175560116, 
+                    0.346376609879844, 
+                    0.346376609879844, 
+                    0.32729641063217574, 
+                    0.32729641063217574, 
+                    0.30965094310242053, 
+                    0.30965094310242053, 
+                    0.29418788868928825, 
+                    0.29418788868928825, 
+                    0.28001507948850857, 
+                    0.28001507948850857, 
+                    0.26785263386398744, 
+                    0.26785263386398744, 
+                    0.25656642813292413, 
+                    0.25656642813292413, 
+                    0.24922453167970102, 
+                    0.24922453167970102, 
+                    0.2372781437211312, 
+                    0.2372781437211312, 
+                    0.22152562740615117, 
+                    0.22152562740615117, 
+                    0.20296902565311797, 
+                    0.20296902565311797, 
+                    0.18234760388345117, 
+                    0.18234760388345117, 
+                    0.1598491654999029, 
+                    0.1598491654999029, 
+                    0.1352473878549161, 
+                    0.1352473878549161, 
+                    0.10757922782344899, 
+                    0.10757922782344899
+                ], 
+                0.13310471177101135
+            ], 
+            [
+                1.0457409620285034, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993439895799509, 
+                    0.9993439895799509, 
+                    0.9968577202147203, 
+                    0.9968577202147203, 
+                    0.987485966760093, 
+                    0.987485966760093, 
+                    0.9601597981013135, 
+                    0.9601597981013135, 
+                    0.9302142205747712, 
+                    0.9302142205747712, 
+                    0.8959594633334078, 
+                    0.8959594633334078, 
+                    0.8571809520823798, 
+                    0.8571809520823798, 
+                    0.8163826839210379, 
+                    0.8163826839210379, 
+                    0.7744077241094592, 
+                    0.7744077241094592, 
+                    0.7325601318643411, 
+                    0.7325601318643411, 
+                    0.6915316387122864, 
+                    0.6915316387122864, 
+                    0.6525889147681728, 
+                    0.6525889147681728, 
+                    0.6130708510754311, 
+                    0.6130708510754311, 
+                    0.575663281880579, 
+                    0.575663281880579, 
+                    0.5388545068300253, 
+                    0.5388545068300253, 
+                    0.5064037560359845, 
+                    0.5064037560359845, 
+                    0.47330661998164614, 
+                    0.47330661998164614, 
+                    0.44423022383941496, 
+                    0.44423022383941496, 
+                    0.41456536818323625, 
+                    0.41456536818323625, 
+                    0.38913862747926437, 
+                    0.38913862747926437, 
+                    0.36518081137277103, 
+                    0.36518081137277103, 
+                    0.3438804930439034, 
+                    0.3438804930439034, 
+                    0.3249166391673619, 
+                    0.3249166391673619, 
+                    0.30739081256594797, 
+                    0.30739081256594797, 
+                    0.2920457373571818, 
+                    0.2920457373571818, 
+                    0.2778549272976549, 
+                    0.2778549272976549, 
+                    0.2648489229790293, 
+                    0.2648489229790293, 
+                    0.2567754060511932, 
+                    0.2567754060511932, 
+                    0.24924165855922062, 
+                    0.24924165855922062, 
+                    0.23652993069750933, 
+                    0.23652993069750933, 
+                    0.2202365275509764, 
+                    0.2202365275509764, 
+                    0.20133670072806073, 
+                    0.20133670072806073, 
+                    0.1805307608993766, 
+                    0.1805307608993766, 
+                    0.15799789630714586, 
+                    0.15799789630714586, 
+                    0.13353810854928663, 
+                    0.13353810854928663, 
+                    0.10629191840135216, 
+                    0.10629191840135216
+                ], 
+                0.12469402700662613
+            ], 
+            [
+                1.053565263748169, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990263008328045, 
+                    0.9990263008328045, 
+                    0.9970161021510732, 
+                    0.9970161021510732, 
+                    0.9888199569022725, 
+                    0.9888199569022725, 
+                    0.9582266475294968, 
+                    0.9582266475294968, 
+                    0.9269123864577855, 
+                    0.9269123864577855, 
+                    0.8927937251880697, 
+                    0.8927937251880697, 
+                    0.8540908797737674, 
+                    0.8540908797737674, 
+                    0.8131793142033141, 
+                    0.8131793142033141, 
+                    0.7711248731758874, 
+                    0.7711248731758874, 
+                    0.7291710588960207, 
+                    0.7291710588960207, 
+                    0.6881072636765451, 
+                    0.6881072636765451, 
+                    0.6490488073754329, 
+                    0.6490488073754329, 
+                    0.609829274672907, 
+                    0.609829274672907, 
+                    0.571687828341826, 
+                    0.571687828341826, 
+                    0.5363430990410457, 
+                    0.5363430990410457, 
+                    0.5023533386725062, 
+                    0.5023533386725062, 
+                    0.4709417327541377, 
+                    0.4709417327541377, 
+                    0.440743895326812, 
+                    0.440743895326812, 
+                    0.41202891826717636, 
+                    0.41202891826717636, 
+                    0.386233657663037, 
+                    0.386233657663037, 
+                    0.36263205738483983, 
+                    0.36263205738483983, 
+                    0.3414012662065929, 
+                    0.3414012662065929, 
+                    0.32254925588405314, 
+                    0.32254925588405314, 
+                    0.30512758568356046, 
+                    0.30512758568356046, 
+                    0.28987360727139694, 
+                    0.28987360727139694, 
+                    0.2757346559241019, 
+                    0.2757346559241019, 
+                    0.2623827195226625, 
+                    0.2623827195226625, 
+                    0.26107840641200447, 
+                    0.26107840641200447, 
+                    0.25035956095146156, 
+                    0.25035956095146156, 
+                    0.23607188427611334, 
+                    0.23607188427611334, 
+                    0.21882663747542602, 
+                    0.21882663747542602, 
+                    0.1993287738649002, 
+                    0.1993287738649002, 
+                    0.17817489646691093, 
+                    0.17817489646691093, 
+                    0.15551445737433744, 
+                    0.15551445737433744, 
+                    0.1311744427500339, 
+                    0.1311744427500339, 
+                    0.10443329542550749, 
+                    0.10443329542550749
+                ], 
+                0.11669785529375076
+            ], 
+            [
+                1.0614482164382935, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9990288924732349, 
+                    0.9990288924732349, 
+                    0.9964815031189604, 
+                    0.9964815031189604, 
+                    0.9869886423619053, 
+                    0.9869886423619053, 
+                    0.9577521319177039, 
+                    0.9577521319177039, 
+                    0.9264289322410839, 
+                    0.9264289322410839, 
+                    0.8911815531136604, 
+                    0.8911815531136604, 
+                    0.8516504343992052, 
+                    0.8516504343992052, 
+                    0.8102459807510263, 
+                    0.8102459807510263, 
+                    0.7678676322569566, 
+                    0.7678676322569566, 
+                    0.7258136067392932, 
+                    0.7258136067392932, 
+                    0.6846067718402188, 
+                    0.6846067718402188, 
+                    0.6456920856581678, 
+                    0.6456920856581678, 
+                    0.606031106790457, 
+                    0.606031106790457, 
+                    0.5689356648337383, 
+                    0.5689356648337383, 
+                    0.5319766088052712, 
+                    0.5319766088052712, 
+                    0.5000841018623019, 
+                    0.5000841018623019, 
+                    0.4670433273748602, 
+                    0.4670433273748602, 
+                    0.43825188577908336, 
+                    0.43825188577908336, 
+                    0.40887029633511146, 
+                    0.40887029633511146, 
+                    0.38363358028981026, 
+                    0.38363358028981026, 
+                    0.35998890583361837, 
+                    0.35998890583361837, 
+                    0.33892393644440993, 
+                    0.33892393644440993, 
+                    0.32017693894651794, 
+                    0.32017693894651794, 
+                    0.30286743238731506, 
+                    0.30286743238731506, 
+                    0.2877207821732076, 
+                    0.2877207821732076, 
+                    0.2737127260468577, 
+                    0.2737127260468577, 
+                    0.26094546015622666, 
+                    0.26094546015622666, 
+                    0.25380844362329097, 
+                    0.25380844362329097, 
+                    0.2506140324646569, 
+                    0.2506140324646569, 
+                    0.23556121985182107, 
+                    0.23556121985182107, 
+                    0.2182482233225925, 
+                    0.2182482233225925, 
+                    0.1987979208313121, 
+                    0.1987979208313121, 
+                    0.17772437805445007, 
+                    0.17772437805445007, 
+                    0.15516900117859717, 
+                    0.15516900117859717, 
+                    0.13096344239004598, 
+                    0.13096344239004598, 
+                    0.10444082687009704, 
+                    0.10444082687009704
+                ], 
+                0.10906223952770233
+            ], 
+            [
+                1.0693901777267456, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988964681382854, 
+                    0.9988964681382854, 
+                    0.9962884027763401, 
+                    0.9962884027763401, 
+                    0.9866573139183717, 
+                    0.9866573139183717, 
+                    0.956396027139932, 
+                    0.956396027139932, 
+                    0.9244850458257443, 
+                    0.9244850458257443, 
+                    0.8887599380147861, 
+                    0.8887599380147861, 
+                    0.848825419392041, 
+                    0.848825419392041, 
+                    0.8071397601367603, 
+                    0.8071397601367603, 
+                    0.7645773395078542, 
+                    0.7645773395078542, 
+                    0.7223967094474887, 
+                    0.7223967094474887, 
+                    0.6811563628065986, 
+                    0.6811563628065986, 
+                    0.6421452557660222, 
+                    0.6421452557660222, 
+                    0.6027407689181027, 
+                    0.6027407689181027, 
+                    0.5652465155968263, 
+                    0.5652465155968263, 
+                    0.529169014659534, 
+                    0.529169014659534, 
+                    0.4964754045335063, 
+                    0.4964754045335063, 
+                    0.46429634940158415, 
+                    0.46429634940158415, 
+                    0.43509642402848553, 
+                    0.43509642402848553, 
+                    0.4061352311532149, 
+                    0.4061352311532149, 
+                    0.38090103136466136, 
+                    0.38090103136466136, 
+                    0.35744488020503856, 
+                    0.35744488020503856, 
+                    0.33648570995830956, 
+                    0.33648570995830956, 
+                    0.3177697986133103, 
+                    0.3177697986133103, 
+                    0.30070519278321095, 
+                    0.30070519278321095, 
+                    0.285615153356882, 
+                    0.285615153356882, 
+                    0.27149162371902785, 
+                    0.27149162371902785, 
+                    0.2583672273959102, 
+                    0.2583672273959102, 
+                    0.2540009011553663, 
+                    0.2540009011553663, 
+                    0.2498062897693587, 
+                    0.2498062897693587, 
+                    0.23472917221052556, 
+                    0.23472917221052556, 
+                    0.21721343049467146, 
+                    0.21721343049467146, 
+                    0.1976230381205641, 
+                    0.1976230381205641, 
+                    0.17649314112570122, 
+                    0.17649314112570122, 
+                    0.15396861039852813, 
+                    0.15396861039852813, 
+                    0.1298991655223927, 
+                    0.1298991655223927, 
+                    0.1036930203887549, 
+                    0.1036930203887549
+                ], 
+                0.10181363672018051
+            ], 
+            [
+                1.0773913860321045, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987674243299135, 
+                    0.9987674243299135, 
+                    0.9959566221513284, 
+                    0.9959566221513284, 
+                    0.9855513203494984, 
+                    0.9855513203494984, 
+                    0.9549959031637275, 
+                    0.9549959031637275, 
+                    0.9224553651722445, 
+                    0.9224553651722445, 
+                    0.8862594485082723, 
+                    0.8862594485082723, 
+                    0.8459721543997213, 
+                    0.8459721543997213, 
+                    0.8040183315156965, 
+                    0.8040183315156965, 
+                    0.7612705953389405, 
+                    0.7612705953389405, 
+                    0.7189666332647788, 
+                    0.7189666332647788, 
+                    0.6776754395054547, 
+                    0.6776754395054547, 
+                    0.6386902516094285, 
+                    0.6386902516094285, 
+                    0.5992702032776305, 
+                    0.5992702032776305, 
+                    0.5618646185662542, 
+                    0.5618646185662542, 
+                    0.5258190614540295, 
+                    0.5258190614540295, 
+                    0.49327572153989524, 
+                    0.49327572153989524, 
+                    0.461202065165943, 
+                    0.461202065165943, 
+                    0.43215154362843977, 
+                    0.43215154362843977, 
+                    0.4033293845720265, 
+                    0.4033293845720265, 
+                    0.3782145612234705, 
+                    0.3782145612234705, 
+                    0.35487250753576394, 
+                    0.35487250753576394, 
+                    0.3340421612953536, 
+                    0.3340421612953536, 
+                    0.31553207894585283, 
+                    0.31553207894585283, 
+                    0.298448599554221, 
+                    0.298448599554221, 
+                    0.28351445836093386, 
+                    0.28351445836093386, 
+                    0.2696420821097006, 
+                    0.2696420821097006, 
+                    0.25650743227162187, 
+                    0.25650743227162187, 
+                    0.2524376393531956, 
+                    0.2524376393531956, 
+                    0.24965659582777003, 
+                    0.24965659582777003, 
+                    0.23426517773150118, 
+                    0.23426517773150118, 
+                    0.21657011028961407, 
+                    0.21657011028961407, 
+                    0.19688496420652313, 
+                    0.19688496420652313, 
+                    0.1757241427211835, 
+                    0.1757241427211835, 
+                    0.15323071614531317, 
+                    0.15323071614531317, 
+                    0.12926561535137282, 
+                    0.12926561535137282, 
+                    0.10329892152020971, 
+                    0.10329892152020971
+                ], 
+                0.09497185051441193
+            ]
+        ]
+    }, 
+    {
+        "block_size": 80, 
+        "preprocessing_block_sizes": [
+            58
+        ], 
+        "pruning_parameters": [
+            [
+                0.9290172457695007, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999931597358577, 
+                    0.999931597358577, 
+                    0.999931597358577, 
+                    0.999931597358577, 
+                    0.9953521895798056, 
+                    0.9953521895798056, 
+                    0.9872135921024593, 
+                    0.9872135921024593, 
+                    0.9748606500615336, 
+                    0.9748606500615336, 
+                    0.9580473722225806, 
+                    0.9580473722225806, 
+                    0.9338577650485378, 
+                    0.9338577650485378, 
+                    0.904094560721065, 
+                    0.904094560721065, 
+                    0.8714661531221836, 
+                    0.8714661531221836, 
+                    0.8345747698956684, 
+                    0.8345747698956684, 
+                    0.7972333963376154, 
+                    0.7972333963376154, 
+                    0.757813255463328, 
+                    0.757813255463328, 
+                    0.7186835608647948, 
+                    0.7186835608647948, 
+                    0.6797676575700002, 
+                    0.6797676575700002, 
+                    0.640385216692592, 
+                    0.640385216692592, 
+                    0.6021064788686766, 
+                    0.6021064788686766, 
+                    0.5665859644916622, 
+                    0.5665859644916622, 
+                    0.5310178648957198, 
+                    0.5310178648957198, 
+                    0.4991821294547848, 
+                    0.4991821294547848, 
+                    0.4673394469643125, 
+                    0.4673394469643125, 
+                    0.4391546452464313, 
+                    0.4391546452464313, 
+                    0.4126101926835622, 
+                    0.4126101926835622, 
+                    0.38935680426375674, 
+                    0.38935680426375674, 
+                    0.3665713412161609, 
+                    0.3665713412161609, 
+                    0.3451224530486228, 
+                    0.3451224530486228, 
+                    0.3261922135262808, 
+                    0.3261922135262808, 
+                    0.30867044774588215, 
+                    0.30867044774588215, 
+                    0.293147790574811, 
+                    0.293147790574811, 
+                    0.2791504133253135, 
+                    0.2791504133253135, 
+                    0.26706473098720734, 
+                    0.26706473098720734, 
+                    0.25582860824398856, 
+                    0.25582860824398856, 
+                    0.24214955248655454, 
+                    0.24214955248655454, 
+                    0.22537769374477187, 
+                    0.22537769374477187, 
+                    0.20609605391039768, 
+                    0.20609605391039768, 
+                    0.18482849155949962, 
+                    0.18482849155949962, 
+                    0.1617261783282873, 
+                    0.1617261783282873, 
+                    0.13659482260321046, 
+                    0.13659482260321046, 
+                    0.10913402154357218, 
+                    0.10913402154357218
+                ], 
+                0.25250527262687683
+            ], 
+            [
+                0.9358826875686646, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999291455240832, 
+                    0.9999291455240832, 
+                    0.9965819097461922, 
+                    0.9965819097461922, 
+                    0.9903457784176652, 
+                    0.9903457784176652, 
+                    0.9785690553778181, 
+                    0.9785690553778181, 
+                    0.9630763146780779, 
+                    0.9630763146780779, 
+                    0.9347302190710081, 
+                    0.9347302190710081, 
+                    0.9022476927680694, 
+                    0.9022476927680694, 
+                    0.8702570237918663, 
+                    0.8702570237918663, 
+                    0.8312218887827869, 
+                    0.8312218887827869, 
+                    0.794512986291108, 
+                    0.794512986291108, 
+                    0.7546176900300454, 
+                    0.7546176900300454, 
+                    0.7152059928626439, 
+                    0.7152059928626439, 
+                    0.6760784999071368, 
+                    0.6760784999071368, 
+                    0.6369155807694725, 
+                    0.6369155807694725, 
+                    0.598707842912668, 
+                    0.598707842912668, 
+                    0.5630004131774918, 
+                    0.5630004131774918, 
+                    0.5283175952827228, 
+                    0.5283175952827228, 
+                    0.4952149829331766, 
+                    0.4952149829331766, 
+                    0.46517172977916305, 
+                    0.46517172977916305, 
+                    0.4354645802586835, 
+                    0.4354645802586835, 
+                    0.41007600301251057, 
+                    0.41007600301251057, 
+                    0.3865232028169485, 
+                    0.3865232028169485, 
+                    0.36395206486947795, 
+                    0.36395206486947795, 
+                    0.3426017430588278, 
+                    0.3426017430588278, 
+                    0.3237858875906195, 
+                    0.3237858875906195, 
+                    0.3063725883483323, 
+                    0.3063725883483323, 
+                    0.2909519466349508, 
+                    0.2909519466349508, 
+                    0.2769688463305316, 
+                    0.2769688463305316, 
+                    0.263839855269117, 
+                    0.263839855269117, 
+                    0.253609600349676, 
+                    0.253609600349676, 
+                    0.24217306781056291, 
+                    0.24217306781056291, 
+                    0.22716494221176087, 
+                    0.22716494221176087, 
+                    0.20909333047795836, 
+                    0.20909333047795836, 
+                    0.18859840478895953, 
+                    0.18859840478895953, 
+                    0.16586652362123624, 
+                    0.16586652362123624, 
+                    0.14063533585152727, 
+                    0.14063533585152727, 
+                    0.11207837540667119, 
+                    0.11207837540667119
+                ], 
+                0.24034608900547028
+            ], 
+            [
+                0.9427987933158875, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999912263169196, 
+                    0.999912263169196, 
+                    0.9992157127230432, 
+                    0.9992157127230432, 
+                    0.9976514740173504, 
+                    0.9976514740173504, 
+                    0.9880630263989679, 
+                    0.9880630263989679, 
+                    0.977377591740892, 
+                    0.977377591740892, 
+                    0.9604250938606457, 
+                    0.9604250938606457, 
+                    0.9339350030757992, 
+                    0.9339350030757992, 
+                    0.9016079018200738, 
+                    0.9016079018200738, 
+                    0.867576408477728, 
+                    0.867576408477728, 
+                    0.8304534774301418, 
+                    0.8304534774301418, 
+                    0.7917022843940263, 
+                    0.7917022843940263, 
+                    0.7520692868377793, 
+                    0.7520692868377793, 
+                    0.7124280885917132, 
+                    0.7124280885917132, 
+                    0.6730661858274509, 
+                    0.6730661858274509, 
+                    0.6336826028361904, 
+                    0.6336826028361904, 
+                    0.5955646392428443, 
+                    0.5955646392428443, 
+                    0.5599347933008403, 
+                    0.5599347933008403, 
+                    0.5247777289196839, 
+                    0.5247777289196839, 
+                    0.4925109170764455, 
+                    0.4925109170764455, 
+                    0.4616268735259495, 
+                    0.4616268735259495, 
+                    0.4329379143286562, 
+                    0.4329379143286562, 
+                    0.4071177355164177, 
+                    0.4071177355164177, 
+                    0.38388441577022137, 
+                    0.38388441577022137, 
+                    0.36136524781417684, 
+                    0.36136524781417684, 
+                    0.34014821904005843, 
+                    0.34014821904005843, 
+                    0.32143518537263877, 
+                    0.32143518537263877, 
+                    0.3041288709179118, 
+                    0.3041288709179118, 
+                    0.2887959138663867, 
+                    0.2887959138663867, 
+                    0.2747218565229285, 
+                    0.2747218565229285, 
+                    0.26112218423594197, 
+                    0.26112218423594197, 
+                    0.25160137428070084, 
+                    0.25160137428070084, 
+                    0.24040659076972995, 
+                    0.24040659076972995, 
+                    0.2254885504051753, 
+                    0.2254885504051753, 
+                    0.20750533356250955, 
+                    0.20750533356250955, 
+                    0.18711944669687514, 
+                    0.18711944669687514, 
+                    0.1645240115000502, 
+                    0.1645240115000502, 
+                    0.1394721177836508, 
+                    0.1394721177836508, 
+                    0.11122438896508167, 
+                    0.11122438896508167
+                ], 
+                0.22833973169326782
+            ], 
+            [
+                0.9497660994529724, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999883504505962, 
+                    0.9999883504505962, 
+                    0.9986984776696333, 
+                    0.9986984776696333, 
+                    0.9950596275398742, 
+                    0.9950596275398742, 
+                    0.9891269637702472, 
+                    0.9891269637702472, 
+                    0.9758223362102936, 
+                    0.9758223362102936, 
+                    0.9562489700607674, 
+                    0.9562489700607674, 
+                    0.9316683418080985, 
+                    0.9316683418080985, 
+                    0.898862095584132, 
+                    0.898862095584132, 
+                    0.8643106306890161, 
+                    0.8643106306890161, 
+                    0.8261948639222434, 
+                    0.8261948639222434, 
+                    0.7883496938647315, 
+                    0.7883496938647315, 
+                    0.7483050155728737, 
+                    0.7483050155728737, 
+                    0.7090338086809206, 
+                    0.7090338086809206, 
+                    0.6697890659957267, 
+                    0.6697890659957267, 
+                    0.6303673065651905, 
+                    0.6303673065651905, 
+                    0.5921675466999401, 
+                    0.5921675466999401, 
+                    0.5566432456385964, 
+                    0.5566432456385964, 
+                    0.5217747393787427, 
+                    0.5217747393787427, 
+                    0.4893677467499675, 
+                    0.4893677467499675, 
+                    0.4588137087550122, 
+                    0.4588137087550122, 
+                    0.4299590961525045, 
+                    0.4299590961525045, 
+                    0.404353402393433, 
+                    0.404353402393433, 
+                    0.3811583725162653, 
+                    0.3811583725162653, 
+                    0.35879038535681435, 
+                    0.35879038535681435, 
+                    0.3376750343137667, 
+                    0.3376750343137667, 
+                    0.3190820470869955, 
+                    0.3190820470869955, 
+                    0.3018807984830839, 
+                    0.3018807984830839, 
+                    0.28665113882232607, 
+                    0.28665113882232607, 
+                    0.27276512247625156, 
+                    0.27276512247625156, 
+                    0.2600734788864498, 
+                    0.2600734788864498, 
+                    0.25021921625774274, 
+                    0.25021921625774274, 
+                    0.2381185225562857, 
+                    0.2381185225562857, 
+                    0.22249691614582792, 
+                    0.22249691614582792, 
+                    0.2040829878869154, 
+                    0.2040829878869154, 
+                    0.1835020656238231, 
+                    0.1835020656238231, 
+                    0.16094217805496497, 
+                    0.16094217805496497, 
+                    0.13621125405564488, 
+                    0.13621125405564488, 
+                    0.10893899723410164, 
+                    0.10893899723410164
+                ], 
+                0.21647395193576813
+            ], 
+            [
+                0.9567847847938538, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999224638041154, 
+                    0.9999224638041154, 
+                    0.999703472401869, 
+                    0.999703472401869, 
+                    0.9958164631996272, 
+                    0.9958164631996272, 
+                    0.9874326234558775, 
+                    0.9874326234558775, 
+                    0.975639384660575, 
+                    0.975639384660575, 
+                    0.9564348698052106, 
+                    0.9564348698052106, 
+                    0.9303163332049842, 
+                    0.9303163332049842, 
+                    0.8972169437768533, 
+                    0.8972169437768533, 
+                    0.8621740557670131, 
+                    0.8621740557670131, 
+                    0.82362958464163, 
+                    0.82362958464163, 
+                    0.7852905460891504, 
+                    0.7852905460891504, 
+                    0.745269865274156, 
+                    0.745269865274156, 
+                    0.7055583910431806, 
+                    0.7055583910431806, 
+                    0.666539068068809, 
+                    0.666539068068809, 
+                    0.6269587940482129, 
+                    0.6269587940482129, 
+                    0.5888455547323115, 
+                    0.5888455547323115, 
+                    0.5534195326302692, 
+                    0.5534195326302692, 
+                    0.5184211830170882, 
+                    0.5184211830170882, 
+                    0.4863518081240884, 
+                    0.4863518081240884, 
+                    0.4556380431458109, 
+                    0.4556380431458109, 
+                    0.42714295532614904, 
+                    0.42714295532614904, 
+                    0.40152503854876526, 
+                    0.40152503854876526, 
+                    0.37850547269115176, 
+                    0.37850547269115176, 
+                    0.35622976938615, 
+                    0.35622976938615, 
+                    0.3352463744385084, 
+                    0.3352463744385084, 
+                    0.31676544209100815, 
+                    0.31676544209100815, 
+                    0.2996794868814684, 
+                    0.2996794868814684, 
+                    0.2845148268569217, 
+                    0.2845148268569217, 
+                    0.27003613376092667, 
+                    0.27003613376092667, 
+                    0.25760812367559777, 
+                    0.25760812367559777, 
+                    0.2485840804809657, 
+                    0.2485840804809657, 
+                    0.23637451022591077, 
+                    0.23637451022591077, 
+                    0.22061148453417143, 
+                    0.22061148453417143, 
+                    0.20213276618676682, 
+                    0.20213276618676682, 
+                    0.18156546539152027, 
+                    0.18156546539152027, 
+                    0.15909849607153873, 
+                    0.15909849607153873, 
+                    0.13456451006233686, 
+                    0.13456451006233686, 
+                    0.10776462342297088, 
+                    0.10776462342297088
+                ], 
+                0.2049044519662857
+            ], 
+            [
+                0.9638554453849792, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9960239503864888, 
+                    0.9960239503864888, 
+                    0.9881635238312779, 
+                    0.9881635238312779, 
+                    0.9751602041816692, 
+                    0.9751602041816692, 
+                    0.9550981995018066, 
+                    0.9550981995018066, 
+                    0.9270326796261974, 
+                    0.9270326796261974, 
+                    0.8940902282618449, 
+                    0.8940902282618449, 
+                    0.8591563316137227, 
+                    0.8591563316137227, 
+                    0.8205113311180043, 
+                    0.8205113311180043, 
+                    0.7824416634539474, 
+                    0.7824416634539474, 
+                    0.741924707018486, 
+                    0.741924707018486, 
+                    0.7020203372018308, 
+                    0.7020203372018308, 
+                    0.6634650659374194, 
+                    0.6634650659374194, 
+                    0.6238143821870622, 
+                    0.6238143821870622, 
+                    0.5851574873453144, 
+                    0.5851574873453144, 
+                    0.5500064451306151, 
+                    0.5500064451306151, 
+                    0.5147377950453741, 
+                    0.5147377950453741, 
+                    0.4834460492678407, 
+                    0.4834460492678407, 
+                    0.45213364583953086, 
+                    0.45213364583953086, 
+                    0.4244428764879403, 
+                    0.4244428764879403, 
+                    0.39863598825857105, 
+                    0.39863598825857105, 
+                    0.37595925562138605, 
+                    0.37595925562138605, 
+                    0.35376798183776215, 
+                    0.35376798183776215, 
+                    0.33285571315804185, 
+                    0.33285571315804185, 
+                    0.31444909980352276, 
+                    0.31444909980352276, 
+                    0.2974418337806579, 
+                    0.2974418337806579, 
+                    0.28240278215987724, 
+                    0.28240278215987724, 
+                    0.2688293418985274, 
+                    0.2688293418985274, 
+                    0.2568555183363831, 
+                    0.2568555183363831, 
+                    0.2463847637762501, 
+                    0.2463847637762501, 
+                    0.23489685171057875, 
+                    0.23489685171057875, 
+                    0.22005715199351644, 
+                    0.22005715199351644, 
+                    0.20230093048155193, 
+                    0.20230093048155193, 
+                    0.18228279445087678, 
+                    0.18228279445087678, 
+                    0.160219920563831, 
+                    0.160219920563831, 
+                    0.13594447091123285, 
+                    0.13594447091123285, 
+                    0.10927837990320405, 
+                    0.10927837990320405
+                ], 
+                0.19412904977798462
+            ], 
+            [
+                0.9709782600402832, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999370264789622, 
+                    0.9999370264789622, 
+                    0.9998004556157146, 
+                    0.9998004556157146, 
+                    0.9948791180259344, 
+                    0.9948791180259344, 
+                    0.987582174573996, 
+                    0.987582174573996, 
+                    0.9732935170299555, 
+                    0.9732935170299555, 
+                    0.9533006264259168, 
+                    0.9533006264259168, 
+                    0.9255817906563808, 
+                    0.9255817906563808, 
+                    0.8916962608632023, 
+                    0.8916962608632023, 
+                    0.8566449558308193, 
+                    0.8566449558308193, 
+                    0.8177095147102854, 
+                    0.8177095147102854, 
+                    0.7792936436648203, 
+                    0.7792936436648203, 
+                    0.7384717870491582, 
+                    0.7384717870491582, 
+                    0.6992496569930172, 
+                    0.6992496569930172, 
+                    0.659987599918025, 
+                    0.659987599918025, 
+                    0.6204884387338545, 
+                    0.6204884387338545, 
+                    0.5823151791736758, 
+                    0.5823151791736758, 
+                    0.5467862564497611, 
+                    0.5467862564497611, 
+                    0.5121130973852807, 
+                    0.5121130973852807, 
+                    0.4799170236203831, 
+                    0.4799170236203831, 
+                    0.44973588383505825, 
+                    0.44973588383505825, 
+                    0.4212454094411297, 
+                    0.4212454094411297, 
+                    0.3960607076795309, 
+                    0.3960607076795309, 
+                    0.3732406354082979, 
+                    0.3732406354082979, 
+                    0.35119915861082457, 
+                    0.35119915861082457, 
+                    0.33043466815241046, 
+                    0.33043466815241046, 
+                    0.3121482836712677, 
+                    0.3121482836712677, 
+                    0.29523642147597495, 
+                    0.29523642147597495, 
+                    0.2803150705165672, 
+                    0.2803150705165672, 
+                    0.2672060067667402, 
+                    0.2672060067667402, 
+                    0.25469381272708774, 
+                    0.25469381272708774, 
+                    0.24499193356758808, 
+                    0.24499193356758808, 
+                    0.2330550688635916, 
+                    0.2330550688635916, 
+                    0.2176553177627733, 
+                    0.2176553177627733, 
+                    0.1995452951809423, 
+                    0.1995452951809423, 
+                    0.17936276718845898, 
+                    0.17936276718845898, 
+                    0.15731670855235189, 
+                    0.15731670855235189, 
+                    0.13327851578059388, 
+                    0.13327851578059388, 
+                    0.10739906431421263, 
+                    0.10739906431421263
+                ], 
+                0.18359725177288055
+            ], 
+            [
+                0.9781537652015686, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999505591890704, 
+                    0.9999505591890704, 
+                    0.9995474958606483, 
+                    0.9995474958606483, 
+                    0.996831382946256, 
+                    0.996831382946256, 
+                    0.9880829597406215, 
+                    0.9880829597406215, 
+                    0.9733216568317562, 
+                    0.9733216568317562, 
+                    0.9520454993686378, 
+                    0.9520454993686378, 
+                    0.923637369618937, 
+                    0.923637369618937, 
+                    0.8891656171785072, 
+                    0.8891656171785072, 
+                    0.853871337540645, 
+                    0.853871337540645, 
+                    0.8147520941297839, 
+                    0.8147520941297839, 
+                    0.7762105842316906, 
+                    0.7762105842316906, 
+                    0.7353787074790646, 
+                    0.7353787074790646, 
+                    0.696160659758963, 
+                    0.696160659758963, 
+                    0.656483329155627, 
+                    0.656483329155627, 
+                    0.616969523236143, 
+                    0.616969523236143, 
+                    0.5788806004632109, 
+                    0.5788806004632109, 
+                    0.5436212176271699, 
+                    0.5436212176271699, 
+                    0.50876476224928, 
+                    0.50876476224928, 
+                    0.477030713760403, 
+                    0.477030713760403, 
+                    0.4465637560402759, 
+                    0.4465637560402759, 
+                    0.41851654619034234, 
+                    0.41851654619034234, 
+                    0.3932764058150869, 
+                    0.3932764058150869, 
+                    0.37063774995556853, 
+                    0.37063774995556853, 
+                    0.3486847164890823, 
+                    0.3486847164890823, 
+                    0.32804127520866366, 
+                    0.32804127520866366, 
+                    0.30987040070258604, 
+                    0.30987040070258604, 
+                    0.2930215434572656, 
+                    0.2930215434572656, 
+                    0.27823724060207716, 
+                    0.27823724060207716, 
+                    0.26650255651356697, 
+                    0.26650255651356697, 
+                    0.2520881901936539, 
+                    0.2520881901936539, 
+                    0.2428272483927377, 
+                    0.2428272483927377, 
+                    0.23174007549985862, 
+                    0.23174007549985862, 
+                    0.2169678067834405, 
+                    0.2169678067834405, 
+                    0.19930749553763863, 
+                    0.19930749553763863, 
+                    0.1794509121508864, 
+                    0.1794509121508864, 
+                    0.15762407064904568, 
+                    0.15762407064904568, 
+                    0.13368959985372866, 
+                    0.13368959985372866, 
+                    0.10768541626658133, 
+                    0.10768541626658133
+                ], 
+                0.173514261841774
+            ], 
+            [
+                0.9853823184967041, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999332518593007, 
+                    0.9999332518593007, 
+                    0.9997753189687562, 
+                    0.9997753189687562, 
+                    0.99526610422707, 
+                    0.99526610422707, 
+                    0.9867942719972338, 
+                    0.9867942719972338, 
+                    0.9721892730357434, 
+                    0.9721892730357434, 
+                    0.9505925418518685, 
+                    0.9505925418518685, 
+                    0.921919764599251, 
+                    0.921919764599251, 
+                    0.8871900386982606, 
+                    0.8871900386982606, 
+                    0.8512772402388823, 
+                    0.8512772402388823, 
+                    0.81201239385016, 
+                    0.81201239385016, 
+                    0.772955211523893, 
+                    0.772955211523893, 
+                    0.7322016060992784, 
+                    0.7322016060992784, 
+                    0.6926217580047758, 
+                    0.6926217580047758, 
+                    0.6529827278575385, 
+                    0.6529827278575385, 
+                    0.6135883921481204, 
+                    0.6135883921481204, 
+                    0.5757806904945708, 
+                    0.5757806904945708, 
+                    0.5400102093748733, 
+                    0.5400102093748733, 
+                    0.5062437762740085, 
+                    0.5062437762740085, 
+                    0.47328439019403945, 
+                    0.47328439019403945, 
+                    0.44438127802142274, 
+                    0.44438127802142274, 
+                    0.4152499247018207, 
+                    0.4152499247018207, 
+                    0.3906369158204976, 
+                    0.3906369158204976, 
+                    0.3678555861693919, 
+                    0.3678555861693919, 
+                    0.346291418582747, 
+                    0.346291418582747, 
+                    0.32587616719724033, 
+                    0.32587616719724033, 
+                    0.30752906612830083, 
+                    0.30752906612830083, 
+                    0.29116851619103895, 
+                    0.29116851619103895, 
+                    0.27608257034386147, 
+                    0.27608257034386147, 
+                    0.2628794567403831, 
+                    0.2628794567403831, 
+                    0.2514047636830362, 
+                    0.2514047636830362, 
+                    0.2421650237484245, 
+                    0.2421650237484245, 
+                    0.23005489389139105, 
+                    0.23005489389139105, 
+                    0.2145061090764554, 
+                    0.2145061090764554, 
+                    0.19636730102702815, 
+                    0.19636730102702815, 
+                    0.17628490244339245, 
+                    0.17628490244339245, 
+                    0.1544784802732073, 
+                    0.1544784802732073, 
+                    0.13086299368747129, 
+                    0.13086299368747129, 
+                    0.10587860031691286, 
+                    0.10587860031691286
+                ], 
+                0.16356314718723297
+            ], 
+            [
+                0.9926642179489136, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9946235488965095, 
+                    0.9946235488965095, 
+                    0.9858547442378867, 
+                    0.9858547442378867, 
+                    0.9711199119398676, 
+                    0.9711199119398676, 
+                    0.9489792022533559, 
+                    0.9489792022533559, 
+                    0.9197910648812239, 
+                    0.9197910648812239, 
+                    0.884832938012381, 
+                    0.884832938012381, 
+                    0.8486693207565837, 
+                    0.8486693207565837, 
+                    0.809099344559903, 
+                    0.809099344559903, 
+                    0.7697915121292946, 
+                    0.7697915121292946, 
+                    0.7290787786497246, 
+                    0.7290787786497246, 
+                    0.6892284920912369, 
+                    0.6892284920912369, 
+                    0.6498621626127897, 
+                    0.6498621626127897, 
+                    0.61036186563545, 
+                    0.61036186563545, 
+                    0.5722062579938085, 
+                    0.5722062579938085, 
+                    0.53735786743336, 
+                    0.53735786743336, 
+                    0.5022921101140181, 
+                    0.5022921101140181, 
+                    0.471423012230341, 
+                    0.471423012230341, 
+                    0.44056540049253634, 
+                    0.44056540049253634, 
+                    0.41315932575872655, 
+                    0.41315932575872655, 
+                    0.387818286201627, 
+                    0.387818286201627, 
+                    0.3654272208926167, 
+                    0.3654272208926167, 
+                    0.3437400401958791, 
+                    0.3437400401958791, 
+                    0.3233374321852748, 
+                    0.3233374321852748, 
+                    0.30537895736759674, 
+                    0.30537895736759674, 
+                    0.28885226780184126, 
+                    0.28885226780184126, 
+                    0.2741738894321022, 
+                    0.2741738894321022, 
+                    0.2608766453256213, 
+                    0.2608766453256213, 
+                    0.24965938942322022, 
+                    0.24965938942322022, 
+                    0.24086632508324238, 
+                    0.24086632508324238, 
+                    0.22880148993345453, 
+                    0.22880148993345453, 
+                    0.21325398277268942, 
+                    0.21325398277268942, 
+                    0.19514327553026553, 
+                    0.19514327553026553, 
+                    0.17513083203925994, 
+                    0.17513083203925994, 
+                    0.15344407657618936, 
+                    0.15344407657618936, 
+                    0.13001401136904364, 
+                    0.13001401136904364, 
+                    0.10537984459660531, 
+                    0.10537984459660531
+                ], 
+                0.15427809953689575
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997078991984085, 
+                    0.9997078991984085, 
+                    0.9943103232702746, 
+                    0.9943103232702746, 
+                    0.9850006544424746, 
+                    0.9850006544424746, 
+                    0.9694795881942835, 
+                    0.9694795881942835, 
+                    0.9470569386548922, 
+                    0.9470569386548922, 
+                    0.9176253451369077, 
+                    0.9176253451369077, 
+                    0.8823561446503956, 
+                    0.8823561446503956, 
+                    0.8459478493915551, 
+                    0.8459478493915551, 
+                    0.8061529083246569, 
+                    0.8061529083246569, 
+                    0.7667041785527684, 
+                    0.7667041785527684, 
+                    0.7258817788639977, 
+                    0.7258817788639977, 
+                    0.6858947474534869, 
+                    0.6858947474534869, 
+                    0.6464896502523253, 
+                    0.6464896502523253, 
+                    0.607021448655708, 
+                    0.607021448655708, 
+                    0.5691128595754457, 
+                    0.5691128595754457, 
+                    0.5338620154990269, 
+                    0.5338620154990269, 
+                    0.49964959849856666, 
+                    0.49964959849856666, 
+                    0.46778156641267427, 
+                    0.46778156641267427, 
+                    0.4380946177135132, 
+                    0.4380946177135132, 
+                    0.41000164155183494, 
+                    0.41000164155183494, 
+                    0.38527130257560965, 
+                    0.38527130257560965, 
+                    0.3628734879689296, 
+                    0.3628734879689296, 
+                    0.34130608677965335, 
+                    0.34130608677965335, 
+                    0.32101815447745063, 
+                    0.32101815447745063, 
+                    0.3031749504626244, 
+                    0.3031749504626244, 
+                    0.2866821956275014, 
+                    0.2866821956275014, 
+                    0.2720817565735145, 
+                    0.2720817565735145, 
+                    0.25893477054222636, 
+                    0.25893477054222636, 
+                    0.24956938142502688, 
+                    0.24956938142502688, 
+                    0.24083342699230986, 
+                    0.24083342699230986, 
+                    0.22774926499020187, 
+                    0.22774926499020187, 
+                    0.2114477931195369, 
+                    0.2114477931195369, 
+                    0.1928606634261989, 
+                    0.1928606634261989, 
+                    0.17260536764146425, 
+                    0.17260536764146425, 
+                    0.15090274977006465, 
+                    0.15090274977006465, 
+                    0.12772724839021252, 
+                    0.12772724839021252, 
+                    0.10399691339097024, 
+                    0.10399691339097024
+                ], 
+                0.14527547359466553
+            ], 
+            [
+                1.007390022277832, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999814796289778, 
+                    0.9999814796289778, 
+                    0.9995789394531384, 
+                    0.9995789394531384, 
+                    0.994269888939257, 
+                    0.994269888939257, 
+                    0.9846661297298888, 
+                    0.9846661297298888, 
+                    0.9688433236370666, 
+                    0.9688433236370666, 
+                    0.9456186759415579, 
+                    0.9456186759415579, 
+                    0.9157977379015612, 
+                    0.9157977379015612, 
+                    0.8800340347929099, 
+                    0.8800340347929099, 
+                    0.8433273588608571, 
+                    0.8433273588608571, 
+                    0.803201340775993, 
+                    0.803201340775993, 
+                    0.7636632180514655, 
+                    0.7636632180514655, 
+                    0.7226061545399366, 
+                    0.7226061545399366, 
+                    0.6826102914131601, 
+                    0.6826102914131601, 
+                    0.6431271351074038, 
+                    0.6431271351074038, 
+                    0.6037493571588869, 
+                    0.6037493571588869, 
+                    0.5656056598138106, 
+                    0.5656056598138106, 
+                    0.5310652995563111, 
+                    0.5310652995563111, 
+                    0.49589546110383825, 
+                    0.49589546110383825, 
+                    0.46540845550920784, 
+                    0.46540845550920784, 
+                    0.4346027144603268, 
+                    0.4346027144603268, 
+                    0.40756656877184083, 
+                    0.40756656877184083, 
+                    0.3824716100002869, 
+                    0.3824716100002869, 
+                    0.3603680466287158, 
+                    0.3603680466287158, 
+                    0.3388749840603282, 
+                    0.3388749840603282, 
+                    0.3187103206527515, 
+                    0.3187103206527515, 
+                    0.3009712144076129, 
+                    0.3009712144076129, 
+                    0.28457930146583865, 
+                    0.28457930146583865, 
+                    0.27006763190793226, 
+                    0.27006763190793226, 
+                    0.2570141744588906, 
+                    0.2570141744588906, 
+                    0.24824872717125518, 
+                    0.24824872717125518, 
+                    0.23973474034858283, 
+                    0.23973474034858283, 
+                    0.2266497309617018, 
+                    0.2266497309617018, 
+                    0.21035557983976602, 
+                    0.21035557983976602, 
+                    0.19180408405834307, 
+                    0.19180408405834307, 
+                    0.17162093660069128, 
+                    0.17162093660069128, 
+                    0.1500323011526507, 
+                    0.1500323011526507, 
+                    0.1270248812754063, 
+                    0.1270248812754063, 
+                    0.10361153955210022, 
+                    0.10361153955210022
+                ], 
+                0.13666053116321564
+            ], 
+            [
+                1.0148345232009888, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9940599771136236, 
+                    0.9940599771136236, 
+                    0.984402748822395, 
+                    0.984402748822395, 
+                    0.9678762268789433, 
+                    0.9678762268789433, 
+                    0.9443813005382065, 
+                    0.9443813005382065, 
+                    0.9139017627092314, 
+                    0.9139017627092314, 
+                    0.8775913300706308, 
+                    0.8775913300706308, 
+                    0.8405914866667662, 
+                    0.8405914866667662, 
+                    0.8002481336367622, 
+                    0.8002481336367622, 
+                    0.7604514584455194, 
+                    0.7604514584455194, 
+                    0.7194092593682213, 
+                    0.7194092593682213, 
+                    0.6792771961075531, 
+                    0.6792771961075531, 
+                    0.6397777796198909, 
+                    0.6397777796198909, 
+                    0.6004651958594849, 
+                    0.6004651958594849, 
+                    0.5623295887866585, 
+                    0.5623295887866585, 
+                    0.5279132801140467, 
+                    0.5279132801140467, 
+                    0.4927494289948945, 
+                    0.4927494289948945, 
+                    0.4624645103320559, 
+                    0.4624645103320559, 
+                    0.43169191281048985, 
+                    0.43169191281048985, 
+                    0.4048127835753101, 
+                    0.4048127835753101, 
+                    0.37982037252554324, 
+                    0.37982037252554324, 
+                    0.35783854232901297, 
+                    0.35783854232901297, 
+                    0.33646264156721467, 
+                    0.33646264156721467, 
+                    0.31641330017724545, 
+                    0.31641330017724545, 
+                    0.2987844906581317, 
+                    0.2987844906581317, 
+                    0.28249216846846736, 
+                    0.28249216846846736, 
+                    0.26806956127100817, 
+                    0.26806956127100817, 
+                    0.25510474174348646, 
+                    0.25510474174348646, 
+                    0.24684852166697002, 
+                    0.24684852166697002, 
+                    0.23861698127749148, 
+                    0.23861698127749148, 
+                    0.2256462481342083, 
+                    0.2256462481342083, 
+                    0.2094350696884459, 
+                    0.2094350696884459, 
+                    0.19096478143250256, 
+                    0.19096478143250256, 
+                    0.17087737673122283, 
+                    0.17087737673122283, 
+                    0.1494056647782399, 
+                    0.1494056647782399, 
+                    0.12654475390222414, 
+                    0.12654475390222414, 
+                    0.10338687354858772, 
+                    0.10338687354858772
+                ], 
+                0.12845274806022644
+            ], 
+            [
+                1.022334098815918, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994973235193862, 
+                    0.9994973235193862, 
+                    0.9941515769595369, 
+                    0.9941515769595369, 
+                    0.9839978089971287, 
+                    0.9839978089971287, 
+                    0.9676322128877884, 
+                    0.9676322128877884, 
+                    0.9431382742792799, 
+                    0.9431382742792799, 
+                    0.9119537453984923, 
+                    0.9119537453984923, 
+                    0.8751681852515141, 
+                    0.8751681852515141, 
+                    0.8378164860370492, 
+                    0.8378164860370492, 
+                    0.7972104551976263, 
+                    0.7972104551976263, 
+                    0.7572567880927088, 
+                    0.7572567880927088, 
+                    0.7160824979031402, 
+                    0.7160824979031402, 
+                    0.6759814319087478, 
+                    0.6759814319087478, 
+                    0.6365035667520288, 
+                    0.6365035667520288, 
+                    0.5969459791220354, 
+                    0.5969459791220354, 
+                    0.5594714673517135, 
+                    0.5594714673517135, 
+                    0.5239381081272693, 
+                    0.5239381081272693, 
+                    0.4908007235533248, 
+                    0.4908007235533248, 
+                    0.45826448669672115, 
+                    0.45826448669672115, 
+                    0.42978498318631064, 
+                    0.42978498318631064, 
+                    0.40145763307962795, 
+                    0.40145763307962795, 
+                    0.3774187855788539, 
+                    0.3774187855788539, 
+                    0.3552709070294872, 
+                    0.3552709070294872, 
+                    0.33407305727102693, 
+                    0.33407305727102693, 
+                    0.31413394355439306, 
+                    0.31413394355439306, 
+                    0.29661253817004263, 
+                    0.29661253817004263, 
+                    0.28042295478178714, 
+                    0.28042295478178714, 
+                    0.2660921052889537, 
+                    0.2660921052889537, 
+                    0.25322424236614083, 
+                    0.25322424236614083, 
+                    0.24493178013103217, 
+                    0.24493178013103217, 
+                    0.23721394331837256, 
+                    0.23721394331837256, 
+                    0.22459603519442337, 
+                    0.22459603519442337, 
+                    0.2086300897237239, 
+                    0.2086300897237239, 
+                    0.19034735011228068, 
+                    0.19034735011228068, 
+                    0.17042113540289922, 
+                    0.17042113540289922, 
+                    0.1490940512374272, 
+                    0.1490940512374272, 
+                    0.12636365260210922, 
+                    0.12636365260210922, 
+                    0.10334531546124999, 
+                    0.10334531546124999
+                ], 
+                0.12058240920305252
+            ], 
+            [
+                1.0298891067504883, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999838335510295, 
+                    0.9999838335510295, 
+                    0.9941631188077624, 
+                    0.9941631188077624, 
+                    0.9838875979909759, 
+                    0.9838875979909759, 
+                    0.9670221939735792, 
+                    0.9670221939735792, 
+                    0.9418354533578953, 
+                    0.9418354533578953, 
+                    0.9098607149429554, 
+                    0.9098607149429554, 
+                    0.8727700824145677, 
+                    0.8727700824145677, 
+                    0.8350522577452187, 
+                    0.8350522577452187, 
+                    0.7942566464315662, 
+                    0.7942566464315662, 
+                    0.7540609325242162, 
+                    0.7540609325242162, 
+                    0.7128115764137951, 
+                    0.7128115764137951, 
+                    0.6725678679421389, 
+                    0.6725678679421389, 
+                    0.6331049872802786, 
+                    0.6331049872802786, 
+                    0.5937763405017482, 
+                    0.5937763405017482, 
+                    0.5557992662666484, 
+                    0.5557992662666484, 
+                    0.5215080502626983, 
+                    0.5215080502626983, 
+                    0.48654806430018466, 
+                    0.48654806430018466, 
+                    0.4565643121235249, 
+                    0.4565643121235249, 
+                    0.4258768121806675, 
+                    0.4258768121806675, 
+                    0.39938222038784543, 
+                    0.39938222038784543, 
+                    0.3745387671699792, 
+                    0.3745387671699792, 
+                    0.35283992849225115, 
+                    0.35283992849225115, 
+                    0.3316883526736969, 
+                    0.3316883526736969, 
+                    0.31187316360964484, 
+                    0.31187316360964484, 
+                    0.2944596342228027, 
+                    0.2944596342228027, 
+                    0.27836988368959564, 
+                    0.27836988368959564, 
+                    0.26412976360767465, 
+                    0.26412976360767465, 
+                    0.25136016876332845, 
+                    0.25136016876332845, 
+                    0.24341645446627605, 
+                    0.24341645446627605, 
+                    0.23602889563396554, 
+                    0.23602889563396554, 
+                    0.22357294876863207, 
+                    0.22357294876863207, 
+                    0.20772362222234642, 
+                    0.20772362222234642, 
+                    0.18954504787264406, 
+                    0.18954504787264406, 
+                    0.1697295152211055, 
+                    0.1697295152211055, 
+                    0.14852639876643506, 
+                    0.14852639876643506, 
+                    0.12593974374469147, 
+                    0.12593974374469147, 
+                    0.10315124450088979, 
+                    0.10315124450088979
+                ], 
+                0.11306574940681458
+            ], 
+            [
+                1.037500023841858, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998998415420286, 
+                    0.9998998415420286, 
+                    0.9940463857418943, 
+                    0.9940463857418943, 
+                    0.983567880782652, 
+                    0.983567880782652, 
+                    0.9662283733420108, 
+                    0.9662283733420108, 
+                    0.9404031222129506, 
+                    0.9404031222129506, 
+                    0.9077511745652954, 
+                    0.9077511745652954, 
+                    0.8702333885445834, 
+                    0.8702333885445834, 
+                    0.8322477603726038, 
+                    0.8322477603726038, 
+                    0.7911922096772053, 
+                    0.7911922096772053, 
+                    0.7509260936459357, 
+                    0.7509260936459357, 
+                    0.7095289518301511, 
+                    0.7095289518301511, 
+                    0.6692803334245938, 
+                    0.6692803334245938, 
+                    0.6297199370757353, 
+                    0.6297199370757353, 
+                    0.5905968834833818, 
+                    0.5905968834833818, 
+                    0.5522863031500117, 
+                    0.5522863031500117, 
+                    0.5186263007059142, 
+                    0.5186263007059142, 
+                    0.48331848360472884, 
+                    0.48331848360472884, 
+                    0.45356429626468703, 
+                    0.45356429626468703, 
+                    0.42330236347306205, 
+                    0.42330236347306205, 
+                    0.3964585839102867, 
+                    0.3964585839102867, 
+                    0.37207444976869986, 
+                    0.37207444976869986, 
+                    0.35031455355085134, 
+                    0.35031455355085134, 
+                    0.3293348252392336, 
+                    0.3293348252392336, 
+                    0.3096233616505352, 
+                    0.3096233616505352, 
+                    0.2923122571343729, 
+                    0.2923122571343729, 
+                    0.27633155420703337, 
+                    0.27633155420703337, 
+                    0.2621663484996745, 
+                    0.2621663484996745, 
+                    0.24951701174081836, 
+                    0.24951701174081836, 
+                    0.2430030611767304, 
+                    0.2430030611767304, 
+                    0.2351851235171993, 
+                    0.2351851235171993, 
+                    0.22269379031804468, 
+                    0.22269379031804468, 
+                    0.20685761875361336, 
+                    0.20685761875361336, 
+                    0.18871157846928152, 
+                    0.18871157846928152, 
+                    0.16895919424017705, 
+                    0.16895919424017705, 
+                    0.14785366161308156, 
+                    0.14785366161308156, 
+                    0.12540672468966596, 
+                    0.12540672468966596, 
+                    0.10288809043749317, 
+                    0.10288809043749317
+                ], 
+                0.10595502704381943
+            ], 
+            [
+                1.045167088508606, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999996207071099, 
+                    0.999996207071099, 
+                    0.999846444106695, 
+                    0.999846444106695, 
+                    0.9936968526342301, 
+                    0.9936968526342301, 
+                    0.9831285867526122, 
+                    0.9831285867526122, 
+                    0.9651602777645439, 
+                    0.9651602777645439, 
+                    0.938757962197787, 
+                    0.938757962197787, 
+                    0.9056649360654347, 
+                    0.9056649360654347, 
+                    0.8676811883908238, 
+                    0.8676811883908238, 
+                    0.829445518624356, 
+                    0.829445518624356, 
+                    0.7881168262776241, 
+                    0.7881168262776241, 
+                    0.7477395112320793, 
+                    0.7477395112320793, 
+                    0.7062245036619312, 
+                    0.7062245036619312, 
+                    0.6659112418831811, 
+                    0.6659112418831811, 
+                    0.6264873804096616, 
+                    0.6264873804096616, 
+                    0.5868584811949803, 
+                    0.5868584811949803, 
+                    0.5499890717615612, 
+                    0.5499890717615612, 
+                    0.5141528777803944, 
+                    0.5141528777803944, 
+                    0.48174193330745896, 
+                    0.48174193330745896, 
+                    0.44950924759028993, 
+                    0.44950924759028993, 
+                    0.4210726497122808, 
+                    0.4210726497122808, 
+                    0.3935628517697182, 
+                    0.3935628517697182, 
+                    0.36953182096826415, 
+                    0.36953182096826415, 
+                    0.3478575385914796, 
+                    0.3478575385914796, 
+                    0.32698835094693024, 
+                    0.32698835094693024, 
+                    0.30740769824314385, 
+                    0.30740769824314385, 
+                    0.2902101602299464, 
+                    0.2902101602299464, 
+                    0.27432523033425427, 
+                    0.27432523033425427, 
+                    0.2602494161607704, 
+                    0.2602494161607704, 
+                    0.24748280048692137, 
+                    0.24748280048692137, 
+                    0.24095054504915972, 
+                    0.24095054504915972, 
+                    0.2352115601257125, 
+                    0.2352115601257125, 
+                    0.22219058442319958, 
+                    0.22219058442319958, 
+                    0.20610032768609857, 
+                    0.20610032768609857, 
+                    0.1878215945567281, 
+                    0.1878215945567281, 
+                    0.1680261035719811, 
+                    0.1680261035719811, 
+                    0.1469620665329274, 
+                    0.1469620665329274, 
+                    0.12465087099124791, 
+                    0.12465087099124791, 
+                    0.10248118181452762, 
+                    0.10248118181452762
+                ], 
+                0.09913738816976547
+            ], 
+            [
+                1.0528908967971802, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999272175561348, 
+                    0.9999272175561348, 
+                    0.9942070169630305, 
+                    0.9942070169630305, 
+                    0.983767434282243, 
+                    0.983767434282243, 
+                    0.9651579044847837, 
+                    0.9651579044847837, 
+                    0.93747917328228, 
+                    0.93747917328228, 
+                    0.9035786111151247, 
+                    0.9035786111151247, 
+                    0.865138103881409, 
+                    0.865138103881409, 
+                    0.8265737655417075, 
+                    0.8265737655417075, 
+                    0.7850574044888403, 
+                    0.7850574044888403, 
+                    0.7445536478621826, 
+                    0.7445536478621826, 
+                    0.7028477527558797, 
+                    0.7028477527558797, 
+                    0.6625393102785985, 
+                    0.6625393102785985, 
+                    0.6230687813047436, 
+                    0.6230687813047436, 
+                    0.5836746197181105, 
+                    0.5836746197181105, 
+                    0.5462594586208429, 
+                    0.5462594586208429, 
+                    0.5113900088130251, 
+                    0.5113900088130251, 
+                    0.47812257260232466, 
+                    0.47812257260232466, 
+                    0.4468536818228734, 
+                    0.4468536818228734, 
+                    0.4181270462056106, 
+                    0.4181270462056106, 
+                    0.3908518838934593, 
+                    0.3908518838934593, 
+                    0.36696376011688986, 
+                    0.36696376011688986, 
+                    0.34536763066848025, 
+                    0.34536763066848025, 
+                    0.32461602591923855, 
+                    0.32461602591923855, 
+                    0.3051592920683731, 
+                    0.3051592920683731, 
+                    0.28806636414069725, 
+                    0.28806636414069725, 
+                    0.27227663085186526, 
+                    0.27227663085186526, 
+                    0.2584812019750937, 
+                    0.2584812019750937, 
+                    0.24580889479774987, 
+                    0.24580889479774987, 
+                    0.23706067258242222, 
+                    0.23706067258242222, 
+                    0.2309734515691654, 
+                    0.2309734515691654, 
+                    0.21985067427793795, 
+                    0.21985067427793795, 
+                    0.20497963359651644, 
+                    0.20497963359651644, 
+                    0.18753932014774674, 
+                    0.18753932014774674, 
+                    0.16833675138403587, 
+                    0.16833675138403587, 
+                    0.147653124148874, 
+                    0.147653124148874, 
+                    0.1254964185810696, 
+                    0.1254964185810696, 
+                    0.10309771550390734, 
+                    0.10309771550390734
+                ], 
+                0.09252168983221054
+            ], 
+            [
+                1.0606716871261597, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999833259922271, 
+                    0.9999833259922271, 
+                    0.9999288212590662, 
+                    0.9999288212590662, 
+                    0.9933867655108894, 
+                    0.9933867655108894, 
+                    0.9821135561447878, 
+                    0.9821135561447878, 
+                    0.963044214050998, 
+                    0.963044214050998, 
+                    0.9355121058539577, 
+                    0.9355121058539577, 
+                    0.9013867394216831, 
+                    0.9013867394216831, 
+                    0.8625138159470261, 
+                    0.8625138159470261, 
+                    0.823709648838092, 
+                    0.823709648838092, 
+                    0.781979157951321, 
+                    0.781979157951321, 
+                    0.7412795820111188, 
+                    0.7412795820111188, 
+                    0.6995951380281337, 
+                    0.6995951380281337, 
+                    0.659247552764272, 
+                    0.659247552764272, 
+                    0.6197608007796527, 
+                    0.6197608007796527, 
+                    0.5804483702298768, 
+                    0.5804483702298768, 
+                    0.5431327202369557, 
+                    0.5431327202369557, 
+                    0.5083932778940418, 
+                    0.5083932778940418, 
+                    0.47513765396249336, 
+                    0.47513765396249336, 
+                    0.44401976215912303, 
+                    0.44401976215912303, 
+                    0.4153322172070973, 
+                    0.4153322172070973, 
+                    0.38822663927064344, 
+                    0.38822663927064344, 
+                    0.36444650572086235, 
+                    0.36444650572086235, 
+                    0.3429825663364106, 
+                    0.3429825663364106, 
+                    0.32236143831876435, 
+                    0.32236143831876435, 
+                    0.30301561142411515, 
+                    0.30301561142411515, 
+                    0.2860342836117688, 
+                    0.2860342836117688, 
+                    0.27036006796765677, 
+                    0.27036006796765677, 
+                    0.2564927905926221, 
+                    0.2564927905926221, 
+                    0.2438458425993629, 
+                    0.2438458425993629, 
+                    0.23922805542633524, 
+                    0.23922805542633524, 
+                    0.23477433858576577, 
+                    0.23477433858576577, 
+                    0.22090938821180878, 
+                    0.22090938821180878, 
+                    0.20438386113765009, 
+                    0.20438386113765009, 
+                    0.18589721326476985, 
+                    0.18589721326476985, 
+                    0.16606370360744593, 
+                    0.16606370360744593, 
+                    0.14512466801911553, 
+                    0.14512466801911553, 
+                    0.12312189288938342, 
+                    0.12312189288938342, 
+                    0.10175012430405574, 
+                    0.10175012430405574
+                ], 
+                0.08653571456670761
+            ], 
+            [
+                1.0685100555419922, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999939925239144, 
+                    0.9999939925239144, 
+                    0.9999092398065355, 
+                    0.9999092398065355, 
+                    0.9932519251320951, 
+                    0.9932519251320951, 
+                    0.9818253513594093, 
+                    0.9818253513594093, 
+                    0.9621478367427861, 
+                    0.9621478367427861, 
+                    0.9338575118964705, 
+                    0.9338575118964705, 
+                    0.8991491403171042, 
+                    0.8991491403171042, 
+                    0.8599041978091235, 
+                    0.8599041978091235, 
+                    0.8208338867431547, 
+                    0.8208338867431547, 
+                    0.7788499786864682, 
+                    0.7788499786864682, 
+                    0.7380297535064269, 
+                    0.7380297535064269, 
+                    0.6962688562201126, 
+                    0.6962688562201126, 
+                    0.6558897500556348, 
+                    0.6558897500556348, 
+                    0.6164207118786951, 
+                    0.6164207118786951, 
+                    0.5771428622468706, 
+                    0.5771428622468706, 
+                    0.5399094290035151, 
+                    0.5399094290035151, 
+                    0.5052550752067094, 
+                    0.5052550752067094, 
+                    0.4721113670586859, 
+                    0.4721113670586859, 
+                    0.4411170452192082, 
+                    0.4411170452192082, 
+                    0.4125382848490527, 
+                    0.4125382848490527, 
+                    0.38557560656327333, 
+                    0.38557560656327333, 
+                    0.36191003474325883, 
+                    0.36191003474325883, 
+                    0.34056770351433185, 
+                    0.34056770351433185, 
+                    0.32006597176372314, 
+                    0.32006597176372314, 
+                    0.30083902220722286, 
+                    0.30083902220722286, 
+                    0.28396639086290454, 
+                    0.28396639086290454, 
+                    0.26838626083007, 
+                    0.26838626083007, 
+                    0.2545651307398906, 
+                    0.2545651307398906, 
+                    0.241924801092575, 
+                    0.241924801092575, 
+                    0.2370144000350783, 
+                    0.2370144000350783, 
+                    0.23410690285037433, 
+                    0.23410690285037433, 
+                    0.22024280786936776, 
+                    0.22024280786936776, 
+                    0.20382482452082068, 
+                    0.20382482452082068, 
+                    0.18544383323132083, 
+                    0.18544383323132083, 
+                    0.16571328081832853, 
+                    0.16571328081832853, 
+                    0.14487665509052775, 
+                    0.14487665509052775, 
+                    0.12297454175843, 
+                    0.12297454175843, 
+                    0.10173298828708247, 
+                    0.10173298828708247
+                ], 
+                0.08067236840724945
+            ], 
+            [
+                1.0764062404632568, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999923651676124, 
+                    0.9999923651676124, 
+                    0.9997781402644421, 
+                    0.9997781402644421, 
+                    0.9931777389340034, 
+                    0.9931777389340034, 
+                    0.9814772788582876, 
+                    0.9814772788582876, 
+                    0.961217295154973, 
+                    0.961217295154973, 
+                    0.9321546999782542, 
+                    0.9321546999782542, 
+                    0.8969215743775346, 
+                    0.8969215743775346, 
+                    0.8572698803769871, 
+                    0.8572698803769871, 
+                    0.817920368593128, 
+                    0.817920368593128, 
+                    0.7757290589066181, 
+                    0.7757290589066181, 
+                    0.7347841377330133, 
+                    0.7347841377330133, 
+                    0.6929377754086986, 
+                    0.6929377754086986, 
+                    0.652535664709491, 
+                    0.652535664709491, 
+                    0.6130787831394905, 
+                    0.6130787831394905, 
+                    0.5738298920594701, 
+                    0.5738298920594701, 
+                    0.5367052926530345, 
+                    0.5367052926530345, 
+                    0.502109811873977, 
+                    0.502109811873977, 
+                    0.4691203714663065, 
+                    0.4691203714663065, 
+                    0.43820722048940497, 
+                    0.43820722048940497, 
+                    0.40977894430702677, 
+                    0.40977894430702677, 
+                    0.3829303075631142, 
+                    0.3829303075631142, 
+                    0.35939537077381617, 
+                    0.35939537077381617, 
+                    0.33816952477007484, 
+                    0.33816952477007484, 
+                    0.31778764240059565, 
+                    0.31778764240059565, 
+                    0.29867863440685216, 
+                    0.29867863440685216, 
+                    0.281913656628601, 
+                    0.281913656628601, 
+                    0.2664358083171984, 
+                    0.2664358083171984, 
+                    0.2527036262814181, 
+                    0.2527036262814181, 
+                    0.24010652146450842, 
+                    0.24010652146450842, 
+                    0.2347568490312088, 
+                    0.2347568490312088, 
+                    0.23379577789537648, 
+                    0.23379577789537648, 
+                    0.21966288282400945, 
+                    0.21966288282400945, 
+                    0.20323400544870282, 
+                    0.20323400544870282, 
+                    0.1848929932784459, 
+                    0.1848929932784459, 
+                    0.16522781080702204, 
+                    0.16522781080702204, 
+                    0.14447814761153202, 
+                    0.14447814761153202, 
+                    0.12268355141074241, 
+                    0.12268355141074241, 
+                    0.10162203464775174, 
+                    0.10162203464775174
+                ], 
+                0.07512705028057098
+            ]
+        ]
+    }, 
+    {
+        "block_size": 81, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9298469424247742, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999058782849776, 
+                    0.9999058782849776, 
+                    0.9997881724467789, 
+                    0.9997881724467789, 
+                    0.9953244486153026, 
+                    0.9953244486153026, 
+                    0.9887257866600274, 
+                    0.9887257866600274, 
+                    0.9747095889202706, 
+                    0.9747095889202706, 
+                    0.9542713557933371, 
+                    0.9542713557933371, 
+                    0.9271698599606859, 
+                    0.9271698599606859, 
+                    0.8939840412920853, 
+                    0.8939840412920853, 
+                    0.8579903387598768, 
+                    0.8579903387598768, 
+                    0.81960636191139, 
+                    0.81960636191139, 
+                    0.7802087012788628, 
+                    0.7802087012788628, 
+                    0.7398088382547449, 
+                    0.7398088382547449, 
+                    0.699744576877996, 
+                    0.699744576877996, 
+                    0.6611192366182185, 
+                    0.6611192366182185, 
+                    0.6242375330537563, 
+                    0.6242375330537563, 
+                    0.5896184726026586, 
+                    0.5896184726026586, 
+                    0.5551891574307113, 
+                    0.5551891574307113, 
+                    0.5203984277412729, 
+                    0.5203984277412729, 
+                    0.4878235942140829, 
+                    0.4878235942140829, 
+                    0.45828455455904454, 
+                    0.45828455455904454, 
+                    0.4296551078231057, 
+                    0.4296551078231057, 
+                    0.4030699736772438, 
+                    0.4030699736772438, 
+                    0.37961123566203725, 
+                    0.37961123566203725, 
+                    0.35745285989581366, 
+                    0.35745285989581366, 
+                    0.33684504095192197, 
+                    0.33684504095192197, 
+                    0.31896702408342675, 
+                    0.31896702408342675, 
+                    0.3028440997264934, 
+                    0.3028440997264934, 
+                    0.28800631890766926, 
+                    0.28800631890766926, 
+                    0.2742798713248383, 
+                    0.2742798713248383, 
+                    0.2617228587318826, 
+                    0.2617228587318826, 
+                    0.25155309905590245, 
+                    0.25155309905590245, 
+                    0.23943017109588124, 
+                    0.23943017109588124, 
+                    0.22382196840052926, 
+                    0.22382196840052926, 
+                    0.205447671888899, 
+                    0.205447671888899, 
+                    0.18488116493173515, 
+                    0.18488116493173515, 
+                    0.162293198091786, 
+                    0.162293198091786, 
+                    0.1374646998459762, 
+                    0.1374646998459762, 
+                    0.10989200599807211, 
+                    0.10989200599807211
+                ], 
+                0.21114878356456757
+            ], 
+            [
+                0.9366348385810852, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9991093782292235, 
+                    0.9991093782292235, 
+                    0.9955141215660392, 
+                    0.9955141215660392, 
+                    0.9888388287727512, 
+                    0.9888388287727512, 
+                    0.9735593608244508, 
+                    0.9735593608244508, 
+                    0.9542808457625127, 
+                    0.9542808457625127, 
+                    0.9257194191112464, 
+                    0.9257194191112464, 
+                    0.891648344590639, 
+                    0.891648344590639, 
+                    0.8553559434924225, 
+                    0.8553559434924225, 
+                    0.8168950415186332, 
+                    0.8168950415186332, 
+                    0.7769529471578693, 
+                    0.7769529471578693, 
+                    0.736878229083922, 
+                    0.736878229083922, 
+                    0.696324315796159, 
+                    0.696324315796159, 
+                    0.6579525257675071, 
+                    0.6579525257675071, 
+                    0.6211119862110458, 
+                    0.6211119862110458, 
+                    0.5861680733396645, 
+                    0.5861680733396645, 
+                    0.5516311491408308, 
+                    0.5516311491408308, 
+                    0.517629148071177, 
+                    0.517629148071177, 
+                    0.4842127880240585, 
+                    0.4842127880240585, 
+                    0.45580210404992194, 
+                    0.45580210404992194, 
+                    0.426413458774225, 
+                    0.426413458774225, 
+                    0.40050241124632224, 
+                    0.40050241124632224, 
+                    0.37692124236463126, 
+                    0.37692124236463126, 
+                    0.3549279220007556, 
+                    0.3549279220007556, 
+                    0.3344334317059224, 
+                    0.3344334317059224, 
+                    0.31666350795844955, 
+                    0.31666350795844955, 
+                    0.30064183627835245, 
+                    0.30064183627835245, 
+                    0.2858768783606144, 
+                    0.2858768783606144, 
+                    0.27191577788482196, 
+                    0.27191577788482196, 
+                    0.25957337841501343, 
+                    0.25957337841501343, 
+                    0.24969075834794316, 
+                    0.24969075834794316, 
+                    0.23705846506005698, 
+                    0.23705846506005698, 
+                    0.22109566945379566, 
+                    0.22109566945379566, 
+                    0.2025604800284303, 
+                    0.2025604800284303, 
+                    0.1819803747616133, 
+                    0.1819803747616133, 
+                    0.1595145501118202, 
+                    0.1595145501118202, 
+                    0.1349874631473558, 
+                    0.1349874631473558, 
+                    0.10835192478649719, 
+                    0.10835192478649719
+                ], 
+                0.19972731173038483
+            ], 
+            [
+                0.9434723258018494, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999610676858107, 
+                    0.9999610676858107, 
+                    0.999685450765039, 
+                    0.999685450765039, 
+                    0.9967082015117582, 
+                    0.9967082015117582, 
+                    0.9877594159589609, 
+                    0.9877594159589609, 
+                    0.9738911817287773, 
+                    0.9738911817287773, 
+                    0.9522203371134982, 
+                    0.9522203371134982, 
+                    0.9235988131974552, 
+                    0.9235988131974552, 
+                    0.8892594412509995, 
+                    0.8892594412509995, 
+                    0.8523998763726033, 
+                    0.8523998763726033, 
+                    0.8138762396497586, 
+                    0.8138762396497586, 
+                    0.7739018429882315, 
+                    0.7739018429882315, 
+                    0.7335109718516466, 
+                    0.7335109718516466, 
+                    0.6932343662043844, 
+                    0.6932343662043844, 
+                    0.6544959255172434, 
+                    0.6544959255172434, 
+                    0.6172854622163307, 
+                    0.6172854622163307, 
+                    0.5829898606504426, 
+                    0.5829898606504426, 
+                    0.5485861697925066, 
+                    0.5485861697925066, 
+                    0.5138521713089356, 
+                    0.5138521713089356, 
+                    0.48170122772199503, 
+                    0.48170122772199503, 
+                    0.45228505496455745, 
+                    0.45228505496455745, 
+                    0.4239754554900022, 
+                    0.4239754554900022, 
+                    0.3975562452099659, 
+                    0.3975562452099659, 
+                    0.37435513885279176, 
+                    0.37435513885279176, 
+                    0.35242784781850234, 
+                    0.35242784781850234, 
+                    0.3320370367103934, 
+                    0.3320370367103934, 
+                    0.31436679613719415, 
+                    0.31436679613719415, 
+                    0.29842418693374984, 
+                    0.29842418693374984, 
+                    0.2837895439599873, 
+                    0.2837895439599873, 
+                    0.2706538982356797, 
+                    0.2706538982356797, 
+                    0.25836237157210845, 
+                    0.25836237157210845, 
+                    0.2478567806843986, 
+                    0.2478567806843986, 
+                    0.23594238654558908, 
+                    0.23594238654558908, 
+                    0.22064019241352104, 
+                    0.22064019241352104, 
+                    0.20259317446834801, 
+                    0.20259317446834801, 
+                    0.18237648392821657, 
+                    0.18237648392821657, 
+                    0.16017385735776507, 
+                    0.16017385735776507, 
+                    0.13580400641251902, 
+                    0.13580400641251902, 
+                    0.10909619999412708, 
+                    0.10909619999412708
+                ], 
+                0.18914704024791718
+            ], 
+            [
+                0.9503597021102905, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998787331548243, 
+                    0.9998787331548243, 
+                    0.9994485082391702, 
+                    0.9994485082391702, 
+                    0.9952968402642344, 
+                    0.9952968402642344, 
+                    0.9871657612224404, 
+                    0.9871657612224404, 
+                    0.9733235354034717, 
+                    0.9733235354034717, 
+                    0.950497219968534, 
+                    0.950497219968534, 
+                    0.9217356827694715, 
+                    0.9217356827694715, 
+                    0.8869575461929752, 
+                    0.8869575461929752, 
+                    0.8501664405640781, 
+                    0.8501664405640781, 
+                    0.8107034615883273, 
+                    0.8107034615883273, 
+                    0.7710453502875645, 
+                    0.7710453502875645, 
+                    0.7302254771347133, 
+                    0.7302254771347133, 
+                    0.6895526781868284, 
+                    0.6895526781868284, 
+                    0.65117511489609, 
+                    0.65117511489609, 
+                    0.6143689536620421, 
+                    0.6143689536620421, 
+                    0.5795912993379534, 
+                    0.5795912993379534, 
+                    0.5449418072339385, 
+                    0.5449418072339385, 
+                    0.511193734987221, 
+                    0.511193734987221, 
+                    0.478165181636401, 
+                    0.478165181636401, 
+                    0.45003624226731065, 
+                    0.45003624226731065, 
+                    0.42084026929133284, 
+                    0.42084026929133284, 
+                    0.39504912817842935, 
+                    0.39504912817842935, 
+                    0.3716772176897705, 
+                    0.3716772176897705, 
+                    0.34993632578361394, 
+                    0.34993632578361394, 
+                    0.3296610891509025, 
+                    0.3296610891509025, 
+                    0.31212245689498935, 
+                    0.31212245689498935, 
+                    0.2962807185272445, 
+                    0.2962807185272445, 
+                    0.28170544945421244, 
+                    0.28170544945421244, 
+                    0.2683253377995653, 
+                    0.2683253377995653, 
+                    0.2564471396881662, 
+                    0.2564471396881662, 
+                    0.24620534209875045, 
+                    0.24620534209875045, 
+                    0.23433899559862095, 
+                    0.23433899559862095, 
+                    0.21906512797786215, 
+                    0.21906512797786215, 
+                    0.20107239928190548, 
+                    0.20107239928190548, 
+                    0.18094733767949844, 
+                    0.18094733767949844, 
+                    0.15888193695495328, 
+                    0.15888193695495328, 
+                    0.13471486165775604, 
+                    0.13471486165775604, 
+                    0.1084010946879834, 
+                    0.1084010946879834
+                ], 
+                0.17875871062278748
+            ], 
+            [
+                0.9572973847389221, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999644150759809, 
+                    0.9999644150759809, 
+                    0.9998279732699036, 
+                    0.9998279732699036, 
+                    0.9955965004407573, 
+                    0.9955965004407573, 
+                    0.9864147762703726, 
+                    0.9864147762703726, 
+                    0.9716761610643513, 
+                    0.9716761610643513, 
+                    0.9495403150551904, 
+                    0.9495403150551904, 
+                    0.9198422333013927, 
+                    0.9198422333013927, 
+                    0.8847586685414798, 
+                    0.8847586685414798, 
+                    0.8471807522182006, 
+                    0.8471807522182006, 
+                    0.8082044489810961, 
+                    0.8082044489810961, 
+                    0.7676077733702401, 
+                    0.7676077733702401, 
+                    0.7267707407757182, 
+                    0.7267707407757182, 
+                    0.6865839810128916, 
+                    0.6865839810128916, 
+                    0.647450342101347, 
+                    0.647450342101347, 
+                    0.6109125091389891, 
+                    0.6109125091389891, 
+                    0.5763558588341885, 
+                    0.5763558588341885, 
+                    0.5417358590979294, 
+                    0.5417358590979294, 
+                    0.5079562553743454, 
+                    0.5079562553743454, 
+                    0.4754197160312919, 
+                    0.4754197160312919, 
+                    0.4467067380421489, 
+                    0.4467067380421489, 
+                    0.41798914535314274, 
+                    0.41798914535314274, 
+                    0.3922531769204623, 
+                    0.3922531769204623, 
+                    0.3691008357372441, 
+                    0.3691008357372441, 
+                    0.34746972595175163, 
+                    0.34746972595175163, 
+                    0.32729808013029815, 
+                    0.32729808013029815, 
+                    0.30984393272834054, 
+                    0.30984393272834054, 
+                    0.29407599400547063, 
+                    0.29407599400547063, 
+                    0.2795265960544798, 
+                    0.2795265960544798, 
+                    0.2663480867200208, 
+                    0.2663480867200208, 
+                    0.25443199303856767, 
+                    0.25443199303856767, 
+                    0.2446817802886785, 
+                    0.2446817802886785, 
+                    0.23276920400063214, 
+                    0.23276920400063214, 
+                    0.21738031210851272, 
+                    0.21738031210851272, 
+                    0.19934062475305464, 
+                    0.19934062475305464, 
+                    0.1792423568652568, 
+                    0.1792423568652568, 
+                    0.15728172759209344, 
+                    0.15728172759209344, 
+                    0.13332016670193506, 
+                    0.13332016670193506, 
+                    0.10747892847979973, 
+                    0.10747892847979973
+                ], 
+                0.16855649650096893
+            ], 
+            [
+                0.9642857313156128, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998325223732493, 
+                    0.9998325223732493, 
+                    0.9951610417055334, 
+                    0.9951610417055334, 
+                    0.9861348973182414, 
+                    0.9861348973182414, 
+                    0.9715504036668089, 
+                    0.9715504036668089, 
+                    0.9481527129737987, 
+                    0.9481527129737987, 
+                    0.9177023778779729, 
+                    0.9177023778779729, 
+                    0.8823479422829812, 
+                    0.8823479422829812, 
+                    0.8445073310646786, 
+                    0.8445073310646786, 
+                    0.8053220963029302, 
+                    0.8053220963029302, 
+                    0.7641922715318687, 
+                    0.7641922715318687, 
+                    0.7236846673390417, 
+                    0.7236846673390417, 
+                    0.6831041877312062, 
+                    0.6831041877312062, 
+                    0.6442717951755069, 
+                    0.6442717951755069, 
+                    0.6074727848702918, 
+                    0.6074727848702918, 
+                    0.5727910011608244, 
+                    0.5727910011608244, 
+                    0.5390150885488694, 
+                    0.5390150885488694, 
+                    0.5043576344339902, 
+                    0.5043576344339902, 
+                    0.4732947893054672, 
+                    0.4732947893054672, 
+                    0.44322329478954064, 
+                    0.44322329478954064, 
+                    0.4158242615863822, 
+                    0.4158242615863822, 
+                    0.3892941546068005, 
+                    0.3892941546068005, 
+                    0.3665733125699624, 
+                    0.3665733125699624, 
+                    0.3449696179560803, 
+                    0.3449696179560803, 
+                    0.32495049303579276, 
+                    0.32495049303579276, 
+                    0.30763231816170955, 
+                    0.30763231816170955, 
+                    0.2919932116964576, 
+                    0.2919932116964576, 
+                    0.2776035040874037, 
+                    0.2776035040874037, 
+                    0.26437541975600964, 
+                    0.26437541975600964, 
+                    0.2527500575083895, 
+                    0.2527500575083895, 
+                    0.24320784670950624, 
+                    0.24320784670950624, 
+                    0.2313655779823735, 
+                    0.2313655779823735, 
+                    0.2160241841650104, 
+                    0.2160241841650104, 
+                    0.1980483197242544, 
+                    0.1980483197242544, 
+                    0.1780458377374921, 
+                    0.1780458377374921, 
+                    0.1562227806141465, 
+                    0.1562227806141465, 
+                    0.13245815690653812, 
+                    0.13245815690653812, 
+                    0.1069788659413098, 
+                    0.1069788659413098
+                ], 
+                0.1590694785118103
+            ], 
+            [
+                0.9713250398635864, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999359673375157, 
+                    0.9999359673375157, 
+                    0.9999062581005352, 
+                    0.9999062581005352, 
+                    0.9954227014520904, 
+                    0.9954227014520904, 
+                    0.9858272354498602, 
+                    0.9858272354498602, 
+                    0.9706573459999359, 
+                    0.9706573459999359, 
+                    0.9468086544863734, 
+                    0.9468086544863734, 
+                    0.9156988240069829, 
+                    0.9156988240069829, 
+                    0.8798940346839742, 
+                    0.8798940346839742, 
+                    0.8418500464281933, 
+                    0.8418500464281933, 
+                    0.802080009820135, 
+                    0.802080009820135, 
+                    0.76110280360211, 
+                    0.76110280360211, 
+                    0.7204141300685397, 
+                    0.7204141300685397, 
+                    0.6798476250159539, 
+                    0.6798476250159539, 
+                    0.6412062249386454, 
+                    0.6412062249386454, 
+                    0.6042284061193297, 
+                    0.6042284061193297, 
+                    0.5695347863282015, 
+                    0.5695347863282015, 
+                    0.535502315887554, 
+                    0.535502315887554, 
+                    0.5012538809367647, 
+                    0.5012538809367647, 
+                    0.46947820393219497, 
+                    0.46947820393219497, 
+                    0.44047754574888764, 
+                    0.44047754574888764, 
+                    0.4126764820418716, 
+                    0.4126764820418716, 
+                    0.3868029638674111, 
+                    0.3868029638674111, 
+                    0.36407052734047857, 
+                    0.36407052734047857, 
+                    0.34258111848300665, 
+                    0.34258111848300665, 
+                    0.32265068008657194, 
+                    0.32265068008657194, 
+                    0.3053797166131612, 
+                    0.3053797166131612, 
+                    0.2898108836558565, 
+                    0.2898108836558565, 
+                    0.2755646476076505, 
+                    0.2755646476076505, 
+                    0.2633191222612543, 
+                    0.2633191222612543, 
+                    0.2504889545975753, 
+                    0.2504889545975753, 
+                    0.24167884841203296, 
+                    0.24167884841203296, 
+                    0.2299585938499168, 
+                    0.2299585938499168, 
+                    0.21465245533219107, 
+                    0.21465245533219107, 
+                    0.19672996877917343, 
+                    0.19672996877917343, 
+                    0.176810704411908, 
+                    0.176810704411908, 
+                    0.15510503087547173, 
+                    0.15510503087547173, 
+                    0.13150485287002547, 
+                    0.13150485287002547, 
+                    0.10630660049296535, 
+                    0.10630660049296535
+                ], 
+                0.14972537755966187
+            ], 
+            [
+                0.9784157872200012, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993812128966209, 
+                    0.9993812128966209, 
+                    0.9944294776134801, 
+                    0.9944294776134801, 
+                    0.9850437694275301, 
+                    0.9850437694275301, 
+                    0.9692179794100986, 
+                    0.9692179794100986, 
+                    0.9451584095983382, 
+                    0.9451584095983382, 
+                    0.9137929723678194, 
+                    0.9137929723678194, 
+                    0.8774605466511645, 
+                    0.8774605466511645, 
+                    0.8391417604048275, 
+                    0.8391417604048275, 
+                    0.7989879838411471, 
+                    0.7989879838411471, 
+                    0.7582733792948606, 
+                    0.7582733792948606, 
+                    0.7171680892863871, 
+                    0.7171680892863871, 
+                    0.6765148724536739, 
+                    0.6765148724536739, 
+                    0.6376799063210534, 
+                    0.6376799063210534, 
+                    0.6006577164392429, 
+                    0.6006577164392429, 
+                    0.5663958331156531, 
+                    0.5663958331156531, 
+                    0.5320751545054588, 
+                    0.5320751545054588, 
+                    0.498694632014257, 
+                    0.498694632014257, 
+                    0.46551515624066164, 
+                    0.46551515624066164, 
+                    0.438274490756662, 
+                    0.438274490756662, 
+                    0.40944333821880147, 
+                    0.40944333821880147, 
+                    0.3843611424316435, 
+                    0.3843611424316435, 
+                    0.36151856748470657, 
+                    0.36151856748470657, 
+                    0.34019248103803484, 
+                    0.34019248103803484, 
+                    0.3203670205938697, 
+                    0.3203670205938697, 
+                    0.30319054591818184, 
+                    0.30319054591818184, 
+                    0.28771557470815806, 
+                    0.28771557470815806, 
+                    0.27349338398534423, 
+                    0.27349338398534423, 
+                    0.2606862301112772, 
+                    0.2606862301112772, 
+                    0.25006582805647487, 
+                    0.25006582805647487, 
+                    0.2412935946986152, 
+                    0.2412935946986152, 
+                    0.22853378381385595, 
+                    0.22853378381385595, 
+                    0.21247566996997985, 
+                    0.21247566996997985, 
+                    0.19408677367270671, 
+                    0.19408677367270671, 
+                    0.17394056202083305, 
+                    0.17394056202083305, 
+                    0.15224006112481547, 
+                    0.15224006112481547, 
+                    0.12892535551132778, 
+                    0.12892535551132778, 
+                    0.10470543620780812, 
+                    0.10470543620780812
+                ], 
+                0.14073286950588226
+            ], 
+            [
+                0.9855582118034363, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999846104424905, 
+                    0.9999846104424905, 
+                    0.9998950024105994, 
+                    0.9998950024105994, 
+                    0.9944057339799203, 
+                    0.9944057339799203, 
+                    0.9846321039965668, 
+                    0.9846321039965668, 
+                    0.9679582391962032, 
+                    0.9679582391962032, 
+                    0.9433355747790171, 
+                    0.9433355747790171, 
+                    0.9118056888770384, 
+                    0.9118056888770384, 
+                    0.875070211101222, 
+                    0.875070211101222, 
+                    0.8364439789098871, 
+                    0.8364439789098871, 
+                    0.7961388009895426, 
+                    0.7961388009895426, 
+                    0.7550018838190379, 
+                    0.7550018838190379, 
+                    0.7138854561632937, 
+                    0.7138854561632937, 
+                    0.673066333180726, 
+                    0.673066333180726, 
+                    0.6343544942664598, 
+                    0.6343544942664598, 
+                    0.5975761032185822, 
+                    0.5975761032185822, 
+                    0.5629982066194312, 
+                    0.5629982066194312, 
+                    0.5293275882109133, 
+                    0.5293275882109133, 
+                    0.4948424848652988, 
+                    0.4948424848652988, 
+                    0.4639268475805909, 
+                    0.4639268475805909, 
+                    0.4344613120804231, 
+                    0.4344613120804231, 
+                    0.4073570571735965, 
+                    0.4073570571735965, 
+                    0.3814344270299371, 
+                    0.3814344270299371, 
+                    0.35903317146511105, 
+                    0.35903317146511105, 
+                    0.3377669997229909, 
+                    0.3377669997229909, 
+                    0.31807385954536666, 
+                    0.31807385954536666, 
+                    0.3010242785427183, 
+                    0.3010242785427183, 
+                    0.28565944051615605, 
+                    0.28565944051615605, 
+                    0.27153211212053424, 
+                    0.27153211212053424, 
+                    0.2585993521195436, 
+                    0.2585993521195436, 
+                    0.2487097056153322, 
+                    0.2487097056153322, 
+                    0.24013229485985776, 
+                    0.24013229485985776, 
+                    0.22745809093964497, 
+                    0.22745809093964497, 
+                    0.21145539821839598, 
+                    0.21145539821839598, 
+                    0.19313137927239213, 
+                    0.19313137927239213, 
+                    0.1730752252075165, 
+                    0.1730752252075165, 
+                    0.15149925368577147, 
+                    0.15149925368577147, 
+                    0.1283557770468893, 
+                    0.1283557770468893, 
+                    0.10444370091138602, 
+                    0.10444370091138602
+                ], 
+                0.1324157565832138
+            ], 
+            [
+                0.9927528500556946, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999428382023043, 
+                    0.9999428382023043, 
+                    0.9943400322262406, 
+                    0.9943400322262406, 
+                    0.9844336284731605, 
+                    0.9844336284731605, 
+                    0.9674443079067349, 
+                    0.9674443079067349, 
+                    0.9417753616801762, 
+                    0.9417753616801762, 
+                    0.9096645564361292, 
+                    0.9096645564361292, 
+                    0.8725733767593177, 
+                    0.8725733767593177, 
+                    0.8336328315037177, 
+                    0.8336328315037177, 
+                    0.7931055564054841, 
+                    0.7931055564054841, 
+                    0.7518034031685054, 
+                    0.7518034031685054, 
+                    0.7106129236576425, 
+                    0.7106129236576425, 
+                    0.6697402149878616, 
+                    0.6697402149878616, 
+                    0.6309846751304652, 
+                    0.6309846751304652, 
+                    0.5943155665078848, 
+                    0.5943155665078848, 
+                    0.5597427323735916, 
+                    0.5597427323735916, 
+                    0.5261887286729799, 
+                    0.5261887286729799, 
+                    0.491741011854477, 
+                    0.491741011854477, 
+                    0.46095815194145257, 
+                    0.46095815194145257, 
+                    0.4316018456079784, 
+                    0.4316018456079784, 
+                    0.4046189657512559, 
+                    0.4046189657512559, 
+                    0.37881592029633154, 
+                    0.37881592029633154, 
+                    0.35653285591278505, 
+                    0.35653285591278505, 
+                    0.3353810274065163, 
+                    0.3353810274065163, 
+                    0.31580295006667136, 
+                    0.31580295006667136, 
+                    0.29885908711802167, 
+                    0.29885908711802167, 
+                    0.2835867672319433, 
+                    0.2835867672319433, 
+                    0.26954507160058927, 
+                    0.26954507160058927, 
+                    0.25669673414962446, 
+                    0.25669673414962446, 
+                    0.24727775029940635, 
+                    0.24727775029940635, 
+                    0.23901152415320595, 
+                    0.23901152415320595, 
+                    0.22638895688578864, 
+                    0.22638895688578864, 
+                    0.21042038193439355, 
+                    0.21042038193439355, 
+                    0.19214696900966385, 
+                    0.19214696900966385, 
+                    0.17216891975248008, 
+                    0.17216891975248008, 
+                    0.15070520566948994, 
+                    0.15070520566948994, 
+                    0.12771962228599365, 
+                    0.12771962228599365, 
+                    0.10410928576182518, 
+                    0.10410928576182518
+                ], 
+                0.12435507774353027
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997494645528713, 
+                    0.9997494645528713, 
+                    0.9938697686416645, 
+                    0.9938697686416645, 
+                    0.983726317914335, 
+                    0.983726317914335, 
+                    0.96601847040579, 
+                    0.96601847040579, 
+                    0.9401934729674974, 
+                    0.9401934729674974, 
+                    0.9075869050965871, 
+                    0.9075869050965871, 
+                    0.8699998879842468, 
+                    0.8699998879842468, 
+                    0.8308201764639114, 
+                    0.8308201764639114, 
+                    0.7900315120058464, 
+                    0.7900315120058464, 
+                    0.7485677783677915, 
+                    0.7485677783677915, 
+                    0.7073555512849652, 
+                    0.7073555512849652, 
+                    0.6663655225817391, 
+                    0.6663655225817391, 
+                    0.6277109185792019, 
+                    0.6277109185792019, 
+                    0.590830295946501, 
+                    0.590830295946501, 
+                    0.5567285424278762, 
+                    0.5567285424278762, 
+                    0.5225518040145355, 
+                    0.5225518040145355, 
+                    0.48940090429433397, 
+                    0.48940090429433397, 
+                    0.45682557968624343, 
+                    0.45682557968624343, 
+                    0.42958403356157354, 
+                    0.42958403356157354, 
+                    0.40137600536288215, 
+                    0.40137600536288215, 
+                    0.37646570910005245, 
+                    0.37646570910005245, 
+                    0.35400178908907937, 
+                    0.35400178908907937, 
+                    0.33303546944091755, 
+                    0.33303546944091755, 
+                    0.31355654619478723, 
+                    0.31355654619478723, 
+                    0.296709755269767, 
+                    0.296709755269767, 
+                    0.28153130727090675, 
+                    0.28153130727090675, 
+                    0.2675720202132895, 
+                    0.2675720202132895, 
+                    0.2548004655639908, 
+                    0.2548004655639908, 
+                    0.24717557868262918, 
+                    0.24717557868262918, 
+                    0.23866100122914935, 
+                    0.23866100122914935, 
+                    0.2255237230235418, 
+                    0.2255237230235418, 
+                    0.2092094116966809, 
+                    0.2092094116966809, 
+                    0.19073195350450184, 
+                    0.19073195350450184, 
+                    0.17067249676899524, 
+                    0.17067249676899524, 
+                    0.14924868899925545, 
+                    0.14924868899925545, 
+                    0.12644691139717093, 
+                    0.12644691139717093, 
+                    0.10337202123372156, 
+                    0.10337202123372156
+                ], 
+                0.11662261933088303
+            ], 
+            [
+                1.0073000192642212, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999914488845195, 
+                    0.999914488845195, 
+                    0.9938265753298935, 
+                    0.9938265753298935, 
+                    0.9832298520265256, 
+                    0.9832298520265256, 
+                    0.9653234369216955, 
+                    0.9653234369216955, 
+                    0.9386673428298459, 
+                    0.9386673428298459, 
+                    0.9054808057046521, 
+                    0.9054808057046521, 
+                    0.8675177844928901, 
+                    0.8675177844928901, 
+                    0.8279942923265581, 
+                    0.8279942923265581, 
+                    0.7869854687856511, 
+                    0.7869854687856511, 
+                    0.7453723485472449, 
+                    0.7453723485472449, 
+                    0.7039933855865733, 
+                    0.7039933855865733, 
+                    0.66302310957052, 
+                    0.66302310957052, 
+                    0.6243699591782443, 
+                    0.6243699591782443, 
+                    0.5874979868790781, 
+                    0.5874979868790781, 
+                    0.5534872039696772, 
+                    0.5534872039696772, 
+                    0.5193702816484007, 
+                    0.5193702816484007, 
+                    0.48635534042862366, 
+                    0.48635534042862366, 
+                    0.45384912683649065, 
+                    0.45384912683649065, 
+                    0.4267567064806948, 
+                    0.4267567064806948, 
+                    0.3986646374286154, 
+                    0.3986646374286154, 
+                    0.3738833875294756, 
+                    0.3738833875294756, 
+                    0.35153675935323353, 
+                    0.35153675935323353, 
+                    0.33068622080580407, 
+                    0.33068622080580407, 
+                    0.3113212539100268, 
+                    0.3113212539100268, 
+                    0.2945768006843453, 
+                    0.2945768006843453, 
+                    0.2794919504032165, 
+                    0.2794919504032165, 
+                    0.26562009299815065, 
+                    0.26562009299815065, 
+                    0.252930668804739, 
+                    0.252930668804739, 
+                    0.24585422845166668, 
+                    0.24585422845166668, 
+                    0.237598267628885, 
+                    0.237598267628885, 
+                    0.2245859099517444, 
+                    0.2245859099517444, 
+                    0.20835985616549002, 
+                    0.20835985616549002, 
+                    0.18996632612788625, 
+                    0.18996632612788625, 
+                    0.1700018040487611, 
+                    0.1700018040487611, 
+                    0.1486904302529717, 
+                    0.1486904302529717, 
+                    0.12602530774810106, 
+                    0.12602530774810106, 
+                    0.10317816847048245, 
+                    0.10317816847048245
+                ], 
+                0.1092776283621788
+            ], 
+            [
+                1.0146533250808716, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999512136853689, 
+                    0.9999512136853689, 
+                    0.9997257421543342, 
+                    0.9997257421543342, 
+                    0.9937534100565153, 
+                    0.9937534100565153, 
+                    0.9829189555941539, 
+                    0.9829189555941539, 
+                    0.9644640658576706, 
+                    0.9644640658576706, 
+                    0.9370629791115642, 
+                    0.9370629791115642, 
+                    0.9033268115399147, 
+                    0.9033268115399147, 
+                    0.864973420056163, 
+                    0.864973420056163, 
+                    0.8251160285272459, 
+                    0.8251160285272459, 
+                    0.7839279430040829, 
+                    0.7839279430040829, 
+                    0.7421458234175266, 
+                    0.7421458234175266, 
+                    0.7006801963975661, 
+                    0.7006801963975661, 
+                    0.6596879778203982, 
+                    0.6596879778203982, 
+                    0.6208920709820358, 
+                    0.6208920709820358, 
+                    0.5844118746473388, 
+                    0.5844118746473388, 
+                    0.5498967117837863, 
+                    0.5498967117837863, 
+                    0.5167545430481418, 
+                    0.5167545430481418, 
+                    0.4823482020916102, 
+                    0.4823482020916102, 
+                    0.4521597192720235, 
+                    0.4521597192720235, 
+                    0.4229801998067432, 
+                    0.4229801998067432, 
+                    0.3965242617096038, 
+                    0.3965242617096038, 
+                    0.37106774620387745, 
+                    0.37106774620387745, 
+                    0.3491465629979122, 
+                    0.3491465629979122, 
+                    0.32834101358054757, 
+                    0.32834101358054757, 
+                    0.30910125093999374, 
+                    0.30910125093999374, 
+                    0.2924594260500538, 
+                    0.2924594260500538, 
+                    0.2774642425605423, 
+                    0.2774642425605423, 
+                    0.2636768395058677, 
+                    0.2636768395058677, 
+                    0.2510683374445646, 
+                    0.2510683374445646, 
+                    0.24466634799479325, 
+                    0.24466634799479325, 
+                    0.23657104917390728, 
+                    0.23657104917390728, 
+                    0.22365278453460477, 
+                    0.22365278453460477, 
+                    0.20749025610402352, 
+                    0.20749025610402352, 
+                    0.1891632995190715, 
+                    0.1891632995190715, 
+                    0.16928318779798662, 
+                    0.16928318779798662, 
+                    0.14807999553889625, 
+                    0.14807999553889625, 
+                    0.12555393007504337, 
+                    0.12555393007504337, 
+                    0.10295161993856146, 
+                    0.10295161993856146
+                ], 
+                0.102287657558918
+            ], 
+            [
+                1.0220603942871094, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999988575362404, 
+                    0.9999988575362404, 
+                    0.9993616810654931, 
+                    0.9993616810654931, 
+                    0.9941667524424238, 
+                    0.9941667524424238, 
+                    0.9835176971226421, 
+                    0.9835176971226421, 
+                    0.9642655745015716, 
+                    0.9642655745015716, 
+                    0.935613169473069, 
+                    0.935613169473069, 
+                    0.9010496667277674, 
+                    0.9010496667277674, 
+                    0.8623877286435818, 
+                    0.8623877286435818, 
+                    0.8222775426484129, 
+                    0.8222775426484129, 
+                    0.7808489274951397, 
+                    0.7808489274951397, 
+                    0.7389278992622667, 
+                    0.7389278992622667, 
+                    0.6973590278268326, 
+                    0.6973590278268326, 
+                    0.6562935412024332, 
+                    0.6562935412024332, 
+                    0.6175745974939976, 
+                    0.6175745974939976, 
+                    0.5810389764901487, 
+                    0.5810389764901487, 
+                    0.5467886937634926, 
+                    0.5467886937634926, 
+                    0.5133724973414242, 
+                    0.5133724973414242, 
+                    0.47961026051115047, 
+                    0.47961026051115047, 
+                    0.4487697611579398, 
+                    0.4487697611579398, 
+                    0.4204980536960113, 
+                    0.4204980536960113, 
+                    0.39360446159157136, 
+                    0.39360446159157136, 
+                    0.36858963646165555, 
+                    0.36858963646165555, 
+                    0.3466745715075833, 
+                    0.3466745715075833, 
+                    0.3260131099312515, 
+                    0.3260131099312515, 
+                    0.30689407796460066, 
+                    0.30689407796460066, 
+                    0.2903853637118094, 
+                    0.2903853637118094, 
+                    0.27550586178490516, 
+                    0.27550586178490516, 
+                    0.261336437760744, 
+                    0.261336437760744, 
+                    0.2511760735433904, 
+                    0.2511760735433904, 
+                    0.2393030908921594, 
+                    0.2393030908921594, 
+                    0.23271201342861994, 
+                    0.23271201342861994, 
+                    0.22160858668745115, 
+                    0.22160858668745115, 
+                    0.2067481839437087, 
+                    0.2067481839437087, 
+                    0.18932914826613817, 
+                    0.18932914826613817, 
+                    0.17007513287165288, 
+                    0.17007513287165288, 
+                    0.14924447685346515, 
+                    0.14924447685346515, 
+                    0.12681177942316474, 
+                    0.12681177942316474, 
+                    0.10374023912667099, 
+                    0.10374023912667099
+                ], 
+                0.09559477865695953
+            ], 
+            [
+                1.0295214653015137, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997004759005687, 
+                    0.9997004759005687, 
+                    0.9941107315246446, 
+                    0.9941107315246446, 
+                    0.9830008417508127, 
+                    0.9830008417508127, 
+                    0.963136971212129, 
+                    0.963136971212129, 
+                    0.9339040346076523, 
+                    0.9339040346076523, 
+                    0.8989395511370845, 
+                    0.8989395511370845, 
+                    0.859812605798639, 
+                    0.859812605798639, 
+                    0.8194830299566286, 
+                    0.8194830299566286, 
+                    0.7774820108876388, 
+                    0.7774820108876388, 
+                    0.7355003034262896, 
+                    0.7355003034262896, 
+                    0.6941054090341152, 
+                    0.6941054090341152, 
+                    0.6529776963674806, 
+                    0.6529776963674806, 
+                    0.6140748970902667, 
+                    0.6140748970902667, 
+                    0.5778798584952596, 
+                    0.5778798584952596, 
+                    0.5433332218319644, 
+                    0.5433332218319644, 
+                    0.5102404105108079, 
+                    0.5102404105108079, 
+                    0.4762301028510825, 
+                    0.4762301028510825, 
+                    0.44598809584362525, 
+                    0.44598809584362525, 
+                    0.4173495144303405, 
+                    0.4173495144303405, 
+                    0.39105234095219665, 
+                    0.39105234095219665, 
+                    0.36595737269629974, 
+                    0.36595737269629974, 
+                    0.3439344919633653, 
+                    0.3439344919633653, 
+                    0.3238760376812317, 
+                    0.3238760376812317, 
+                    0.30452299962889867, 
+                    0.30452299962889867, 
+                    0.28814581139149287, 
+                    0.28814581139149287, 
+                    0.27334508557713055, 
+                    0.27334508557713055, 
+                    0.2600194506664727, 
+                    0.2600194506664727, 
+                    0.24760933988124875, 
+                    0.24760933988124875, 
+                    0.23734435310846766, 
+                    0.23734435310846766, 
+                    0.23115729356437353, 
+                    0.23115729356437353, 
+                    0.2203482559818424, 
+                    0.2203482559818424, 
+                    0.20568060142249342, 
+                    0.20568060142249342, 
+                    0.1884336738578585, 
+                    0.1884336738578585, 
+                    0.16934613704599216, 
+                    0.16934613704599216, 
+                    0.14868396929322478, 
+                    0.14868396929322478, 
+                    0.1264288158789884, 
+                    0.1264288158789884, 
+                    0.10362109427283472, 
+                    0.10362109427283472
+                ], 
+                0.08897625654935837
+            ], 
+            [
+                1.0370370149612427, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999831959991514, 
+                    0.999831959991514, 
+                    0.9934447969470862, 
+                    0.9934447969470862, 
+                    0.9816218103458765, 
+                    0.9816218103458765, 
+                    0.9614822835993361, 
+                    0.9614822835993361, 
+                    0.9320810795376564, 
+                    0.9320810795376564, 
+                    0.8967499170537018, 
+                    0.8967499170537018, 
+                    0.8571525571738383, 
+                    0.8571525571738383, 
+                    0.8164435857521181, 
+                    0.8164435857521181, 
+                    0.7745887999846377, 
+                    0.7745887999846377, 
+                    0.7324136409228655, 
+                    0.7324136409228655, 
+                    0.6906486096556003, 
+                    0.6906486096556003, 
+                    0.6496294294666736, 
+                    0.6496294294666736, 
+                    0.6108104307622887, 
+                    0.6108104307622887, 
+                    0.5745530235985884, 
+                    0.5745530235985884, 
+                    0.5402002571951442, 
+                    0.5402002571951442, 
+                    0.5072439292667978, 
+                    0.5072439292667978, 
+                    0.47345315769983054, 
+                    0.47345315769983054, 
+                    0.44314765344883356, 
+                    0.44314765344883356, 
+                    0.41488474222586985, 
+                    0.41488474222586985, 
+                    0.3883905774493029, 
+                    0.3883905774493029, 
+                    0.3635134707142599, 
+                    0.3635134707142599, 
+                    0.34184728571894074, 
+                    0.34184728571894074, 
+                    0.3214789160033776, 
+                    0.3214789160033776, 
+                    0.3025376261144772, 
+                    0.3025376261144772, 
+                    0.28622873692034173, 
+                    0.28622873692034173, 
+                    0.27152188953326406, 
+                    0.27152188953326406, 
+                    0.2579287249262613, 
+                    0.2579287249262613, 
+                    0.24564861273711874, 
+                    0.24564861273711874, 
+                    0.24032693368790106, 
+                    0.24032693368790106, 
+                    0.23485716011201635, 
+                    0.23485716011201635, 
+                    0.22124069822697445, 
+                    0.22124069822697445, 
+                    0.20485473484773087, 
+                    0.20485473484773087, 
+                    0.18650155833346543, 
+                    0.18650155833346543, 
+                    0.16674750196012078, 
+                    0.16674750196012078, 
+                    0.14582038549110463, 
+                    0.14582038549110463, 
+                    0.12374243512366145, 
+                    0.12374243512366145, 
+                    0.1020781902827623, 
+                    0.1020781902827623
+                ], 
+                0.08328257501125336
+            ], 
+            [
+                1.044607400894165, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999994700515067, 
+                    0.9999994700515067, 
+                    0.9996661032567494, 
+                    0.9996661032567494, 
+                    0.9931832806440712, 
+                    0.9931832806440712, 
+                    0.9810641002417276, 
+                    0.9810641002417276, 
+                    0.9602720419215148, 
+                    0.9602720419215148, 
+                    0.9302211368336121, 
+                    0.9302211368336121, 
+                    0.8944628395885396, 
+                    0.8944628395885396, 
+                    0.8544982541463267, 
+                    0.8544982541463267, 
+                    0.8135004838112334, 
+                    0.8135004838112334, 
+                    0.7714561317679569, 
+                    0.7714561317679569, 
+                    0.729114152364735, 
+                    0.729114152364735, 
+                    0.6873027635576122, 
+                    0.6873027635576122, 
+                    0.6462824122477994, 
+                    0.6462824122477994, 
+                    0.6074382855789517, 
+                    0.6074382855789517, 
+                    0.5713064971581914, 
+                    0.5713064971581914, 
+                    0.5369596354424927, 
+                    0.5369596354424927, 
+                    0.5041341694853226, 
+                    0.5041341694853226, 
+                    0.4704193947012026, 
+                    0.4704193947012026, 
+                    0.4402875832980043, 
+                    0.4402875832980043, 
+                    0.41210417379910547, 
+                    0.41210417379910547, 
+                    0.38575528234936945, 
+                    0.38575528234936945, 
+                    0.36102074368954185, 
+                    0.36102074368954185, 
+                    0.33949626990158877, 
+                    0.33949626990158877, 
+                    0.3191859265432709, 
+                    0.3191859265432709, 
+                    0.3004030450290877, 
+                    0.3004030450290877, 
+                    0.2841734753406857, 
+                    0.2841734753406857, 
+                    0.26955949635006476, 
+                    0.26955949635006476, 
+                    0.25610170072962474, 
+                    0.25610170072962474, 
+                    0.24370962210556868, 
+                    0.24370962210556868, 
+                    0.23951455213182524, 
+                    0.23951455213182524, 
+                    0.23465035940552237, 
+                    0.23465035940552237, 
+                    0.2207631617209916, 
+                    0.2207631617209916, 
+                    0.20424314789197862, 
+                    0.20424314789197862, 
+                    0.18582806057372242, 
+                    0.18582806057372242, 
+                    0.1660697571743821, 
+                    0.1660697571743821, 
+                    0.14519607474379018, 
+                    0.14519607474379018, 
+                    0.12323526566463275, 
+                    0.12323526566463275, 
+                    0.10186141974110476, 
+                    0.10186141974110476
+                ], 
+                0.07759611308574677
+            ], 
+            [
+                1.052233099937439, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.99968622021088, 
+                    0.99968622021088, 
+                    0.9930429935409835, 
+                    0.9930429935409835, 
+                    0.9805852057252205, 
+                    0.9805852057252205, 
+                    0.9592360032762605, 
+                    0.9592360032762605, 
+                    0.9284930067317642, 
+                    0.9284930067317642, 
+                    0.8921609044962725, 
+                    0.8921609044962725, 
+                    0.8518131364701926, 
+                    0.8518131364701926, 
+                    0.8105431788644787, 
+                    0.8105431788644787, 
+                    0.7683001952414188, 
+                    0.7683001952414188, 
+                    0.7258399969242623, 
+                    0.7258399969242623, 
+                    0.6839369004870799, 
+                    0.6839369004870799, 
+                    0.6429395766805427, 
+                    0.6429395766805427, 
+                    0.6040457633200671, 
+                    0.6040457633200671, 
+                    0.5680745161914933, 
+                    0.5680745161914933, 
+                    0.533696525245885, 
+                    0.533696525245885, 
+                    0.5010395781466055, 
+                    0.5010395781466055, 
+                    0.4674039887196005, 
+                    0.4674039887196005, 
+                    0.43740283403506675, 
+                    0.43740283403506675, 
+                    0.4093656901532932, 
+                    0.4093656901532932, 
+                    0.3831284874982759, 
+                    0.3831284874982759, 
+                    0.3585335580151007, 
+                    0.3585335580151007, 
+                    0.33712561905035043, 
+                    0.33712561905035043, 
+                    0.31693429956436975, 
+                    0.31693429956436975, 
+                    0.2982649266917438, 
+                    0.2982649266917438, 
+                    0.2821381202790674, 
+                    0.2821381202790674, 
+                    0.26761883192644975, 
+                    0.26761883192644975, 
+                    0.25425057407277984, 
+                    0.25425057407277984, 
+                    0.24194210838685642, 
+                    0.24194210838685642, 
+                    0.23774392347983467, 
+                    0.23774392347983467, 
+                    0.2334366215500659, 
+                    0.2334366215500659, 
+                    0.21982565899035675, 
+                    0.21982565899035675, 
+                    0.2034954508809675, 
+                    0.2034954508809675, 
+                    0.1852298782534079, 
+                    0.1852298782534079, 
+                    0.16560654635382374, 
+                    0.16560654635382374, 
+                    0.14486114983939166, 
+                    0.14486114983939166, 
+                    0.12302273765240153, 
+                    0.12302273765240153, 
+                    0.10179419471240257, 
+                    0.10179419471240257
+                ], 
+                0.07220287621021271
+            ], 
+            [
+                1.059914469718933, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999920302895575, 
+                    0.9999920302895575, 
+                    0.999815701661643, 
+                    0.999815701661643, 
+                    0.9923338327033, 
+                    0.9923338327033, 
+                    0.9794465185307905, 
+                    0.9794465185307905, 
+                    0.9575928489036524, 
+                    0.9575928489036524, 
+                    0.9265208109838833, 
+                    0.9265208109838833, 
+                    0.8898269274223548, 
+                    0.8898269274223548, 
+                    0.8490954386492394, 
+                    0.8490954386492394, 
+                    0.8075537498079908, 
+                    0.8075537498079908, 
+                    0.7651313515153417, 
+                    0.7651313515153417, 
+                    0.722542161692983, 
+                    0.722542161692983, 
+                    0.6805975845166206, 
+                    0.6805975845166206, 
+                    0.6395287330240119, 
+                    0.6395287330240119, 
+                    0.6007926580602917, 
+                    0.6007926580602917, 
+                    0.5646770046699057, 
+                    0.5646770046699057, 
+                    0.5306243717212628, 
+                    0.5306243717212628, 
+                    0.4978001709439382, 
+                    0.4978001709439382, 
+                    0.46459776823304605, 
+                    0.46459776823304605, 
+                    0.43435114074071646, 
+                    0.43435114074071646, 
+                    0.40677621706412537, 
+                    0.40677621706412537, 
+                    0.38045373836033025, 
+                    0.38045373836033025, 
+                    0.356092196430756, 
+                    0.356092196430756, 
+                    0.334769163164214, 
+                    0.334769163164214, 
+                    0.3147073768889458, 
+                    0.3147073768889458, 
+                    0.29615164539399075, 
+                    0.29615164539399075, 
+                    0.28012758180519814, 
+                    0.28012758180519814, 
+                    0.2656981145342454, 
+                    0.2656981145342454, 
+                    0.2524245146647471, 
+                    0.2524245146647471, 
+                    0.2399161391526554, 
+                    0.2399161391526554, 
+                    0.2374395293469579, 
+                    0.2374395293469579, 
+                    0.2317314143584429, 
+                    0.2317314143584429, 
+                    0.21779314986292403, 
+                    0.21779314986292403, 
+                    0.20129155397102433, 
+                    0.20129155397102433, 
+                    0.18299679212392095, 
+                    0.18299679212392095, 
+                    0.16346084541586617, 
+                    0.16346084541586617, 
+                    0.14292269459514592, 
+                    0.14292269459514592, 
+                    0.12145427901832738, 
+                    0.12145427901832738, 
+                    0.10148347402285487, 
+                    0.10148347402285487
+                ], 
+                0.06705848127603531
+            ], 
+            [
+                1.0676518678665161, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995980930226256, 
+                    0.9995980930226256, 
+                    0.9922805200980807, 
+                    0.9922805200980807, 
+                    0.9790003042475232, 
+                    0.9790003042475232, 
+                    0.9566004104255728, 
+                    0.9566004104255728, 
+                    0.9246954010899561, 
+                    0.9246954010899561, 
+                    0.8874622739017592, 
+                    0.8874622739017592, 
+                    0.8463583159933119, 
+                    0.8463583159933119, 
+                    0.8045528527382373, 
+                    0.8045528527382373, 
+                    0.7619343560453123, 
+                    0.7619343560453123, 
+                    0.7192413155588533, 
+                    0.7192413155588533, 
+                    0.6772237227042295, 
+                    0.6772237227042295, 
+                    0.6361597801966182, 
+                    0.6361597801966182, 
+                    0.5974326378669246, 
+                    0.5974326378669246, 
+                    0.5614196829192247, 
+                    0.5614196829192247, 
+                    0.5274112521679335, 
+                    0.5274112521679335, 
+                    0.4947107167609608, 
+                    0.4947107167609608, 
+                    0.46160678843659986, 
+                    0.46160678843659986, 
+                    0.43150503392210243, 
+                    0.43150503392210243, 
+                    0.40405027635993196, 
+                    0.40405027635993196, 
+                    0.3778668127357777, 
+                    0.3778668127357777, 
+                    0.35363425409994204, 
+                    0.35363425409994204, 
+                    0.33243709819980105, 
+                    0.33243709819980105, 
+                    0.31249141201540925, 
+                    0.31249141201540925, 
+                    0.294036518449985, 
+                    0.294036518449985, 
+                    0.27812709786966094, 
+                    0.27812709786966094, 
+                    0.2637745734645862, 
+                    0.2637745734645862, 
+                    0.2505697753679077, 
+                    0.2505697753679077, 
+                    0.2377894248469007, 
+                    0.2377894248469007, 
+                    0.23442462133505076, 
+                    0.23442462133505076, 
+                    0.23125628541115556, 
+                    0.23125628541115556, 
+                    0.2171426857269924, 
+                    0.2171426857269924, 
+                    0.20061543315443475, 
+                    0.20061543315443475, 
+                    0.18235042592423958, 
+                    0.18235042592423958, 
+                    0.16287786353899256, 
+                    0.16287786353899256, 
+                    0.1424320746596099, 
+                    0.1424320746596099, 
+                    0.1210838150462965, 
+                    0.1210838150462965, 
+                    0.10134609426701062, 
+                    0.10134609426701062
+                ], 
+                0.06221197918057442
+            ], 
+            [
+                1.0754457712173462, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996131203711844, 
+                    0.9996131203711844, 
+                    0.9920888017542882, 
+                    0.9920888017542882, 
+                    0.9784074101594566, 
+                    0.9784074101594566, 
+                    0.9553366396798938, 
+                    0.9553366396798938, 
+                    0.9227809657751792, 
+                    0.9227809657751792, 
+                    0.8850710429261729, 
+                    0.8850710429261729, 
+                    0.8436007018256394, 
+                    0.8436007018256394, 
+                    0.8015390885314695, 
+                    0.8015390885314695, 
+                    0.7587476751987632, 
+                    0.7587476751987632, 
+                    0.7159253411407416, 
+                    0.7159253411407416, 
+                    0.6739130201325151, 
+                    0.6739130201325151, 
+                    0.6326813779055153, 
+                    0.6326813779055153, 
+                    0.5943204263918529, 
+                    0.5943204263918529, 
+                    0.557873939596425, 
+                    0.557873939596425, 
+                    0.524507715109829, 
+                    0.524507715109829, 
+                    0.4913407860031352, 
+                    0.4913407860031352, 
+                    0.45901532934325706, 
+                    0.45901532934325706, 
+                    0.4282695779651085, 
+                    0.4282695779651085, 
+                    0.40162510236194676, 
+                    0.40162510236194676, 
+                    0.37515950177200114, 
+                    0.37515950177200114, 
+                    0.3512466339173857, 
+                    0.3512466339173857, 
+                    0.33009922855822227, 
+                    0.33009922855822227, 
+                    0.3102893200547214, 
+                    0.3102893200547214, 
+                    0.2919581410566159, 
+                    0.2919581410566159, 
+                    0.2761348799281793, 
+                    0.2761348799281793, 
+                    0.2618834871939119, 
+                    0.2618834871939119, 
+                    0.24877822912803818, 
+                    0.24877822912803818, 
+                    0.2365695010926399, 
+                    0.2365695010926399, 
+                    0.23421942099433185, 
+                    0.23421942099433185, 
+                    0.23060669966620784, 
+                    0.23060669966620784, 
+                    0.2165117444625438, 
+                    0.2165117444625438, 
+                    0.2000014618480662, 
+                    0.2000014618480662, 
+                    0.18176036092584066, 
+                    0.18176036092584066, 
+                    0.1623363594907157, 
+                    0.1623363594907157, 
+                    0.1419708106446381, 
+                    0.1419708106446381, 
+                    0.12073717850423561, 
+                    0.12073717850423561, 
+                    0.1012289491092764, 
+                    0.1012289491092764
+                ], 
+                0.05773817375302315
+            ]
+        ]
+    }, 
+    {
+        "block_size": 82, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9306574463844299, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998882254999442, 
+                    0.9998882254999442, 
+                    0.9990773868295384, 
+                    0.9990773868295384, 
+                    0.9964474295486125, 
+                    0.9964474295486125, 
+                    0.9902463178415186, 
+                    0.9902463178415186, 
+                    0.9776560154122521, 
+                    0.9776560154122521, 
+                    0.9597599750989184, 
+                    0.9597599750989184, 
+                    0.9364641513643998, 
+                    0.9364641513643998, 
+                    0.9079272135810719, 
+                    0.9079272135810719, 
+                    0.8730620932771387, 
+                    0.8730620932771387, 
+                    0.8362528477474399, 
+                    0.8362528477474399, 
+                    0.7989341234095326, 
+                    0.7989341234095326, 
+                    0.7594988996104765, 
+                    0.7594988996104765, 
+                    0.7216037661021217, 
+                    0.7216037661021217, 
+                    0.6826238034547017, 
+                    0.6826238034547017, 
+                    0.6448261849680547, 
+                    0.6448261849680547, 
+                    0.6074911173151166, 
+                    0.6074911173151166, 
+                    0.5715672092502813, 
+                    0.5715672092502813, 
+                    0.5364272216600761, 
+                    0.5364272216600761, 
+                    0.5034153470410053, 
+                    0.5034153470410053, 
+                    0.47267680144631946, 
+                    0.47267680144631946, 
+                    0.4424512291565985, 
+                    0.4424512291565985, 
+                    0.41395917131368615, 
+                    0.41395917131368615, 
+                    0.3886383753027148, 
+                    0.3886383753027148, 
+                    0.36524276336002753, 
+                    0.36524276336002753, 
+                    0.3439263623948953, 
+                    0.3439263623948953, 
+                    0.3247041327240156, 
+                    0.3247041327240156, 
+                    0.3075314221976378, 
+                    0.3075314221976378, 
+                    0.2917121240338999, 
+                    0.2917121240338999, 
+                    0.27766708291794917, 
+                    0.27766708291794917, 
+                    0.26472252192556367, 
+                    0.26472252192556367, 
+                    0.25311292448062317, 
+                    0.25311292448062317, 
+                    0.24329981179175095, 
+                    0.24329981179175095, 
+                    0.2314017956324223, 
+                    0.2314017956324223, 
+                    0.21620889663630904, 
+                    0.21620889663630904, 
+                    0.19839645506170814, 
+                    0.19839645506170814, 
+                    0.17856489386442329, 
+                    0.17856489386442329, 
+                    0.15688017014678038, 
+                    0.15688017014678038, 
+                    0.13319941649672365, 
+                    0.13319941649672365, 
+                    0.10759829057571743, 
+                    0.10759829057571743
+                ], 
+                0.19778025150299072
+            ], 
+            [
+                0.9373695850372314, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9963427881414437, 
+                    0.9963427881414437, 
+                    0.9898201494364398, 
+                    0.9898201494364398, 
+                    0.9766872961760095, 
+                    0.9766872961760095, 
+                    0.959893748017719, 
+                    0.959893748017719, 
+                    0.9356488686537258, 
+                    0.9356488686537258, 
+                    0.9060003811307652, 
+                    0.9060003811307652, 
+                    0.8710443357790805, 
+                    0.8710443357790805, 
+                    0.834357261346238, 
+                    0.834357261346238, 
+                    0.7948927858780177, 
+                    0.7948927858780177, 
+                    0.756695283509634, 
+                    0.756695283509634, 
+                    0.7180353303525894, 
+                    0.7180353303525894, 
+                    0.6797715799327545, 
+                    0.6797715799327545, 
+                    0.6418839348479517, 
+                    0.6418839348479517, 
+                    0.6036705825200362, 
+                    0.6036705825200362, 
+                    0.567698657753385, 
+                    0.567698657753385, 
+                    0.5326307928978484, 
+                    0.5326307928978484, 
+                    0.5010395426305985, 
+                    0.5010395426305985, 
+                    0.4692435608054728, 
+                    0.4692435608054728, 
+                    0.4401663387200672, 
+                    0.4401663387200672, 
+                    0.41077026914216047, 
+                    0.41077026914216047, 
+                    0.3864348642027689, 
+                    0.3864348642027689, 
+                    0.36246037686788235, 
+                    0.36246037686788235, 
+                    0.3415523367902803, 
+                    0.3415523367902803, 
+                    0.32239792435941733, 
+                    0.32239792435941733, 
+                    0.30533413283591715, 
+                    0.30533413283591715, 
+                    0.2896115874959013, 
+                    0.2896115874959013, 
+                    0.27565795440686897, 
+                    0.27565795440686897, 
+                    0.2627819442923277, 
+                    0.2627819442923277, 
+                    0.25126010676311716, 
+                    0.25126010676311716, 
+                    0.2416633115757171, 
+                    0.2416633115757171, 
+                    0.23001795921379192, 
+                    0.23001795921379192, 
+                    0.21500208071455248, 
+                    0.21500208071455248, 
+                    0.1973396812212789, 
+                    0.1973396812212789, 
+                    0.17765330185597067, 
+                    0.17765330185597067, 
+                    0.1561177200300502, 
+                    0.1561177200300502, 
+                    0.13260090047214051, 
+                    0.13260090047214051, 
+                    0.1072316800015937, 
+                    0.1072316800015937
+                ], 
+                0.1872059404850006
+            ], 
+            [
+                0.9441301822662354, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997023870669431, 
+                    0.9997023870669431, 
+                    0.9943198549729289, 
+                    0.9943198549729289, 
+                    0.9890069808135674, 
+                    0.9890069808135674, 
+                    0.975514133313857, 
+                    0.975514133313857, 
+                    0.9586873782982607, 
+                    0.9586873782982607, 
+                    0.933853129327765, 
+                    0.933853129327765, 
+                    0.9044888074840061, 
+                    0.9044888074840061, 
+                    0.8688490474338741, 
+                    0.8688490474338741, 
+                    0.8313531797978362, 
+                    0.8313531797978362, 
+                    0.7928187183829895, 
+                    0.7928187183829895, 
+                    0.7536843603340585, 
+                    0.7536843603340585, 
+                    0.714589191508574, 
+                    0.714589191508574, 
+                    0.6770482919229736, 
+                    0.6770482919229736, 
+                    0.6378782234887332, 
+                    0.6378782234887332, 
+                    0.6008934357270224, 
+                    0.6008934357270224, 
+                    0.5653425934521751, 
+                    0.5653425934521751, 
+                    0.5301895016788742, 
+                    0.5301895016788742, 
+                    0.4972456146873012, 
+                    0.4972456146873012, 
+                    0.46667745278500977, 
+                    0.46667745278500977, 
+                    0.43675839698488667, 
+                    0.43675839698488667, 
+                    0.4084431933654751, 
+                    0.4084431933654751, 
+                    0.38345469559500817, 
+                    0.38345469559500817, 
+                    0.36026302715969305, 
+                    0.36026302715969305, 
+                    0.33917730888387043, 
+                    0.33917730888387043, 
+                    0.32015068251931417, 
+                    0.32015068251931417, 
+                    0.3031700166264493, 
+                    0.3031700166264493, 
+                    0.28753505902062315, 
+                    0.28753505902062315, 
+                    0.2736978432324662, 
+                    0.2736978432324662, 
+                    0.26154968281937224, 
+                    0.26154968281937224, 
+                    0.24924789189107957, 
+                    0.24924789189107957, 
+                    0.24039423101893853, 
+                    0.24039423101893853, 
+                    0.22851635998667916, 
+                    0.22851635998667916, 
+                    0.21325581816648329, 
+                    0.21325581816648329, 
+                    0.1954620068211518, 
+                    0.1954620068211518, 
+                    0.17574951322343535, 
+                    0.17574951322343535, 
+                    0.15429576812977605, 
+                    0.15429576812977605, 
+                    0.13099693886119795, 
+                    0.13099693886119795, 
+                    0.10619255908419002, 
+                    0.10619255908419002
+                ], 
+                0.17733480036258698
+            ], 
+            [
+                0.9509395360946655, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999378162954623, 
+                    0.9999378162954623, 
+                    0.9985169115685331, 
+                    0.9985169115685331, 
+                    0.9954079904230445, 
+                    0.9954079904230445, 
+                    0.988048741460285, 
+                    0.988048741460285, 
+                    0.9760285219542361, 
+                    0.9760285219542361, 
+                    0.9567010756993106, 
+                    0.9567010756993106, 
+                    0.9337626671117968, 
+                    0.9337626671117968, 
+                    0.9022641202893992, 
+                    0.9022641202893992, 
+                    0.8665157344962489, 
+                    0.8665157344962489, 
+                    0.8290057231542203, 
+                    0.8290057231542203, 
+                    0.7894858975729518, 
+                    0.7894858975729518, 
+                    0.7503835139965874, 
+                    0.7503835139965874, 
+                    0.7118913104489625, 
+                    0.7118913104489625, 
+                    0.6736443454175756, 
+                    0.6736443454175756, 
+                    0.6353827078743947, 
+                    0.6353827078743947, 
+                    0.5975506385650996, 
+                    0.5975506385650996, 
+                    0.561763357532322, 
+                    0.561763357532322, 
+                    0.5270034776788012, 
+                    0.5270034776788012, 
+                    0.494264035802967, 
+                    0.494264035802967, 
+                    0.46392899467206006, 
+                    0.46392899467206006, 
+                    0.43399767664198974, 
+                    0.43399767664198974, 
+                    0.4058736295743643, 
+                    0.4058736295743643, 
+                    0.38086143295102887, 
+                    0.38086143295102887, 
+                    0.3577921036125137, 
+                    0.3577921036125137, 
+                    0.3367849544603317, 
+                    0.3367849544603317, 
+                    0.3178843748214695, 
+                    0.3178843748214695, 
+                    0.3010122462531341, 
+                    0.3010122462531341, 
+                    0.28548526725849954, 
+                    0.28548526725849954, 
+                    0.27175316472120087, 
+                    0.27175316472120087, 
+                    0.26030213692697457, 
+                    0.26030213692697457, 
+                    0.2472812590840285, 
+                    0.2472812590840285, 
+                    0.2390284826082084, 
+                    0.2390284826082084, 
+                    0.22719078260712475, 
+                    0.22719078260712475, 
+                    0.2119374529374464, 
+                    0.2119374529374464, 
+                    0.19418004708943706, 
+                    0.19418004708943706, 
+                    0.17454155224970982, 
+                    0.17454155224970982, 
+                    0.15320561104721142, 
+                    0.15320561104721142, 
+                    0.1300842469800196, 
+                    0.1300842469800196, 
+                    0.10561074756931886, 
+                    0.10561074756931886
+                ], 
+                0.1677895039319992
+            ], 
+            [
+                0.9577979445457458, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996832333026637, 
+                    0.9996832333026637, 
+                    0.9950918462147982, 
+                    0.9950918462147982, 
+                    0.98749793974079, 
+                    0.98749793974079, 
+                    0.9738513871173057, 
+                    0.9738513871173057, 
+                    0.9556675505913342, 
+                    0.9556675505913342, 
+                    0.9315782897294728, 
+                    0.9315782897294728, 
+                    0.9000873539431021, 
+                    0.9000873539431021, 
+                    0.8635703597490196, 
+                    0.8635703597490196, 
+                    0.8258514327272797, 
+                    0.8258514327272797, 
+                    0.7868402207182795, 
+                    0.7868402207182795, 
+                    0.7475168980078852, 
+                    0.7475168980078852, 
+                    0.7083670715782806, 
+                    0.7083670715782806, 
+                    0.6702748181765914, 
+                    0.6702748181765914, 
+                    0.63183171223383, 
+                    0.63183171223383, 
+                    0.5943371173109683, 
+                    0.5943371173109683, 
+                    0.5587500684729453, 
+                    0.5587500684729453, 
+                    0.5240072144793521, 
+                    0.5240072144793521, 
+                    0.49125374648165343, 
+                    0.49125374648165343, 
+                    0.46101323865200616, 
+                    0.46101323865200616, 
+                    0.43112880945957277, 
+                    0.43112880945957277, 
+                    0.4031988198683687, 
+                    0.4031988198683687, 
+                    0.3782475643821708, 
+                    0.3782475643821708, 
+                    0.3553350187538171, 
+                    0.3553350187538171, 
+                    0.3344485372666339, 
+                    0.3344485372666339, 
+                    0.315655778442698, 
+                    0.315655778442698, 
+                    0.29886647812097905, 
+                    0.29886647812097905, 
+                    0.2834048849022804, 
+                    0.2834048849022804, 
+                    0.26972442284260756, 
+                    0.26972442284260756, 
+                    0.2574637227653527, 
+                    0.2574637227653527, 
+                    0.24614213542852031, 
+                    0.24614213542852031, 
+                    0.23789888515716381, 
+                    0.23789888515716381, 
+                    0.22595542599006144, 
+                    0.22595542599006144, 
+                    0.21062521419932162, 
+                    0.21062521419932162, 
+                    0.19284937026735882, 
+                    0.19284937026735882, 
+                    0.17325356609180373, 
+                    0.17325356609180373, 
+                    0.1520276710580486, 
+                    0.1520276710580486, 
+                    0.12910309577624973, 
+                    0.12910309577624973, 
+                    0.10503485917377307, 
+                    0.10503485917377307
+                ], 
+                0.15838170051574707
+            ], 
+            [
+                0.9647058844566345, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999219743513496, 
+                    0.9999219743513496, 
+                    0.9998823024954064, 
+                    0.9998823024954064, 
+                    0.9953871762618587, 
+                    0.9953871762618587, 
+                    0.9860347689601949, 
+                    0.9860347689601949, 
+                    0.9731165047084042, 
+                    0.9731165047084042, 
+                    0.9540523841235674, 
+                    0.9540523841235674, 
+                    0.9294577508353364, 
+                    0.9294577508353364, 
+                    0.8977126327380202, 
+                    0.8977126327380202, 
+                    0.8611851278122863, 
+                    0.8611851278122863, 
+                    0.8230821878355313, 
+                    0.8230821878355313, 
+                    0.7840001310482615, 
+                    0.7840001310482615, 
+                    0.744419557832726, 
+                    0.744419557832726, 
+                    0.7054518249258914, 
+                    0.7054518249258914, 
+                    0.6669951177081314, 
+                    0.6669951177081314, 
+                    0.6287329687382901, 
+                    0.6287329687382901, 
+                    0.5911628384885693, 
+                    0.5911628384885693, 
+                    0.5555745622986947, 
+                    0.5555745622986947, 
+                    0.5207398199097598, 
+                    0.5207398199097598, 
+                    0.488397181667828, 
+                    0.488397181667828, 
+                    0.45797621603438043, 
+                    0.45797621603438043, 
+                    0.42862254476138517, 
+                    0.42862254476138517, 
+                    0.4003986629646784, 
+                    0.4003986629646784, 
+                    0.3758611358744592, 
+                    0.3758611358744592, 
+                    0.3528686633845166, 
+                    0.3528686633845166, 
+                    0.33211570866613616, 
+                    0.33211570866613616, 
+                    0.3134316982469587, 
+                    0.3134316982469587, 
+                    0.2967656685450619, 
+                    0.2967656685450619, 
+                    0.2814311103349167, 
+                    0.2814311103349167, 
+                    0.2677726878406004, 
+                    0.2677726878406004, 
+                    0.2551150717465123, 
+                    0.2551150717465123, 
+                    0.24602624447097285, 
+                    0.24602624447097285, 
+                    0.23773349862633553, 
+                    0.23773349862633553, 
+                    0.22487025986993608, 
+                    0.22487025986993608, 
+                    0.20888118678257123, 
+                    0.20888118678257123, 
+                    0.19070079742599272, 
+                    0.19070079742599272, 
+                    0.17090842748252552, 
+                    0.17090842748252552, 
+                    0.14969106193884102, 
+                    0.14969106193884102, 
+                    0.1270202926012895, 
+                    0.1270202926012895, 
+                    0.10378766550355652, 
+                    0.10378766550355652
+                ], 
+                0.14949850738048553
+            ], 
+            [
+                0.9716635942459106, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998076069125452, 
+                    0.9998076069125452, 
+                    0.999595578067611, 
+                    0.999595578067611, 
+                    0.9950225600667587, 
+                    0.9950225600667587, 
+                    0.9862778929784048, 
+                    0.9862778929784048, 
+                    0.9726736637662802, 
+                    0.9726736637662802, 
+                    0.9536079984303101, 
+                    0.9536079984303101, 
+                    0.9281826635459841, 
+                    0.9281826635459841, 
+                    0.8960438882651294, 
+                    0.8960438882651294, 
+                    0.8587479845748529, 
+                    0.8587479845748529, 
+                    0.8203663459941727, 
+                    0.8203663459941727, 
+                    0.7810506464393036, 
+                    0.7810506464393036, 
+                    0.7415374420278049, 
+                    0.7415374420278049, 
+                    0.702396497428735, 
+                    0.702396497428735, 
+                    0.6637580444118771, 
+                    0.6637580444118771, 
+                    0.6254107716019782, 
+                    0.6254107716019782, 
+                    0.5878834218337446, 
+                    0.5878834218337446, 
+                    0.5523352109655346, 
+                    0.5523352109655346, 
+                    0.5178097920776127, 
+                    0.5178097920776127, 
+                    0.4852690988072754, 
+                    0.4852690988072754, 
+                    0.45534037443653363, 
+                    0.45534037443653363, 
+                    0.42565053477080805, 
+                    0.42565053477080805, 
+                    0.3979825187481431, 
+                    0.3979825187481431, 
+                    0.3732114627001543, 
+                    0.3732114627001543, 
+                    0.3504946557515709, 
+                    0.3504946557515709, 
+                    0.3297933044483781, 
+                    0.3297933044483781, 
+                    0.3112270317281832, 
+                    0.3112270317281832, 
+                    0.29466740113768314, 
+                    0.29466740113768314, 
+                    0.27944538095652266, 
+                    0.27944538095652266, 
+                    0.2659321297984019, 
+                    0.2659321297984019, 
+                    0.25420826095319093, 
+                    0.25420826095319093, 
+                    0.24420277039913094, 
+                    0.24420277039913094, 
+                    0.2364127523255114, 
+                    0.2364127523255114, 
+                    0.22379324474405127, 
+                    0.22379324474405127, 
+                    0.20798018934719786, 
+                    0.20798018934719786, 
+                    0.18994655870615934, 
+                    0.18994655870615934, 
+                    0.17029198646120583, 
+                    0.17029198646120583, 
+                    0.14921041459269485, 
+                    0.14921041459269485, 
+                    0.12667905497768062, 
+                    0.12667905497768062, 
+                    0.10363254807841034, 
+                    0.10363254807841034
+                ], 
+                0.14110229909420013
+            ], 
+            [
+                0.9786715507507324, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9949881587943747, 
+                    0.9949881587943747, 
+                    0.9871287078450248, 
+                    0.9871287078450248, 
+                    0.9733544441604524, 
+                    0.9733544441604524, 
+                    0.9538802866366543, 
+                    0.9538802866366543, 
+                    0.9274526119447792, 
+                    0.9274526119447792, 
+                    0.8938201365262666, 
+                    0.8938201365262666, 
+                    0.8561222482765359, 
+                    0.8561222482765359, 
+                    0.8175296479231828, 
+                    0.8175296479231828, 
+                    0.7779339253946326, 
+                    0.7779339253946326, 
+                    0.738159491679498, 
+                    0.738159491679498, 
+                    0.6989253445548299, 
+                    0.6989253445548299, 
+                    0.6609129239547196, 
+                    0.6609129239547196, 
+                    0.6220708247125714, 
+                    0.6220708247125714, 
+                    0.5845243678187954, 
+                    0.5845243678187954, 
+                    0.5495900151839844, 
+                    0.5495900151839844, 
+                    0.5141554912123876, 
+                    0.5141554912123876, 
+                    0.4827280324826727, 
+                    0.4827280324826727, 
+                    0.4520449414306005, 
+                    0.4520449414306005, 
+                    0.42282168995095565, 
+                    0.42282168995095565, 
+                    0.3953886746787812, 
+                    0.3953886746787812, 
+                    0.3704573628411105, 
+                    0.3704573628411105, 
+                    0.34813014764686756, 
+                    0.34813014764686756, 
+                    0.32749528576763975, 
+                    0.32749528576763975, 
+                    0.3090248835109357, 
+                    0.3090248835109357, 
+                    0.29253699468180483, 
+                    0.29253699468180483, 
+                    0.27733861200583426, 
+                    0.27733861200583426, 
+                    0.26395987664122167, 
+                    0.26395987664122167, 
+                    0.25211043359742985, 
+                    0.25211043359742985, 
+                    0.24079530643824013, 
+                    0.24079530643824013, 
+                    0.2336861523130856, 
+                    0.2336861523130856, 
+                    0.2223719831468299, 
+                    0.2223719831468299, 
+                    0.2074910132407888, 
+                    0.2074910132407888, 
+                    0.1901112310721562, 
+                    0.1901112310721562, 
+                    0.1709173295597108, 
+                    0.1709173295597108, 
+                    0.15012203861242246, 
+                    0.15012203861242246, 
+                    0.12768343370892915, 
+                    0.12768343370892915, 
+                    0.10433710163891532, 
+                    0.10433710163891532
+                ], 
+                0.13267600536346436
+            ], 
+            [
+                0.985729992389679, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997348935727061, 
+                    0.9997348935727061, 
+                    0.9946395495185344, 
+                    0.9946395495185344, 
+                    0.9860793771329585, 
+                    0.9860793771329585, 
+                    0.9719228955867538, 
+                    0.9719228955867538, 
+                    0.95115979410887, 
+                    0.95115979410887, 
+                    0.924639714342646, 
+                    0.924639714342646, 
+                    0.8914728352027133, 
+                    0.8914728352027133, 
+                    0.85351652125586, 
+                    0.85351652125586, 
+                    0.8147760977610553, 
+                    0.8147760977610553, 
+                    0.7751889743116162, 
+                    0.7751889743116162, 
+                    0.7350072451789438, 
+                    0.7350072451789438, 
+                    0.6958621257965527, 
+                    0.6958621257965527, 
+                    0.6573669102496457, 
+                    0.6573669102496457, 
+                    0.6189728832053313, 
+                    0.6189728832053313, 
+                    0.5815147921521442, 
+                    0.5815147921521442, 
+                    0.5460400507863478, 
+                    0.5460400507863478, 
+                    0.5117246780728256, 
+                    0.5117246780728256, 
+                    0.4791596690898374, 
+                    0.4791596690898374, 
+                    0.44979630491367273, 
+                    0.44979630491367273, 
+                    0.4197488718519692, 
+                    0.4197488718519692, 
+                    0.39301245215976605, 
+                    0.39301245215976605, 
+                    0.3679436524726814, 
+                    0.3679436524726814, 
+                    0.34577922710448084, 
+                    0.34577922710448084, 
+                    0.3252236249941053, 
+                    0.3252236249941053, 
+                    0.30687061284142503, 
+                    0.30687061284142503, 
+                    0.2904870989815042, 
+                    0.2904870989815042, 
+                    0.2754141525537224, 
+                    0.2754141525537224, 
+                    0.2620161149176345, 
+                    0.2620161149176345, 
+                    0.24968976310426216, 
+                    0.24968976310426216, 
+                    0.24166111743355853, 
+                    0.24166111743355853, 
+                    0.2342157175328904, 
+                    0.2342157175328904, 
+                    0.22173882346972976, 
+                    0.22173882346972976, 
+                    0.20604978135934518, 
+                    0.20604978135934518, 
+                    0.18816286761990828, 
+                    0.18816286761990828, 
+                    0.1687001953239417, 
+                    0.1687001953239417, 
+                    0.14786792879935087, 
+                    0.14786792879935087, 
+                    0.125661074051975, 
+                    0.125661074051975, 
+                    0.10316706017856592, 
+                    0.10316706017856592
+                ], 
+                0.12491858750581741
+            ], 
+            [
+                0.9928393363952637, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993727735100812, 
+                    0.9993727735100812, 
+                    0.9945356208201622, 
+                    0.9945356208201622, 
+                    0.9859165553922533, 
+                    0.9859165553922533, 
+                    0.9715381206404176, 
+                    0.9715381206404176, 
+                    0.9505466577670479, 
+                    0.9505466577670479, 
+                    0.9234301590240407, 
+                    0.9234301590240407, 
+                    0.8894043426455794, 
+                    0.8894043426455794, 
+                    0.8510217735604388, 
+                    0.8510217735604388, 
+                    0.8118909284194914, 
+                    0.8118909284194914, 
+                    0.7721402088595993, 
+                    0.7721402088595993, 
+                    0.7319231157439455, 
+                    0.7319231157439455, 
+                    0.6926964668815668, 
+                    0.6926964668815668, 
+                    0.6541361453508133, 
+                    0.6541361453508133, 
+                    0.6158154730948946, 
+                    0.6158154730948946, 
+                    0.578330235079131, 
+                    0.578330235079131, 
+                    0.5429047769633668, 
+                    0.5429047769633668, 
+                    0.5085553866486848, 
+                    0.5085553866486848, 
+                    0.47656699627672383, 
+                    0.47656699627672383, 
+                    0.44632083733241845, 
+                    0.44632083733241845, 
+                    0.41791041488580655, 
+                    0.41791041488580655, 
+                    0.3894302434470017, 
+                    0.3894302434470017, 
+                    0.3660417906775409, 
+                    0.3660417906775409, 
+                    0.3431859748603285, 
+                    0.3431859748603285, 
+                    0.32300849184931635, 
+                    0.32300849184931635, 
+                    0.3047112753962102, 
+                    0.3047112753962102, 
+                    0.2884279887911989, 
+                    0.2884279887911989, 
+                    0.2734254751440119, 
+                    0.2734254751440119, 
+                    0.2601207123845349, 
+                    0.2601207123845349, 
+                    0.24788420986774565, 
+                    0.24788420986774565, 
+                    0.2401969692525708, 
+                    0.2401969692525708, 
+                    0.2330742990683997, 
+                    0.2330742990683997, 
+                    0.22074264179501876, 
+                    0.22074264179501876, 
+                    0.2051587316633731, 
+                    0.2051587316633731, 
+                    0.18736929514850895, 
+                    0.18736929514850895, 
+                    0.16801195148601508, 
+                    0.16801195148601508, 
+                    0.14729777211717682, 
+                    0.14729777211717682, 
+                    0.12522837881117785, 
+                    0.12522837881117785, 
+                    0.10295720629986593, 
+                    0.10295720629986593
+                ], 
+                0.11740320920944214
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999260624749453, 
+                    0.9999260624749453, 
+                    0.9996448489273092, 
+                    0.9996448489273092, 
+                    0.9948053588587591, 
+                    0.9948053588587591, 
+                    0.9856809819721131, 
+                    0.9856809819721131, 
+                    0.9707655744757177, 
+                    0.9707655744757177, 
+                    0.9496575125604193, 
+                    0.9496575125604193, 
+                    0.9216958798448113, 
+                    0.9216958798448113, 
+                    0.8871273051812743, 
+                    0.8871273051812743, 
+                    0.8484631277954675, 
+                    0.8484631277954675, 
+                    0.8090996395239949, 
+                    0.8090996395239949, 
+                    0.7690248811302698, 
+                    0.7690248811302698, 
+                    0.7287693962275473, 
+                    0.7287693962275473, 
+                    0.6894270123854709, 
+                    0.6894270123854709, 
+                    0.6508570536413056, 
+                    0.6508570536413056, 
+                    0.6126454308364224, 
+                    0.6126454308364224, 
+                    0.5749858369297886, 
+                    0.5749858369297886, 
+                    0.5401681674853631, 
+                    0.5401681674853631, 
+                    0.5049994223585996, 
+                    0.5049994223585996, 
+                    0.4739473862524581, 
+                    0.4739473862524581, 
+                    0.44354633703308827, 
+                    0.44354633703308827, 
+                    0.4147522217245382, 
+                    0.4147522217245382, 
+                    0.3875128768791741, 
+                    0.3875128768791741, 
+                    0.3631235118084628, 
+                    0.3631235118084628, 
+                    0.3410038950076979, 
+                    0.3410038950076979, 
+                    0.32072007447235323, 
+                    0.32072007447235323, 
+                    0.30257379869973416, 
+                    0.30257379869973416, 
+                    0.28638255946487473, 
+                    0.28638255946487473, 
+                    0.2714942618588434, 
+                    0.2714942618588434, 
+                    0.2582606127445173, 
+                    0.2582606127445173, 
+                    0.24609775105106693, 
+                    0.24609775105106693, 
+                    0.23865663261406905, 
+                    0.23865663261406905, 
+                    0.23201873856806576, 
+                    0.23201873856806576, 
+                    0.21989394599960843, 
+                    0.21989394599960843, 
+                    0.20444852682964643, 
+                    0.20444852682964643, 
+                    0.18677115349486784, 
+                    0.18677115349486784, 
+                    0.1675238306574526, 
+                    0.1675238306574526, 
+                    0.14692421023918387, 
+                    0.14692421023918387, 
+                    0.12497734244227471, 
+                    0.12497734244227471, 
+                    0.10286884532611006, 
+                    0.10286884532611006
+                ], 
+                0.11026515811681747
+            ], 
+            [
+                1.0072122812271118, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999170787070534, 
+                    0.9999170787070534, 
+                    0.9997711551812439, 
+                    0.9997711551812439, 
+                    0.9950964034107372, 
+                    0.9950964034107372, 
+                    0.9855495162939782, 
+                    0.9855495162939782, 
+                    0.9705650350912051, 
+                    0.9705650350912051, 
+                    0.9489401302720845, 
+                    0.9489401302720845, 
+                    0.9202084760304471, 
+                    0.9202084760304471, 
+                    0.8849728067592181, 
+                    0.8849728067592181, 
+                    0.845856399760491, 
+                    0.845856399760491, 
+                    0.8062573423477528, 
+                    0.8062573423477528, 
+                    0.7660188471021417, 
+                    0.7660188471021417, 
+                    0.725629897524927, 
+                    0.725629897524927, 
+                    0.6862081580720428, 
+                    0.6862081580720428, 
+                    0.6476285790843402, 
+                    0.6476285790843402, 
+                    0.6093523196935683, 
+                    0.6093523196935683, 
+                    0.5718770090077041, 
+                    0.5718770090077041, 
+                    0.5368319908649926, 
+                    0.5368319908649926, 
+                    0.5022631606870985, 
+                    0.5022631606870985, 
+                    0.4708649602147439, 
+                    0.4708649602147439, 
+                    0.4407161637356856, 
+                    0.4407161637356856, 
+                    0.41227627287330176, 
+                    0.41227627287330176, 
+                    0.384604443944662, 
+                    0.384604443944662, 
+                    0.36089462980944004, 
+                    0.36089462980944004, 
+                    0.3385852025944831, 
+                    0.3385852025944831, 
+                    0.31849263492713387, 
+                    0.31849263492713387, 
+                    0.30044991733799276, 
+                    0.30044991733799276, 
+                    0.2843512999000947, 
+                    0.2843512999000947, 
+                    0.2695543908771917, 
+                    0.2695543908771917, 
+                    0.25642739448181534, 
+                    0.25642739448181534, 
+                    0.2443197044742795, 
+                    0.2443197044742795, 
+                    0.2367712701143045, 
+                    0.2367712701143045, 
+                    0.23037193041340812, 
+                    0.23037193041340812, 
+                    0.21873481438760312, 
+                    0.21873481438760312, 
+                    0.20366632548735195, 
+                    0.20366632548735195, 
+                    0.18626735302154804, 
+                    0.18626735302154804, 
+                    0.16724121960515398, 
+                    0.16724121960515398, 
+                    0.14681427180250597, 
+                    0.14681427180250597, 
+                    0.12498923714227356, 
+                    0.12498923714227356, 
+                    0.10292167668066472, 
+                    0.10292167668066472
+                ], 
+                0.10342608392238617
+            ], 
+            [
+                1.0144765377044678, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999399519814778, 
+                    0.9999399519814778, 
+                    0.9999399519814778, 
+                    0.9999399519814778, 
+                    0.9951945868210017, 
+                    0.9951945868210017, 
+                    0.9860568128579418, 
+                    0.9860568128579418, 
+                    0.9709172229530044, 
+                    0.9709172229530044, 
+                    0.9486057725458894, 
+                    0.9486057725458894, 
+                    0.9189490442151778, 
+                    0.9189490442151778, 
+                    0.8827929815683655, 
+                    0.8827929815683655, 
+                    0.8433693159737934, 
+                    0.8433693159737934, 
+                    0.803453010270272, 
+                    0.803453010270272, 
+                    0.7629879214865264, 
+                    0.7629879214865264, 
+                    0.7225034179566087, 
+                    0.7225034179566087, 
+                    0.6830014945239816, 
+                    0.6830014945239816, 
+                    0.644441195783153, 
+                    0.644441195783153, 
+                    0.6061040715579462, 
+                    0.6061040715579462, 
+                    0.5688624363583102, 
+                    0.5688624363583102, 
+                    0.5334582434944762, 
+                    0.5334582434944762, 
+                    0.49957611507309685, 
+                    0.49957611507309685, 
+                    0.46740385175843707, 
+                    0.46740385175843707, 
+                    0.43827540550945443, 
+                    0.43827540550945443, 
+                    0.4091803222181788, 
+                    0.4091803222181788, 
+                    0.3823417430751942, 
+                    0.3823417430751942, 
+                    0.35832464490777427, 
+                    0.35832464490777427, 
+                    0.3362330705213699, 
+                    0.3362330705213699, 
+                    0.3162817311006905, 
+                    0.3162817311006905, 
+                    0.2983212842794811, 
+                    0.2983212842794811, 
+                    0.28235649165901705, 
+                    0.28235649165901705, 
+                    0.2676775526987436, 
+                    0.2676775526987436, 
+                    0.2545295103924029, 
+                    0.2545295103924029, 
+                    0.24398974439551227, 
+                    0.24398974439551227, 
+                    0.23313945614580808, 
+                    0.23313945614580808, 
+                    0.2279576959778446, 
+                    0.2279576959778446, 
+                    0.21719227061436583, 
+                    0.21719227061436583, 
+                    0.20273130860303973, 
+                    0.20273130860303973, 
+                    0.1857693037338898, 
+                    0.1857693037338898, 
+                    0.1670704527893954, 
+                    0.1670704527893954, 
+                    0.14687157610532903, 
+                    0.14687157610532903, 
+                    0.12516987158134202, 
+                    0.12516987158134202, 
+                    0.10305063972301451, 
+                    0.10305063972301451
+                ], 
+                0.09691199660301208
+            ], 
+            [
+                1.021793246269226, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999768780682597, 
+                    0.999768780682597, 
+                    0.9941016888604842, 
+                    0.9941016888604842, 
+                    0.9843097024304713, 
+                    0.9843097024304713, 
+                    0.9682640322555341, 
+                    0.9682640322555341, 
+                    0.9456580027900542, 
+                    0.9456580027900542, 
+                    0.9164408400161952, 
+                    0.9164408400161952, 
+                    0.8802889415279299, 
+                    0.8802889415279299, 
+                    0.8405602926618168, 
+                    0.8405602926618168, 
+                    0.800515804127331, 
+                    0.800515804127331, 
+                    0.7598621100154445, 
+                    0.7598621100154445, 
+                    0.7193157927828695, 
+                    0.7193157927828695, 
+                    0.6797760195938795, 
+                    0.6797760195938795, 
+                    0.6411710074044593, 
+                    0.6411710074044593, 
+                    0.6029408691432109, 
+                    0.6029408691432109, 
+                    0.5655047179555658, 
+                    0.5655047179555658, 
+                    0.530672025652821, 
+                    0.530672025652821, 
+                    0.496189980100095, 
+                    0.496189980100095, 
+                    0.46507874805219623, 
+                    0.46507874805219623, 
+                    0.4350928176162197, 
+                    0.4350928176162197, 
+                    0.4069200885042048, 
+                    0.4069200885042048, 
+                    0.3795204867493665, 
+                    0.3795204867493665, 
+                    0.3560199471248256, 
+                    0.3560199471248256, 
+                    0.33395323799203286, 
+                    0.33395323799203286, 
+                    0.31410076959970035, 
+                    0.31410076959970035, 
+                    0.2962521319145783, 
+                    0.2962521319145783, 
+                    0.28036173754736005, 
+                    0.28036173754736005, 
+                    0.2657591301470658, 
+                    0.2657591301470658, 
+                    0.252765383010996, 
+                    0.252765383010996, 
+                    0.2405569771810341, 
+                    0.2405569771810341, 
+                    0.23535572354557593, 
+                    0.23535572354557593, 
+                    0.2319588093226752, 
+                    0.2319588093226752, 
+                    0.218384518343505, 
+                    0.218384518343505, 
+                    0.20228153262666657, 
+                    0.20228153262666657, 
+                    0.18428780703268005, 
+                    0.18428780703268005, 
+                    0.16496437926051438, 
+                    0.16496437926051438, 
+                    0.14451355358816229, 
+                    0.14451355358816229, 
+                    0.12296261114050686, 
+                    0.12296261114050686, 
+                    0.10184170312418502, 
+                    0.10184170312418502
+                ], 
+                0.09072917699813843
+            ], 
+            [
+                1.0291627645492554, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999913084083861, 
+                    0.9999913084083861, 
+                    0.9998930327994774, 
+                    0.9998930327994774, 
+                    0.9938228102717186, 
+                    0.9938228102717186, 
+                    0.9837238245600824, 
+                    0.9837238245600824, 
+                    0.967381944739044, 
+                    0.967381944739044, 
+                    0.9441491490566145, 
+                    0.9441491490566145, 
+                    0.9144632442845828, 
+                    0.9144632442845828, 
+                    0.8779728411157124, 
+                    0.8779728411157124, 
+                    0.8378833183674348, 
+                    0.8378833183674348, 
+                    0.7976079208628349, 
+                    0.7976079208628349, 
+                    0.7568230732870244, 
+                    0.7568230732870244, 
+                    0.7160998995226887, 
+                    0.7160998995226887, 
+                    0.676577379594334, 
+                    0.676577379594334, 
+                    0.6379051114359904, 
+                    0.6379051114359904, 
+                    0.5997158810010966, 
+                    0.5997158810010966, 
+                    0.5623199212505282, 
+                    0.5623199212505282, 
+                    0.5276278109403881, 
+                    0.5276278109403881, 
+                    0.4931398187021606, 
+                    0.4931398187021606, 
+                    0.4622365978102482, 
+                    0.4622365978102482, 
+                    0.4322972927768694, 
+                    0.4322972927768694, 
+                    0.40425922792839064, 
+                    0.40425922792839064, 
+                    0.37700574112370355, 
+                    0.37700574112370355, 
+                    0.3536013009015264, 
+                    0.3536013009015264, 
+                    0.3316655430427232, 
+                    0.3316655430427232, 
+                    0.3119205315726165, 
+                    0.3119205315726165, 
+                    0.29417777989745697, 
+                    0.29417777989745697, 
+                    0.27838252640050243, 
+                    0.27838252640050243, 
+                    0.2638662408626864, 
+                    0.2638662408626864, 
+                    0.2509379858640653, 
+                    0.2509379858640653, 
+                    0.2389248648192102, 
+                    0.2389248648192102, 
+                    0.23467409078363244, 
+                    0.23467409078363244, 
+                    0.2320607945437326, 
+                    0.2320607945437326, 
+                    0.21803224722334227, 
+                    0.21803224722334227, 
+                    0.2017154178946009, 
+                    0.2017154178946009, 
+                    0.18361725488155317, 
+                    0.18361725488155317, 
+                    0.16426454672091945, 
+                    0.16426454672091945, 
+                    0.14385464737419387, 
+                    0.14385464737419387, 
+                    0.12241952468157816, 
+                    0.12241952468157816, 
+                    0.10159342009774362, 
+                    0.10159342009774362
+                ], 
+                0.08485648036003113
+            ], 
+            [
+                1.0365853309631348, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999719626572047, 
+                    0.9999719626572047, 
+                    0.9941872665284188, 
+                    0.9941872665284188, 
+                    0.9843381689377596, 
+                    0.9843381689377596, 
+                    0.9676611239928321, 
+                    0.9676611239928321, 
+                    0.9436251680732233, 
+                    0.9436251680732233, 
+                    0.9130474100513222, 
+                    0.9130474100513222, 
+                    0.8757315393956911, 
+                    0.8757315393956911, 
+                    0.8352180159056513, 
+                    0.8352180159056513, 
+                    0.7947065658307131, 
+                    0.7947065658307131, 
+                    0.7537431323471305, 
+                    0.7537431323471305, 
+                    0.7129340646847432, 
+                    0.7129340646847432, 
+                    0.6733019300877435, 
+                    0.6733019300877435, 
+                    0.6346427022157947, 
+                    0.6346427022157947, 
+                    0.5964594412815054, 
+                    0.5964594412815054, 
+                    0.5591798692335104, 
+                    0.5591798692335104, 
+                    0.5243925521449762, 
+                    0.5243925521449762, 
+                    0.4903505226566439, 
+                    0.4903505226566439, 
+                    0.45900132193398774, 
+                    0.45900132193398774, 
+                    0.4298212281555398, 
+                    0.4298212281555398, 
+                    0.40120248725848195, 
+                    0.40120248725848195, 
+                    0.3747641707494488, 
+                    0.3747641707494488, 
+                    0.35097415506157914, 
+                    0.35097415506157914, 
+                    0.32939822690051146, 
+                    0.32939822690051146, 
+                    0.3096903402960815, 
+                    0.3096903402960815, 
+                    0.29204114593937214, 
+                    0.29204114593937214, 
+                    0.2764462092579778, 
+                    0.2764462092579778, 
+                    0.2619432446749484, 
+                    0.2619432446749484, 
+                    0.24916863543430076, 
+                    0.24916863543430076, 
+                    0.23736332249480735, 
+                    0.23736332249480735, 
+                    0.23078586876971582, 
+                    0.23078586876971582, 
+                    0.22990208264046527, 
+                    0.22990208264046527, 
+                    0.21650824682102374, 
+                    0.21650824682102374, 
+                    0.20065338275911104, 
+                    0.20065338275911104, 
+                    0.182905322059779, 
+                    0.182905322059779, 
+                    0.1638328127436624, 
+                    0.1638328127436624, 
+                    0.14364114828967006, 
+                    0.14364114828967006, 
+                    0.12235981470533935, 
+                    0.12235981470533935, 
+                    0.10164565865836626, 
+                    0.10164565865836626
+                ], 
+                0.07915294170379639
+            ], 
+            [
+                1.044061541557312, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999925167186101, 
+                    0.9999925167186101, 
+                    0.9993486730885596, 
+                    0.9993486730885596, 
+                    0.9939779229520024, 
+                    0.9939779229520024, 
+                    0.9837444357368105, 
+                    0.9837444357368105, 
+                    0.9666583971702153, 
+                    0.9666583971702153, 
+                    0.9421177395313169, 
+                    0.9421177395313169, 
+                    0.9108780054125357, 
+                    0.9108780054125357, 
+                    0.8733225352129315, 
+                    0.8733225352129315, 
+                    0.8324791358850081, 
+                    0.8324791358850081, 
+                    0.7917363747503815, 
+                    0.7917363747503815, 
+                    0.7506475171394591, 
+                    0.7506475171394591, 
+                    0.7097402035244527, 
+                    0.7097402035244527, 
+                    0.6700860044203376, 
+                    0.6700860044203376, 
+                    0.631438907967156, 
+                    0.631438907967156, 
+                    0.5932147953343355, 
+                    0.5932147953343355, 
+                    0.5561658671138193, 
+                    0.5561658671138193, 
+                    0.521133406767906, 
+                    0.521133406767906, 
+                    0.48766460470632206, 
+                    0.48766460470632206, 
+                    0.4559557637379716, 
+                    0.4559557637379716, 
+                    0.4272115419282317, 
+                    0.4272115419282317, 
+                    0.39867214399693274, 
+                    0.39867214399693274, 
+                    0.3722122335452109, 
+                    0.3722122335452109, 
+                    0.3487219586942302, 
+                    0.3487219586942302, 
+                    0.32715097596604253, 
+                    0.32715097596604253, 
+                    0.307589449390977, 
+                    0.307589449390977, 
+                    0.2900659957334605, 
+                    0.2900659957334605, 
+                    0.2744588605721166, 
+                    0.2744588605721166, 
+                    0.2601498663216587, 
+                    0.2601498663216587, 
+                    0.24751102932737593, 
+                    0.24751102932737593, 
+                    0.23559818623001755, 
+                    0.23559818623001755, 
+                    0.2321061872607174, 
+                    0.2321061872607174, 
+                    0.22912446630594396, 
+                    0.22912446630594396, 
+                    0.2158618925107107, 
+                    0.2158618925107107, 
+                    0.1999572821474608, 
+                    0.1999572821474608, 
+                    0.18216537554541617, 
+                    0.18216537554541617, 
+                    0.16309564747524716, 
+                    0.16309564747524716, 
+                    0.14296589135785723, 
+                    0.14296589135785723, 
+                    0.12181568120182279, 
+                    0.12181568120182279, 
+                    0.10141933165540482, 
+                    0.10141933165540482
+                ], 
+                0.07397574186325073
+            ], 
+            [
+                1.0515916347503662, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997917400069353, 
+                    0.9997917400069353, 
+                    0.9937557248540569, 
+                    0.9937557248540569, 
+                    0.9832697761714541, 
+                    0.9832697761714541, 
+                    0.9657683815878351, 
+                    0.9657683815878351, 
+                    0.9407184739098784, 
+                    0.9407184739098784, 
+                    0.9089392484216997, 
+                    0.9089392484216997, 
+                    0.8708533502772702, 
+                    0.8708533502772702, 
+                    0.8297212513562173, 
+                    0.8297212513562173, 
+                    0.7888122344954592, 
+                    0.7888122344954592, 
+                    0.7475430811409582, 
+                    0.7475430811409582, 
+                    0.7065474113949118, 
+                    0.7065474113949118, 
+                    0.666846702345627, 
+                    0.666846702345627, 
+                    0.6281659068437436, 
+                    0.6281659068437436, 
+                    0.5900975375839591, 
+                    0.5900975375839591, 
+                    0.5527882949936359, 
+                    0.5527882949936359, 
+                    0.5184716997393154, 
+                    0.5184716997393154, 
+                    0.48407772879228733, 
+                    0.48407772879228733, 
+                    0.4537135897370108, 
+                    0.4537135897370108, 
+                    0.423991299664364, 
+                    0.423991299664364, 
+                    0.39634667437998816, 
+                    0.39634667437998816, 
+                    0.3695332566236356, 
+                    0.3695332566236356, 
+                    0.3464169496419565, 
+                    0.3464169496419565, 
+                    0.3248833479125048, 
+                    0.3248833479125048, 
+                    0.3054558173881565, 
+                    0.3054558173881565, 
+                    0.28803262593324275, 
+                    0.28803262593324275, 
+                    0.2725241707411949, 
+                    0.2725241707411949, 
+                    0.25828878813475986, 
+                    0.25828878813475986, 
+                    0.24570307498183697, 
+                    0.24570307498183697, 
+                    0.23385552483640093, 
+                    0.23385552483640093, 
+                    0.22929801668984776, 
+                    0.22929801668984776, 
+                    0.22929801668984776, 
+                    0.22929801668984776, 
+                    0.21583001108950065, 
+                    0.21583001108950065, 
+                    0.1996627099750209, 
+                    0.1996627099750209, 
+                    0.18176159211658133, 
+                    0.18176159211658133, 
+                    0.16265743377718583, 
+                    0.16265743377718583, 
+                    0.14255144782471735, 
+                    0.14255144782471735, 
+                    0.12147876271980353, 
+                    0.12147876271980353, 
+                    0.10126479506463452, 
+                    0.10126479506463452
+                ], 
+                0.06891262531280518
+            ], 
+            [
+                1.059175968170166, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999798356427925, 
+                    0.999798356427925, 
+                    0.9931678498025501, 
+                    0.9931678498025501, 
+                    0.982104066603793, 
+                    0.982104066603793, 
+                    0.9640549290726561, 
+                    0.9640549290726561, 
+                    0.9386305466685321, 
+                    0.9386305466685321, 
+                    0.9066248241129383, 
+                    0.9066248241129383, 
+                    0.8683351115683791, 
+                    0.8683351115683791, 
+                    0.826951511190842, 
+                    0.826951511190842, 
+                    0.785817919743369, 
+                    0.785817919743369, 
+                    0.7444266772931792, 
+                    0.7444266772931792, 
+                    0.7033258803505937, 
+                    0.7033258803505937, 
+                    0.663588081783488, 
+                    0.663588081783488, 
+                    0.6249724561343258, 
+                    0.6249724561343258, 
+                    0.5867301692987147, 
+                    0.5867301692987147, 
+                    0.5500015794368668, 
+                    0.5500015794368668, 
+                    0.5147721946040205, 
+                    0.5147721946040205, 
+                    0.48204507748291603, 
+                    0.48204507748291603, 
+                    0.4499498189090141, 
+                    0.4499498189090141, 
+                    0.4219276060063932, 
+                    0.4219276060063932, 
+                    0.393321327445788, 
+                    0.393321327445788, 
+                    0.3673017255206375, 
+                    0.3673017255206375, 
+                    0.34397748434280584, 
+                    0.34397748434280584, 
+                    0.3226774867625685, 
+                    0.3226774867625685, 
+                    0.3033389576260441, 
+                    0.3033389576260441, 
+                    0.286027853919223, 
+                    0.286027853919223, 
+                    0.2706009082127212, 
+                    0.2706009082127212, 
+                    0.2564587654927436, 
+                    0.2564587654927436, 
+                    0.24402111092700318, 
+                    0.24402111092700318, 
+                    0.2322946595535236, 
+                    0.2322946595535236, 
+                    0.22975641777635455, 
+                    0.22975641777635455, 
+                    0.22783457767065318, 
+                    0.22783457767065318, 
+                    0.2137310607163755, 
+                    0.2137310607163755, 
+                    0.19748073338445715, 
+                    0.19748073338445715, 
+                    0.17960058734212006, 
+                    0.17960058734212006, 
+                    0.16061409066660964, 
+                    0.16061409066660964, 
+                    0.1407346308399783, 
+                    0.1407346308399783, 
+                    0.12003761957207898, 
+                    0.12003761957207898, 
+                    0.10103298118186448, 
+                    0.10103298118186448
+                ], 
+                0.06415911018848419
+            ], 
+            [
+                1.0668150186538696, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999234875920818, 
+                    0.9999234875920818, 
+                    0.9930626966650776, 
+                    0.9930626966650776, 
+                    0.9816793057233689, 
+                    0.9816793057233689, 
+                    0.9632952804313559, 
+                    0.9632952804313559, 
+                    0.9372444911383543, 
+                    0.9372444911383543, 
+                    0.9047359805613707, 
+                    0.9047359805613707, 
+                    0.8659157900666158, 
+                    0.8659157900666158, 
+                    0.8241859396432167, 
+                    0.8241859396432167, 
+                    0.7828076626975423, 
+                    0.7828076626975423, 
+                    0.7412719521662842, 
+                    0.7412719521662842, 
+                    0.7001049194722291, 
+                    0.7001049194722291, 
+                    0.6603544940243683, 
+                    0.6603544940243683, 
+                    0.6216740416348994, 
+                    0.6216740416348994, 
+                    0.5836454555441121, 
+                    0.5836454555441121, 
+                    0.5465529962237146, 
+                    0.5465529962237146, 
+                    0.5122248505523642, 
+                    0.5122248505523642, 
+                    0.47838388537482696, 
+                    0.47838388537482696, 
+                    0.44780873266539245, 
+                    0.44780873266539245, 
+                    0.41871326449436896, 
+                    0.41871326449436896, 
+                    0.39105440662406105, 
+                    0.39105440662406105, 
+                    0.3646401975102469, 
+                    0.3646401975102469, 
+                    0.3417217643408235, 
+                    0.3417217643408235, 
+                    0.32043332202055125, 
+                    0.32043332202055125, 
+                    0.3012332285543715, 
+                    0.3012332285543715, 
+                    0.28402064985897696, 
+                    0.28402064985897696, 
+                    0.26870493569670695, 
+                    0.26870493569670695, 
+                    0.2546362830545951, 
+                    0.2546362830545951, 
+                    0.24213590713360814, 
+                    0.24213590713360814, 
+                    0.23037336493346153, 
+                    0.23037336493346153, 
+                    0.22805344658248097, 
+                    0.22805344658248097, 
+                    0.227385208335896, 
+                    0.227385208335896, 
+                    0.21316867573561063, 
+                    0.21316867573561063, 
+                    0.1968594477111674, 
+                    0.1968594477111674, 
+                    0.17897084340263483, 
+                    0.17897084340263483, 
+                    0.1600191795457853, 
+                    0.1600191795457853, 
+                    0.1402182666621112, 
+                    0.1402182666621112, 
+                    0.11964390705276716, 
+                    0.11964390705276716, 
+                    0.10090551035436192, 
+                    0.10090551035436192
+                ], 
+                0.05963381007313728
+            ], 
+            [
+                1.0745092630386353, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999991699536258, 
+                    0.9999991699536258, 
+                    0.9999221510440429, 
+                    0.9999221510440429, 
+                    0.9930782099872287, 
+                    0.9930782099872287, 
+                    0.9816560449335305, 
+                    0.9816560449335305, 
+                    0.9627951591946882, 
+                    0.9627951591946882, 
+                    0.9360301549046308, 
+                    0.9360301549046308, 
+                    0.9027640453068341, 
+                    0.9027640453068341, 
+                    0.8634121439330585, 
+                    0.8634121439330585, 
+                    0.8213590840121178, 
+                    0.8213590840121178, 
+                    0.7798029718561572, 
+                    0.7798029718561572, 
+                    0.7381166965377927, 
+                    0.7381166965377927, 
+                    0.6968742670360623, 
+                    0.6968742670360623, 
+                    0.6570643935315378, 
+                    0.6570643935315378, 
+                    0.618477017681463, 
+                    0.618477017681463, 
+                    0.5802868926277854, 
+                    0.5802868926277854, 
+                    0.5437273722275957, 
+                    0.5437273722275957, 
+                    0.5086516828301941, 
+                    0.5086516828301941, 
+                    0.47611596875240214, 
+                    0.47611596875240214, 
+                    0.4443220360153264, 
+                    0.4443220360153264, 
+                    0.41645196869751894, 
+                    0.41645196869751894, 
+                    0.3881871135231024, 
+                    0.3881871135231024, 
+                    0.36235920793111703, 
+                    0.36235920793111703, 
+                    0.33932355464231617, 
+                    0.33932355464231617, 
+                    0.3182411008221248, 
+                    0.3182411008221248, 
+                    0.2991309728653843, 
+                    0.2991309728653843, 
+                    0.28202717796246624, 
+                    0.28202717796246624, 
+                    0.26680962686831833, 
+                    0.26680962686831833, 
+                    0.25283872972407695, 
+                    0.25283872972407695, 
+                    0.24040756128206536, 
+                    0.24040756128206536, 
+                    0.22872330699854965, 
+                    0.22872330699854965, 
+                    0.22537098894083443, 
+                    0.22537098894083443, 
+                    0.22537098894083443, 
+                    0.22537098894083443, 
+                    0.21265801524321756, 
+                    0.21265801524321756, 
+                    0.19642052243483485, 
+                    0.19642052243483485, 
+                    0.17864710962257613, 
+                    0.17864710962257613, 
+                    0.15980864915430212, 
+                    0.15980864915430212, 
+                    0.14010789963767373, 
+                    0.14010789963767373, 
+                    0.11961144148605113, 
+                    0.11961144148605113, 
+                    0.10092779264956747, 
+                    0.10092779264956747
+                ], 
+                0.05538491904735565
+            ]
+        ]
+    }, 
+    {
+        "block_size": 83, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9314494132995605, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996835144526991, 
+                    0.9996835144526991, 
+                    0.994575955408756, 
+                    0.994575955408756, 
+                    0.9857971106296395, 
+                    0.9857971106296395, 
+                    0.9716649057986879, 
+                    0.9716649057986879, 
+                    0.9510876678340815, 
+                    0.9510876678340815, 
+                    0.9240882411937564, 
+                    0.9240882411937564, 
+                    0.8915755517145957, 
+                    0.8915755517145957, 
+                    0.8545477929374677, 
+                    0.8545477929374677, 
+                    0.8157244126236309, 
+                    0.8157244126236309, 
+                    0.7755205125128916, 
+                    0.7755205125128916, 
+                    0.7351731071109886, 
+                    0.7351731071109886, 
+                    0.6955578037401486, 
+                    0.6955578037401486, 
+                    0.6577717118849263, 
+                    0.6577717118849263, 
+                    0.6192601716756003, 
+                    0.6192601716756003, 
+                    0.5824671774000936, 
+                    0.5824671774000936, 
+                    0.5466123154786713, 
+                    0.5466123154786713, 
+                    0.5124639985203581, 
+                    0.5124639985203581, 
+                    0.4799993433362834, 
+                    0.4799993433362834, 
+                    0.45039422929214495, 
+                    0.45039422929214495, 
+                    0.42234028733600265, 
+                    0.42234028733600265, 
+                    0.3958872767709792, 
+                    0.3958872767709792, 
+                    0.37076453820662664, 
+                    0.37076453820662664, 
+                    0.3481009381565147, 
+                    0.3481009381565147, 
+                    0.32745057511408626, 
+                    0.32745057511408626, 
+                    0.30861181756788836, 
+                    0.30861181756788836, 
+                    0.29147164147621596, 
+                    0.29147164147621596, 
+                    0.27594076479512525, 
+                    0.27594076479512525, 
+                    0.2620587515192086, 
+                    0.2620587515192086, 
+                    0.24978906083565533, 
+                    0.24978906083565533, 
+                    0.24113485399362744, 
+                    0.24113485399362744, 
+                    0.23483903012430193, 
+                    0.23483903012430193, 
+                    0.22201382098716885, 
+                    0.22201382098716885, 
+                    0.2061419156572283, 
+                    0.2061419156572283, 
+                    0.18817086560257873, 
+                    0.18817086560257873, 
+                    0.16861685639929344, 
+                    0.16861685639929344, 
+                    0.14772081288929997, 
+                    0.14772081288929997, 
+                    0.12548450164045014, 
+                    0.12548450164045014, 
+                    0.10304110288851194, 
+                    0.10304110288851194
+                ], 
+                0.12928448617458344
+            ], 
+            [
+                0.938087522983551, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998832339317228, 
+                    0.9998832339317228, 
+                    0.9945660945049813, 
+                    0.9945660945049813, 
+                    0.986178949011087, 
+                    0.986178949011087, 
+                    0.9712048398697382, 
+                    0.9712048398697382, 
+                    0.9505017517529467, 
+                    0.9505017517529467, 
+                    0.9229816429226297, 
+                    0.9229816429226297, 
+                    0.8894445664015038, 
+                    0.8894445664015038, 
+                    0.8519572624835228, 
+                    0.8519572624835228, 
+                    0.8129126052110912, 
+                    0.8129126052110912, 
+                    0.7726003078330579, 
+                    0.7726003078330579, 
+                    0.7320748817140121, 
+                    0.7320748817140121, 
+                    0.6924227624124274, 
+                    0.6924227624124274, 
+                    0.6545501541633013, 
+                    0.6545501541633013, 
+                    0.6160813640626641, 
+                    0.6160813640626641, 
+                    0.5792209921240906, 
+                    0.5792209921240906, 
+                    0.5437721138851918, 
+                    0.5437721138851918, 
+                    0.5088829935507334, 
+                    0.5088829935507334, 
+                    0.4777155997382984, 
+                    0.4777155997382984, 
+                    0.4470164478442095, 
+                    0.4470164478442095, 
+                    0.4199479436742139, 
+                    0.4199479436742139, 
+                    0.39314562864334107, 
+                    0.39314562864334107, 
+                    0.3683411877019346, 
+                    0.3683411877019346, 
+                    0.34571843339929986, 
+                    0.34571843339929986, 
+                    0.3252011718108813, 
+                    0.3252011718108813, 
+                    0.30646695139289654, 
+                    0.30646695139289654, 
+                    0.28942936542057157, 
+                    0.28942936542057157, 
+                    0.27399316976999316, 
+                    0.27399316976999316, 
+                    0.26020144529936345, 
+                    0.26020144529936345, 
+                    0.24800650375291158, 
+                    0.24800650375291158, 
+                    0.23908491083210792, 
+                    0.23908491083210792, 
+                    0.23357715582535604, 
+                    0.23357715582535604, 
+                    0.22096511627534512, 
+                    0.22096511627534512, 
+                    0.20525074463780857, 
+                    0.20525074463780857, 
+                    0.18741960194358823, 
+                    0.18741960194358823, 
+                    0.1679995438402263, 
+                    0.1679995438402263, 
+                    0.14723953999042422, 
+                    0.14723953999042422, 
+                    0.12514592226612248, 
+                    0.12514592226612248, 
+                    0.10288900374163047, 
+                    0.10288900374163047
+                ], 
+                0.12162378430366516
+            ], 
+            [
+                0.9447728991508484, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998495586210511, 
+                    0.9998495586210511, 
+                    0.9947553150072026, 
+                    0.9947553150072026, 
+                    0.9853417091538387, 
+                    0.9853417091538387, 
+                    0.9708674667015403, 
+                    0.9708674667015403, 
+                    0.9499009086198513, 
+                    0.9499009086198513, 
+                    0.921358743510851, 
+                    0.921358743510851, 
+                    0.8873227487834192, 
+                    0.8873227487834192, 
+                    0.8494046306605341, 
+                    0.8494046306605341, 
+                    0.8101162422381674, 
+                    0.8101162422381674, 
+                    0.7695371241625579, 
+                    0.7695371241625579, 
+                    0.728958129802676, 
+                    0.728958129802676, 
+                    0.6892383593291337, 
+                    0.6892383593291337, 
+                    0.6513761441785726, 
+                    0.6513761441785726, 
+                    0.6128587857512554, 
+                    0.6128587857512554, 
+                    0.576263556093636, 
+                    0.576263556093636, 
+                    0.5401416364710754, 
+                    0.5401416364710754, 
+                    0.5068098083593302, 
+                    0.5068098083593302, 
+                    0.47365071714312534, 
+                    0.47365071714312534, 
+                    0.4451366666983014, 
+                    0.4451366666983014, 
+                    0.41671658006868617, 
+                    0.41671658006868617, 
+                    0.3908036745125166, 
+                    0.3908036745125166, 
+                    0.36579076256298065, 
+                    0.36579076256298065, 
+                    0.3434038448068598, 
+                    0.3434038448068598, 
+                    0.32296881762120877, 
+                    0.32296881762120877, 
+                    0.3043371637535521, 
+                    0.3043371637535521, 
+                    0.2873967305103382, 
+                    0.2873967305103382, 
+                    0.27206785778461395, 
+                    0.27206785778461395, 
+                    0.2583430312668348, 
+                    0.2583430312668348, 
+                    0.24623435579061317, 
+                    0.24623435579061317, 
+                    0.23769189799990614, 
+                    0.23769189799990614, 
+                    0.23262573555935587, 
+                    0.23262573555935587, 
+                    0.2200651095608064, 
+                    0.2200651095608064, 
+                    0.20442541755443813, 
+                    0.20442541755443813, 
+                    0.1866740650802142, 
+                    0.1866740650802142, 
+                    0.16734645842571325, 
+                    0.16734645842571325, 
+                    0.14669701112117053, 
+                    0.14669701112117053, 
+                    0.12473747542789765, 
+                    0.12473747542789765, 
+                    0.10270078844305629, 
+                    0.10270078844305629
+                ], 
+                0.11433590948581696
+            ], 
+            [
+                0.9515058994293213, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998673871626723, 
+                    0.9998673871626723, 
+                    0.9944990141765373, 
+                    0.9944990141765373, 
+                    0.9853619626978827, 
+                    0.9853619626978827, 
+                    0.970293223216781, 
+                    0.970293223216781, 
+                    0.9485040553413621, 
+                    0.9485040553413621, 
+                    0.9196717406721138, 
+                    0.9196717406721138, 
+                    0.8850563780701868, 
+                    0.8850563780701868, 
+                    0.8468744688224525, 
+                    0.8468744688224525, 
+                    0.807307051915633, 
+                    0.807307051915633, 
+                    0.7665677263999147, 
+                    0.7665677263999147, 
+                    0.7258357248832141, 
+                    0.7258357248832141, 
+                    0.6860722979080696, 
+                    0.6860722979080696, 
+                    0.6481857279834399, 
+                    0.6481857279834399, 
+                    0.6096747312886595, 
+                    0.6096747312886595, 
+                    0.5729414678475058, 
+                    0.5729414678475058, 
+                    0.537463384977904, 
+                    0.537463384977904, 
+                    0.5031533859212604, 
+                    0.5031533859212604, 
+                    0.47158618347490777, 
+                    0.47158618347490777, 
+                    0.4416862008985053, 
+                    0.4416862008985053, 
+                    0.4144058891740916, 
+                    0.4144058891740916, 
+                    0.3880714356140702, 
+                    0.3880714356140702, 
+                    0.3634062421103902, 
+                    0.3634062421103902, 
+                    0.34105729041067134, 
+                    0.34105729041067134, 
+                    0.3207516110563248, 
+                    0.3207516110563248, 
+                    0.3022303122033022, 
+                    0.3022303122033022, 
+                    0.28539076273271136, 
+                    0.28539076273271136, 
+                    0.27013708816914034, 
+                    0.27013708816914034, 
+                    0.2564986822485191, 
+                    0.2564986822485191, 
+                    0.24446427433612206, 
+                    0.24446427433612206, 
+                    0.23798986289716678, 
+                    0.23798986289716678, 
+                    0.23222419161311686, 
+                    0.23222419161311686, 
+                    0.21943211127107598, 
+                    0.21943211127107598, 
+                    0.20371676557391266, 
+                    0.20371676557391266, 
+                    0.1859377840629264, 
+                    0.1859377840629264, 
+                    0.16662907079998385, 
+                    0.16662907079998385, 
+                    0.14604782878780467, 
+                    0.14604782878780467, 
+                    0.12421260568634537, 
+                    0.12421260568634537, 
+                    0.1024412315056447, 
+                    0.1024412315056447
+                ], 
+                0.10744628310203552
+            ], 
+            [
+                0.9582869410514832, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999837049492288, 
+                    0.9999837049492288, 
+                    0.9998781425019754, 
+                    0.9998781425019754, 
+                    0.9942391973980215, 
+                    0.9942391973980215, 
+                    0.9850226137404252, 
+                    0.9850226137404252, 
+                    0.9694402107199737, 
+                    0.9694402107199737, 
+                    0.9472718452043376, 
+                    0.9472718452043376, 
+                    0.9178089647933781, 
+                    0.9178089647933781, 
+                    0.8827872874636462, 
+                    0.8827872874636462, 
+                    0.8442751974290525, 
+                    0.8442751974290525, 
+                    0.8044421995408798, 
+                    0.8044421995408798, 
+                    0.7635637400728561, 
+                    0.7635637400728561, 
+                    0.722713080354559, 
+                    0.722713080354559, 
+                    0.6828476294434158, 
+                    0.6828476294434158, 
+                    0.6449835505557449, 
+                    0.6449835505557449, 
+                    0.6064798128459575, 
+                    0.6064798128459575, 
+                    0.5697419557201688, 
+                    0.5697419557201688, 
+                    0.534474661836034, 
+                    0.534474661836034, 
+                    0.5000402486451224, 
+                    0.5000402486451224, 
+                    0.4688440602096403, 
+                    0.4688440602096403, 
+                    0.43878687923020365, 
+                    0.43878687923020365, 
+                    0.41179293759406077, 
+                    0.41179293759406077, 
+                    0.385485223312112, 
+                    0.385485223312112, 
+                    0.3609789096149451, 
+                    0.3609789096149451, 
+                    0.33873868689114006, 
+                    0.33873868689114006, 
+                    0.3185509796098839, 
+                    0.3185509796098839, 
+                    0.30013672818187664, 
+                    0.30013672818187664, 
+                    0.2834006419196541, 
+                    0.2834006419196541, 
+                    0.2682436148838365, 
+                    0.2682436148838365, 
+                    0.2546875146733542, 
+                    0.2546875146733542, 
+                    0.24264828793703197, 
+                    0.24264828793703197, 
+                    0.2352928029582046, 
+                    0.2352928029582046, 
+                    0.23279753023189673, 
+                    0.23279753023189673, 
+                    0.21917063801594283, 
+                    0.21917063801594283, 
+                    0.2031992947674054, 
+                    0.2031992947674054, 
+                    0.18531676657404622, 
+                    0.18531676657404622, 
+                    0.16598254433326692, 
+                    0.16598254433326692, 
+                    0.14544188245487571, 
+                    0.14544188245487571, 
+                    0.12371462044993377, 
+                    0.12371462044993377, 
+                    0.10217761328202304, 
+                    0.10217761328202304
+                ], 
+                0.10075844824314117
+            ], 
+            [
+                0.9651162624359131, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995720955473314, 
+                    0.9995720955473314, 
+                    0.9943343488602884, 
+                    0.9943343488602884, 
+                    0.9845304722548379, 
+                    0.9845304722548379, 
+                    0.9690177447710658, 
+                    0.9690177447710658, 
+                    0.9462090329274406, 
+                    0.9462090329274406, 
+                    0.9161981279781523, 
+                    0.9161981279781523, 
+                    0.8804412160984728, 
+                    0.8804412160984728, 
+                    0.8416172398135257, 
+                    0.8416172398135257, 
+                    0.8016103987323454, 
+                    0.8016103987323454, 
+                    0.7604958176537927, 
+                    0.7604958176537927, 
+                    0.7196167986927781, 
+                    0.7196167986927781, 
+                    0.6797139976632741, 
+                    0.6797139976632741, 
+                    0.6417568094762043, 
+                    0.6417568094762043, 
+                    0.603320697854983, 
+                    0.603320697854983, 
+                    0.5664964103179739, 
+                    0.5664964103179739, 
+                    0.5316164306912726, 
+                    0.5316164306912726, 
+                    0.49669627754523, 
+                    0.49669627754523, 
+                    0.46630617070333596, 
+                    0.46630617070333596, 
+                    0.43573199755076386, 
+                    0.43573199755076386, 
+                    0.40929504304958503, 
+                    0.40929504304958503, 
+                    0.38289542535993326, 
+                    0.38289542535993326, 
+                    0.35858614659362187, 
+                    0.35858614659362187, 
+                    0.33643577594464147, 
+                    0.33643577594464147, 
+                    0.31636191160885496, 
+                    0.31636191160885496, 
+                    0.298047427470619, 
+                    0.298047427470619, 
+                    0.28140754217268593, 
+                    0.28140754217268593, 
+                    0.266334826773492, 
+                    0.266334826773492, 
+                    0.2528848944642384, 
+                    0.2528848944642384, 
+                    0.24108492741011925, 
+                    0.24108492741011925, 
+                    0.2338771331047534, 
+                    0.2338771331047534, 
+                    0.23148184756968612, 
+                    0.23148184756968612, 
+                    0.2182110756421464, 
+                    0.2182110756421464, 
+                    0.20235903626601842, 
+                    0.20235903626601842, 
+                    0.18456315154750622, 
+                    0.18456315154750622, 
+                    0.16532228973661836, 
+                    0.16532228973661836, 
+                    0.14489236148878382, 
+                    0.14489236148878382, 
+                    0.1232996282371841, 
+                    0.1232996282371841, 
+                    0.10198844674336467, 
+                    0.10198844674336467
+                ], 
+                0.09442096203565598
+            ], 
+            [
+                0.9719942808151245, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.994076159554377, 
+                    0.994076159554377, 
+                    0.9841475089199924, 
+                    0.9841475089199924, 
+                    0.9680190990973245, 
+                    0.9680190990973245, 
+                    0.9448112166102938, 
+                    0.9448112166102938, 
+                    0.9141107704963792, 
+                    0.9141107704963792, 
+                    0.8782176641693066, 
+                    0.8782176641693066, 
+                    0.8390358641718317, 
+                    0.8390358641718317, 
+                    0.7987405365066764, 
+                    0.7987405365066764, 
+                    0.7574949011565221, 
+                    0.7574949011565221, 
+                    0.7164128220639486, 
+                    0.7164128220639486, 
+                    0.676477541527804, 
+                    0.676477541527804, 
+                    0.6385826242857124, 
+                    0.6385826242857124, 
+                    0.6000637007829362, 
+                    0.6000637007829362, 
+                    0.5635891821701327, 
+                    0.5635891821701327, 
+                    0.528048846777766, 
+                    0.528048846777766, 
+                    0.49452217783217356, 
+                    0.49452217783217356, 
+                    0.46257620188840726, 
+                    0.46257620188840726, 
+                    0.4336651255666961, 
+                    0.4336651255666961, 
+                    0.40627259187706755, 
+                    0.40627259187706755, 
+                    0.38051785431414203, 
+                    0.38051785431414203, 
+                    0.35612776540094787, 
+                    0.35612776540094787, 
+                    0.3341679740089881, 
+                    0.3341679740089881, 
+                    0.31419368362536954, 
+                    0.31419368362536954, 
+                    0.29599403185506273, 
+                    0.29599403185506273, 
+                    0.27945960305886536, 
+                    0.27945960305886536, 
+                    0.2644908559821223, 
+                    0.2644908559821223, 
+                    0.2510898486707936, 
+                    0.2510898486707936, 
+                    0.23911343697605586, 
+                    0.23911343697605586, 
+                    0.23336972414068186, 
+                    0.23336972414068186, 
+                    0.2317663586558959, 
+                    0.2317663586558959, 
+                    0.21773424589521678, 
+                    0.21773424589521678, 
+                    0.20156237479661554, 
+                    0.20156237479661554, 
+                    0.18361599700377745, 
+                    0.18361599700377745, 
+                    0.16433367563495804, 
+                    0.16433367563495804, 
+                    0.1439593780156364, 
+                    0.1439593780156364, 
+                    0.12252742064806438, 
+                    0.12252742064806438, 
+                    0.10167214900506208, 
+                    0.10167214900506208
+                ], 
+                0.08840250968933105
+            ], 
+            [
+                0.9789212942123413, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998349081475313, 
+                    0.9998349081475313, 
+                    0.9938954591751119, 
+                    0.9938954591751119, 
+                    0.9839527268292964, 
+                    0.9839527268292964, 
+                    0.9673384800456805, 
+                    0.9673384800456805, 
+                    0.9435627857581099, 
+                    0.9435627857581099, 
+                    0.9123352900083282, 
+                    0.9123352900083282, 
+                    0.8759068892518396, 
+                    0.8759068892518396, 
+                    0.8364079372736491, 
+                    0.8364079372736491, 
+                    0.7958239219778492, 
+                    0.7958239219778492, 
+                    0.7544401046379479, 
+                    0.7544401046379479, 
+                    0.7132668455725911, 
+                    0.7132668455725911, 
+                    0.673277004688718, 
+                    0.673277004688718, 
+                    0.6353661624166099, 
+                    0.6353661624166099, 
+                    0.5968736749620419, 
+                    0.5968736749620419, 
+                    0.5604528187028637, 
+                    0.5604528187028637, 
+                    0.5249728881644825, 
+                    0.5249728881644825, 
+                    0.4915770319374439, 
+                    0.4915770319374439, 
+                    0.4596990300757682, 
+                    0.4596990300757682, 
+                    0.43092588680860844, 
+                    0.43092588680860844, 
+                    0.4036367275348061, 
+                    0.4036367275348061, 
+                    0.3780066341673247, 
+                    0.3780066341673247, 
+                    0.3537385927115777, 
+                    0.3537385927115777, 
+                    0.3318979471033922, 
+                    0.3318979471033922, 
+                    0.31203621285944816, 
+                    0.31203621285944816, 
+                    0.29394286524620067, 
+                    0.29394286524620067, 
+                    0.2775086006237524, 
+                    0.2775086006237524, 
+                    0.2626332134176585, 
+                    0.2626332134176585, 
+                    0.24931696588373534, 
+                    0.24931696588373534, 
+                    0.23742023513896843, 
+                    0.23742023513896843, 
+                    0.23154211802951352, 
+                    0.23154211802951352, 
+                    0.23145210260390525, 
+                    0.23145210260390525, 
+                    0.2172415876490085, 
+                    0.2172415876490085, 
+                    0.20104468435782274, 
+                    0.20104468435782274, 
+                    0.1831177320351597, 
+                    0.1831177320351597, 
+                    0.16388032091249724, 
+                    0.16388032091249724, 
+                    0.143576421982694, 
+                    0.143576421982694, 
+                    0.12224030961522318, 
+                    0.12224030961522318, 
+                    0.10155191833476458, 
+                    0.10155191833476458
+                ], 
+                0.08266296982765198
+            ], 
+            [
+                0.9858977198600769, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999755212820218, 
+                    0.9999755212820218, 
+                    0.9999228295321003, 
+                    0.9999228295321003, 
+                    0.9937377091669566, 
+                    0.9937377091669566, 
+                    0.983582750830636, 
+                    0.983582750830636, 
+                    0.9666037384804059, 
+                    0.9666037384804059, 
+                    0.9421910789588777, 
+                    0.9421910789588777, 
+                    0.9103902804341546, 
+                    0.9103902804341546, 
+                    0.8735389043334522, 
+                    0.8735389043334522, 
+                    0.8337178936775936, 
+                    0.8337178936775936, 
+                    0.7929063204794556, 
+                    0.7929063204794556, 
+                    0.751383102759535, 
+                    0.751383102759535, 
+                    0.7101061250788611, 
+                    0.7101061250788611, 
+                    0.670074468773964, 
+                    0.670074468773964, 
+                    0.6321334823971204, 
+                    0.6321334823971204, 
+                    0.5937216837252743, 
+                    0.5937216837252743, 
+                    0.5572061557134901, 
+                    0.5572061557134901, 
+                    0.5221614184487763, 
+                    0.5221614184487763, 
+                    0.48826112581959635, 
+                    0.48826112581959635, 
+                    0.4572453513687611, 
+                    0.4572453513687611, 
+                    0.42790354455932306, 
+                    0.42790354455932306, 
+                    0.4011724542095408, 
+                    0.4011724542095408, 
+                    0.37545243501917636, 
+                    0.37545243501917636, 
+                    0.35138895261039876, 
+                    0.35138895261039876, 
+                    0.32964019882726386, 
+                    0.32964019882726386, 
+                    0.3098976383001954, 
+                    0.3098976383001954, 
+                    0.29190967898161074, 
+                    0.29190967898161074, 
+                    0.27557465898008104, 
+                    0.27557465898008104, 
+                    0.2607881853285767, 
+                    0.2607881853285767, 
+                    0.24755269968196536, 
+                    0.24755269968196536, 
+                    0.23576630270300572, 
+                    0.23576630270300572, 
+                    0.23084175606491986, 
+                    0.23084175606491986, 
+                    0.23084175606491986, 
+                    0.23084175606491986, 
+                    0.21698701228424064, 
+                    0.21698701228424064, 
+                    0.20054696943973344, 
+                    0.20054696943973344, 
+                    0.18250123088235784, 
+                    0.18250123088235784, 
+                    0.16322565890169438, 
+                    0.16322565890169438, 
+                    0.1429549989545586, 
+                    0.1429549989545586, 
+                    0.12172523925465528, 
+                    0.12172523925465528, 
+                    0.1013202806406221, 
+                    0.1013202806406221
+                ], 
+                0.07723849266767502
+            ], 
+            [
+                0.9929237961769104, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998076843674749, 
+                    0.9998076843674749, 
+                    0.9939318801714365, 
+                    0.9939318801714365, 
+                    0.9835903811752861, 
+                    0.9835903811752861, 
+                    0.9664957684721727, 
+                    0.9664957684721727, 
+                    0.9411500650112975, 
+                    0.9411500650112975, 
+                    0.908640764227744, 
+                    0.908640764227744, 
+                    0.8711781795665129, 
+                    0.8711781795665129, 
+                    0.8310073806075134, 
+                    0.8310073806075134, 
+                    0.7900080622625729, 
+                    0.7900080622625729, 
+                    0.7482711177774931, 
+                    0.7482711177774931, 
+                    0.7069221611828467, 
+                    0.7069221611828467, 
+                    0.6668581060990912, 
+                    0.6668581060990912, 
+                    0.6288935766741045, 
+                    0.6288935766741045, 
+                    0.5905794727717684, 
+                    0.5905794727717684, 
+                    0.5539613245912423, 
+                    0.5539613245912423, 
+                    0.519298880303119, 
+                    0.519298880303119, 
+                    0.4850433445196879, 
+                    0.4850433445196879, 
+                    0.45465488010063115, 
+                    0.45465488010063115, 
+                    0.4249910437864189, 
+                    0.4249910437864189, 
+                    0.398646694266898, 
+                    0.398646694266898, 
+                    0.3729291543985573, 
+                    0.3729291543985573, 
+                    0.3490325576560267, 
+                    0.3490325576560267, 
+                    0.32739066688215884, 
+                    0.32739066688215884, 
+                    0.3077639426177828, 
+                    0.3077639426177828, 
+                    0.28988184123576727, 
+                    0.28988184123576727, 
+                    0.2736469544861337, 
+                    0.2736469544861337, 
+                    0.258955647712227, 
+                    0.258955647712227, 
+                    0.24581466384158066, 
+                    0.24581466384158066, 
+                    0.23409768864853733, 
+                    0.23409768864853733, 
+                    0.22781833242232202, 
+                    0.22781833242232202, 
+                    0.22781833242232202, 
+                    0.22781833242232202, 
+                    0.2161922636991723, 
+                    0.2161922636991723, 
+                    0.19996574934964714, 
+                    0.19996574934964714, 
+                    0.18214129182665767, 
+                    0.18214129182665767, 
+                    0.163048075194775, 
+                    0.163048075194775, 
+                    0.14291992333994538, 
+                    0.14291992333994538, 
+                    0.12178433962069507, 
+                    0.12178433962069507, 
+                    0.10139284184091428, 
+                    0.10139284184091428
+                ], 
+                0.07203403860330582
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999982086592034, 
+                    0.9999982086592034, 
+                    0.9999982086592034, 
+                    0.9999982086592034, 
+                    0.9936831551681324, 
+                    0.9936831551681324, 
+                    0.9829849037921764, 
+                    0.9829849037921764, 
+                    0.9654278240732684, 
+                    0.9654278240732684, 
+                    0.9396397178048498, 
+                    0.9396397178048498, 
+                    0.906602901593683, 
+                    0.906602901593683, 
+                    0.8688048031438231, 
+                    0.8688048031438231, 
+                    0.8282802058113043, 
+                    0.8282802058113043, 
+                    0.787065482540771, 
+                    0.787065482540771, 
+                    0.7452154726685714, 
+                    0.7452154726685714, 
+                    0.7037429496688891, 
+                    0.7037429496688891, 
+                    0.6636323756213429, 
+                    0.6636323756213429, 
+                    0.6257241127577211, 
+                    0.6257241127577211, 
+                    0.5872943751239149, 
+                    0.5872943751239149, 
+                    0.5511053657485829, 
+                    0.5511053657485829, 
+                    0.5158018262415827, 
+                    0.5158018262415827, 
+                    0.4827744299869765, 
+                    0.4827744299869765, 
+                    0.45116050149688514, 
+                    0.45116050149688514, 
+                    0.42277042784617436, 
+                    0.42277042784617436, 
+                    0.3958243786298003, 
+                    0.3958243786298003, 
+                    0.37055962667249565, 
+                    0.37055962667249565, 
+                    0.3466652526279498, 
+                    0.3466652526279498, 
+                    0.32518012114501094, 
+                    0.32518012114501094, 
+                    0.305657078618969, 
+                    0.305657078618969, 
+                    0.2878814437608159, 
+                    0.2878814437608159, 
+                    0.27174557489359136, 
+                    0.27174557489359136, 
+                    0.25714313343358075, 
+                    0.25714313343358075, 
+                    0.24407388878106245, 
+                    0.24407388878106245, 
+                    0.23243460594457865, 
+                    0.23243460594457865, 
+                    0.2282134047490921, 
+                    0.2282134047490921, 
+                    0.2282134047490921, 
+                    0.2282134047490921, 
+                    0.21607691707703525, 
+                    0.21607691707703525, 
+                    0.1995688008441905, 
+                    0.1995688008441905, 
+                    0.18156453925711014, 
+                    0.18156453925711014, 
+                    0.1623826636262226, 
+                    0.1623826636262226, 
+                    0.142253926641715, 
+                    0.142253926641715, 
+                    0.1212116466432565, 
+                    0.1212116466432565, 
+                    0.10114071501622988, 
+                    0.10114071501622988
+                ], 
+                0.0671926811337471
+            ], 
+            [
+                1.0071265697479248, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999732502636168, 
+                    0.9999732502636168, 
+                    0.9998583471773056, 
+                    0.9998583471773056, 
+                    0.9938136772587042, 
+                    0.9938136772587042, 
+                    0.9832309210761302, 
+                    0.9832309210761302, 
+                    0.9652000767595642, 
+                    0.9652000767595642, 
+                    0.9385379185497964, 
+                    0.9385379185497964, 
+                    0.9046594792738614, 
+                    0.9046594792738614, 
+                    0.8663447217710839, 
+                    0.8663447217710839, 
+                    0.8255338554500102, 
+                    0.8255338554500102, 
+                    0.7841080973249427, 
+                    0.7841080973249427, 
+                    0.7420900243106142, 
+                    0.7420900243106142, 
+                    0.7005509994715312, 
+                    0.7005509994715312, 
+                    0.6603992520840687, 
+                    0.6603992520840687, 
+                    0.6225190060847458, 
+                    0.6225190060847458, 
+                    0.5840546927693734, 
+                    0.5840546927693734, 
+                    0.5481060369278459, 
+                    0.5481060369278459, 
+                    0.5125426066185168, 
+                    0.5125426066185168, 
+                    0.4801261164832812, 
+                    0.4801261164832812, 
+                    0.4480394270974326, 
+                    0.4480394270974326, 
+                    0.4202619544874882, 
+                    0.4202619544874882, 
+                    0.3931451683228837, 
+                    0.3931451683228837, 
+                    0.36813124052768903, 
+                    0.36813124052768903, 
+                    0.3443146054513322, 
+                    0.3443146054513322, 
+                    0.32296269833379254, 
+                    0.32296269833379254, 
+                    0.30354922927025435, 
+                    0.30354922927025435, 
+                    0.2858805937671384, 
+                    0.2858805937671384, 
+                    0.2698442612472049, 
+                    0.2698442612472049, 
+                    0.2553366175701375, 
+                    0.2553366175701375, 
+                    0.24236018083270902, 
+                    0.24236018083270902, 
+                    0.2308063986229712, 
+                    0.2308063986229712, 
+                    0.22477132821033213, 
+                    0.22477132821033213, 
+                    0.22477132821033213, 
+                    0.22477132821033213, 
+                    0.21535387514261212, 
+                    0.21535387514261212, 
+                    0.19899878679450678, 
+                    0.19899878679450678, 
+                    0.18127351826242802, 
+                    0.18127351826242802, 
+                    0.16232842396633657, 
+                    0.16232842396633657, 
+                    0.1423745141175013, 
+                    0.1423745141175013, 
+                    0.12142619881094034, 
+                    0.12142619881094034, 
+                    0.10130400621308738, 
+                    0.10130400621308738
+                ], 
+                0.0625227689743042
+            ], 
+            [
+                1.0143040418624878, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999705489248991, 
+                    0.9999705489248991, 
+                    0.9999313259435826, 
+                    0.9999313259435826, 
+                    0.9934403862844714, 
+                    0.9934403862844714, 
+                    0.982391873307076, 
+                    0.982391873307076, 
+                    0.9638852874133036, 
+                    0.9638852874133036, 
+                    0.9368529976515606, 
+                    0.9368529976515606, 
+                    0.9025634656761738, 
+                    0.9025634656761738, 
+                    0.8638765315552971, 
+                    0.8638765315552971, 
+                    0.8227920929879184, 
+                    0.8227920929879184, 
+                    0.7811248327741908, 
+                    0.7811248327741908, 
+                    0.7389864455839009, 
+                    0.7389864455839009, 
+                    0.6973543616889835, 
+                    0.6973543616889835, 
+                    0.6571839260560279, 
+                    0.6571839260560279, 
+                    0.6192910211560361, 
+                    0.6192910211560361, 
+                    0.5809229882388895, 
+                    0.5809229882388895, 
+                    0.5448853088435485, 
+                    0.5448853088435485, 
+                    0.509727261819308, 
+                    0.509727261819308, 
+                    0.47694292232313246, 
+                    0.47694292232313246, 
+                    0.4455299662760386, 
+                    0.4455299662760386, 
+                    0.4173849551412428, 
+                    0.4173849551412428, 
+                    0.39068165574470065, 
+                    0.39068165574470065, 
+                    0.36565887733380487, 
+                    0.36565887733380487, 
+                    0.34201695306063457, 
+                    0.34201695306063457, 
+                    0.3207693348154604, 
+                    0.3207693348154604, 
+                    0.3014724523779804, 
+                    0.3014724523779804, 
+                    0.28390897929052383, 
+                    0.28390897929052383, 
+                    0.2679719931864283, 
+                    0.2679719931864283, 
+                    0.25355735442378524, 
+                    0.25355735442378524, 
+                    0.24066406064633797, 
+                    0.24066406064633797, 
+                    0.22904690139961253, 
+                    0.22904690139961253, 
+                    0.22472362349348224, 
+                    0.22472362349348224, 
+                    0.22472362349348224, 
+                    0.22472362349348224, 
+                    0.21563579568691396, 
+                    0.21563579568691396, 
+                    0.19885118025166676, 
+                    0.19885118025166676, 
+                    0.18076173762362932, 
+                    0.18076173762362932, 
+                    0.16159344078597618, 
+                    0.16159344078597618, 
+                    0.14155610306550892, 
+                    0.14155610306550892, 
+                    0.12067319080164456, 
+                    0.12067319080164456, 
+                    0.10092572323830565, 
+                    0.10092572323830565
+                ], 
+                0.05817963927984238
+            ], 
+            [
+                1.0215325355529785, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999927841573433, 
+                    0.9999927841573433, 
+                    0.9998597570660513, 
+                    0.9998597570660513, 
+                    0.9931405870161764, 
+                    0.9931405870161764, 
+                    0.9817956757141111, 
+                    0.9817956757141111, 
+                    0.9627704903194451, 
+                    0.9627704903194451, 
+                    0.9351206981872712, 
+                    0.9351206981872712, 
+                    0.9004069465495618, 
+                    0.9004069465495618, 
+                    0.8613696254209565, 
+                    0.8613696254209565, 
+                    0.8199825507683526, 
+                    0.8199825507683526, 
+                    0.7781148893217341, 
+                    0.7781148893217341, 
+                    0.7358511278207134, 
+                    0.7358511278207134, 
+                    0.6941495343940824, 
+                    0.6941495343940824, 
+                    0.6539644340879399, 
+                    0.6539644340879399, 
+                    0.6160416272972776, 
+                    0.6160416272972776, 
+                    0.5778501084319612, 
+                    0.5778501084319612, 
+                    0.5415618999004157, 
+                    0.5415618999004157, 
+                    0.507077752750771, 
+                    0.507077752750771, 
+                    0.47355161372963983, 
+                    0.47355161372963983, 
+                    0.44320530417008613, 
+                    0.44320530417008613, 
+                    0.41440069560539045, 
+                    0.41440069560539045, 
+                    0.3882784069947994, 
+                    0.3882784069947994, 
+                    0.36317893637956916, 
+                    0.36317893637956916, 
+                    0.3397325778248301, 
+                    0.3397325778248301, 
+                    0.31858442675628096, 
+                    0.31858442675628096, 
+                    0.2994044642223178, 
+                    0.2994044642223178, 
+                    0.28194583657629535, 
+                    0.28194583657629535, 
+                    0.26610690874407583, 
+                    0.26610690874407583, 
+                    0.2517799026341691, 
+                    0.2517799026341691, 
+                    0.23896727171423962, 
+                    0.23896727171423962, 
+                    0.22752163352421917, 
+                    0.22752163352421917, 
+                    0.2239949188676911, 
+                    0.2239949188676911, 
+                    0.2239949188676911, 
+                    0.2239949188676911, 
+                    0.2118712000273159, 
+                    0.2118712000273159, 
+                    0.19573709874553258, 
+                    0.19573709874553258, 
+                    0.17812129472170177, 
+                    0.17812129472170177, 
+                    0.1593882313750247, 
+                    0.1593882313750247, 
+                    0.1397909442531039, 
+                    0.1397909442531039, 
+                    0.11939732414834066, 
+                    0.11939732414834066, 
+                    0.10087053533401538, 
+                    0.10087053533401538
+                ], 
+                0.05403919145464897
+            ], 
+            [
+                1.0288126468658447, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999842238427765, 
+                    0.999842238427765, 
+                    0.9932187165772973, 
+                    0.9932187165772973, 
+                    0.9816161091332953, 
+                    0.9816161091332953, 
+                    0.9621031120684834, 
+                    0.9621031120684834, 
+                    0.9337309993086913, 
+                    0.9337309993086913, 
+                    0.8983250811655112, 
+                    0.8983250811655112, 
+                    0.8588711908081961, 
+                    0.8588711908081961, 
+                    0.8171841661036555, 
+                    0.8171841661036555, 
+                    0.775114931404275, 
+                    0.775114931404275, 
+                    0.7327198321261164, 
+                    0.7327198321261164, 
+                    0.690954389142043, 
+                    0.690954389142043, 
+                    0.6507068772515661, 
+                    0.6507068772515661, 
+                    0.6128963985263359, 
+                    0.6128963985263359, 
+                    0.5744806560827312, 
+                    0.5744806560827312, 
+                    0.5388448605033642, 
+                    0.5388448605033642, 
+                    0.503431584394594, 
+                    0.503431584394594, 
+                    0.4714542750629046, 
+                    0.4714542750629046, 
+                    0.4396582313269472, 
+                    0.4396582313269472, 
+                    0.4122345438952012, 
+                    0.4122345438952012, 
+                    0.38551071513853324, 
+                    0.38551071513853324, 
+                    0.3608442041573573, 
+                    0.3608442041573573, 
+                    0.337417581276749, 
+                    0.337417581276749, 
+                    0.31641844181694284, 
+                    0.31641844181694284, 
+                    0.297345010527643, 
+                    0.297345010527643, 
+                    0.2799935558691103, 
+                    0.2799935558691103, 
+                    0.2642562371799749, 
+                    0.2642562371799749, 
+                    0.2500264739870504, 
+                    0.2500264739870504, 
+                    0.23728461665297296, 
+                    0.23728461665297296, 
+                    0.22573411269122615, 
+                    0.22573411269122615, 
+                    0.22185814966589304, 
+                    0.22185814966589304, 
+                    0.22185814966589304, 
+                    0.22185814966589304, 
+                    0.2113292300553229, 
+                    0.2113292300553229, 
+                    0.19519982699182473, 
+                    0.19519982699182473, 
+                    0.17767980025015037, 
+                    0.17767980025015037, 
+                    0.1590532158284263, 
+                    0.1590532158284263, 
+                    0.13956278182585963, 
+                    0.13956278182585963, 
+                    0.11926827388733492, 
+                    0.11926827388733492, 
+                    0.10087565432402422, 
+                    0.10087565432402422
+                ], 
+                0.05013447254896164
+            ], 
+            [
+                1.0361446142196655, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999996958908574, 
+                    0.9999996958908574, 
+                    0.9998378242473775, 
+                    0.9998378242473775, 
+                    0.993061250490948, 
+                    0.993061250490948, 
+                    0.9812178147206001, 
+                    0.9812178147206001, 
+                    0.9612198886160483, 
+                    0.9612198886160483, 
+                    0.9321641875935551, 
+                    0.9321641875935551, 
+                    0.8961376620106848, 
+                    0.8961376620106848, 
+                    0.8563157937052366, 
+                    0.8563157937052366, 
+                    0.814360461179212, 
+                    0.814360461179212, 
+                    0.7721071597848069, 
+                    0.7721071597848069, 
+                    0.7295835937183031, 
+                    0.7295835937183031, 
+                    0.6877372969614104, 
+                    0.6877372969614104, 
+                    0.6474957090916783, 
+                    0.6474957090916783, 
+                    0.6096573226466441, 
+                    0.6096573226466441, 
+                    0.571399906957659, 
+                    0.571399906957659, 
+                    0.5355874258133818, 
+                    0.5355874258133818, 
+                    0.5007072168844092, 
+                    0.5007072168844092, 
+                    0.4682144555344864, 
+                    0.4682144555344864, 
+                    0.43721707208534033, 
+                    0.43721707208534033, 
+                    0.40936467620607714, 
+                    0.40936467620607714, 
+                    0.38307868318372423, 
+                    0.38307868318372423, 
+                    0.3584028831742591, 
+                    0.3584028831742591, 
+                    0.3351477906496727, 
+                    0.3351477906496727, 
+                    0.3142565046478032, 
+                    0.3142565046478032, 
+                    0.295301162602316, 
+                    0.295301162602316, 
+                    0.27806023963138443, 
+                    0.27806023963138443, 
+                    0.2624307787529622, 
+                    0.2624307787529622, 
+                    0.24830082948168825, 
+                    0.24830082948168825, 
+                    0.23555527164299744, 
+                    0.23555527164299744, 
+                    0.2248945942160745, 
+                    0.2248945942160745, 
+                    0.2182104516289734, 
+                    0.2182104516289734, 
+                    0.2182104516289734, 
+                    0.2182104516289734, 
+                    0.2118278600267259, 
+                    0.2118278600267259, 
+                    0.1951973504337242, 
+                    0.1951973504337242, 
+                    0.1774585945115819, 
+                    0.1774585945115819, 
+                    0.15873714332079467, 
+                    0.15873714332079467, 
+                    0.1392302576327323, 
+                    0.1392302576327323, 
+                    0.11898154916614612, 
+                    0.11898154916614612, 
+                    0.10076231970295094, 
+                    0.10076231970295094
+                ], 
+                0.04649023711681366
+            ], 
+            [
+                1.0435287952423096, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999883957724752, 
+                    0.9999883957724752, 
+                    0.9999443051025173, 
+                    0.9999443051025173, 
+                    0.9927620139131107, 
+                    0.9927620139131107, 
+                    0.9805815964448407, 
+                    0.9805815964448407, 
+                    0.9600495594887526, 
+                    0.9600495594887526, 
+                    0.9303944785255167, 
+                    0.9303944785255167, 
+                    0.8939691935774108, 
+                    0.8939691935774108, 
+                    0.8537400218096025, 
+                    0.8537400218096025, 
+                    0.8114958207870419, 
+                    0.8114958207870419, 
+                    0.7690532091802339, 
+                    0.7690532091802339, 
+                    0.7264109257332122, 
+                    0.7264109257332122, 
+                    0.6845060095805291, 
+                    0.6845060095805291, 
+                    0.6442195783844832, 
+                    0.6442195783844832, 
+                    0.6064953277694869, 
+                    0.6064953277694869, 
+                    0.5681008162095609, 
+                    0.5681008162095609, 
+                    0.532741722065722, 
+                    0.532741722065722, 
+                    0.4973557153965516, 
+                    0.4973557153965516, 
+                    0.4657540320370509, 
+                    0.4657540320370509, 
+                    0.4340855426399828, 
+                    0.4340855426399828, 
+                    0.40696437195200896, 
+                    0.40696437195200896, 
+                    0.3804705620549978, 
+                    0.3804705620549978, 
+                    0.35605698337489816, 
+                    0.35605698337489816, 
+                    0.3328833188071757, 
+                    0.3328833188071757, 
+                    0.31212293411907416, 
+                    0.31212293411907416, 
+                    0.2932737438850272, 
+                    0.2932737438850272, 
+                    0.27613267452834156, 
+                    0.27613267452834156, 
+                    0.26059024509785794, 
+                    0.26059024509785794, 
+                    0.246537225310836, 
+                    0.246537225310836, 
+                    0.23398252074833278, 
+                    0.23398252074833278, 
+                    0.22255927652999158, 
+                    0.22255927652999158, 
+                    0.21849718675733462, 
+                    0.21849718675733462, 
+                    0.21849718675733462, 
+                    0.21849718675733462, 
+                    0.2115170923350828, 
+                    0.2115170923350828, 
+                    0.19483276501599942, 
+                    0.19483276501599942, 
+                    0.17699777383531445, 
+                    0.17699777383531445, 
+                    0.1582253431846172, 
+                    0.1582253431846172, 
+                    0.13873115991125115, 
+                    0.13873115991125115, 
+                    0.1185658545644903, 
+                    0.1185658545644903, 
+                    0.10061291291688021, 
+                    0.10061291291688021
+                ], 
+                0.04304090887308121
+            ], 
+            [
+                1.0509655475616455, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998644865097213, 
+                    0.9998644865097213, 
+                    0.9927803919854254, 
+                    0.9927803919854254, 
+                    0.9803669166864465, 
+                    0.9803669166864465, 
+                    0.9592367917752437, 
+                    0.9592367917752437, 
+                    0.9288295810580133, 
+                    0.9288295810580133, 
+                    0.8918060156123246, 
+                    0.8918060156123246, 
+                    0.8511546388484816, 
+                    0.8511546388484816, 
+                    0.8086353305390266, 
+                    0.8086353305390266, 
+                    0.7660089026092384, 
+                    0.7660089026092384, 
+                    0.7232379989807044, 
+                    0.7232379989807044, 
+                    0.6812647090136359, 
+                    0.6812647090136359, 
+                    0.6410338258974436, 
+                    0.6410338258974436, 
+                    0.6031649918197594, 
+                    0.6031649918197594, 
+                    0.5652000554909669, 
+                    0.5652000554909669, 
+                    0.5291863854697192, 
+                    0.5291863854697192, 
+                    0.4950902455496231, 
+                    0.4950902455496231, 
+                    0.4620516992179297, 
+                    0.4620516992179297, 
+                    0.4320935767375699, 
+                    0.4320935767375699, 
+                    0.403877034029383, 
+                    0.403877034029383, 
+                    0.37817990134236157, 
+                    0.37817990134236157, 
+                    0.353616273614162, 
+                    0.353616273614162, 
+                    0.33065934876968034, 
+                    0.33065934876968034, 
+                    0.30999392601513415, 
+                    0.30999392601513415, 
+                    0.291263029702214, 
+                    0.291263029702214, 
+                    0.27422675563853943, 
+                    0.27422675563853943, 
+                    0.2587839820236049, 
+                    0.2587839820236049, 
+                    0.24482677436271016, 
+                    0.24482677436271016, 
+                    0.23232891323265387, 
+                    0.23232891323265387, 
+                    0.22088847635015013, 
+                    0.22088847635015013, 
+                    0.21737991457758374, 
+                    0.21737991457758374, 
+                    0.21737991457758374, 
+                    0.21737991457758374, 
+                    0.21156044809708774, 
+                    0.21156044809708774, 
+                    0.19458725232545998, 
+                    0.19458725232545998, 
+                    0.17662897088579887, 
+                    0.17662897088579887, 
+                    0.15781455298955557, 
+                    0.15781455298955557, 
+                    0.13834012864338577, 
+                    0.13834012864338577, 
+                    0.11825040085719549, 
+                    0.11825040085719549, 
+                    0.10053849212596451, 
+                    0.10053849212596451
+                ], 
+                0.039823029190301895
+            ], 
+            [
+                1.058455467224121, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999591685740091, 
+                    0.9999591685740091, 
+                    0.9998853260504235, 
+                    0.9998853260504235, 
+                    0.9925535626713792, 
+                    0.9925535626713792, 
+                    0.9797199780934848, 
+                    0.9797199780934848, 
+                    0.9580487698010524, 
+                    0.9580487698010524, 
+                    0.9270140039116972, 
+                    0.9270140039116972, 
+                    0.8895268999746692, 
+                    0.8895268999746692, 
+                    0.8485208423461903, 
+                    0.8485208423461903, 
+                    0.8057427996924205, 
+                    0.8057427996924205, 
+                    0.762931194654772, 
+                    0.762931194654772, 
+                    0.720057869054218, 
+                    0.720057869054218, 
+                    0.6780261915917092, 
+                    0.6780261915917092, 
+                    0.6377948863055721, 
+                    0.6377948863055721, 
+                    0.599944540615948, 
+                    0.599944540615948, 
+                    0.5620507332247826, 
+                    0.5620507332247826, 
+                    0.5260957440000879, 
+                    0.5260957440000879, 
+                    0.4921310757443708, 
+                    0.4921310757443708, 
+                    0.4591819495947706, 
+                    0.4591819495947706, 
+                    0.42936077919036075, 
+                    0.42936077919036075, 
+                    0.4012658930000901, 
+                    0.4012658930000901, 
+                    0.37569366490344996, 
+                    0.37569366490344996, 
+                    0.35125753834697454, 
+                    0.35125753834697454, 
+                    0.3284258064095026, 
+                    0.3284258064095026, 
+                    0.3078804688819063, 
+                    0.3078804688819063, 
+                    0.28926109899772595, 
+                    0.28926109899772595, 
+                    0.2723292578958882, 
+                    0.2723292578958882, 
+                    0.25698339414244636, 
+                    0.25698339414244636, 
+                    0.24311919051501188, 
+                    0.24311919051501188, 
+                    0.23074311261558314, 
+                    0.23074311261558314, 
+                    0.21929844695605083, 
+                    0.21929844695605083, 
+                    0.21558182778205337, 
+                    0.21558182778205337, 
+                    0.21558182778205337, 
+                    0.21558182778205337, 
+                    0.21232160878799228, 
+                    0.21232160878799228, 
+                    0.1949165646383082, 
+                    0.1949165646383082, 
+                    0.1767616465239525, 
+                    0.1767616465239525, 
+                    0.1578429746319452, 
+                    0.1578429746319452, 
+                    0.13831828157791792, 
+                    0.13831828157791792, 
+                    0.11821385171313141, 
+                    0.11821385171313141, 
+                    0.10049525485302445, 
+                    0.10049525485302445
+                ], 
+                0.036799509078264236
+            ], 
+            [
+                1.0659986734390259, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999779824860055, 
+                    0.999779824860055, 
+                    0.9924895322028244, 
+                    0.9924895322028244, 
+                    0.9793552952077089, 
+                    0.9793552952077089, 
+                    0.9570142450310268, 
+                    0.9570142450310268, 
+                    0.9252256593430848, 
+                    0.9252256593430848, 
+                    0.8872131760589321, 
+                    0.8872131760589321, 
+                    0.8458722519981803, 
+                    0.8458722519981803, 
+                    0.8028310864081484, 
+                    0.8028310864081484, 
+                    0.7598452535678465, 
+                    0.7598452535678465, 
+                    0.7168668900161226, 
+                    0.7168668900161226, 
+                    0.6747781247303791, 
+                    0.6747781247303791, 
+                    0.6345514965753962, 
+                    0.6345514965753962, 
+                    0.5967081447948895, 
+                    0.5967081447948895, 
+                    0.5589298461414245, 
+                    0.5589298461414245, 
+                    0.5229600248927178, 
+                    0.5229600248927178, 
+                    0.48923533566506244, 
+                    0.48923533566506244, 
+                    0.45624747119261166, 
+                    0.45624747119261166, 
+                    0.426692152219895, 
+                    0.426692152219895, 
+                    0.39862442618278515, 
+                    0.39862442618278515, 
+                    0.3732256445466162, 
+                    0.3732256445466162, 
+                    0.3488998842882665, 
+                    0.3488998842882665, 
+                    0.3261991636439083, 
+                    0.3261991636439083, 
+                    0.30577203753901594, 
+                    0.30577203753901594, 
+                    0.28726437541165617, 
+                    0.28726437541165617, 
+                    0.27043627240397056, 
+                    0.27043627240397056, 
+                    0.2551875485386177, 
+                    0.2551875485386177, 
+                    0.24140976295038763, 
+                    0.24140976295038763, 
+                    0.22909358264999535, 
+                    0.22909358264999535, 
+                    0.21801402515779553, 
+                    0.21801402515779553, 
+                    0.2124415201190471, 
+                    0.2124415201190471, 
+                    0.2124415201190471, 
+                    0.2124415201190471, 
+                    0.2124415201190471, 
+                    0.2124415201190471, 
+                    0.19499178718601035, 
+                    0.19499178718601035, 
+                    0.1767319266578114, 
+                    0.1767319266578114, 
+                    0.15781032838242312, 
+                    0.15781032838242312, 
+                    0.1383133878506594, 
+                    0.1383133878506594, 
+                    0.118237951896469, 
+                    0.118237951896469, 
+                    0.10052443008721876, 
+                    0.10052443008721876
+                ], 
+                0.03395190089941025
+            ], 
+            [
+                1.073595643043518, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997895131584243, 
+                    0.9997895131584243, 
+                    0.992326516681655, 
+                    0.992326516681655, 
+                    0.978901915314574, 
+                    0.978901915314574, 
+                    0.9559206700332546, 
+                    0.9559206700332546, 
+                    0.9234264766538981, 
+                    0.9234264766538981, 
+                    0.8849122340656882, 
+                    0.8849122340656882, 
+                    0.8431996959057151, 
+                    0.8431996959057151, 
+                    0.7999111032684694, 
+                    0.7999111032684694, 
+                    0.7567613288024558, 
+                    0.7567613288024558, 
+                    0.7136751295746123, 
+                    0.7136751295746123, 
+                    0.6715280504199431, 
+                    0.6715280504199431, 
+                    0.6313176275965767, 
+                    0.6313176275965767, 
+                    0.5934913451963238, 
+                    0.5934913451963238, 
+                    0.5557828518150929, 
+                    0.5557828518150929, 
+                    0.5199152424700515, 
+                    0.5199152424700515, 
+                    0.48623915568345966, 
+                    0.48623915568345966, 
+                    0.4534671916567245, 
+                    0.4534671916567245, 
+                    0.423923188907338, 
+                    0.423923188907338, 
+                    0.39607628204213835, 
+                    0.39607628204213835, 
+                    0.37075327165001476, 
+                    0.37075327165001476, 
+                    0.3465747525973785, 
+                    0.3465747525973785, 
+                    0.32399490988161983, 
+                    0.32399490988161983, 
+                    0.30368808423971894, 
+                    0.30368808423971894, 
+                    0.28529152659215246, 
+                    0.28529152659215246, 
+                    0.26856683714746926, 
+                    0.26856683714746926, 
+                    0.25341622295017907, 
+                    0.25341622295017907, 
+                    0.23975393636942202, 
+                    0.23975393636942202, 
+                    0.22764769462341472, 
+                    0.22764769462341472, 
+                    0.21621532659153614, 
+                    0.21621532659153614, 
+                    0.2112433794359, 
+                    0.2112433794359, 
+                    0.2112433794359, 
+                    0.2112433794359, 
+                    0.21103740759461098, 
+                    0.21103740759461098, 
+                    0.19379477111223126, 
+                    0.19379477111223126, 
+                    0.17581765956876758, 
+                    0.17581765956876758, 
+                    0.15709066229960228, 
+                    0.15709066229960228, 
+                    0.137769855299997, 
+                    0.137769855299997, 
+                    0.11786805507424435, 
+                    0.11786805507424435, 
+                    0.10044211128675641, 
+                    0.10044211128675641
+                ], 
+                0.03130583465099335
+            ]
+        ]
+    }, 
+    {
+        "block_size": 84, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9322235584259033, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998720898746093, 
+                    0.9998720898746093, 
+                    0.9994235734937142, 
+                    0.9994235734937142, 
+                    0.9947638777036785, 
+                    0.9947638777036785, 
+                    0.9878496439770545, 
+                    0.9878496439770545, 
+                    0.9753265497132255, 
+                    0.9753265497132255, 
+                    0.9594599864474519, 
+                    0.9594599864474519, 
+                    0.9365477592823154, 
+                    0.9365477592823154, 
+                    0.9081273955886474, 
+                    0.9081273955886474, 
+                    0.8737186829933389, 
+                    0.8737186829933389, 
+                    0.8362125247011027, 
+                    0.8362125247011027, 
+                    0.7956615529315236, 
+                    0.7956615529315236, 
+                    0.7565853276646972, 
+                    0.7565853276646972, 
+                    0.7167274608795542, 
+                    0.7167274608795542, 
+                    0.6774596451105999, 
+                    0.6774596451105999, 
+                    0.6389581486599423, 
+                    0.6389581486599423, 
+                    0.6012326559191726, 
+                    0.6012326559191726, 
+                    0.5667389227980775, 
+                    0.5667389227980775, 
+                    0.5327277294483154, 
+                    0.5327277294483154, 
+                    0.500646677732929, 
+                    0.500646677732929, 
+                    0.4698653703697614, 
+                    0.4698653703697614, 
+                    0.44031045557562687, 
+                    0.44031045557562687, 
+                    0.4133546845799268, 
+                    0.4133546845799268, 
+                    0.38565312328307555, 
+                    0.38565312328307555, 
+                    0.3608942802737947, 
+                    0.3608942802737947, 
+                    0.338240757101737, 
+                    0.338240757101737, 
+                    0.3184520146325565, 
+                    0.3184520146325565, 
+                    0.30025384041692027, 
+                    0.30025384041692027, 
+                    0.2839307865907922, 
+                    0.2839307865907922, 
+                    0.2690847814932187, 
+                    0.2690847814932187, 
+                    0.2558065314239306, 
+                    0.2558065314239306, 
+                    0.2454409218608983, 
+                    0.2454409218608983, 
+                    0.23329165349294317, 
+                    0.23329165349294317, 
+                    0.22820408192759883, 
+                    0.22820408192759883, 
+                    0.2174857339593264, 
+                    0.2174857339593264, 
+                    0.20284823091462512, 
+                    0.20284823091462512, 
+                    0.18593140405954264, 
+                    0.18593140405954264, 
+                    0.16726642058251898, 
+                    0.16726642058251898, 
+                    0.14711261246634122, 
+                    0.14711261246634122, 
+                    0.1254663854280206, 
+                    0.1254663854280206, 
+                    0.10329325575920215, 
+                    0.10329325575920215
+                ], 
+                0.13028351962566376
+            ], 
+            [
+                0.9387891292572021, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999473779859775, 
+                    0.9999473779859775, 
+                    0.9963756960769871, 
+                    0.9963756960769871, 
+                    0.9872911023639416, 
+                    0.9872911023639416, 
+                    0.9739618375228359, 
+                    0.9739618375228359, 
+                    0.9569089107342595, 
+                    0.9569089107342595, 
+                    0.9350293585341796, 
+                    0.9350293585341796, 
+                    0.90570489118789, 
+                    0.90570489118789, 
+                    0.8713621389640177, 
+                    0.8713621389640177, 
+                    0.8334175765689485, 
+                    0.8334175765689485, 
+                    0.7936192087223954, 
+                    0.7936192087223954, 
+                    0.7530939114131272, 
+                    0.7530939114131272, 
+                    0.7135744207328347, 
+                    0.7135744207328347, 
+                    0.6743759043694177, 
+                    0.6743759043694177, 
+                    0.635750247789309, 
+                    0.635750247789309, 
+                    0.5980652283887273, 
+                    0.5980652283887273, 
+                    0.5635740588128789, 
+                    0.5635740588128789, 
+                    0.5298823631854152, 
+                    0.5298823631854152, 
+                    0.49733236123274605, 
+                    0.49733236123274605, 
+                    0.46730421326005994, 
+                    0.46730421326005994, 
+                    0.4371782929077838, 
+                    0.4371782929077838, 
+                    0.41101371122462876, 
+                    0.41101371122462876, 
+                    0.38283188879373503, 
+                    0.38283188879373503, 
+                    0.35874074849775495, 
+                    0.35874074849775495, 
+                    0.335852650002136, 
+                    0.335852650002136, 
+                    0.3163291639319454, 
+                    0.3163291639319454, 
+                    0.29818693232036814, 
+                    0.29818693232036814, 
+                    0.2819582992084062, 
+                    0.2819582992084062, 
+                    0.2672016724329077, 
+                    0.2672016724329077, 
+                    0.25404973339933246, 
+                    0.25404973339933246, 
+                    0.24217764333216912, 
+                    0.24217764333216912, 
+                    0.23306157777835312, 
+                    0.23306157777835312, 
+                    0.22775277850587583, 
+                    0.22775277850587583, 
+                    0.2166439794190949, 
+                    0.2166439794190949, 
+                    0.20177226773560716, 
+                    0.20177226773560716, 
+                    0.18473174576284646, 
+                    0.18473174576284646, 
+                    0.16604247341156167, 
+                    0.16604247341156167, 
+                    0.14596369911596713, 
+                    0.14596369911596713, 
+                    0.12450828395715868, 
+                    0.12450828395715868, 
+                    0.10280896651628811, 
+                    0.10280896651628811
+                ], 
+                0.12260516732931137
+            ], 
+            [
+                0.9454010128974915, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999183760892152, 
+                    0.9999183760892152, 
+                    0.999217058477722, 
+                    0.999217058477722, 
+                    0.994883440545763, 
+                    0.994883440545763, 
+                    0.9862239772926161, 
+                    0.9862239772926161, 
+                    0.974108600575464, 
+                    0.974108600575464, 
+                    0.957094475015666, 
+                    0.957094475015666, 
+                    0.9338129115238119, 
+                    0.9338129115238119, 
+                    0.9037130804737861, 
+                    0.9037130804737861, 
+                    0.8692311408897408, 
+                    0.8692311408897408, 
+                    0.8309389088596503, 
+                    0.8309389088596503, 
+                    0.7909042362229546, 
+                    0.7909042362229546, 
+                    0.7502911615929564, 
+                    0.7502911615929564, 
+                    0.7106554262281605, 
+                    0.7106554262281605, 
+                    0.6712571777480253, 
+                    0.6712571777480253, 
+                    0.6324787429802748, 
+                    0.6324787429802748, 
+                    0.5948508415697001, 
+                    0.5948508415697001, 
+                    0.5605902622639422, 
+                    0.5605902622639422, 
+                    0.5266800619370409, 
+                    0.5266800619370409, 
+                    0.4948035381167191, 
+                    0.4948035381167191, 
+                    0.46411201878636404, 
+                    0.46411201878636404, 
+                    0.43489858262105424, 
+                    0.43489858262105424, 
+                    0.4080925313931387, 
+                    0.4080925313931387, 
+                    0.38069651533887644, 
+                    0.38069651533887644, 
+                    0.35612404641281326, 
+                    0.35612404641281326, 
+                    0.3337320249694001, 
+                    0.3337320249694001, 
+                    0.3141439376141893, 
+                    0.3141439376141893, 
+                    0.2961461918216514, 
+                    0.2961461918216514, 
+                    0.28000845278033565, 
+                    0.28000845278033565, 
+                    0.26533732657663667, 
+                    0.26533732657663667, 
+                    0.2522582861353949, 
+                    0.2522582861353949, 
+                    0.2403278289791625, 
+                    0.2403278289791625, 
+                    0.2323437152207917, 
+                    0.2323437152207917, 
+                    0.2271336463453585, 
+                    0.2271336463453585, 
+                    0.21594142385455933, 
+                    0.21594142385455933, 
+                    0.20102851283219314, 
+                    0.20102851283219314, 
+                    0.18398738198987405, 
+                    0.18398738198987405, 
+                    0.16533589384284683, 
+                    0.16533589384284683, 
+                    0.14533712541990673, 
+                    0.14533712541990673, 
+                    0.12401083259079733, 
+                    0.12401083259079733, 
+                    0.10256125951528669, 
+                    0.10256125951528669
+                ], 
+                0.11547347903251648
+            ], 
+            [
+                0.9520593881607056, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999448558753556, 
+                    0.999448558753556, 
+                    0.9948524665481759, 
+                    0.9948524665481759, 
+                    0.9865505489669529, 
+                    0.9865505489669529, 
+                    0.9743515012885176, 
+                    0.9743515012885176, 
+                    0.9568973009383513, 
+                    0.9568973009383513, 
+                    0.9332748620660094, 
+                    0.9332748620660094, 
+                    0.902321177293485, 
+                    0.902321177293485, 
+                    0.8668210652412284, 
+                    0.8668210652412284, 
+                    0.8285848628644182, 
+                    0.8285848628644182, 
+                    0.7878728657174382, 
+                    0.7878728657174382, 
+                    0.7473012745761136, 
+                    0.7473012745761136, 
+                    0.70797612757193, 
+                    0.70797612757193, 
+                    0.6680454382744269, 
+                    0.6680454382744269, 
+                    0.6293871365332743, 
+                    0.6293871365332743, 
+                    0.5918017943423695, 
+                    0.5918017943423695, 
+                    0.5574950266262411, 
+                    0.5574950266262411, 
+                    0.5238277197738149, 
+                    0.5238277197738149, 
+                    0.49174569258700546, 
+                    0.49174569258700546, 
+                    0.4615174285731097, 
+                    0.4615174285731097, 
+                    0.4320145304568412, 
+                    0.4320145304568412, 
+                    0.4057034218845829, 
+                    0.4057034218845829, 
+                    0.37810931377220947, 
+                    0.37810931377220947, 
+                    0.35392865162660314, 
+                    0.35392865162660314, 
+                    0.33145729383438144, 
+                    0.33145729383438144, 
+                    0.31203230927421155, 
+                    0.31203230927421155, 
+                    0.2941104379299175, 
+                    0.2941104379299175, 
+                    0.2780688178394569, 
+                    0.2780688178394569, 
+                    0.26346600653730184, 
+                    0.26346600653730184, 
+                    0.2504755195619478, 
+                    0.2504755195619478, 
+                    0.2391473271807906, 
+                    0.2391473271807906, 
+                    0.22971155496600962, 
+                    0.22971155496600962, 
+                    0.22708172589314612, 
+                    0.22708172589314612, 
+                    0.21530789743911152, 
+                    0.21530789743911152, 
+                    0.2003327052784087, 
+                    0.2003327052784087, 
+                    0.183327251366744, 
+                    0.183327251366744, 
+                    0.1647444041681632, 
+                    0.1647444041681632, 
+                    0.1448378992623274, 
+                    0.1448378992623274, 
+                    0.12362610702850714, 
+                    0.12362610702850714, 
+                    0.10234699392616732, 
+                    0.10234699392616732
+                ], 
+                0.10863850265741348
+            ], 
+            [
+                0.9587647318840027, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9948922478386684, 
+                    0.9948922478386684, 
+                    0.9868526271428053, 
+                    0.9868526271428053, 
+                    0.9734832163154304, 
+                    0.9734832163154304, 
+                    0.956707905753642, 
+                    0.956707905753642, 
+                    0.9320512090270541, 
+                    0.9320512090270541, 
+                    0.9007288114447313, 
+                    0.9007288114447313, 
+                    0.8646349097347988, 
+                    0.8646349097347988, 
+                    0.8258814562212241, 
+                    0.8258814562212241, 
+                    0.78523354867011, 
+                    0.78523354867011, 
+                    0.7443586926855852, 
+                    0.7443586926855852, 
+                    0.7045557866698704, 
+                    0.7045557866698704, 
+                    0.6650676202834963, 
+                    0.6650676202834963, 
+                    0.6263898343082985, 
+                    0.6263898343082985, 
+                    0.5887270699250654, 
+                    0.5887270699250654, 
+                    0.5543297320700932, 
+                    0.5543297320700932, 
+                    0.5209217835758653, 
+                    0.5209217835758653, 
+                    0.4887267845723465, 
+                    0.4887267845723465, 
+                    0.45875292329474826, 
+                    0.45875292329474826, 
+                    0.4292372542718885, 
+                    0.4292372542718885, 
+                    0.4030939849444894, 
+                    0.4030939849444894, 
+                    0.37560819562537695, 
+                    0.37560819562537695, 
+                    0.3515554121678754, 
+                    0.3515554121678754, 
+                    0.3292160906082595, 
+                    0.3292160906082595, 
+                    0.30991309224875085, 
+                    0.30991309224875085, 
+                    0.2920989639724733, 
+                    0.2920989639724733, 
+                    0.276155123018999, 
+                    0.276155123018999, 
+                    0.26166072176735256, 
+                    0.26166072176735256, 
+                    0.2487564996142373, 
+                    0.2487564996142373, 
+                    0.23726172186737549, 
+                    0.23726172186737549, 
+                    0.22707408734777654, 
+                    0.22707408734777654, 
+                    0.2252653877659977, 
+                    0.2252653877659977, 
+                    0.21421121312564095, 
+                    0.21421121312564095, 
+                    0.19961567536647196, 
+                    0.19961567536647196, 
+                    0.18289381784274755, 
+                    0.18289381784274755, 
+                    0.16452716999948153, 
+                    0.16452716999948153, 
+                    0.14478620702381995, 
+                    0.14478620702381995, 
+                    0.12368811484950129, 
+                    0.12368811484950129, 
+                    0.10245710362286385, 
+                    0.10245710362286385
+                ], 
+                0.10196586698293686
+            ], 
+            [
+                0.9655172228813171, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9948413539100056, 
+                    0.9948413539100056, 
+                    0.9862643635250699, 
+                    0.9862643635250699, 
+                    0.9737104443156928, 
+                    0.9737104443156928, 
+                    0.9546552388362928, 
+                    0.9546552388362928, 
+                    0.9304966187799768, 
+                    0.9304966187799768, 
+                    0.8986858062717035, 
+                    0.8986858062717035, 
+                    0.8623135858083522, 
+                    0.8623135858083522, 
+                    0.8232527168396736, 
+                    0.8232527168396736, 
+                    0.7823909150103656, 
+                    0.7823909150103656, 
+                    0.7413059507256499, 
+                    0.7413059507256499, 
+                    0.7014890048028477, 
+                    0.7014890048028477, 
+                    0.6619677710242806, 
+                    0.6619677710242806, 
+                    0.6231392869223503, 
+                    0.6231392869223503, 
+                    0.5856922571277249, 
+                    0.5856922571277249, 
+                    0.55127231199717, 
+                    0.55127231199717, 
+                    0.517986713047802, 
+                    0.517986713047802, 
+                    0.48579476648509123, 
+                    0.48579476648509123, 
+                    0.4560134331303184, 
+                    0.4560134331303184, 
+                    0.42654170044100315, 
+                    0.42654170044100315, 
+                    0.40055372084987495, 
+                    0.40055372084987495, 
+                    0.373158141424602, 
+                    0.373158141424602, 
+                    0.349241943941813, 
+                    0.349241943941813, 
+                    0.32701213743194035, 
+                    0.32701213743194035, 
+                    0.3078134677605218, 
+                    0.3078134677605218, 
+                    0.2901022809448448, 
+                    0.2901022809448448, 
+                    0.2742525661290588, 
+                    0.2742525661290588, 
+                    0.2598486935347653, 
+                    0.2598486935347653, 
+                    0.2470099923643875, 
+                    0.2470099923643875, 
+                    0.23543713736151117, 
+                    0.23543713736151117, 
+                    0.22640055483892188, 
+                    0.22640055483892188, 
+                    0.22640055483892188, 
+                    0.22640055483892188, 
+                    0.2140473675484136, 
+                    0.2140473675484136, 
+                    0.19893645562274798, 
+                    0.19893645562274798, 
+                    0.18194065865951123, 
+                    0.18194065865951123, 
+                    0.16345017135244938, 
+                    0.16345017135244938, 
+                    0.14371518714216225, 
+                    0.14371518714216225, 
+                    0.12276066985719418, 
+                    0.12276066985719418, 
+                    0.10197179754465754, 
+                    0.10197179754465754
+                ], 
+                0.0957244411110878
+            ], 
+            [
+                0.9723173379898071, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999839451234566, 
+                    0.9999839451234566, 
+                    0.9997080800675731, 
+                    0.9997080800675731, 
+                    0.9947418808002666, 
+                    0.9947418808002666, 
+                    0.9856472463149037, 
+                    0.9856472463149037, 
+                    0.972488627429164, 
+                    0.972488627429164, 
+                    0.9539329084842997, 
+                    0.9539329084842997, 
+                    0.9288562360357548, 
+                    0.9288562360357548, 
+                    0.8962833248722537, 
+                    0.8962833248722537, 
+                    0.8599135135849059, 
+                    0.8599135135849059, 
+                    0.8206725973939778, 
+                    0.8206725973939778, 
+                    0.7796965838548289, 
+                    0.7796965838548289, 
+                    0.7383693206946191, 
+                    0.7383693206946191, 
+                    0.6983785144789773, 
+                    0.6983785144789773, 
+                    0.6588396538470037, 
+                    0.6588396538470037, 
+                    0.6200751155982251, 
+                    0.6200751155982251, 
+                    0.58246941049607, 
+                    0.58246941049607, 
+                    0.548387913385904, 
+                    0.548387913385904, 
+                    0.5147801812248535, 
+                    0.5147801812248535, 
+                    0.4832387341198029, 
+                    0.4832387341198029, 
+                    0.45293510236800794, 
+                    0.45293510236800794, 
+                    0.42418321906187917, 
+                    0.42418321906187917, 
+                    0.39779942635488585, 
+                    0.39779942635488585, 
+                    0.3709343364224083, 
+                    0.3709343364224083, 
+                    0.3468064955873293, 
+                    0.3468064955873293, 
+                    0.32489692161381506, 
+                    0.32489692161381506, 
+                    0.30571410629237206, 
+                    0.30571410629237206, 
+                    0.28812188418658213, 
+                    0.28812188418658213, 
+                    0.2723735806000342, 
+                    0.2723735806000342, 
+                    0.25808332301796827, 
+                    0.25808332301796827, 
+                    0.24522457439031645, 
+                    0.24522457439031645, 
+                    0.2336464706923246, 
+                    0.2336464706923246, 
+                    0.22675455283565685, 
+                    0.22675455283565685, 
+                    0.22675455283565685, 
+                    0.22675455283565685, 
+                    0.2139928028169593, 
+                    0.2139928028169593, 
+                    0.19848114229702246, 
+                    0.19848114229702246, 
+                    0.18123318088647108, 
+                    0.18123318088647108, 
+                    0.1626136499696988, 
+                    0.1626136499696988, 
+                    0.14286324638758585, 
+                    0.14286324638758585, 
+                    0.12201391622426143, 
+                    0.12201391622426143, 
+                    0.10157814551342961, 
+                    0.10157814551342961
+                ], 
+                0.0898367315530777
+            ], 
+            [
+                0.9791653156280518, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999870281049115, 
+                    0.9999870281049115, 
+                    0.9999870281049115, 
+                    0.9999870281049115, 
+                    0.9943495973177464, 
+                    0.9943495973177464, 
+                    0.9858507222972474, 
+                    0.9858507222972474, 
+                    0.9717000047444333, 
+                    0.9717000047444333, 
+                    0.9522839042280036, 
+                    0.9522839042280036, 
+                    0.9270111677400322, 
+                    0.9270111677400322, 
+                    0.8944855037279582, 
+                    0.8944855037279582, 
+                    0.8574745545863807, 
+                    0.8574745545863807, 
+                    0.8179277438734193, 
+                    0.8179277438734193, 
+                    0.7767924889128084, 
+                    0.7767924889128084, 
+                    0.7353877191867076, 
+                    0.7353877191867076, 
+                    0.6953314621164212, 
+                    0.6953314621164212, 
+                    0.6557587066737276, 
+                    0.6557587066737276, 
+                    0.61687592691353, 
+                    0.61687592691353, 
+                    0.5796173240392772, 
+                    0.5796173240392772, 
+                    0.5449892343621516, 
+                    0.5449892343621516, 
+                    0.5123559151958776, 
+                    0.5123559151958776, 
+                    0.47975019379184447, 
+                    0.47975019379184447, 
+                    0.4507504625459394, 
+                    0.4507504625459394, 
+                    0.4210797472644638, 
+                    0.4210797472644638, 
+                    0.3955102273585667, 
+                    0.3955102273585667, 
+                    0.3683934508101111, 
+                    0.3683934508101111, 
+                    0.3445619963831423, 
+                    0.3445619963831423, 
+                    0.32272432667359174, 
+                    0.32272432667359174, 
+                    0.3036465486787608, 
+                    0.3036465486787608, 
+                    0.28615679699444996, 
+                    0.28615679699444996, 
+                    0.27049179678822494, 
+                    0.27049179678822494, 
+                    0.2562593978505532, 
+                    0.2562593978505532, 
+                    0.24355608006592644, 
+                    0.24355608006592644, 
+                    0.2319040511643986, 
+                    0.2319040511643986, 
+                    0.2273418856921881, 
+                    0.2273418856921881, 
+                    0.2273418856921881, 
+                    0.2273418856921881, 
+                    0.21366780723759243, 
+                    0.21366780723759243, 
+                    0.1978574204132883, 
+                    0.1978574204132883, 
+                    0.18044656668899767, 
+                    0.18044656668899767, 
+                    0.16176662322552526, 
+                    0.16176662322552526, 
+                    0.14205080661287922, 
+                    0.14205080661287922, 
+                    0.12133800149671241, 
+                    0.12133800149671241, 
+                    0.10132149514448428, 
+                    0.10132149514448428
+                ], 
+                0.0841846689581871
+            ], 
+            [
+                0.9860615134239197, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999213943864945, 
+                    0.9999213943864945, 
+                    0.9948669480206809, 
+                    0.9948669480206809, 
+                    0.9864464697937241, 
+                    0.9864464697937241, 
+                    0.9725878787292502, 
+                    0.9725878787292502, 
+                    0.9530227762066998, 
+                    0.9530227762066998, 
+                    0.9264109233427454, 
+                    0.9264109233427454, 
+                    0.8928543538852455, 
+                    0.8928543538852455, 
+                    0.8552151287276208, 
+                    0.8552151287276208, 
+                    0.8152814344994245, 
+                    0.8152814344994245, 
+                    0.7738807681473191, 
+                    0.7738807681473191, 
+                    0.7323677514469925, 
+                    0.7323677514469925, 
+                    0.6922166124203897, 
+                    0.6922166124203897, 
+                    0.6526706591267702, 
+                    0.6526706591267702, 
+                    0.6137874053267156, 
+                    0.6137874053267156, 
+                    0.5765796145618585, 
+                    0.5765796145618585, 
+                    0.5418857241034079, 
+                    0.5418857241034079, 
+                    0.5094222099463596, 
+                    0.5094222099463596, 
+                    0.47682508079074565, 
+                    0.47682508079074565, 
+                    0.4479296591444696, 
+                    0.4479296591444696, 
+                    0.4184512578813385, 
+                    0.4184512578813385, 
+                    0.39290897240592026, 
+                    0.39290897240592026, 
+                    0.3659843514055639, 
+                    0.3659843514055639, 
+                    0.34222534881131556, 
+                    0.34222534881131556, 
+                    0.32053001452440516, 
+                    0.32053001452440516, 
+                    0.30157881403591874, 
+                    0.30157881403591874, 
+                    0.28419271113550754, 
+                    0.28419271113550754, 
+                    0.26861840623800837, 
+                    0.26861840623800837, 
+                    0.2544815939497323, 
+                    0.2544815939497323, 
+                    0.2418729344949586, 
+                    0.2418729344949586, 
+                    0.2304015757985298, 
+                    0.2304015757985298, 
+                    0.2227036990372874, 
+                    0.2227036990372874, 
+                    0.2227036990372874, 
+                    0.2227036990372874, 
+                    0.2123456415924276, 
+                    0.2123456415924276, 
+                    0.197054999160212, 
+                    0.197054999160212, 
+                    0.1800754417025881, 
+                    0.1800754417025881, 
+                    0.16171449375786093, 
+                    0.16171449375786093, 
+                    0.14221659167306014, 
+                    0.14221659167306014, 
+                    0.12161152456693448, 
+                    0.12161152456693448, 
+                    0.10151546601352358, 
+                    0.10151546601352358
+                ], 
+                0.07867351919412613
+            ], 
+            [
+                0.9930062890052795, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999929718883438, 
+                    0.999929718883438, 
+                    0.9996520344735021, 
+                    0.9996520344735021, 
+                    0.9945438190731735, 
+                    0.9945438190731735, 
+                    0.9854424259499148, 
+                    0.9854424259499148, 
+                    0.971475763692003, 
+                    0.971475763692003, 
+                    0.951982609031441, 
+                    0.951982609031441, 
+                    0.9247772840344463, 
+                    0.9247772840344463, 
+                    0.8906370586293423, 
+                    0.8906370586293423, 
+                    0.8527882130791582, 
+                    0.8527882130791582, 
+                    0.8126122101147771, 
+                    0.8126122101147771, 
+                    0.7710349497332798, 
+                    0.7710349497332798, 
+                    0.7292945533048268, 
+                    0.7292945533048268, 
+                    0.6891130436457156, 
+                    0.6891130436457156, 
+                    0.6494565693446043, 
+                    0.6494565693446043, 
+                    0.6107346500115886, 
+                    0.6107346500115886, 
+                    0.5731801327707696, 
+                    0.5731801327707696, 
+                    0.5393870674282456, 
+                    0.5393870674282456, 
+                    0.5058467093997325, 
+                    0.5058467093997325, 
+                    0.47473010914687447, 
+                    0.47473010914687447, 
+                    0.4446131912988927, 
+                    0.4446131912988927, 
+                    0.4162643015976849, 
+                    0.4162643015976849, 
+                    0.3902165343361128, 
+                    0.3902165343361128, 
+                    0.36367839713275474, 
+                    0.36367839713275474, 
+                    0.33998605677986543, 
+                    0.33998605677986543, 
+                    0.31837877411372867, 
+                    0.31837877411372867, 
+                    0.29954360863161983, 
+                    0.29954360863161983, 
+                    0.2822477290604846, 
+                    0.2822477290604846, 
+                    0.266771713071005, 
+                    0.266771713071005, 
+                    0.2527193111133472, 
+                    0.2527193111133472, 
+                    0.24017799712884108, 
+                    0.24017799712884108, 
+                    0.22872893845619863, 
+                    0.22872893845619863, 
+                    0.2222964225720915, 
+                    0.2222964225720915, 
+                    0.2222964225720915, 
+                    0.2222964225720915, 
+                    0.21223164745644052, 
+                    0.21223164745644052, 
+                    0.19665932516683254, 
+                    0.19665932516683254, 
+                    0.17953326297964348, 
+                    0.17953326297964348, 
+                    0.16111274911221948, 
+                    0.16111274911221948, 
+                    0.14163206036903492, 
+                    0.14163206036903492, 
+                    0.12112182065827877, 
+                    0.12112182065827877, 
+                    0.10127756014612463, 
+                    0.10127756014612463
+                ], 
+                0.07359941303730011
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999082085612555, 
+                    0.9999082085612555, 
+                    0.9998146173004782, 
+                    0.9998146173004782, 
+                    0.9943261535683425, 
+                    0.9943261535683425, 
+                    0.9853891709795118, 
+                    0.9853891709795118, 
+                    0.9710266504127574, 
+                    0.9710266504127574, 
+                    0.9507758210108694, 
+                    0.9507758210108694, 
+                    0.9233369967354962, 
+                    0.9233369967354962, 
+                    0.8885204248229788, 
+                    0.8885204248229788, 
+                    0.8503263029500632, 
+                    0.8503263029500632, 
+                    0.8098490114265758, 
+                    0.8098490114265758, 
+                    0.7680748024210313, 
+                    0.7680748024210313, 
+                    0.7262939187653107, 
+                    0.7262939187653107, 
+                    0.686042198717008, 
+                    0.686042198717008, 
+                    0.6463291163000189, 
+                    0.6463291163000189, 
+                    0.6076481868584515, 
+                    0.6076481868584515, 
+                    0.5700271968274208, 
+                    0.5700271968274208, 
+                    0.536478287271966, 
+                    0.536478287271966, 
+                    0.5027847353866137, 
+                    0.5027847353866137, 
+                    0.47201820424756397, 
+                    0.47201820424756397, 
+                    0.4417699818656587, 
+                    0.4417699818656587, 
+                    0.4137282262324729, 
+                    0.4137282262324729, 
+                    0.3876746755626948, 
+                    0.3876746755626948, 
+                    0.36133313690619423, 
+                    0.36133313690619423, 
+                    0.3377120561108343, 
+                    0.3377120561108343, 
+                    0.31624965572774916, 
+                    0.31624965572774916, 
+                    0.2975096140029501, 
+                    0.2975096140029501, 
+                    0.28031734193511876, 
+                    0.28031734193511876, 
+                    0.2649353741389236, 
+                    0.2649353741389236, 
+                    0.25097207925924353, 
+                    0.25097207925924353, 
+                    0.23851683069457288, 
+                    0.23851683069457288, 
+                    0.22714698320479976, 
+                    0.22714698320479976, 
+                    0.22010422310973693, 
+                    0.22010422310973693, 
+                    0.22010422310973693, 
+                    0.22010422310973693, 
+                    0.20997591179864986, 
+                    0.20997591179864986, 
+                    0.1945175078423579, 
+                    0.1945175078423579, 
+                    0.17765404808926075, 
+                    0.17765404808926075, 
+                    0.15952448044728468, 
+                    0.15952448044728468, 
+                    0.14035450436148408, 
+                    0.14035450436148408, 
+                    0.12019870042181767, 
+                    0.12019870042181767, 
+                    0.10129747722524084, 
+                    0.10129747722524084
+                ], 
+                0.06869018077850342
+            ], 
+            [
+                1.0070430040359497, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998644349346784, 
+                    0.9998644349346784, 
+                    0.9942455712134389, 
+                    0.9942455712134389, 
+                    0.9850281513660933, 
+                    0.9850281513660933, 
+                    0.9700333420244158, 
+                    0.9700333420244158, 
+                    0.9494745593504864, 
+                    0.9494745593504864, 
+                    0.9215120971293108, 
+                    0.9215120971293108, 
+                    0.8863442134947708, 
+                    0.8863442134947708, 
+                    0.8477967624687526, 
+                    0.8477967624687526, 
+                    0.8071227950402059, 
+                    0.8071227950402059, 
+                    0.7651446858066492, 
+                    0.7651446858066492, 
+                    0.7232664856129214, 
+                    0.7232664856129214, 
+                    0.6829688408566168, 
+                    0.6829688408566168, 
+                    0.643194717983124, 
+                    0.643194717983124, 
+                    0.6045841108075756, 
+                    0.6045841108075756, 
+                    0.5668500958937346, 
+                    0.5668500958937346, 
+                    0.5335945130923898, 
+                    0.5335945130923898, 
+                    0.49976465440156115, 
+                    0.49976465440156115, 
+                    0.46921925588425817, 
+                    0.46921925588425817, 
+                    0.43907874696869215, 
+                    0.43907874696869215, 
+                    0.4110570795948631, 
+                    0.4110570795948631, 
+                    0.3852429860888045, 
+                    0.3852429860888045, 
+                    0.3589077060396059, 
+                    0.3589077060396059, 
+                    0.33552276748460946, 
+                    0.33552276748460946, 
+                    0.31410534567960213, 
+                    0.31410534567960213, 
+                    0.2955006339307726, 
+                    0.2955006339307726, 
+                    0.27840185154427993, 
+                    0.27840185154427993, 
+                    0.2631135629577482, 
+                    0.2631135629577482, 
+                    0.24923614916435674, 
+                    0.24923614916435674, 
+                    0.23685730203622107, 
+                    0.23685730203622107, 
+                    0.2255305418445399, 
+                    0.2255305418445399, 
+                    0.21899578397548217, 
+                    0.21899578397548217, 
+                    0.21899578397548217, 
+                    0.21899578397548217, 
+                    0.20901922442418364, 
+                    0.20901922442418364, 
+                    0.19369499206415383, 
+                    0.19369499206415383, 
+                    0.17683790988072356, 
+                    0.17683790988072356, 
+                    0.1587415055127434, 
+                    0.1587415055127434, 
+                    0.1396554298380013, 
+                    0.1396554298380013, 
+                    0.11964585995870249, 
+                    0.11964585995870249, 
+                    0.10108032714839228, 
+                    0.10108032714839228
+                ], 
+                0.06408318877220154
+            ], 
+            [
+                1.014135479927063, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999966935253032, 
+                    0.9999966935253032, 
+                    0.9998181229251732, 
+                    0.9998181229251732, 
+                    0.9939571889193125, 
+                    0.9939571889193125, 
+                    0.984045548847651, 
+                    0.984045548847651, 
+                    0.9688611803854613, 
+                    0.9688611803854613, 
+                    0.9476759433103038, 
+                    0.9476759433103038, 
+                    0.919524632608144, 
+                    0.919524632608144, 
+                    0.8840917518836473, 
+                    0.8840917518836473, 
+                    0.8452695458770912, 
+                    0.8452695458770912, 
+                    0.8043386077669937, 
+                    0.8043386077669937, 
+                    0.7622201696916491, 
+                    0.7622201696916491, 
+                    0.7201859951516961, 
+                    0.7201859951516961, 
+                    0.6798480207418782, 
+                    0.6798480207418782, 
+                    0.6400668741847113, 
+                    0.6400668741847113, 
+                    0.601419580299927, 
+                    0.601419580299927, 
+                    0.5638937318826175, 
+                    0.5638937318826175, 
+                    0.530432675402968, 
+                    0.530432675402968, 
+                    0.49702928260775786, 
+                    0.49702928260775786, 
+                    0.46623300654077804, 
+                    0.46623300654077804, 
+                    0.43649507521947223, 
+                    0.43649507521947223, 
+                    0.4083850106061561, 
+                    0.4083850106061561, 
+                    0.38280950958850246, 
+                    0.38280950958850246, 
+                    0.3565436678438438, 
+                    0.3565436678438438, 
+                    0.3333081328534954, 
+                    0.3333081328534954, 
+                    0.3119974658167326, 
+                    0.3119974658167326, 
+                    0.29350175432157527, 
+                    0.29350175432157527, 
+                    0.27650272106749985, 
+                    0.27650272106749985, 
+                    0.26130851773626856, 
+                    0.26130851773626856, 
+                    0.24752057211984668, 
+                    0.24752057211984668, 
+                    0.23520842620700783, 
+                    0.23520842620700783, 
+                    0.2238796036887352, 
+                    0.2238796036887352, 
+                    0.21859928565260126, 
+                    0.21859928565260126, 
+                    0.21859928565260126, 
+                    0.21859928565260126, 
+                    0.2098425652514224, 
+                    0.2098425652514224, 
+                    0.19380950133064617, 
+                    0.19380950133064617, 
+                    0.17655496392771752, 
+                    0.17655496392771752, 
+                    0.15823742796957735, 
+                    0.15823742796957735, 
+                    0.13906830105839316, 
+                    0.13906830105839316, 
+                    0.11910557372125596, 
+                    0.11910557372125596, 
+                    0.10084518495349795, 
+                    0.10084518495349795
+                ], 
+                0.05974660813808441
+            ], 
+            [
+                1.0212780237197876, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999872774939167, 
+                    0.999872774939167, 
+                    0.9938170729676382, 
+                    0.9938170729676382, 
+                    0.9838005068164679, 
+                    0.9838005068164679, 
+                    0.9684371364313349, 
+                    0.9684371364313349, 
+                    0.9467816043904065, 
+                    0.9467816043904065, 
+                    0.9180853874886208, 
+                    0.9180853874886208, 
+                    0.8819900684440625, 
+                    0.8819900684440625, 
+                    0.8428027459931816, 
+                    0.8428027459931816, 
+                    0.8015867182142411, 
+                    0.8015867182142411, 
+                    0.7592787557911986, 
+                    0.7592787557911986, 
+                    0.7171386745133626, 
+                    0.7171386745133626, 
+                    0.6767167708024738, 
+                    0.6767167708024738, 
+                    0.6370171713889725, 
+                    0.6370171713889725, 
+                    0.5980851840992149, 
+                    0.5980851840992149, 
+                    0.5612763054799156, 
+                    0.5612763054799156, 
+                    0.5268609998530618, 
+                    0.5268609998530618, 
+                    0.4946950929359527, 
+                    0.4946950929359527, 
+                    0.46293392937239203, 
+                    0.46293392937239203, 
+                    0.4341225564495516, 
+                    0.4341225564495516, 
+                    0.4056047567499899, 
+                    0.4056047567499899, 
+                    0.380422738776811, 
+                    0.380422738776811, 
+                    0.3541620840388373, 
+                    0.3541620840388373, 
+                    0.33111379174847744, 
+                    0.33111379174847744, 
+                    0.30989411517898724, 
+                    0.30989411517898724, 
+                    0.2915019261384467, 
+                    0.2915019261384467, 
+                    0.27459300912733176, 
+                    0.27459300912733176, 
+                    0.25951579316406465, 
+                    0.25951579316406465, 
+                    0.24582356658232563, 
+                    0.24582356658232563, 
+                    0.23364332644922464, 
+                    0.23364332644922464, 
+                    0.2222606835476353, 
+                    0.2222606835476353, 
+                    0.2166973753325943, 
+                    0.2166973753325943, 
+                    0.2166973753325943, 
+                    0.2166973753325943, 
+                    0.20985905044047543, 
+                    0.20985905044047543, 
+                    0.1935319958433145, 
+                    0.1935319958433145, 
+                    0.17611946785912627, 
+                    0.17611946785912627, 
+                    0.15773909089146815, 
+                    0.15773909089146815, 
+                    0.1385837694836092, 
+                    0.1385837694836092, 
+                    0.1187050226652738, 
+                    0.1187050226652738, 
+                    0.10069480261753397, 
+                    0.10069480261753397
+                ], 
+                0.05561281740665436
+            ], 
+            [
+                1.0284708738327026, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999919022442828, 
+                    0.9999919022442828, 
+                    0.9998223476874238, 
+                    0.9998223476874238, 
+                    0.9938659838243917, 
+                    0.9938659838243917, 
+                    0.9838159551171285, 
+                    0.9838159551171285, 
+                    0.9679376046957234, 
+                    0.9679376046957234, 
+                    0.945994973135243, 
+                    0.945994973135243, 
+                    0.9165023113747236, 
+                    0.9165023113747236, 
+                    0.8798324359141939, 
+                    0.8798324359141939, 
+                    0.8402500086878916, 
+                    0.8402500086878916, 
+                    0.7988393447823668, 
+                    0.7988393447823668, 
+                    0.7563139624887365, 
+                    0.7563139624887365, 
+                    0.714072589798337, 
+                    0.714072589798337, 
+                    0.6735679417675369, 
+                    0.6735679417675369, 
+                    0.6338776923345392, 
+                    0.6338776923345392, 
+                    0.594968812099727, 
+                    0.594968812099727, 
+                    0.55820429880761, 
+                    0.55820429880761, 
+                    0.5238568233425169, 
+                    0.5238568233425169, 
+                    0.4918213748974937, 
+                    0.4918213748974937, 
+                    0.4601028858529831, 
+                    0.4601028858529831, 
+                    0.43147111334708904, 
+                    0.43147111334708904, 
+                    0.4030066697330606, 
+                    0.4030066697330606, 
+                    0.37799599230759834, 
+                    0.37799599230759834, 
+                    0.3518309615231033, 
+                    0.3518309615231033, 
+                    0.32891899819924214, 
+                    0.32891899819924214, 
+                    0.30780959172903216, 
+                    0.30780959172903216, 
+                    0.28953503174902356, 
+                    0.28953503174902356, 
+                    0.2727355512643157, 
+                    0.2727355512643157, 
+                    0.25772974093612894, 
+                    0.25772974093612894, 
+                    0.24411936321543973, 
+                    0.24411936321543973, 
+                    0.23195993208415644, 
+                    0.23195993208415644, 
+                    0.22073095505047344, 
+                    0.22073095505047344, 
+                    0.2152597398241958, 
+                    0.2152597398241958, 
+                    0.2152597398241958, 
+                    0.2152597398241958, 
+                    0.21037878878177654, 
+                    0.21037878878177654, 
+                    0.1936335463009893, 
+                    0.1936335463009893, 
+                    0.17609702555835194, 
+                    0.17609702555835194, 
+                    0.15767693677328176, 
+                    0.15767693677328176, 
+                    0.13852021668781647, 
+                    0.13852021668781647, 
+                    0.11866060951153973, 
+                    0.11866060951153973, 
+                    0.10068679283539761, 
+                    0.10068679283539761
+                ], 
+                0.05172869935631752
+            ], 
+            [
+                1.0357142686843872, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999768772601947, 
+                    0.9999768772601947, 
+                    0.9998828437498936, 
+                    0.9998828437498936, 
+                    0.9939829764029185, 
+                    0.9939829764029185, 
+                    0.9841299594906684, 
+                    0.9841299594906684, 
+                    0.967979576755483, 
+                    0.967979576755483, 
+                    0.9456207145901213, 
+                    0.9456207145901213, 
+                    0.9151577473530548, 
+                    0.9151577473530548, 
+                    0.8777572444261519, 
+                    0.8777572444261519, 
+                    0.8377026337749645, 
+                    0.8377026337749645, 
+                    0.7960317169680515, 
+                    0.7960317169680515, 
+                    0.7533353402453167, 
+                    0.7533353402453167, 
+                    0.7109853147482555, 
+                    0.7109853147482555, 
+                    0.67048211426187, 
+                    0.67048211426187, 
+                    0.6306609909242789, 
+                    0.6306609909242789, 
+                    0.5921008503089498, 
+                    0.5921008503089498, 
+                    0.554670526129833, 
+                    0.554670526129833, 
+                    0.521498544931516, 
+                    0.521498544931516, 
+                    0.4883012022176074, 
+                    0.4883012022176074, 
+                    0.45785320023223974, 
+                    0.45785320023223974, 
+                    0.42841933152445716, 
+                    0.42841933152445716, 
+                    0.4006827134764315, 
+                    0.4006827134764315, 
+                    0.375449902911246, 
+                    0.375449902911246, 
+                    0.3495801778941373, 
+                    0.3495801778941373, 
+                    0.3267056009157934, 
+                    0.3267056009157934, 
+                    0.30575338771757893, 
+                    0.30575338771757893, 
+                    0.28757272957723246, 
+                    0.28757272957723246, 
+                    0.2708748247445963, 
+                    0.2708748247445963, 
+                    0.25595904003908393, 
+                    0.25595904003908393, 
+                    0.2424358225653849, 
+                    0.2424358225653849, 
+                    0.2303820504992778, 
+                    0.2303820504992778, 
+                    0.21909038263770933, 
+                    0.21909038263770933, 
+                    0.21427311798927404, 
+                    0.21427311798927404, 
+                    0.21427311798927404, 
+                    0.21427311798927404, 
+                    0.20902308647877016, 
+                    0.20902308647877016, 
+                    0.19271060333000026, 
+                    0.19271060333000026, 
+                    0.17545965094291774, 
+                    0.17545965094291774, 
+                    0.15725334106218491, 
+                    0.15725334106218491, 
+                    0.13826928390987753, 
+                    0.13826928390987753, 
+                    0.1185431041970432, 
+                    0.1185431041970432, 
+                    0.1006771705278559, 
+                    0.1006771705278559
+                ], 
+                0.048072703182697296
+            ], 
+            [
+                1.043008804321289, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999995971218489, 
+                    0.9999995971218489, 
+                    0.999843303253251, 
+                    0.999843303253251, 
+                    0.9942120456263922, 
+                    0.9942120456263922, 
+                    0.9845375416632661, 
+                    0.9845375416632661, 
+                    0.9685137780535668, 
+                    0.9685137780535668, 
+                    0.9453929756141389, 
+                    0.9453929756141389, 
+                    0.9138538412875074, 
+                    0.9138538412875074, 
+                    0.8755254492860352, 
+                    0.8755254492860352, 
+                    0.8351449668080952, 
+                    0.8351449668080952, 
+                    0.7932092231285114, 
+                    0.7932092231285114, 
+                    0.7503545307105782, 
+                    0.7503545307105782, 
+                    0.7079106050952578, 
+                    0.7079106050952578, 
+                    0.6673656273869435, 
+                    0.6673656273869435, 
+                    0.6274581029590411, 
+                    0.6274581029590411, 
+                    0.5890877958576767, 
+                    0.5890877958576767, 
+                    0.5514077861894954, 
+                    0.5514077861894954, 
+                    0.5187325920075083, 
+                    0.5187325920075083, 
+                    0.48522578104943803, 
+                    0.48522578104943803, 
+                    0.45510826712187713, 
+                    0.45510826712187713, 
+                    0.425828237838795, 
+                    0.425828237838795, 
+                    0.39793166830731674, 
+                    0.39793166830731674, 
+                    0.3732314373449433, 
+                    0.3732314373449433, 
+                    0.3470156717435977, 
+                    0.3470156717435977, 
+                    0.3247290155588383, 
+                    0.3247290155588383, 
+                    0.30358371081096597, 
+                    0.30358371081096597, 
+                    0.2856352227377946, 
+                    0.2856352227377946, 
+                    0.2690107697750355, 
+                    0.2690107697750355, 
+                    0.2541896480799579, 
+                    0.2541896480799579, 
+                    0.24074442389264689, 
+                    0.24074442389264689, 
+                    0.2287715774796418, 
+                    0.2287715774796418, 
+                    0.21789139109982514, 
+                    0.21789139109982514, 
+                    0.20991056638646588, 
+                    0.20991056638646588, 
+                    0.20991056638646588, 
+                    0.20991056638646588, 
+                    0.2071743385395383, 
+                    0.2071743385395383, 
+                    0.19135061450894938, 
+                    0.19135061450894938, 
+                    0.1746007326350637, 
+                    0.1746007326350637, 
+                    0.15679958248712247, 
+                    0.15679958248712247, 
+                    0.13811999162261468, 
+                    0.13811999162261468, 
+                    0.11858809657121697, 
+                    0.11858809657121697, 
+                    0.10078349015630039, 
+                    0.10078349015630039
+                ], 
+                0.04455149173736572
+            ], 
+            [
+                1.0503545999526978, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999891236705274, 
+                    0.999891236705274, 
+                    0.9937281217525773, 
+                    0.9937281217525773, 
+                    0.9834418581690717, 
+                    0.9834418581690717, 
+                    0.9668592165647308, 
+                    0.9668592165647308, 
+                    0.9434475522447671, 
+                    0.9434475522447671, 
+                    0.9116819442437845, 
+                    0.9116819442437845, 
+                    0.8732207778264531, 
+                    0.8732207778264531, 
+                    0.8325542689231078, 
+                    0.8325542689231078, 
+                    0.7903721640605521, 
+                    0.7903721640605521, 
+                    0.7473694562494398, 
+                    0.7473694562494398, 
+                    0.7048278115756711, 
+                    0.7048278115756711, 
+                    0.6641965900349946, 
+                    0.6641965900349946, 
+                    0.6244703684041906, 
+                    0.6244703684041906, 
+                    0.5856610247738413, 
+                    0.5856610247738413, 
+                    0.5489584925356535, 
+                    0.5489584925356535, 
+                    0.5150766865502459, 
+                    0.5150766865502459, 
+                    0.4829883840716463, 
+                    0.4829883840716463, 
+                    0.4519407513648626, 
+                    0.4519407513648626, 
+                    0.4233298151199825, 
+                    0.4233298151199825, 
+                    0.3954610762184764, 
+                    0.3954610762184764, 
+                    0.37066904668162004, 
+                    0.37066904668162004, 
+                    0.34496495471722505, 
+                    0.34496495471722505, 
+                    0.32238589131883094, 
+                    0.32238589131883094, 
+                    0.3016472803644882, 
+                    0.3016472803644882, 
+                    0.2836855517266309, 
+                    0.2836855517266309, 
+                    0.2671861334163389, 
+                    0.2671861334163389, 
+                    0.2524561401245891, 
+                    0.2524561401245891, 
+                    0.23910149230913796, 
+                    0.23910149230913796, 
+                    0.22717314929616378, 
+                    0.22717314929616378, 
+                    0.21601131841308996, 
+                    0.21601131841308996, 
+                    0.210828002091527, 
+                    0.210828002091527, 
+                    0.210828002091527, 
+                    0.210828002091527, 
+                    0.2079051334647948, 
+                    0.2079051334647948, 
+                    0.19163133657912054, 
+                    0.19163133657912054, 
+                    0.17442290387450246, 
+                    0.17442290387450246, 
+                    0.1563130980593666, 
+                    0.1563130980593666, 
+                    0.13748496264417462, 
+                    0.13748496264417462, 
+                    0.11797026228914408, 
+                    0.11797026228914408, 
+                    0.10052304356628158, 
+                    0.10052304356628158
+                ], 
+                0.04135528951883316
+            ], 
+            [
+                1.057752251625061, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999720403205405, 
+                    0.9999720403205405, 
+                    0.9998499532923174, 
+                    0.9998499532923174, 
+                    0.9936771448566757, 
+                    0.9936771448566757, 
+                    0.9832819857604933, 
+                    0.9832819857604933, 
+                    0.9662993377839949, 
+                    0.9662993377839949, 
+                    0.9424473650535082, 
+                    0.9424473650535082, 
+                    0.9099941952894024, 
+                    0.9099941952894024, 
+                    0.870910051780143, 
+                    0.870910051780143, 
+                    0.8299261060375572, 
+                    0.8299261060375572, 
+                    0.7875230020865307, 
+                    0.7875230020865307, 
+                    0.7443527220651893, 
+                    0.7443527220651893, 
+                    0.7017140602892338, 
+                    0.7017140602892338, 
+                    0.6611001673008366, 
+                    0.6611001673008366, 
+                    0.6212382323739835, 
+                    0.6212382323739835, 
+                    0.5827958607503462, 
+                    0.5827958607503462, 
+                    0.5455070574360523, 
+                    0.5455070574360523, 
+                    0.5125789033494222, 
+                    0.5125789033494222, 
+                    0.47970032558390585, 
+                    0.47970032558390585, 
+                    0.4494841950609678, 
+                    0.4494841950609678, 
+                    0.4204966389014038, 
+                    0.4204966389014038, 
+                    0.39303477692019606, 
+                    0.39303477692019606, 
+                    0.36822774748425435, 
+                    0.36822774748425435, 
+                    0.34270803429643143, 
+                    0.34270803429643143, 
+                    0.3202300940579365, 
+                    0.3202300940579365, 
+                    0.2996180047602641, 
+                    0.2996180047602641, 
+                    0.28175910096695334, 
+                    0.28175910096695334, 
+                    0.2653592910563369, 
+                    0.2653592910563369, 
+                    0.250720161602648, 
+                    0.250720161602648, 
+                    0.23744999616465282, 
+                    0.23744999616465282, 
+                    0.22560746657116942, 
+                    0.22560746657116942, 
+                    0.2145812532396992, 
+                    0.2145812532396992, 
+                    0.20869009948363257, 
+                    0.20869009948363257, 
+                    0.20869009948363257, 
+                    0.20869009948363257, 
+                    0.2080352706953062, 
+                    0.2080352706953062, 
+                    0.19147697485274134, 
+                    0.19147697485274134, 
+                    0.1741874510075606, 
+                    0.1741874510075606, 
+                    0.15607186510069473, 
+                    0.15607186510069473, 
+                    0.1372774433362422, 
+                    0.1372774433362422, 
+                    0.11782076540887072, 
+                    0.11782076540887072, 
+                    0.10049767146497465, 
+                    0.10049767146497465
+                ], 
+                0.03829619288444519
+            ], 
+            [
+                1.0652018785476685, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998797760864161, 
+                    0.9998797760864161, 
+                    0.9937058751728874, 
+                    0.9937058751728874, 
+                    0.9831757787610917, 
+                    0.9831757787610917, 
+                    0.9658422463533759, 
+                    0.9658422463533759, 
+                    0.9413898637546334, 
+                    0.9413898637546334, 
+                    0.908132138693137, 
+                    0.908132138693137, 
+                    0.8685729447687537, 
+                    0.8685729447687537, 
+                    0.8272712607987817, 
+                    0.8272712607987817, 
+                    0.7846601933175612, 
+                    0.7846601933175612, 
+                    0.7413419205555525, 
+                    0.7413419205555525, 
+                    0.6986195231133376, 
+                    0.6986195231133376, 
+                    0.657922510815011, 
+                    0.657922510815011, 
+                    0.6181958339007562, 
+                    0.6181958339007562, 
+                    0.5794767681259573, 
+                    0.5794767681259573, 
+                    0.5428341195459442, 
+                    0.5428341195459442, 
+                    0.5092249101131622, 
+                    0.5092249101131622, 
+                    0.477188859197579, 
+                    0.477188859197579, 
+                    0.4464909451144128, 
+                    0.4464909451144128, 
+                    0.41800688159786553, 
+                    0.41800688159786553, 
+                    0.39045577965750444, 
+                    0.39045577965750444, 
+                    0.3658672106943581, 
+                    0.3658672106943581, 
+                    0.34044140316683086, 
+                    0.34044140316683086, 
+                    0.31810083081492224, 
+                    0.31810083081492224, 
+                    0.29760075882414466, 
+                    0.29760075882414466, 
+                    0.2798471956655491, 
+                    0.2798471956655491, 
+                    0.2635441684817754, 
+                    0.2635441684817754, 
+                    0.24899209219186175, 
+                    0.24899209219186175, 
+                    0.23582518403423064, 
+                    0.23582518403423064, 
+                    0.22423387668447778, 
+                    0.22423387668447778, 
+                    0.21319527572045557, 
+                    0.21319527572045557, 
+                    0.20784514728145895, 
+                    0.20784514728145895, 
+                    0.20784514728145895, 
+                    0.20784514728145895, 
+                    0.20784514728145895, 
+                    0.20784514728145895, 
+                    0.19121413103305582, 
+                    0.19121413103305582, 
+                    0.1738920882355166, 
+                    0.1738920882355166, 
+                    0.1557751407999378, 
+                    0.1557751407999378, 
+                    0.1370138605677306, 
+                    0.1370138605677306, 
+                    0.11761998507950704, 
+                    0.11761998507950704, 
+                    0.10044354624469334, 
+                    0.10044354624469334
+                ], 
+                0.03545995429158211
+            ], 
+            [
+                1.0727040767669678, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999885600083012, 
+                    0.9999885600083012, 
+                    0.999871677344475, 
+                    0.999871677344475, 
+                    0.9933807046986151, 
+                    0.9933807046986151, 
+                    0.9826708587358249, 
+                    0.9826708587358249, 
+                    0.964887632740335, 
+                    0.964887632740335, 
+                    0.9399996469569595, 
+                    0.9399996469569595, 
+                    0.9062170433317458, 
+                    0.9062170433317458, 
+                    0.8662175186811065, 
+                    0.8662175186811065, 
+                    0.8246059498090855, 
+                    0.8246059498090855, 
+                    0.7817805532640105, 
+                    0.7817805532640105, 
+                    0.7383141341786525, 
+                    0.7383141341786525, 
+                    0.6955047345869738, 
+                    0.6955047345869738, 
+                    0.6548173017818089, 
+                    0.6548173017818089, 
+                    0.6149411852939698, 
+                    0.6149411852939698, 
+                    0.5766197814262123, 
+                    0.5766197814262123, 
+                    0.5393978604969295, 
+                    0.5393978604969295, 
+                    0.5067092290090031, 
+                    0.5067092290090031, 
+                    0.47398399033287786, 
+                    0.47398399033287786, 
+                    0.4439994481345231, 
+                    0.4439994481345231, 
+                    0.41524816390092817, 
+                    0.41524816390092817, 
+                    0.3880265056476077, 
+                    0.3880265056476077, 
+                    0.3634675610086868, 
+                    0.3634675610086868, 
+                    0.3382073094545964, 
+                    0.3382073094545964, 
+                    0.3159785410473941, 
+                    0.3159785410473941, 
+                    0.29560049711130515, 
+                    0.29560049711130515, 
+                    0.2779519641386736, 
+                    0.2779519641386736, 
+                    0.26175053366716144, 
+                    0.26175053366716144, 
+                    0.2472951804338642, 
+                    0.2472951804338642, 
+                    0.23419864787050693, 
+                    0.23419864787050693, 
+                    0.22250284204385662, 
+                    0.22250284204385662, 
+                    0.21168397137430134, 
+                    0.21168397137430134, 
+                    0.2064465058068598, 
+                    0.2064465058068598, 
+                    0.2064465058068598, 
+                    0.2064465058068598, 
+                    0.2064465058068598, 
+                    0.2064465058068598, 
+                    0.19159222507211734, 
+                    0.19159222507211734, 
+                    0.17396237707494366, 
+                    0.17396237707494366, 
+                    0.155678041097559, 
+                    0.155678041097559, 
+                    0.13683867537372246, 
+                    0.13683867537372246, 
+                    0.11743937153433935, 
+                    0.11743937153433935, 
+                    0.10038464243943455, 
+                    0.10038464243943455
+                ], 
+                0.03276944160461426
+            ]
+        ]
+    }, 
+    {
+        "block_size": 85, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9329803586006165, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998824310680682, 
+                    0.9998824310680682, 
+                    0.994391618561741, 
+                    0.994391618561741, 
+                    0.9858308360821099, 
+                    0.9858308360821099, 
+                    0.971538257918037, 
+                    0.971538257918037, 
+                    0.9515691059819076, 
+                    0.9515691059819076, 
+                    0.9252372409886835, 
+                    0.9252372409886835, 
+                    0.8927295422963532, 
+                    0.8927295422963532, 
+                    0.8553123235357271, 
+                    0.8553123235357271, 
+                    0.81767359912401, 
+                    0.81767359912401, 
+                    0.7785626800474836, 
+                    0.7785626800474836, 
+                    0.7384018043093091, 
+                    0.7384018043093091, 
+                    0.6985817378144071, 
+                    0.6985817378144071, 
+                    0.6589564741534089, 
+                    0.6589564741534089, 
+                    0.6202279990326978, 
+                    0.6202279990326978, 
+                    0.5828926056046748, 
+                    0.5828926056046748, 
+                    0.5469060425302801, 
+                    0.5469060425302801, 
+                    0.513162105440664, 
+                    0.513162105440664, 
+                    0.4815192197626296, 
+                    0.4815192197626296, 
+                    0.45030575372496984, 
+                    0.45030575372496984, 
+                    0.4212176580313218, 
+                    0.4212176580313218, 
+                    0.39250896965537163, 
+                    0.39250896965537163, 
+                    0.36648627939992656, 
+                    0.36648627939992656, 
+                    0.34163211683913686, 
+                    0.34163211683913686, 
+                    0.32026537302249, 
+                    0.32026537302249, 
+                    0.30125861869255144, 
+                    0.30125861869255144, 
+                    0.2833525071579159, 
+                    0.2833525071579159, 
+                    0.2674519799048784, 
+                    0.2674519799048784, 
+                    0.2529642404648244, 
+                    0.2529642404648244, 
+                    0.23996046013595618, 
+                    0.23996046013595618, 
+                    0.22845597461928063, 
+                    0.22845597461928063, 
+                    0.22036532304542342, 
+                    0.22036532304542342, 
+                    0.22036532304542342, 
+                    0.22036532304542342, 
+                    0.2128865656560484, 
+                    0.2128865656560484, 
+                    0.1967999344777792, 
+                    0.1967999344777792, 
+                    0.17941991842498678, 
+                    0.17941991842498678, 
+                    0.1608458418959409, 
+                    0.1608458418959409, 
+                    0.14128050955628652, 
+                    0.14128050955628652, 
+                    0.12076473957074461, 
+                    0.12076473957074461, 
+                    0.10112781830400829, 
+                    0.10112781830400829
+                ], 
+                0.08051932603120804
+            ], 
+            [
+                0.9394750595092773, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999503283267336, 
+                    0.9999503283267336, 
+                    0.9995897145591007, 
+                    0.9995897145591007, 
+                    0.9944317692600123, 
+                    0.9944317692600123, 
+                    0.9856432826411139, 
+                    0.9856432826411139, 
+                    0.971383526910969, 
+                    0.971383526910969, 
+                    0.950787656971303, 
+                    0.950787656971303, 
+                    0.9240113000770264, 
+                    0.9240113000770264, 
+                    0.890697352434068, 
+                    0.890697352434068, 
+                    0.8528873618678334, 
+                    0.8528873618678334, 
+                    0.815151374333881, 
+                    0.815151374333881, 
+                    0.7757699104284362, 
+                    0.7757699104284362, 
+                    0.7354293113150651, 
+                    0.7354293113150651, 
+                    0.6955482602758184, 
+                    0.6955482602758184, 
+                    0.6558836841543884, 
+                    0.6558836841543884, 
+                    0.6172332971484488, 
+                    0.6172332971484488, 
+                    0.579883718118594, 
+                    0.579883718118594, 
+                    0.5438128687708116, 
+                    0.5438128687708116, 
+                    0.5104406093423106, 
+                    0.5104406093423106, 
+                    0.4784341704554144, 
+                    0.4784341704554144, 
+                    0.4480140565521989, 
+                    0.4480140565521989, 
+                    0.4180395431906682, 
+                    0.4180395431906682, 
+                    0.39077339792512256, 
+                    0.39077339792512256, 
+                    0.3633582412135916, 
+                    0.3633582412135916, 
+                    0.33996085386808983, 
+                    0.33996085386808983, 
+                    0.31791757878992677, 
+                    0.31791757878992677, 
+                    0.2992983829889002, 
+                    0.2992983829889002, 
+                    0.2814315089916564, 
+                    0.2814315089916564, 
+                    0.26562932207038475, 
+                    0.26562932207038475, 
+                    0.25122084640267606, 
+                    0.25122084640267606, 
+                    0.23831499649761104, 
+                    0.23831499649761104, 
+                    0.22711006842984624, 
+                    0.22711006842984624, 
+                    0.21862324984122344, 
+                    0.21862324984122344, 
+                    0.21862324984122344, 
+                    0.21862324984122344, 
+                    0.21298518892616977, 
+                    0.21298518892616977, 
+                    0.1966497338353695, 
+                    0.1966497338353695, 
+                    0.17922774970221844, 
+                    0.17922774970221844, 
+                    0.1606658419590242, 
+                    0.1606658419590242, 
+                    0.14113716622671085, 
+                    0.14113716622671085, 
+                    0.12067086800838218, 
+                    0.12067086800838218, 
+                    0.10109845720197615, 
+                    0.10109845720197615
+                ], 
+                0.07542996853590012
+            ], 
+            [
+                0.946014940738678, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997324043938951, 
+                    0.9997324043938951, 
+                    0.9943495702527781, 
+                    0.9943495702527781, 
+                    0.9854245117086087, 
+                    0.9854245117086087, 
+                    0.9713059941109506, 
+                    0.9713059941109506, 
+                    0.950509290742675, 
+                    0.950509290742675, 
+                    0.9227846741192154, 
+                    0.9227846741192154, 
+                    0.8888600137158127, 
+                    0.8888600137158127, 
+                    0.850506187443595, 
+                    0.850506187443595, 
+                    0.8124156673798465, 
+                    0.8124156673798465, 
+                    0.7729029652160655, 
+                    0.7729029652160655, 
+                    0.7324928348419543, 
+                    0.7324928348419543, 
+                    0.6924897864430268, 
+                    0.6924897864430268, 
+                    0.6528553985448505, 
+                    0.6528553985448505, 
+                    0.6141348215574354, 
+                    0.6141348215574354, 
+                    0.5767426058621206, 
+                    0.5767426058621206, 
+                    0.5411082664835074, 
+                    0.5411082664835074, 
+                    0.507176485586252, 
+                    0.507176485586252, 
+                    0.476064687029641, 
+                    0.476064687029641, 
+                    0.44484958183903894, 
+                    0.44484958183903894, 
+                    0.41595504454497134, 
+                    0.41595504454497134, 
+                    0.38784141561105095, 
+                    0.38784141561105095, 
+                    0.36143667500013366, 
+                    0.36143667500013366, 
+                    0.33749918823932135, 
+                    0.33749918823932135, 
+                    0.31590189221133996, 
+                    0.31590189221133996, 
+                    0.2972741971938279, 
+                    0.2972741971938279, 
+                    0.27953586978718076, 
+                    0.27953586978718076, 
+                    0.26383096072291184, 
+                    0.26383096072291184, 
+                    0.2495203717551374, 
+                    0.2495203717551374, 
+                    0.23668813766284164, 
+                    0.23668813766284164, 
+                    0.22546199634951702, 
+                    0.22546199634951702, 
+                    0.21640101722273786, 
+                    0.21640101722273786, 
+                    0.21640101722273786, 
+                    0.21640101722273786, 
+                    0.21170778350390743, 
+                    0.21170778350390743, 
+                    0.1957049907539105, 
+                    0.1957049907539105, 
+                    0.17849365867173897, 
+                    0.17849365867173897, 
+                    0.16010615466934103, 
+                    0.16010615466934103, 
+                    0.14073639933006232, 
+                    0.14073639933006232, 
+                    0.1204180794122514, 
+                    0.1204180794122514, 
+                    0.10105046167596128, 
+                    0.10105046167596128
+                ], 
+                0.0705520287156105
+            ], 
+            [
+                0.9526004195213318, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999244335119492, 
+                    0.9999244335119492, 
+                    0.9997929656177081, 
+                    0.9997929656177081, 
+                    0.9946441796039972, 
+                    0.9946441796039972, 
+                    0.9854970678929267, 
+                    0.9854970678929267, 
+                    0.9709107059449648, 
+                    0.9709107059449648, 
+                    0.9498548434280603, 
+                    0.9498548434280603, 
+                    0.9216188420127657, 
+                    0.9216188420127657, 
+                    0.8868488684929129, 
+                    0.8868488684929129, 
+                    0.8480456365390329, 
+                    0.8480456365390329, 
+                    0.8097503734955409, 
+                    0.8097503734955409, 
+                    0.7700710002312241, 
+                    0.7700710002312241, 
+                    0.7294757668642523, 
+                    0.7294757668642523, 
+                    0.6894450794770343, 
+                    0.6894450794770343, 
+                    0.6497242652209488, 
+                    0.6497242652209488, 
+                    0.6110062518369302, 
+                    0.6110062518369302, 
+                    0.5737261604159334, 
+                    0.5737261604159334, 
+                    0.5380894745779974, 
+                    0.5380894745779974, 
+                    0.5044407520242881, 
+                    0.5044407520242881, 
+                    0.47321087366991377, 
+                    0.47321087366991377, 
+                    0.4422624080060071, 
+                    0.4422624080060071, 
+                    0.41348337201239777, 
+                    0.41348337201239777, 
+                    0.385334520307926, 
+                    0.385334520307926, 
+                    0.3593776701608153, 
+                    0.3593776701608153, 
+                    0.33512821177049057, 
+                    0.33512821177049057, 
+                    0.31394304632774117, 
+                    0.31394304632774117, 
+                    0.2954204111636325, 
+                    0.2954204111636325, 
+                    0.27793280533689085, 
+                    0.27793280533689085, 
+                    0.2619250316734049, 
+                    0.2619250316734049, 
+                    0.2477367393005552, 
+                    0.2477367393005552, 
+                    0.23536624058563843, 
+                    0.23536624058563843, 
+                    0.22378265665339897, 
+                    0.22378265665339897, 
+                    0.21479795407768082, 
+                    0.21479795407768082, 
+                    0.2147807275990276, 
+                    0.2147807275990276, 
+                    0.21082440311056483, 
+                    0.21082440311056483, 
+                    0.1950607692152879, 
+                    0.1950607692152879, 
+                    0.17802707107096263, 
+                    0.17802707107096263, 
+                    0.15978240201768246, 
+                    0.15978240201768246, 
+                    0.1405348292369548, 
+                    0.1405348292369548, 
+                    0.12031682961458465, 
+                    0.12031682961458465, 
+                    0.10103019167020666, 
+                    0.10103019167020666
+                ], 
+                0.06605363637208939
+            ], 
+            [
+                0.9592316746711731, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999842971076771, 
+                    0.999842971076771, 
+                    0.9941468470907916, 
+                    0.9941468470907916, 
+                    0.9847878997229071, 
+                    0.9847878997229071, 
+                    0.9696893138353513, 
+                    0.9696893138353513, 
+                    0.9481571320313502, 
+                    0.9481571320313502, 
+                    0.9194774543394605, 
+                    0.9194774543394605, 
+                    0.884577154102252, 
+                    0.884577154102252, 
+                    0.8455746107646781, 
+                    0.8455746107646781, 
+                    0.8070285528821229, 
+                    0.8070285528821229, 
+                    0.7671998938444765, 
+                    0.7671998938444765, 
+                    0.7264700844616778, 
+                    0.7264700844616778, 
+                    0.6863871423064452, 
+                    0.6863871423064452, 
+                    0.6466715710847049, 
+                    0.6466715710847049, 
+                    0.6080068957170341, 
+                    0.6080068957170341, 
+                    0.5707281457091666, 
+                    0.5707281457091666, 
+                    0.5351551077187918, 
+                    0.5351551077187918, 
+                    0.5014504708434216, 
+                    0.5014504708434216, 
+                    0.4705241039076669, 
+                    0.4705241039076669, 
+                    0.4393732935388037, 
+                    0.4393732935388037, 
+                    0.41108416010926624, 
+                    0.41108416010926624, 
+                    0.38254141412033127, 
+                    0.38254141412033127, 
+                    0.3572765407435243, 
+                    0.3572765407435243, 
+                    0.33272588511511025, 
+                    0.33272588511511025, 
+                    0.3119046474617601, 
+                    0.3119046474617601, 
+                    0.2932776738741511, 
+                    0.2932776738741511, 
+                    0.2757840613158211, 
+                    0.2757840613158211, 
+                    0.2602610033160882, 
+                    0.2602610033160882, 
+                    0.24612466029380053, 
+                    0.24612466029380053, 
+                    0.23344026679776478, 
+                    0.23344026679776478, 
+                    0.22225907235303988, 
+                    0.22225907235303988, 
+                    0.21430914025257422, 
+                    0.21430914025257422, 
+                    0.21430914025257422, 
+                    0.21430914025257422, 
+                    0.2076231013834018, 
+                    0.2076231013834018, 
+                    0.1924284899863702, 
+                    0.1924284899863702, 
+                    0.17574659133251552, 
+                    0.17574659133251552, 
+                    0.1578262948844018, 
+                    0.1578262948844018, 
+                    0.13892761742101953, 
+                    0.13892761742101953, 
+                    0.11912734370612957, 
+                    0.11912734370612957, 
+                    0.10090905178849183, 
+                    0.10090905178849183
+                ], 
+                0.06159398704767227
+            ], 
+            [
+                0.9659090638160706, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999935692144166, 
+                    0.9999935692144166, 
+                    0.9999319808484246, 
+                    0.9999319808484246, 
+                    0.9943027076014654, 
+                    0.9943027076014654, 
+                    0.9844842840033838, 
+                    0.9844842840033838, 
+                    0.9689558856000835, 
+                    0.9689558856000835, 
+                    0.947015689617439, 
+                    0.947015689617439, 
+                    0.9176300242901584, 
+                    0.9176300242901584, 
+                    0.8823887431568609, 
+                    0.8823887431568609, 
+                    0.8430400581104608, 
+                    0.8430400581104608, 
+                    0.8042472171638329, 
+                    0.8042472171638329, 
+                    0.764301068079576, 
+                    0.764301068079576, 
+                    0.7235070097966925, 
+                    0.7235070097966925, 
+                    0.6833032755595863, 
+                    0.6833032755595863, 
+                    0.6435962213221756, 
+                    0.6435962213221756, 
+                    0.6049418020324443, 
+                    0.6049418020324443, 
+                    0.5676938971764344, 
+                    0.5676938971764344, 
+                    0.5321836832775341, 
+                    0.5321836832775341, 
+                    0.49860185955535746, 
+                    0.49860185955535746, 
+                    0.4677383930879899, 
+                    0.4677383930879899, 
+                    0.4367176125707636, 
+                    0.4367176125707636, 
+                    0.40855461479489535, 
+                    0.40855461479489535, 
+                    0.3800848766951658, 
+                    0.3800848766951658, 
+                    0.3550163871579379, 
+                    0.3550163871579379, 
+                    0.3305182881646435, 
+                    0.3305182881646435, 
+                    0.3098559049779109, 
+                    0.3098559049779109, 
+                    0.2913137691033283, 
+                    0.2913137691033283, 
+                    0.2739247051053341, 
+                    0.2739247051053341, 
+                    0.25849427064553865, 
+                    0.25849427064553865, 
+                    0.24444426197445102, 
+                    0.24444426197445102, 
+                    0.23183709667136307, 
+                    0.23183709667136307, 
+                    0.22072563610388735, 
+                    0.22072563610388735, 
+                    0.21307087034468739, 
+                    0.21307087034468739, 
+                    0.21307087034468739, 
+                    0.21307087034468739, 
+                    0.20730105496960236, 
+                    0.20730105496960236, 
+                    0.19196175346217714, 
+                    0.19196175346217714, 
+                    0.17522181355317334, 
+                    0.17522181355317334, 
+                    0.15730529172768007, 
+                    0.15730529172768007, 
+                    0.13846233212565845, 
+                    0.13846233212565845, 
+                    0.11876608479632955, 
+                    0.11876608479632955, 
+                    0.10080708729026817, 
+                    0.10080708729026817
+                ], 
+                0.05747279152274132
+            ], 
+            [
+                0.9726330041885376, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999962801223122, 
+                    0.9999962801223122, 
+                    0.9998046151781157, 
+                    0.9998046151781157, 
+                    0.9941762721614437, 
+                    0.9941762721614437, 
+                    0.9844277686780375, 
+                    0.9844277686780375, 
+                    0.9685199387852307, 
+                    0.9685199387852307, 
+                    0.946122209334958, 
+                    0.946122209334958, 
+                    0.9160118965512021, 
+                    0.9160118965512021, 
+                    0.8802728749952082, 
+                    0.8802728749952082, 
+                    0.8405227653167552, 
+                    0.8405227653167552, 
+                    0.8015319538288405, 
+                    0.8015319538288405, 
+                    0.761388286279814, 
+                    0.761388286279814, 
+                    0.7204765731042702, 
+                    0.7204765731042702, 
+                    0.6802407129949885, 
+                    0.6802407129949885, 
+                    0.6405184831600882, 
+                    0.6405184831600882, 
+                    0.6018434129889766, 
+                    0.6018434129889766, 
+                    0.5647168656928362, 
+                    0.5647168656928362, 
+                    0.5291623719313636, 
+                    0.5291623719313636, 
+                    0.49585976685354116, 
+                    0.49585976685354116, 
+                    0.4648391996571202, 
+                    0.4648391996571202, 
+                    0.4342376018349201, 
+                    0.4342376018349201, 
+                    0.4058079033556326, 
+                    0.4058079033556326, 
+                    0.3779135636983803, 
+                    0.3779135636983803, 
+                    0.35250416173096494, 
+                    0.35250416173096494, 
+                    0.32850790776588834, 
+                    0.32850790776588834, 
+                    0.3077357422686206, 
+                    0.3077357422686206, 
+                    0.28937606589474013, 
+                    0.28937606589474013, 
+                    0.272072556480409, 
+                    0.272072556480409, 
+                    0.2567372512315099, 
+                    0.2567372512315099, 
+                    0.24277409727985333, 
+                    0.24277409727985333, 
+                    0.23025921166241575, 
+                    0.23025921166241575, 
+                    0.2192906081561313, 
+                    0.2192906081561313, 
+                    0.21075726256732966, 
+                    0.21075726256732966, 
+                    0.21075726256732966, 
+                    0.21075726256732966, 
+                    0.2082561757945175, 
+                    0.2082561757945175, 
+                    0.19217434812788553, 
+                    0.19217434812788553, 
+                    0.17520121191311358, 
+                    0.17520121191311358, 
+                    0.15719863218818578, 
+                    0.15719863218818578, 
+                    0.13833583526331356, 
+                    0.13833583526331356, 
+                    0.11865946093270033, 
+                    0.11865946093270033, 
+                    0.10077216641698965, 
+                    0.10077216641698965
+                ], 
+                0.0535530149936676
+            ], 
+            [
+                0.9794037342071533, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999852711223043, 
+                    0.9999852711223043, 
+                    0.9999391298668215, 
+                    0.9999391298668215, 
+                    0.9939281226278169, 
+                    0.9939281226278169, 
+                    0.9842645490907133, 
+                    0.9842645490907133, 
+                    0.9682259896519122, 
+                    0.9682259896519122, 
+                    0.9449612665171865, 
+                    0.9449612665171865, 
+                    0.9143775601434613, 
+                    0.9143775601434613, 
+                    0.8780423924638976, 
+                    0.8780423924638976, 
+                    0.8379789104104245, 
+                    0.8379789104104245, 
+                    0.7987971927945217, 
+                    0.7987971927945217, 
+                    0.7584572068581258, 
+                    0.7584572068581258, 
+                    0.7174074307351868, 
+                    0.7174074307351868, 
+                    0.6771536417149311, 
+                    0.6771536417149311, 
+                    0.6374449386935723, 
+                    0.6374449386935723, 
+                    0.5986413454636785, 
+                    0.5986413454636785, 
+                    0.5619725520316414, 
+                    0.5619725520316414, 
+                    0.5257688876052514, 
+                    0.5257688876052514, 
+                    0.4935302118969481, 
+                    0.4935302118969481, 
+                    0.4616548431807767, 
+                    0.4616548431807767, 
+                    0.43187478694289283, 
+                    0.43187478694289283, 
+                    0.4031463755338447, 
+                    0.4031463755338447, 
+                    0.37552840268629206, 
+                    0.37552840268629206, 
+                    0.3502883084812824, 
+                    0.3502883084812824, 
+                    0.3262837489096156, 
+                    0.3262837489096156, 
+                    0.3057363071469908, 
+                    0.3057363071469908, 
+                    0.2874323887732003, 
+                    0.2874323887732003, 
+                    0.2702394922570902, 
+                    0.2702394922570902, 
+                    0.25499862027885256, 
+                    0.25499862027885256, 
+                    0.24112563568905365, 
+                    0.24112563568905365, 
+                    0.22868675077481435, 
+                    0.22868675077481435, 
+                    0.2177231751154483, 
+                    0.2177231751154483, 
+                    0.20899200738119728, 
+                    0.20899200738119728, 
+                    0.20899200738119728, 
+                    0.20899200738119728, 
+                    0.2080577642574905, 
+                    0.2080577642574905, 
+                    0.19179513542241472, 
+                    0.19179513542241472, 
+                    0.17475905251253074, 
+                    0.17475905251253074, 
+                    0.15676383198805552, 
+                    0.15676383198805552, 
+                    0.137955332934923, 
+                    0.137955332934923, 
+                    0.11837119907743182, 
+                    0.11837119907743182, 
+                    0.10068651696057887, 
+                    0.10068651696057887
+                ], 
+                0.04984930530190468
+            ], 
+            [
+                0.9862215518951416, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999840281607021, 
+                    0.9999840281607021, 
+                    0.9998544174976238, 
+                    0.9998544174976238, 
+                    0.9937165053078143, 
+                    0.9937165053078143, 
+                    0.9836753748786159, 
+                    0.9836753748786159, 
+                    0.9672357026477941, 
+                    0.9672357026477941, 
+                    0.9436269338997042, 
+                    0.9436269338997042, 
+                    0.9125195776645221, 
+                    0.9125195776645221, 
+                    0.8757758445973771, 
+                    0.8757758445973771, 
+                    0.8353923582230303, 
+                    0.8353923582230303, 
+                    0.7959767679200005, 
+                    0.7959767679200005, 
+                    0.7555159535067505, 
+                    0.7555159535067505, 
+                    0.7144194507258308, 
+                    0.7144194507258308, 
+                    0.6740790661863083, 
+                    0.6740790661863083, 
+                    0.6343400374764415, 
+                    0.6343400374764415, 
+                    0.59566796384099, 
+                    0.59566796384099, 
+                    0.558794004403217, 
+                    0.558794004403217, 
+                    0.5231030135453657, 
+                    0.5231030135453657, 
+                    0.4904156124679894, 
+                    0.4904156124679894, 
+                    0.45910113767468286, 
+                    0.45910113767468286, 
+                    0.4292097930601036, 
+                    0.4292097930601036, 
+                    0.40054163129543724, 
+                    0.40054163129543724, 
+                    0.3733678684497435, 
+                    0.3733678684497435, 
+                    0.34777487592107653, 
+                    0.34777487592107653, 
+                    0.32435207971977226, 
+                    0.32435207971977226, 
+                    0.30362572289715517, 
+                    0.30362572289715517, 
+                    0.2855330394118151, 
+                    0.2855330394118151, 
+                    0.2684193296726302, 
+                    0.2684193296726302, 
+                    0.2532723743199109, 
+                    0.2532723743199109, 
+                    0.23948388499228218, 
+                    0.23948388499228218, 
+                    0.22710341216435026, 
+                    0.22710341216435026, 
+                    0.2161579608411813, 
+                    0.2161579608411813, 
+                    0.20932161369798405, 
+                    0.20932161369798405, 
+                    0.20932161369798405, 
+                    0.20932161369798405, 
+                    0.20752351737002406, 
+                    0.20752351737002406, 
+                    0.19137544706255094, 
+                    0.19137544706255094, 
+                    0.17428243121998527, 
+                    0.17428243121998527, 
+                    0.15624778463694425, 
+                    0.15624778463694425, 
+                    0.13745766898158276, 
+                    0.13745766898158276, 
+                    0.11795969452563047, 
+                    0.11795969452563047, 
+                    0.10054147377408412, 
+                    0.10054147377408412
+                ], 
+                0.046428047120571136
+            ], 
+            [
+                0.9930868744850159, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999928690353795, 
+                    0.9999928690353795, 
+                    0.9937054665455927, 
+                    0.9937054665455927, 
+                    0.9834255665448447, 
+                    0.9834255665448447, 
+                    0.9667052353998139, 
+                    0.9667052353998139, 
+                    0.9425260864097713, 
+                    0.9425260864097713, 
+                    0.9107582769448347, 
+                    0.9107582769448347, 
+                    0.8734923455844464, 
+                    0.8734923455844464, 
+                    0.8328184970146135, 
+                    0.8328184970146135, 
+                    0.7931828331431647, 
+                    0.7931828331431647, 
+                    0.7525658149448784, 
+                    0.7525658149448784, 
+                    0.7113740238462662, 
+                    0.7113740238462662, 
+                    0.6709848731094121, 
+                    0.6709848731094121, 
+                    0.6312477586011122, 
+                    0.6312477586011122, 
+                    0.5926155570325835, 
+                    0.5926155570325835, 
+                    0.5557632192737321, 
+                    0.5557632192737321, 
+                    0.5202220448253034, 
+                    0.5202220448253034, 
+                    0.48751256931973846, 
+                    0.48751256931973846, 
+                    0.4564325364051366, 
+                    0.4564325364051366, 
+                    0.4265223712271399, 
+                    0.4265223712271399, 
+                    0.3981034780557068, 
+                    0.3981034780557068, 
+                    0.37092464507168404, 
+                    0.37092464507168404, 
+                    0.34557967793850314, 
+                    0.34557967793850314, 
+                    0.32218788059766473, 
+                    0.32218788059766473, 
+                    0.3016269171683566, 
+                    0.3016269171683566, 
+                    0.2836189383587259, 
+                    0.2836189383587259, 
+                    0.2666096834048484, 
+                    0.2666096834048484, 
+                    0.25155483626186786, 
+                    0.25155483626186786, 
+                    0.23785324670129848, 
+                    0.23785324670129848, 
+                    0.22555392296771287, 
+                    0.22555392296771287, 
+                    0.21469576317134798, 
+                    0.21469576317134798, 
+                    0.2077016021347091, 
+                    0.2077016021347091, 
+                    0.2077016021347091, 
+                    0.2077016021347091, 
+                    0.2077016021347091, 
+                    0.2077016021347091, 
+                    0.19129747392064375, 
+                    0.19129747392064375, 
+                    0.1741045350250639, 
+                    0.1741045350250639, 
+                    0.1560387191896684, 
+                    0.1560387191896684, 
+                    0.13726048259325557, 
+                    0.13726048259325557, 
+                    0.11780594330306486, 
+                    0.11780594330306486, 
+                    0.10049253649363209, 
+                    0.10049253649363209
+                ], 
+                0.0431436225771904
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999730185235726, 
+                    0.9999730185235726, 
+                    0.999811975700836, 
+                    0.999811975700836, 
+                    0.9930706736740488, 
+                    0.9930706736740488, 
+                    0.982084029915097, 
+                    0.982084029915097, 
+                    0.9646689920222866, 
+                    0.9646689920222866, 
+                    0.9402714511814766, 
+                    0.9402714511814766, 
+                    0.9085878227601484, 
+                    0.9085878227601484, 
+                    0.8712130817321079, 
+                    0.8712130817321079, 
+                    0.8302184888920546, 
+                    0.8302184888920546, 
+                    0.7904027667775355, 
+                    0.7904027667775355, 
+                    0.7496365180752423, 
+                    0.7496365180752423, 
+                    0.7083212107036414, 
+                    0.7083212107036414, 
+                    0.6679055220636501, 
+                    0.6679055220636501, 
+                    0.6281670909369799, 
+                    0.6281670909369799, 
+                    0.5895751428792725, 
+                    0.5895751428792725, 
+                    0.5527629421665757, 
+                    0.5527629421665757, 
+                    0.5173335712242085, 
+                    0.5173335712242085, 
+                    0.4846835302236243, 
+                    0.4846835302236243, 
+                    0.453732604068251, 
+                    0.453732604068251, 
+                    0.4239342057247076, 
+                    0.4239342057247076, 
+                    0.395621046527911, 
+                    0.395621046527911, 
+                    0.36859941545488045, 
+                    0.36859941545488045, 
+                    0.3433478054686996, 
+                    0.3433478054686996, 
+                    0.3201068944386234, 
+                    0.3201068944386234, 
+                    0.2996448604093388, 
+                    0.2996448604093388, 
+                    0.28174653257072524, 
+                    0.28174653257072524, 
+                    0.2648376615128589, 
+                    0.2648376615128589, 
+                    0.24987728148854152, 
+                    0.24987728148854152, 
+                    0.2362636946255386, 
+                    0.2362636946255386, 
+                    0.2240035205562483, 
+                    0.2240035205562483, 
+                    0.21231613049471942, 
+                    0.21231613049471942, 
+                    0.2101810106132484, 
+                    0.2101810106132484, 
+                    0.2101810106132484, 
+                    0.2101810106132484, 
+                    0.2101810106132484, 
+                    0.2101810106132484, 
+                    0.1926289131840966, 
+                    0.1926289131840966, 
+                    0.1746267367651079, 
+                    0.1746267367651079, 
+                    0.15601945001025103, 
+                    0.15601945001025103, 
+                    0.13692198982004727, 
+                    0.13692198982004727, 
+                    0.11736064739400959, 
+                    0.11736064739400959, 
+                    0.10030835128093994, 
+                    0.10030835128093994
+                ], 
+                0.04008634015917778
+            ], 
+            [
+                1.0069612264633179, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999959577632459, 
+                    0.9999959577632459, 
+                    0.9999959577632459, 
+                    0.9999959577632459, 
+                    0.9936039510649014, 
+                    0.9936039510649014, 
+                    0.9829507311756598, 
+                    0.9829507311756598, 
+                    0.9655556696124379, 
+                    0.9655556696124379, 
+                    0.9402338664798083, 
+                    0.9402338664798083, 
+                    0.907078551510085, 
+                    0.907078551510085, 
+                    0.8688892577322103, 
+                    0.8688892577322103, 
+                    0.8275518435020808, 
+                    0.8275518435020808, 
+                    0.7875255573579782, 
+                    0.7875255573579782, 
+                    0.7466346668014371, 
+                    0.7466346668014371, 
+                    0.7052515737495216, 
+                    0.7052515737495216, 
+                    0.6647768907301536, 
+                    0.6647768907301536, 
+                    0.62510919790481, 
+                    0.62510919790481, 
+                    0.5863630088848228, 
+                    0.5863630088848228, 
+                    0.5500121722729227, 
+                    0.5500121722729227, 
+                    0.5139872819113003, 
+                    0.5139872819113003, 
+                    0.4822700852663345, 
+                    0.4822700852663345, 
+                    0.4506586238612726, 
+                    0.4506586238612726, 
+                    0.42154046080277263, 
+                    0.42154046080277263, 
+                    0.3929742665749648, 
+                    0.3929742665749648, 
+                    0.3663161182384491, 
+                    0.3663161182384491, 
+                    0.3410467978856388, 
+                    0.3410467978856388, 
+                    0.3180065821911573, 
+                    0.3180065821911573, 
+                    0.29762527983207565, 
+                    0.29762527983207565, 
+                    0.27983614327509304, 
+                    0.27983614327509304, 
+                    0.2630241555789698, 
+                    0.2630241555789698, 
+                    0.24815254956875177, 
+                    0.24815254956875177, 
+                    0.2346201100486906, 
+                    0.2346201100486906, 
+                    0.22248375661407363, 
+                    0.22248375661407363, 
+                    0.21191445545143145, 
+                    0.21191445545143145, 
+                    0.2045482238031063, 
+                    0.2045482238031063, 
+                    0.2045482238031063, 
+                    0.2045482238031063, 
+                    0.2045482238031063, 
+                    0.2045482238031063, 
+                    0.1911550057499643, 
+                    0.1911550057499643, 
+                    0.17365553247161375, 
+                    0.17365553247161375, 
+                    0.15549306617957673, 
+                    0.15549306617957673, 
+                    0.1367378656638943, 
+                    0.1367378656638943, 
+                    0.11739412368943442, 
+                    0.11739412368943442, 
+                    0.10042050627090625, 
+                    0.10042050627090625
+                ], 
+                0.03714457154273987
+            ], 
+            [
+                1.013970971107483, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999993309413249, 
+                    0.999993309413249, 
+                    0.9999106417116908, 
+                    0.9999106417116908, 
+                    0.993569337871601, 
+                    0.993569337871601, 
+                    0.9828242202715832, 
+                    0.9828242202715832, 
+                    0.9649715719965468, 
+                    0.9649715719965468, 
+                    0.938879549489866, 
+                    0.938879549489866, 
+                    0.9051463616794629, 
+                    0.9051463616794629, 
+                    0.8665242888682377, 
+                    0.8665242888682377, 
+                    0.824892996706, 
+                    0.824892996706, 
+                    0.7847033390719468, 
+                    0.7847033390719468, 
+                    0.74367816387939, 
+                    0.74367816387939, 
+                    0.7021818021016099, 
+                    0.7021818021016099, 
+                    0.6616671657631241, 
+                    0.6616671657631241, 
+                    0.621997133847846, 
+                    0.621997133847846, 
+                    0.5832847377534737, 
+                    0.5832847377534737, 
+                    0.5470246613405819, 
+                    0.5470246613405819, 
+                    0.5110850776584663, 
+                    0.5110850776584663, 
+                    0.4794193763047321, 
+                    0.4794193763047321, 
+                    0.44801557887665766, 
+                    0.44801557887665766, 
+                    0.41887326974311384, 
+                    0.41887326974311384, 
+                    0.3905905329180126, 
+                    0.3905905329180126, 
+                    0.3638912785986701, 
+                    0.3638912785986701, 
+                    0.33890581401716524, 
+                    0.33890581401716524, 
+                    0.31587345792151206, 
+                    0.31587345792151206, 
+                    0.29566736182648157, 
+                    0.29566736182648157, 
+                    0.27796089373106914, 
+                    0.27796089373106914, 
+                    0.26125356444636083, 
+                    0.26125356444636083, 
+                    0.2464742004711628, 
+                    0.2464742004711628, 
+                    0.233028557334697, 
+                    0.233028557334697, 
+                    0.22096149398199338, 
+                    0.22096149398199338, 
+                    0.21025538152555956, 
+                    0.21025538152555956, 
+                    0.20351252449838417, 
+                    0.20351252449838417, 
+                    0.20351252449838417, 
+                    0.20351252449838417, 
+                    0.20351252449838417, 
+                    0.20351252449838417, 
+                    0.18983347599681005, 
+                    0.18983347599681005, 
+                    0.1727545855180429, 
+                    0.1727545855180429, 
+                    0.15487227068557413, 
+                    0.15487227068557413, 
+                    0.13633636937161683, 
+                    0.13633636937161683, 
+                    0.11716818672010297, 
+                    0.11716818672010297, 
+                    0.10038137356481078, 
+                    0.10038137356481078
+                ], 
+                0.03441334143280983
+            ], 
+            [
+                1.0210293531417847, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999867814882123, 
+                    0.9999867814882123, 
+                    0.9935509735201314, 
+                    0.9935509735201314, 
+                    0.9826716348421899, 
+                    0.9826716348421899, 
+                    0.9644273745096806, 
+                    0.9644273745096806, 
+                    0.9376692100834777, 
+                    0.9376692100834777, 
+                    0.9032311099128935, 
+                    0.9032311099128935, 
+                    0.8641431728784383, 
+                    0.8641431728784383, 
+                    0.8222157029653405, 
+                    0.8222157029653405, 
+                    0.7818489689831799, 
+                    0.7818489689831799, 
+                    0.7406597168447561, 
+                    0.7406597168447561, 
+                    0.6991069230829543, 
+                    0.6991069230829543, 
+                    0.6585986479916648, 
+                    0.6585986479916648, 
+                    0.618775768972003, 
+                    0.618775768972003, 
+                    0.58056714087, 
+                    0.58056714087, 
+                    0.5433781590014444, 
+                    0.5433781590014444, 
+                    0.5091275937704113, 
+                    0.5091275937704113, 
+                    0.4756276606145453, 
+                    0.4756276606145453, 
+                    0.44605693970206073, 
+                    0.44605693970206073, 
+                    0.41580095243531245, 
+                    0.41580095243531245, 
+                    0.3884397216284004, 
+                    0.3884397216284004, 
+                    0.36137141992799315, 
+                    0.36137141992799315, 
+                    0.33681473395836276, 
+                    0.33681473395836276, 
+                    0.3137424168658384, 
+                    0.3137424168658384, 
+                    0.2937203478496151, 
+                    0.2937203478496151, 
+                    0.2760950108265453, 
+                    0.2760950108265453, 
+                    0.2594895459159542, 
+                    0.2594895459159542, 
+                    0.24479979728140605, 
+                    0.24479979728140605, 
+                    0.23143777413155608, 
+                    0.23143777413155608, 
+                    0.21945453802036485, 
+                    0.21945453802036485, 
+                    0.2090795880461781, 
+                    0.2090795880461781, 
+                    0.20196818325882024, 
+                    0.20196818325882024, 
+                    0.20196818325882024, 
+                    0.20196818325882024, 
+                    0.20196818325882024, 
+                    0.20196818325882024, 
+                    0.18932491913503524, 
+                    0.18932491913503524, 
+                    0.17224278856836187, 
+                    0.17224278856836187, 
+                    0.15440835977176784, 
+                    0.15440835977176784, 
+                    0.13595563657313603, 
+                    0.13595563657313603, 
+                    0.11689704100623272, 
+                    0.11689704100623272, 
+                    0.10034797788981109, 
+                    0.10034797788981109
+                ], 
+                0.031856101006269455
+            ], 
+            [
+                1.028136968612671, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998430202946516, 
+                    0.9998430202946516, 
+                    0.9928838912645445, 
+                    0.9928838912645445, 
+                    0.9813968192727811, 
+                    0.9813968192727811, 
+                    0.962641573911008, 
+                    0.962641573911008, 
+                    0.9359258125835749, 
+                    0.9359258125835749, 
+                    0.9013348828703975, 
+                    0.9013348828703975, 
+                    0.8618879097279442, 
+                    0.8618879097279442, 
+                    0.8196116353132297, 
+                    0.8196116353132297, 
+                    0.7790039928283, 
+                    0.7790039928283, 
+                    0.7376911796769365, 
+                    0.7376911796769365, 
+                    0.6960529918473002, 
+                    0.6960529918473002, 
+                    0.65550341358892, 
+                    0.65550341358892, 
+                    0.6157487962361784, 
+                    0.6157487962361784, 
+                    0.5774233623836909, 
+                    0.5774233623836909, 
+                    0.5406282670391365, 
+                    0.5406282670391365, 
+                    0.5059598007699199, 
+                    0.5059598007699199, 
+                    0.4731628767735954, 
+                    0.4731628767735954, 
+                    0.4431972210813908, 
+                    0.4431972210813908, 
+                    0.41337372757649005, 
+                    0.41337372757649005, 
+                    0.3859836171069333, 
+                    0.3859836171069333, 
+                    0.3590838189932758, 
+                    0.3590838189932758, 
+                    0.3346765858143284, 
+                    0.3346765858143284, 
+                    0.3116894530422001, 
+                    0.3116894530422001, 
+                    0.2918097616148412, 
+                    0.2918097616148412, 
+                    0.27427801062228035, 
+                    0.27427801062228035, 
+                    0.2577753097112719, 
+                    0.2577753097112719, 
+                    0.2431744675303678, 
+                    0.2431744675303678, 
+                    0.22988367657010247, 
+                    0.22988367657010247, 
+                    0.21791345766732245, 
+                    0.21791345766732245, 
+                    0.206788278821148, 
+                    0.206788278821148, 
+                    0.2061418756357046, 
+                    0.2061418756357046, 
+                    0.2061418756357046, 
+                    0.2061418756357046, 
+                    0.2061418756357046, 
+                    0.2061418756357046, 
+                    0.18969059194795113, 
+                    0.18969059194795113, 
+                    0.172277327749047, 
+                    0.172277327749047, 
+                    0.15413158264294974, 
+                    0.15413158264294974, 
+                    0.13549100231531067, 
+                    0.13549100231531067, 
+                    0.11640225896514596, 
+                    0.11640225896514596, 
+                    0.10016640800515815, 
+                    0.10016640800515815
+                ], 
+                0.029501134529709816
+            ], 
+            [
+                1.0352941751480103, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999986056605548, 
+                    0.9999986056605548, 
+                    0.999978276208651, 
+                    0.999978276208651, 
+                    0.9933369517920312, 
+                    0.9933369517920312, 
+                    0.9820061327822249, 
+                    0.9820061327822249, 
+                    0.962766977825383, 
+                    0.962766977825383, 
+                    0.9347980089786025, 
+                    0.9347980089786025, 
+                    0.8991896927692873, 
+                    0.8991896927692873, 
+                    0.859303979184015, 
+                    0.859303979184015, 
+                    0.816800634852027, 
+                    0.816800634852027, 
+                    0.7760592820259727, 
+                    0.7760592820259727, 
+                    0.7346291087538059, 
+                    0.7346291087538059, 
+                    0.6929375430565805, 
+                    0.6929375430565805, 
+                    0.6523454296748739, 
+                    0.6523454296748739, 
+                    0.612676530847881, 
+                    0.612676530847881, 
+                    0.5741931766111746, 
+                    0.5741931766111746, 
+                    0.5378938234079674, 
+                    0.5378938234079674, 
+                    0.502650702506518, 
+                    0.502650702506518, 
+                    0.47074392986758845, 
+                    0.47074392986758845, 
+                    0.44018013786330024, 
+                    0.44018013786330024, 
+                    0.4110096718452506, 
+                    0.4110096718452506, 
+                    0.3833568032763485, 
+                    0.3833568032763485, 
+                    0.35687927304912453, 
+                    0.35687927304912453, 
+                    0.3323784857247225, 
+                    0.3323784857247225, 
+                    0.3096626440382811, 
+                    0.3096626440382811, 
+                    0.2898208210254776, 
+                    0.2898208210254776, 
+                    0.27241420627872753, 
+                    0.27241420627872753, 
+                    0.25600654148363317, 
+                    0.25600654148363317, 
+                    0.24149904356514384, 
+                    0.24149904356514384, 
+                    0.228305431117796, 
+                    0.228305431117796, 
+                    0.21646629212671611, 
+                    0.21646629212671611, 
+                    0.20601372624681652, 
+                    0.20601372624681652, 
+                    0.19990363894107008, 
+                    0.19990363894107008, 
+                    0.19990363894107008, 
+                    0.19990363894107008, 
+                    0.19990363894107008, 
+                    0.19990363894107008, 
+                    0.18913587927940295, 
+                    0.18913587927940295, 
+                    0.17186581805765355, 
+                    0.17186581805765355, 
+                    0.15395054177315892, 
+                    0.15395054177315892, 
+                    0.13550598718738177, 
+                    0.13550598718738177, 
+                    0.11653248674198527, 
+                    0.11653248674198527, 
+                    0.10026149762135747, 
+                    0.10026149762135747
+                ], 
+                0.027216218411922455
+            ], 
+            [
+                1.0425010919570923, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997084207439918, 
+                    0.9997084207439918, 
+                    0.9932659026080982, 
+                    0.9932659026080982, 
+                    0.981703643186731, 
+                    0.981703643186731, 
+                    0.9619325463220517, 
+                    0.9619325463220517, 
+                    0.9332217671531732, 
+                    0.9332217671531732, 
+                    0.8970829750513646, 
+                    0.8970829750513646, 
+                    0.8568340027144209, 
+                    0.8568340027144209, 
+                    0.8140537370749179, 
+                    0.8140537370749179, 
+                    0.7731404428144732, 
+                    0.7731404428144732, 
+                    0.7316033771861226, 
+                    0.7316033771861226, 
+                    0.6898266009686107, 
+                    0.6898266009686107, 
+                    0.6492508163363143, 
+                    0.6492508163363143, 
+                    0.6094957084925825, 
+                    0.6094957084925825, 
+                    0.5713235663450663, 
+                    0.5713235663450663, 
+                    0.5345882590103986, 
+                    0.5345882590103986, 
+                    0.5001977061242349, 
+                    0.5001977061242349, 
+                    0.46755015108152953, 
+                    0.46755015108152953, 
+                    0.4377997174794556, 
+                    0.4377997174794556, 
+                    0.40828774515989885, 
+                    0.40828774515989885, 
+                    0.38102977746585776, 
+                    0.38102977746585776, 
+                    0.35453243738084417, 
+                    0.35453243738084417, 
+                    0.33024146160503515, 
+                    0.33024146160503515, 
+                    0.3076099287798887, 
+                    0.3076099287798887, 
+                    0.28789748386509567, 
+                    0.28789748386509567, 
+                    0.2705890051649358, 
+                    0.2705890051649358, 
+                    0.25428162758837614, 
+                    0.25428162758837614, 
+                    0.23986603702452305, 
+                    0.23986603702452305, 
+                    0.2267598257364943, 
+                    0.2267598257364943, 
+                    0.2149912090305935, 
+                    0.2149912090305935, 
+                    0.2044603656027349, 
+                    0.2044603656027349, 
+                    0.19851353375333375, 
+                    0.19851353375333375, 
+                    0.19851353375333375, 
+                    0.19851353375333375, 
+                    0.19851353375333375, 
+                    0.19851353375333375, 
+                    0.18971734637625132, 
+                    0.18971734637625132, 
+                    0.17214120240281447, 
+                    0.17214120240281447, 
+                    0.1540792570189726, 
+                    0.1540792570189726, 
+                    0.13555984978982263, 
+                    0.13555984978982263, 
+                    0.11655191112713423, 
+                    0.11655191112713423, 
+                    0.10025707909370157, 
+                    0.10025707909370157
+                ], 
+                0.025109227746725082
+            ], 
+            [
+                1.0497580766677856, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999958655162123, 
+                    0.9999958655162123, 
+                    0.9996846173792141, 
+                    0.9996846173792141, 
+                    0.9930731880982561, 
+                    0.9930731880982561, 
+                    0.9812386501981927, 
+                    0.9812386501981927, 
+                    0.9611181493605342, 
+                    0.9611181493605342, 
+                    0.9316891927247923, 
+                    0.9316891927247923, 
+                    0.8949420811033587, 
+                    0.8949420811033587, 
+                    0.8543070987783207, 
+                    0.8543070987783207, 
+                    0.8112899239472268, 
+                    0.8112899239472268, 
+                    0.7702120090731902, 
+                    0.7702120090731902, 
+                    0.7285547162762291, 
+                    0.7285547162762291, 
+                    0.6867191929586035, 
+                    0.6867191929586035, 
+                    0.6461253543357133, 
+                    0.6461253543357133, 
+                    0.606389080444276, 
+                    0.606389080444276, 
+                    0.5682951560320568, 
+                    0.5682951560320568, 
+                    0.5315935271673831, 
+                    0.5315935271673831, 
+                    0.49734561536560784, 
+                    0.49734561536560784, 
+                    0.4647613484502417, 
+                    0.4647613484502417, 
+                    0.43514636735707063, 
+                    0.43514636735707063, 
+                    0.40575071529906487, 
+                    0.40575071529906487, 
+                    0.37861463534581685, 
+                    0.37861463534581685, 
+                    0.35225311750222327, 
+                    0.35225311750222327, 
+                    0.3280879107787732, 
+                    0.3280879107787732, 
+                    0.305580339504769, 
+                    0.305580339504769, 
+                    0.2859833653393256, 
+                    0.2859833653393256, 
+                    0.2687790338913534, 
+                    0.2687790338913534, 
+                    0.2525750207854856, 
+                    0.2525750207854856, 
+                    0.23826094953488924, 
+                    0.23826094953488924, 
+                    0.22523942906756897, 
+                    0.22523942906756897, 
+                    0.21353034149482794, 
+                    0.21353034149482794, 
+                    0.20322269376179614, 
+                    0.20322269376179614, 
+                    0.1970274166914704, 
+                    0.1970274166914704, 
+                    0.1970274166914704, 
+                    0.1970274166914704, 
+                    0.1970274166914704, 
+                    0.1970274166914704, 
+                    0.18982395767952034, 
+                    0.18982395767952034, 
+                    0.17211132318821526, 
+                    0.17211132318821526, 
+                    0.15391642387721938, 
+                    0.15391642387721938, 
+                    0.13532253300454278, 
+                    0.13532253300454278, 
+                    0.11631319636748993, 
+                    0.11631319636748993, 
+                    0.10018210594266734, 
+                    0.10018210594266734
+                ], 
+                0.023151986300945282
+            ], 
+            [
+                1.057065725326538, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999095319064953, 
+                    0.9999095319064953, 
+                    0.9929185220699228, 
+                    0.9929185220699228, 
+                    0.9808203189871757, 
+                    0.9808203189871757, 
+                    0.9600224729355799, 
+                    0.9600224729355799, 
+                    0.929975190819777, 
+                    0.929975190819777, 
+                    0.8926824679423041, 
+                    0.8926824679423041, 
+                    0.8517116880283903, 
+                    0.8517116880283903, 
+                    0.808455672941697, 
+                    0.808455672941697, 
+                    0.7672300893313068, 
+                    0.7672300893313068, 
+                    0.7254765132486963, 
+                    0.7254765132486963, 
+                    0.6836112117257381, 
+                    0.6836112117257381, 
+                    0.6429258475384674, 
+                    0.6429258475384674, 
+                    0.6034423017022816, 
+                    0.6034423017022816, 
+                    0.5648245317851462, 
+                    0.5648245317851462, 
+                    0.5292742996573705, 
+                    0.5292742996573705, 
+                    0.49362741241988967, 
+                    0.49362741241988967, 
+                    0.46273865250993745, 
+                    0.46273865250993745, 
+                    0.4319923342738256, 
+                    0.4319923342738256, 
+                    0.4034905163748099, 
+                    0.4034905163748099, 
+                    0.37607252692943843, 
+                    0.37607252692943843, 
+                    0.3500400317820264, 
+                    0.3500400317820264, 
+                    0.32591291029666014, 
+                    0.32591291029666014, 
+                    0.3035667771835879, 
+                    0.3035667771835879, 
+                    0.28406889302602445, 
+                    0.28406889302602445, 
+                    0.2669651448069793, 
+                    0.2669651448069793, 
+                    0.25085384803880445, 
+                    0.25085384803880445, 
+                    0.23662096296329851, 
+                    0.23662096296329851, 
+                    0.2237255369322145, 
+                    0.2237255369322145, 
+                    0.21234552974614865, 
+                    0.21234552974614865, 
+                    0.20141558188886868, 
+                    0.20141558188886868, 
+                    0.1943542502429775, 
+                    0.1943542502429775, 
+                    0.1943542502429775, 
+                    0.1943542502429775, 
+                    0.1943542502429775, 
+                    0.1943542502429775, 
+                    0.19096754036395708, 
+                    0.19096754036395708, 
+                    0.17282591594429386, 
+                    0.17282591594429386, 
+                    0.1543563841787314, 
+                    0.1543563841787314, 
+                    0.1355781253566615, 
+                    0.1355781253566615, 
+                    0.11644634630292514, 
+                    0.11644634630292514, 
+                    0.10016640110745832, 
+                    0.10016640110745832
+                ], 
+                0.021288689225912094
+            ], 
+            [
+                1.0644241571426392, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996982285659783, 
+                    0.9996982285659783, 
+                    0.9929678459769475, 
+                    0.9929678459769475, 
+                    0.9805647975233405, 
+                    0.9805647975233405, 
+                    0.959178877038406, 
+                    0.959178877038406, 
+                    0.9283470947382205, 
+                    0.9283470947382205, 
+                    0.8906177302725239, 
+                    0.8906177302725239, 
+                    0.8492696736662856, 
+                    0.8492696736662856, 
+                    0.8057235323527177, 
+                    0.8057235323527177, 
+                    0.7643147969921444, 
+                    0.7643147969921444, 
+                    0.7224211095323478, 
+                    0.7224211095323478, 
+                    0.6805286375518319, 
+                    0.6805286375518319, 
+                    0.6397110723408167, 
+                    0.6397110723408167, 
+                    0.6005392827653603, 
+                    0.6005392827653603, 
+                    0.5615138982479677, 
+                    0.5615138982479677, 
+                    0.526556675038316, 
+                    0.526556675038316, 
+                    0.4907117472174719, 
+                    0.4907117472174719, 
+                    0.4598116984649365, 
+                    0.4598116984649365, 
+                    0.4296257627685661, 
+                    0.4296257627685661, 
+                    0.40074476807118864, 
+                    0.40074476807118864, 
+                    0.373822324846054, 
+                    0.373822324846054, 
+                    0.3477684836285834, 
+                    0.3477684836285834, 
+                    0.32374811153515837, 
+                    0.32374811153515837, 
+                    0.30162731637244694, 
+                    0.30162731637244694, 
+                    0.2821540168640875, 
+                    0.2821540168640875, 
+                    0.26518682887202444, 
+                    0.26518682887202444, 
+                    0.249169661273669, 
+                    0.249169661273669, 
+                    0.2350243644819158, 
+                    0.2350243644819158, 
+                    0.2221740550979148, 
+                    0.2221740550979148, 
+                    0.21065487196367527, 
+                    0.21065487196367527, 
+                    0.20020533232878618, 
+                    0.20020533232878618, 
+                    0.19407431202945735, 
+                    0.19407431202945735, 
+                    0.19407431202945735, 
+                    0.19407431202945735, 
+                    0.19407431202945735, 
+                    0.19407431202945735, 
+                    0.18917496760844035, 
+                    0.18917496760844035, 
+                    0.1715152527482393, 
+                    0.1715152527482393, 
+                    0.153425416949343, 
+                    0.153425416949343, 
+                    0.13496374099733202, 
+                    0.13496374099733202, 
+                    0.11609179096550838, 
+                    0.11609179096550838, 
+                    0.10015949663548608, 
+                    0.10015949663548608
+                ], 
+                0.01959686353802681
+            ], 
+            [
+                1.0718339681625366, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999954759421201, 
+                    0.9999954759421201, 
+                    0.9997308144521545, 
+                    0.9997308144521545, 
+                    0.992922099706291, 
+                    0.992922099706291, 
+                    0.9802864680809403, 
+                    0.9802864680809403, 
+                    0.9581612173783742, 
+                    0.9581612173783742, 
+                    0.9266350957509912, 
+                    0.9266350957509912, 
+                    0.8884237716731564, 
+                    0.8884237716731564, 
+                    0.8467073548110591, 
+                    0.8467073548110591, 
+                    0.8028994686374811, 
+                    0.8028994686374811, 
+                    0.7613445184866877, 
+                    0.7613445184866877, 
+                    0.71936697334115, 
+                    0.71936697334115, 
+                    0.677344113044829, 
+                    0.677344113044829, 
+                    0.636742074315756, 
+                    0.636742074315756, 
+                    0.5970444188702418, 
+                    0.5970444188702418, 
+                    0.5591881438799524, 
+                    0.5591881438799524, 
+                    0.5226522051546646, 
+                    0.5226522051546646, 
+                    0.4887771614611509, 
+                    0.4887771614611509, 
+                    0.45647752639581674, 
+                    0.45647752639581674, 
+                    0.4272238082604163, 
+                    0.4272238082604163, 
+                    0.3982066978926919, 
+                    0.3982066978926919, 
+                    0.3714405952622875, 
+                    0.3714405952622875, 
+                    0.34548641114677037, 
+                    0.34548641114677037, 
+                    0.3216952335493303, 
+                    0.3216952335493303, 
+                    0.29957018172365296, 
+                    0.29957018172365296, 
+                    0.2803053882741975, 
+                    0.2803053882741975, 
+                    0.2634040834969713, 
+                    0.2634040834969713, 
+                    0.2474898198208524, 
+                    0.2474898198208524, 
+                    0.2334312133477945, 
+                    0.2334312133477945, 
+                    0.22065295012574446, 
+                    0.22065295012574446, 
+                    0.20918669400513093, 
+                    0.20918669400513093, 
+                    0.19902720707518645, 
+                    0.19902720707518645, 
+                    0.1932190176271263, 
+                    0.1932190176271263, 
+                    0.1932190176271263, 
+                    0.1932190176271263, 
+                    0.1932190176271263, 
+                    0.1932190176271263, 
+                    0.1882486621017189, 
+                    0.1882486621017189, 
+                    0.17078766035884246, 
+                    0.17078766035884246, 
+                    0.15289735788148046, 
+                    0.15289735788148046, 
+                    0.1346186549041468, 
+                    0.1346186549041468, 
+                    0.11590284421595069, 
+                    0.11590284421595069, 
+                    0.10016523203280442, 
+                    0.10016523203280442
+                ], 
+                0.01801799237728119
+            ]
+        ]
+    }, 
+    {
+        "block_size": 86, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9337204694747925, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997863307370387, 
+                    0.9997863307370387, 
+                    0.9948917772570749, 
+                    0.9948917772570749, 
+                    0.986600957963096, 
+                    0.986600957963096, 
+                    0.9740700269739451, 
+                    0.9740700269739451, 
+                    0.9554744474005968, 
+                    0.9554744474005968, 
+                    0.9329260523383928, 
+                    0.9329260523383928, 
+                    0.9038799272149496, 
+                    0.9038799272149496, 
+                    0.8688937634341874, 
+                    0.8688937634341874, 
+                    0.8302978281670991, 
+                    0.8302978281670991, 
+                    0.7911276653872407, 
+                    0.7911276653872407, 
+                    0.7512326527885386, 
+                    0.7512326527885386, 
+                    0.7104053992195032, 
+                    0.7104053992195032, 
+                    0.6706534231175946, 
+                    0.6706534231175946, 
+                    0.6319879164183866, 
+                    0.6319879164183866, 
+                    0.5951186259718791, 
+                    0.5951186259718791, 
+                    0.5593006738596609, 
+                    0.5593006738596609, 
+                    0.5256355090903452, 
+                    0.5256355090903452, 
+                    0.49422724132862655, 
+                    0.49422724132862655, 
+                    0.4624422851509298, 
+                    0.4624422851509298, 
+                    0.43354773349189707, 
+                    0.43354773349189707, 
+                    0.4053400875002127, 
+                    0.4053400875002127, 
+                    0.37955317775619335, 
+                    0.37955317775619335, 
+                    0.35455986837345144, 
+                    0.35455986837345144, 
+                    0.33149361711701975, 
+                    0.33149361711701975, 
+                    0.31083954834367283, 
+                    0.31083954834367283, 
+                    0.29184581548410105, 
+                    0.29184581548410105, 
+                    0.275063860398589, 
+                    0.275063860398589, 
+                    0.2597683748489455, 
+                    0.2597683748489455, 
+                    0.24629305456295236, 
+                    0.24629305456295236, 
+                    0.2339184588801084, 
+                    0.2339184588801084, 
+                    0.22266388659451736, 
+                    0.22266388659451736, 
+                    0.2166940778031372, 
+                    0.2166940778031372, 
+                    0.2166940778031372, 
+                    0.2166940778031372, 
+                    0.2093331992448607, 
+                    0.2093331992448607, 
+                    0.19389599562344548, 
+                    0.19389599562344548, 
+                    0.17701156456221645, 
+                    0.17701156456221645, 
+                    0.1589916280969713, 
+                    0.1589916280969713, 
+                    0.14000769963006482, 
+                    0.14000769963006482, 
+                    0.12008680517026192, 
+                    0.12008680517026192, 
+                    0.10097897164494103, 
+                    0.10097897164494103
+                ], 
+                0.0739816203713417
+            ], 
+            [
+                0.9401457905769348, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999263856580688, 
+                    0.9999263856580688, 
+                    0.9949351546132156, 
+                    0.9949351546132156, 
+                    0.9863629333429828, 
+                    0.9863629333429828, 
+                    0.9734505098641424, 
+                    0.9734505098641424, 
+                    0.9554136731764364, 
+                    0.9554136731764364, 
+                    0.9319859743715864, 
+                    0.9319859743715864, 
+                    0.9022125840010446, 
+                    0.9022125840010446, 
+                    0.8668147453149064, 
+                    0.8668147453149064, 
+                    0.8277616761223052, 
+                    0.8277616761223052, 
+                    0.7884406181056586, 
+                    0.7884406181056586, 
+                    0.7484533094200033, 
+                    0.7484533094200033, 
+                    0.7074339391736509, 
+                    0.7074339391736509, 
+                    0.6676004157059025, 
+                    0.6676004157059025, 
+                    0.6289736598030059, 
+                    0.6289736598030059, 
+                    0.592141818478228, 
+                    0.592141818478228, 
+                    0.5562319348633005, 
+                    0.5562319348633005, 
+                    0.5229692915267493, 
+                    0.5229692915267493, 
+                    0.49113071850973655, 
+                    0.49113071850973655, 
+                    0.4601268512424225, 
+                    0.4601268512424225, 
+                    0.4304948199548432, 
+                    0.4304948199548432, 
+                    0.40323293325119725, 
+                    0.40323293325119725, 
+                    0.37689526664770107, 
+                    0.37689526664770107, 
+                    0.35245634910184404, 
+                    0.35245634910184404, 
+                    0.3292678958601115, 
+                    0.3292678958601115, 
+                    0.308823912595807, 
+                    0.308823912595807, 
+                    0.28990483712221365, 
+                    0.28990483712221365, 
+                    0.27322686891830505, 
+                    0.27322686891830505, 
+                    0.2580453780128527, 
+                    0.2580453780128527, 
+                    0.24462709236191424, 
+                    0.24462709236191424, 
+                    0.23233807291724345, 
+                    0.23233807291724345, 
+                    0.2211810700585558, 
+                    0.2211810700585558, 
+                    0.21410144756597405, 
+                    0.21410144756597405, 
+                    0.21410144756597405, 
+                    0.21410144756597405, 
+                    0.2094340577693981, 
+                    0.2094340577693981, 
+                    0.1937034800352608, 
+                    0.1937034800352608, 
+                    0.17676350806165606, 
+                    0.17676350806165606, 
+                    0.158759088605983, 
+                    0.158759088605983, 
+                    0.1398207983558199, 
+                    0.1398207983558199, 
+                    0.11996175635872892, 
+                    0.11996175635872892, 
+                    0.10094533911500461, 
+                    0.10094533911500461
+                ], 
+                0.06921232491731644
+            ], 
+            [
+                0.9466152787208557, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998414855012262, 
+                    0.9998414855012262, 
+                    0.9946689934949265, 
+                    0.9946689934949265, 
+                    0.9860994892921875, 
+                    0.9860994892921875, 
+                    0.9727831473867417, 
+                    0.9727831473867417, 
+                    0.9545390361106982, 
+                    0.9545390361106982, 
+                    0.9306596172464595, 
+                    0.9306596172464595, 
+                    0.9005106334414342, 
+                    0.9005106334414342, 
+                    0.8646305686834513, 
+                    0.8646305686834513, 
+                    0.8253617343250484, 
+                    0.8253617343250484, 
+                    0.785678897956506, 
+                    0.785678897956506, 
+                    0.7455241879023614, 
+                    0.7455241879023614, 
+                    0.7044641512001549, 
+                    0.7044641512001549, 
+                    0.6645984018446658, 
+                    0.6645984018446658, 
+                    0.6259359423171686, 
+                    0.6259359423171686, 
+                    0.5891570936510925, 
+                    0.5891570936510925, 
+                    0.5532785251023191, 
+                    0.5532785251023191, 
+                    0.520108325886347, 
+                    0.520108325886347, 
+                    0.48831866553933256, 
+                    0.48831866553933256, 
+                    0.4574746573080884, 
+                    0.4574746573080884, 
+                    0.4278394540098318, 
+                    0.4278394540098318, 
+                    0.4008270938200903, 
+                    0.4008270938200903, 
+                    0.3744611836645671, 
+                    0.3744611836645671, 
+                    0.3502563760622711, 
+                    0.3502563760622711, 
+                    0.3271057996356294, 
+                    0.3271057996356294, 
+                    0.30681187989804665, 
+                    0.30681187989804665, 
+                    0.28798305670934915, 
+                    0.28798305670934915, 
+                    0.2714037454804646, 
+                    0.2714037454804646, 
+                    0.2563120815605395, 
+                    0.2563120815605395, 
+                    0.24297501552149098, 
+                    0.24297501552149098, 
+                    0.23076199689331256, 
+                    0.23076199689331256, 
+                    0.21967267299098156, 
+                    0.21967267299098156, 
+                    0.2126754194762105, 
+                    0.2126754194762105, 
+                    0.2126754194762105, 
+                    0.2126754194762105, 
+                    0.20943227604129286, 
+                    0.20943227604129286, 
+                    0.19349369093214536, 
+                    0.19349369093214536, 
+                    0.17643844998701677, 
+                    0.17643844998701677, 
+                    0.15838974700914785, 
+                    0.15838974700914785, 
+                    0.13946429312872494, 
+                    0.13946429312872494, 
+                    0.11967057550208848, 
+                    0.11967057550208848, 
+                    0.10083130851310593, 
+                    0.10083130851310593
+                ], 
+                0.06471534073352814
+            ], 
+            [
+                0.9531292915344238, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999390467717028, 
+                    0.9999390467717028, 
+                    0.9994122401452308, 
+                    0.9994122401452308, 
+                    0.9950048425427203, 
+                    0.9950048425427203, 
+                    0.9866459471808898, 
+                    0.9866459471808898, 
+                    0.9726199455029532, 
+                    0.9726199455029532, 
+                    0.9540065474270059, 
+                    0.9540065474270059, 
+                    0.9297224474527693, 
+                    0.9297224474527693, 
+                    0.8988823914007165, 
+                    0.8988823914007165, 
+                    0.8624334072378935, 
+                    0.8624334072378935, 
+                    0.8227363302304521, 
+                    0.8227363302304521, 
+                    0.7829977032892406, 
+                    0.7829977032892406, 
+                    0.7426687860819803, 
+                    0.7426687860819803, 
+                    0.7015359044964079, 
+                    0.7015359044964079, 
+                    0.6615500675447488, 
+                    0.6615500675447488, 
+                    0.6229534191377696, 
+                    0.6229534191377696, 
+                    0.5860622582027589, 
+                    0.5860622582027589, 
+                    0.550572675660017, 
+                    0.550572675660017, 
+                    0.5168681238973813, 
+                    0.5168681238973813, 
+                    0.4859832797697449, 
+                    0.4859832797697449, 
+                    0.4541735656830544, 
+                    0.4541735656830544, 
+                    0.4259149202527631, 
+                    0.4259149202527631, 
+                    0.3977869475720482, 
+                    0.3977869475720482, 
+                    0.37252079049243114, 
+                    0.37252079049243114, 
+                    0.3477930235847454, 
+                    0.3477930235847454, 
+                    0.325120810193036, 
+                    0.325120810193036, 
+                    0.3047687434349764, 
+                    0.3047687434349764, 
+                    0.28607479530198643, 
+                    0.28607479530198643, 
+                    0.26959719288163425, 
+                    0.26959719288163425, 
+                    0.2546062105317216, 
+                    0.2546062105317216, 
+                    0.2414003819647563, 
+                    0.2414003819647563, 
+                    0.2290627301544715, 
+                    0.2290627301544715, 
+                    0.21833254745357059, 
+                    0.21833254745357059, 
+                    0.21269076752918592, 
+                    0.21269076752918592, 
+                    0.21269076752918592, 
+                    0.21269076752918592, 
+                    0.20819161028815839, 
+                    0.20819161028815839, 
+                    0.19269931330270415, 
+                    0.19269931330270415, 
+                    0.17580758471625257, 
+                    0.17580758471625257, 
+                    0.15786550574644126, 
+                    0.15786550574644126, 
+                    0.1390460595522731, 
+                    0.1390460595522731, 
+                    0.11937042078341326, 
+                    0.11937042078341326, 
+                    0.10071303094035983, 
+                    0.10071303094035983
+                ], 
+                0.06050064042210579
+            ], 
+            [
+                0.959688127040863, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999852433969516, 
+                    0.9999852433969516, 
+                    0.999635618123352, 
+                    0.999635618123352, 
+                    0.9944415299195878, 
+                    0.9944415299195878, 
+                    0.986243627954456, 
+                    0.986243627954456, 
+                    0.9729440540578127, 
+                    0.9729440540578127, 
+                    0.9534566925557573, 
+                    0.9534566925557573, 
+                    0.9286212343153798, 
+                    0.9286212343153798, 
+                    0.8971041358806779, 
+                    0.8971041358806779, 
+                    0.8601260671877631, 
+                    0.8601260671877631, 
+                    0.8202481206249359, 
+                    0.8202481206249359, 
+                    0.7801808125962717, 
+                    0.7801808125962717, 
+                    0.739772926225725, 
+                    0.739772926225725, 
+                    0.698521974875501, 
+                    0.698521974875501, 
+                    0.6585597286650282, 
+                    0.6585597286650282, 
+                    0.6199484008130939, 
+                    0.6199484008130939, 
+                    0.5830556681370926, 
+                    0.5830556681370926, 
+                    0.5475814234738083, 
+                    0.5475814234738083, 
+                    0.5140980858536002, 
+                    0.5140980858536002, 
+                    0.4829592596953665, 
+                    0.4829592596953665, 
+                    0.45188535103138217, 
+                    0.45188535103138217, 
+                    0.42283974894510395, 
+                    0.42283974894510395, 
+                    0.3957852770852523, 
+                    0.3957852770852523, 
+                    0.36984315927827427, 
+                    0.36984315927827427, 
+                    0.3457552752169147, 
+                    0.3457552752169147, 
+                    0.3229061561428485, 
+                    0.3229061561428485, 
+                    0.30278623432497453, 
+                    0.30278623432497453, 
+                    0.2841520879453116, 
+                    0.2841520879453116, 
+                    0.2677372519924701, 
+                    0.2677372519924701, 
+                    0.25291018586402164, 
+                    0.25291018586402164, 
+                    0.23967576613721334, 
+                    0.23967576613721334, 
+                    0.22764695757463754, 
+                    0.22764695757463754, 
+                    0.2167842048148182, 
+                    0.2167842048148182, 
+                    0.20995464827210822, 
+                    0.20995464827210822, 
+                    0.20995464827210822, 
+                    0.20995464827210822, 
+                    0.20567618822523745, 
+                    0.20567618822523745, 
+                    0.1903258392970877, 
+                    0.1903258392970877, 
+                    0.1738280129317803, 
+                    0.1738280129317803, 
+                    0.15629919768478012, 
+                    0.15629919768478012, 
+                    0.13787656123123132, 
+                    0.13787656123123132, 
+                    0.11859234657320736, 
+                    0.11859234657320736, 
+                    0.10080462324342646, 
+                    0.10080462324342646
+                ], 
+                0.056395117193460464
+            ], 
+            [
+                0.966292142868042, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999057481425522, 
+                    0.9999057481425522, 
+                    0.9996795283278073, 
+                    0.9996795283278073, 
+                    0.9945632152625197, 
+                    0.9945632152625197, 
+                    0.9856119188721002, 
+                    0.9856119188721002, 
+                    0.9720228438112188, 
+                    0.9720228438112188, 
+                    0.9524499626585713, 
+                    0.9524499626585713, 
+                    0.9269948582253636, 
+                    0.9269948582253636, 
+                    0.8949708737461834, 
+                    0.8949708737461834, 
+                    0.8577797858716594, 
+                    0.8577797858716594, 
+                    0.817730080435932, 
+                    0.817730080435932, 
+                    0.7774940588826333, 
+                    0.7774940588826333, 
+                    0.7369324493595957, 
+                    0.7369324493595957, 
+                    0.695545014626016, 
+                    0.695545014626016, 
+                    0.6555548541547284, 
+                    0.6555548541547284, 
+                    0.6168273236818984, 
+                    0.6168273236818984, 
+                    0.5802053162248496, 
+                    0.5802053162248496, 
+                    0.5444311931329923, 
+                    0.5444311931329923, 
+                    0.5115374977495403, 
+                    0.5115374977495403, 
+                    0.47993639007740907, 
+                    0.47993639007740907, 
+                    0.44946818800070726, 
+                    0.44946818800070726, 
+                    0.4200801803195555, 
+                    0.4200801803195555, 
+                    0.39349953273667865, 
+                    0.39349953273667865, 
+                    0.36739909625837935, 
+                    0.36739909625837935, 
+                    0.3436197575157806, 
+                    0.3436197575157806, 
+                    0.32076606823275655, 
+                    0.32076606823275655, 
+                    0.300829204965417, 
+                    0.300829204965417, 
+                    0.2823028195312385, 
+                    0.2823028195312385, 
+                    0.2660119994366923, 
+                    0.2660119994366923, 
+                    0.25118884769247135, 
+                    0.25118884769247135, 
+                    0.23809656880059513, 
+                    0.23809656880059513, 
+                    0.22609378000626834, 
+                    0.22609378000626834, 
+                    0.2151551378095971, 
+                    0.2151551378095971, 
+                    0.2102039370684923, 
+                    0.2102039370684923, 
+                    0.2102039370684923, 
+                    0.2102039370684923, 
+                    0.20525421923404347, 
+                    0.20525421923404347, 
+                    0.18993702003531174, 
+                    0.18993702003531174, 
+                    0.17336180889662606, 
+                    0.17336180889662606, 
+                    0.15578852942263077, 
+                    0.15578852942263077, 
+                    0.13738379457856023, 
+                    0.13738379457856023, 
+                    0.11818716556130802, 
+                    0.11818716556130802, 
+                    0.10065370532665387, 
+                    0.10065370532665387
+                ], 
+                0.052623726427555084
+            ], 
+            [
+                0.9729415774345398, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999460286791447, 
+                    0.9999460286791447, 
+                    0.9999460286791447, 
+                    0.9999460286791447, 
+                    0.9944997680539535, 
+                    0.9944997680539535, 
+                    0.9851983837015111, 
+                    0.9851983837015111, 
+                    0.9712296782807659, 
+                    0.9712296782807659, 
+                    0.9512088040984016, 
+                    0.9512088040984016, 
+                    0.9252830124168699, 
+                    0.9252830124168699, 
+                    0.8930037469633538, 
+                    0.8930037469633538, 
+                    0.8554080210502524, 
+                    0.8554080210502524, 
+                    0.8149969083308026, 
+                    0.8149969083308026, 
+                    0.774705165945859, 
+                    0.774705165945859, 
+                    0.7339739697523913, 
+                    0.7339739697523913, 
+                    0.692537875907184, 
+                    0.692537875907184, 
+                    0.6525484583331561, 
+                    0.6525484583331561, 
+                    0.613814349341413, 
+                    0.613814349341413, 
+                    0.5772534504416812, 
+                    0.5772534504416812, 
+                    0.5414409732851979, 
+                    0.5414409732851979, 
+                    0.5087334261545507, 
+                    0.5087334261545507, 
+                    0.4771125195494925, 
+                    0.4771125195494925, 
+                    0.4468467799444748, 
+                    0.4468467799444748, 
+                    0.41749187979495755, 
+                    0.41749187979495755, 
+                    0.3910620364477835, 
+                    0.3910620364477835, 
+                    0.36508929637389015, 
+                    0.36508929637389015, 
+                    0.34139279445099463, 
+                    0.34139279445099463, 
+                    0.31869419721800224, 
+                    0.31869419721800224, 
+                    0.29884388809035684, 
+                    0.29884388809035684, 
+                    0.2804304147347779, 
+                    0.2804304147347779, 
+                    0.2642337308656564, 
+                    0.2642337308656564, 
+                    0.2495006337268798, 
+                    0.2495006337268798, 
+                    0.23649070130330854, 
+                    0.23649070130330854, 
+                    0.2245767040040428, 
+                    0.2245767040040428, 
+                    0.21372665929681872, 
+                    0.21372665929681872, 
+                    0.2069708915139166, 
+                    0.2069708915139166, 
+                    0.2069708915139166, 
+                    0.2069708915139166, 
+                    0.20649148640766932, 
+                    0.20649148640766932, 
+                    0.19026677770982675, 
+                    0.19026677770982675, 
+                    0.17329049582277717, 
+                    0.17329049582277717, 
+                    0.15553079994393032, 
+                    0.15553079994393032, 
+                    0.1370613536752093, 
+                    0.1370613536752093, 
+                    0.11789304339151258, 
+                    0.11789304339151258, 
+                    0.10055963410440363, 
+                    0.10055963410440363
+                ], 
+                0.048972003161907196
+            ], 
+            [
+                0.9796367287635803, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999679520506605, 
+                    0.9999679520506605, 
+                    0.9999427090509084, 
+                    0.9999427090509084, 
+                    0.9944311991541751, 
+                    0.9944311991541751, 
+                    0.9855550715274923, 
+                    0.9855550715274923, 
+                    0.9711854962509252, 
+                    0.9711854962509252, 
+                    0.9509352614131031, 
+                    0.9509352614131031, 
+                    0.9241871439465486, 
+                    0.9241871439465486, 
+                    0.891136455726596, 
+                    0.891136455726596, 
+                    0.8531504828077631, 
+                    0.8531504828077631, 
+                    0.8124547028656574, 
+                    0.8124547028656574, 
+                    0.7718703032180674, 
+                    0.7718703032180674, 
+                    0.7310515515936126, 
+                    0.7310515515936126, 
+                    0.6895697351095202, 
+                    0.6895697351095202, 
+                    0.6494753474108572, 
+                    0.6494753474108572, 
+                    0.6109483133018571, 
+                    0.6109483133018571, 
+                    0.573920849429175, 
+                    0.573920849429175, 
+                    0.5391081121982201, 
+                    0.5391081121982201, 
+                    0.5052126649616974, 
+                    0.5052126649616974, 
+                    0.4749615462495283, 
+                    0.4749615462495283, 
+                    0.44369757680228694, 
+                    0.44369757680228694, 
+                    0.4153085714110415, 
+                    0.4153085714110415, 
+                    0.388442042953578, 
+                    0.388442042953578, 
+                    0.36286361105091613, 
+                    0.36286361105091613, 
+                    0.33918585174483373, 
+                    0.33918585174483373, 
+                    0.3166295699258211, 
+                    0.3166295699258211, 
+                    0.29688603421981813, 
+                    0.29688603421981813, 
+                    0.27857484889137873, 
+                    0.27857484889137873, 
+                    0.26247282281376716, 
+                    0.26247282281376716, 
+                    0.24783010137477285, 
+                    0.24783010137477285, 
+                    0.23490410956683316, 
+                    0.23490410956683316, 
+                    0.22305111852850765, 
+                    0.22305111852850765, 
+                    0.21223462834339712, 
+                    0.21223462834339712, 
+                    0.20675890524071616, 
+                    0.20675890524071616, 
+                    0.20675890524071616, 
+                    0.20675890524071616, 
+                    0.20525424720160257, 
+                    0.20525424720160257, 
+                    0.18946053779888117, 
+                    0.18946053779888117, 
+                    0.17270965590677273, 
+                    0.17270965590677273, 
+                    0.155105058420889, 
+                    0.155105058420889, 
+                    0.13676653167159222, 
+                    0.13676653167159222, 
+                    0.1177141432730418, 
+                    0.1177141432730418, 
+                    0.10052260432728143, 
+                    0.10052260432728143
+                ], 
+                0.04559671878814697
+            ], 
+            [
+                0.986378014087677, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995149155102017, 
+                    0.9995149155102017, 
+                    0.9941224082290271, 
+                    0.9941224082290271, 
+                    0.9846901037399095, 
+                    0.9846901037399095, 
+                    0.9697697686528881, 
+                    0.9697697686528881, 
+                    0.9492238826827027, 
+                    0.9492238826827027, 
+                    0.9224187840309481, 
+                    0.9224187840309481, 
+                    0.889128819800843, 
+                    0.889128819800843, 
+                    0.8508153284994173, 
+                    0.8508153284994173, 
+                    0.8097894180487691, 
+                    0.8097894180487691, 
+                    0.7690757103107289, 
+                    0.7690757103107289, 
+                    0.7281403914792461, 
+                    0.7281403914792461, 
+                    0.6865304358485442, 
+                    0.6865304358485442, 
+                    0.6464447402597244, 
+                    0.6464447402597244, 
+                    0.6078696404471279, 
+                    0.6078696404471279, 
+                    0.5711117303533966, 
+                    0.5711117303533966, 
+                    0.5359316842870798, 
+                    0.5359316842870798, 
+                    0.5026264744058018, 
+                    0.5026264744058018, 
+                    0.47210609734670567, 
+                    0.47210609734670567, 
+                    0.44099764555399557, 
+                    0.44099764555399557, 
+                    0.4129878856594716, 
+                    0.4129878856594716, 
+                    0.38577632550997126, 
+                    0.38577632550997126, 
+                    0.36079793132784127, 
+                    0.36079793132784127, 
+                    0.3368668542152742, 
+                    0.3368668542152742, 
+                    0.31465462402437766, 
+                    0.31465462402437766, 
+                    0.2949149274561688, 
+                    0.2949149274561688, 
+                    0.2767411533908933, 
+                    0.2767411533908933, 
+                    0.26072774976140956, 
+                    0.26072774976140956, 
+                    0.24617280698503358, 
+                    0.24617280698503358, 
+                    0.23332009363973105, 
+                    0.23332009363973105, 
+                    0.2215321609489829, 
+                    0.2215321609489829, 
+                    0.2107202764164884, 
+                    0.2107202764164884, 
+                    0.20638686453731864, 
+                    0.20638686453731864, 
+                    0.20638686453731864, 
+                    0.20638686453731864, 
+                    0.20537174096462615, 
+                    0.20537174096462615, 
+                    0.18940194059916624, 
+                    0.18940194059916624, 
+                    0.17242491096416876, 
+                    0.17242491096416876, 
+                    0.15467211260568894, 
+                    0.15467211260568894, 
+                    0.13628393396589303, 
+                    0.13628393396589303, 
+                    0.11728398371327563, 
+                    0.11728398371327563, 
+                    0.10037021143365063, 
+                    0.10037021143365063
+                ], 
+                0.04240451380610466
+            ], 
+            [
+                0.9931656718254089, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999859344817666, 
+                    0.9999859344817666, 
+                    0.9999859344817666, 
+                    0.9999859344817666, 
+                    0.9939253708040625, 
+                    0.9939253708040625, 
+                    0.984682574391439, 
+                    0.984682574391439, 
+                    0.9695423454422578, 
+                    0.9695423454422578, 
+                    0.9486166538697554, 
+                    0.9486166538697554, 
+                    0.9211501243727197, 
+                    0.9211501243727197, 
+                    0.8871004687828943, 
+                    0.8871004687828943, 
+                    0.848366646695765, 
+                    0.848366646695765, 
+                    0.8071629987909826, 
+                    0.8071629987909826, 
+                    0.7662509272552294, 
+                    0.7662509272552294, 
+                    0.7251864153049928, 
+                    0.7251864153049928, 
+                    0.6835130362185151, 
+                    0.6835130362185151, 
+                    0.6434459698256713, 
+                    0.6434459698256713, 
+                    0.6047638553908643, 
+                    0.6047638553908643, 
+                    0.5682736308052007, 
+                    0.5682736308052007, 
+                    0.5328163627350441, 
+                    0.5328163627350441, 
+                    0.5000166008744681, 
+                    0.5000166008744681, 
+                    0.46920092085976495, 
+                    0.46920092085976495, 
+                    0.43847484182618296, 
+                    0.43847484182618296, 
+                    0.41040712735450585, 
+                    0.41040712735450585, 
+                    0.3834032451152931, 
+                    0.3834032451152931, 
+                    0.3585067198801946, 
+                    0.3585067198801946, 
+                    0.3347091015340499, 
+                    0.3347091015340499, 
+                    0.3126042821794506, 
+                    0.3126042821794506, 
+                    0.2929806196073144, 
+                    0.2929806196073144, 
+                    0.2749088194999709, 
+                    0.2749088194999709, 
+                    0.2589919617845876, 
+                    0.2589919617845876, 
+                    0.2445250800916471, 
+                    0.2445250800916471, 
+                    0.23175993368220227, 
+                    0.23175993368220227, 
+                    0.22007517555288095, 
+                    0.22007517555288095, 
+                    0.2093789190303194, 
+                    0.2093789190303194, 
+                    0.2053752847195056, 
+                    0.2053752847195056, 
+                    0.2053752847195056, 
+                    0.2053752847195056, 
+                    0.2053752847195056, 
+                    0.2053752847195056, 
+                    0.1891960966015601, 
+                    0.1891960966015601, 
+                    0.17216368531376217, 
+                    0.17216368531376217, 
+                    0.1544152070486029, 
+                    0.1544152070486029, 
+                    0.13606511607797964, 
+                    0.13606511607797964, 
+                    0.11712594000546868, 
+                    0.11712594000546868, 
+                    0.10034289759374389, 
+                    0.10034289759374389
+                ], 
+                0.03939789533615112
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999702828163208, 
+                    0.9999702828163208, 
+                    0.9998737074358235, 
+                    0.9998737074358235, 
+                    0.993960668270375, 
+                    0.993960668270375, 
+                    0.9841144068368266, 
+                    0.9841144068368266, 
+                    0.9689849169436803, 
+                    0.9689849169436803, 
+                    0.9474945043070571, 
+                    0.9474945043070571, 
+                    0.9196519728676054, 
+                    0.9196519728676054, 
+                    0.885169223934571, 
+                    0.885169223934571, 
+                    0.8460373631963272, 
+                    0.8460373631963272, 
+                    0.8045023374976508, 
+                    0.8045023374976508, 
+                    0.7634014342153904, 
+                    0.7634014342153904, 
+                    0.7222402675798832, 
+                    0.7222402675798832, 
+                    0.6805041956893854, 
+                    0.6805041956893854, 
+                    0.6404027940432054, 
+                    0.6404027940432054, 
+                    0.6018206798831413, 
+                    0.6018206798831413, 
+                    0.565185525302189, 
+                    0.565185525302189, 
+                    0.5300855651583285, 
+                    0.5300855651583285, 
+                    0.49700769202689365, 
+                    0.49700769202689365, 
+                    0.46659712430989864, 
+                    0.46659712430989864, 
+                    0.43579400049294437, 
+                    0.43579400049294437, 
+                    0.4079110262704085, 
+                    0.4079110262704085, 
+                    0.38103079065978407, 
+                    0.38103079065978407, 
+                    0.35622206752019114, 
+                    0.35622206752019114, 
+                    0.33257071907047125, 
+                    0.33257071907047125, 
+                    0.31057346879257447, 
+                    0.31057346879257447, 
+                    0.2910602529659009, 
+                    0.2910602529659009, 
+                    0.27309241473275303, 
+                    0.27309241473275303, 
+                    0.25726880402765856, 
+                    0.25726880402765856, 
+                    0.24289017756911763, 
+                    0.24289017756911763, 
+                    0.23019642325433906, 
+                    0.23019642325433906, 
+                    0.21855421019975504, 
+                    0.21855421019975504, 
+                    0.20776461287104353, 
+                    0.20776461287104353, 
+                    0.20498538021840698, 
+                    0.20498538021840698, 
+                    0.20498538021840698, 
+                    0.20498538021840698, 
+                    0.20498538021840698, 
+                    0.20498538021840698, 
+                    0.1888519620064395, 
+                    0.1888519620064395, 
+                    0.17179128227979804, 
+                    0.17179128227979804, 
+                    0.1540309659991557, 
+                    0.1540309659991557, 
+                    0.13570934243514152, 
+                    0.13570934243514152, 
+                    0.116844346057544, 
+                    0.116844346057544, 
+                    0.1002744650911253, 
+                    0.1002744650911253
+                ], 
+                0.03655571490526199
+            ], 
+            [
+                1.0068813562393188, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999684091648624, 
+                    0.9999684091648624, 
+                    0.9999385641716849, 
+                    0.9999385641716849, 
+                    0.9942839408150842, 
+                    0.9942839408150842, 
+                    0.9846355723847502, 
+                    0.9846355723847502, 
+                    0.9693532356295879, 
+                    0.9693532356295879, 
+                    0.9474772310873119, 
+                    0.9474772310873119, 
+                    0.9186087183572207, 
+                    0.9186087183572207, 
+                    0.8831569031904913, 
+                    0.8831569031904913, 
+                    0.8435442507741133, 
+                    0.8435442507741133, 
+                    0.8017550543062295, 
+                    0.8017550543062295, 
+                    0.7605235394831856, 
+                    0.7605235394831856, 
+                    0.7192923798620104, 
+                    0.7192923798620104, 
+                    0.6774612790776844, 
+                    0.6774612790776844, 
+                    0.6373555427927868, 
+                    0.6373555427927868, 
+                    0.5987862646403084, 
+                    0.5987862646403084, 
+                    0.5621611503678848, 
+                    0.5621611503678848, 
+                    0.5272863553116911, 
+                    0.5272863553116911, 
+                    0.49398790893520667, 
+                    0.49398790893520667, 
+                    0.4641216438304745, 
+                    0.4641216438304745, 
+                    0.43284298104842445, 
+                    0.43284298104842445, 
+                    0.40573992748312043, 
+                    0.40573992748312043, 
+                    0.3783712863276202, 
+                    0.3783712863276202, 
+                    0.35412428414418906, 
+                    0.35412428414418906, 
+                    0.3303288755135283, 
+                    0.3303288755135283, 
+                    0.30858209316998597, 
+                    0.30858209316998597, 
+                    0.289124292844218, 
+                    0.289124292844218, 
+                    0.27127374083166345, 
+                    0.27127374083166345, 
+                    0.25553906021165507, 
+                    0.25553906021165507, 
+                    0.24124615013939715, 
+                    0.24124615013939715, 
+                    0.22864876946645424, 
+                    0.22864876946645424, 
+                    0.21725583886586838, 
+                    0.21725583886586838, 
+                    0.20653560290196096, 
+                    0.20653560290196096, 
+                    0.20149920622380255, 
+                    0.20149920622380255, 
+                    0.20149920622380255, 
+                    0.20149920622380255, 
+                    0.20149920622380255, 
+                    0.20149920622380255, 
+                    0.1879712575234145, 
+                    0.1879712575234145, 
+                    0.17113049004898243, 
+                    0.17113049004898243, 
+                    0.15358063546143275, 
+                    0.15358063546143275, 
+                    0.13544262998035966, 
+                    0.13544262998035966, 
+                    0.1167221794341934, 
+                    0.1167221794341934, 
+                    0.1002909976817082, 
+                    0.1002909976817082
+                ], 
+                0.03386517986655235
+            ], 
+            [
+                1.013810157775879, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999639740613967, 
+                    0.9999639740613967, 
+                    0.9998828942848528, 
+                    0.9998828942848528, 
+                    0.993475599587693, 
+                    0.993475599587693, 
+                    0.9834094210311551, 
+                    0.9834094210311551, 
+                    0.9674411112672857, 
+                    0.9674411112672857, 
+                    0.9451816270196503, 
+                    0.9451816270196503, 
+                    0.91642593468115, 
+                    0.91642593468115, 
+                    0.8810795009493168, 
+                    0.8810795009493168, 
+                    0.8412570296786246, 
+                    0.8412570296786246, 
+                    0.7991821510955632, 
+                    0.7991821510955632, 
+                    0.7577188842731967, 
+                    0.7577188842731967, 
+                    0.7163333784000658, 
+                    0.7163333784000658, 
+                    0.6744760188310136, 
+                    0.6744760188310136, 
+                    0.6343201883590307, 
+                    0.6343201883590307, 
+                    0.595823039759535, 
+                    0.595823039759535, 
+                    0.5592096315791935, 
+                    0.5592096315791935, 
+                    0.5243659604319434, 
+                    0.5243659604319434, 
+                    0.49133026031976457, 
+                    0.49133026031976457, 
+                    0.46122584368032105, 
+                    0.46122584368032105, 
+                    0.4305476952076372, 
+                    0.4305476952076372, 
+                    0.4029663905154951, 
+                    0.4029663905154951, 
+                    0.37627898807458776, 
+                    0.37627898807458776, 
+                    0.3517378075510006, 
+                    0.3517378075510006, 
+                    0.32831387077598273, 
+                    0.32831387077598273, 
+                    0.3065594185761047, 
+                    0.3065594185761047, 
+                    0.2872601440997097, 
+                    0.2872601440997097, 
+                    0.26949955287785393, 
+                    0.26949955287785393, 
+                    0.2538614582080182, 
+                    0.2538614582080182, 
+                    0.23965043516728957, 
+                    0.23965043516728957, 
+                    0.22708812251765909, 
+                    0.22708812251765909, 
+                    0.21557347101508184, 
+                    0.21557347101508184, 
+                    0.2047673334403379, 
+                    0.2047673334403379, 
+                    0.2047673334403379, 
+                    0.2047673334403379, 
+                    0.2047673334403379, 
+                    0.2047673334403379, 
+                    0.2047673334403379, 
+                    0.2047673334403379, 
+                    0.18855947369528453, 
+                    0.18855947369528453, 
+                    0.17135523666321742, 
+                    0.17135523666321742, 
+                    0.15350051636720027, 
+                    0.15350051636720027, 
+                    0.1351739765383482, 
+                    0.1351739765383482, 
+                    0.11639897979149047, 
+                    0.11639897979149047, 
+                    0.1001527997156258, 
+                    0.1001527997156258
+                ], 
+                0.031385987997055054
+            ], 
+            [
+                1.0207865238189697, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999803066063528, 
+                    0.9999803066063528, 
+                    0.9999324228937154, 
+                    0.9999324228937154, 
+                    0.9940535170703325, 
+                    0.9940535170703325, 
+                    0.9842124277655121, 
+                    0.9842124277655121, 
+                    0.96843906434411, 
+                    0.96843906434411, 
+                    0.9456584064071957, 
+                    0.9456584064071957, 
+                    0.9154409592501342, 
+                    0.9154409592501342, 
+                    0.8789219444416363, 
+                    0.8789219444416363, 
+                    0.8386232369177197, 
+                    0.8386232369177197, 
+                    0.7963725086634007, 
+                    0.7963725086634007, 
+                    0.7547895475745258, 
+                    0.7547895475745258, 
+                    0.7133088825522427, 
+                    0.7133088825522427, 
+                    0.6714191252233082, 
+                    0.6714191252233082, 
+                    0.6312446029489676, 
+                    0.6312446029489676, 
+                    0.5928145718435825, 
+                    0.5928145718435825, 
+                    0.556192060693008, 
+                    0.556192060693008, 
+                    0.5214768892836853, 
+                    0.5214768892836853, 
+                    0.48850446924473234, 
+                    0.48850446924473234, 
+                    0.458469137670991, 
+                    0.458469137670991, 
+                    0.42799321132436857, 
+                    0.42799321132436857, 
+                    0.40039675514745227, 
+                    0.40039675514745227, 
+                    0.37395945978530776, 
+                    0.37395945978530776, 
+                    0.3494437367846365, 
+                    0.3494437367846365, 
+                    0.32619680390550043, 
+                    0.32619680390550043, 
+                    0.30453210007069703, 
+                    0.30453210007069703, 
+                    0.2853547317301344, 
+                    0.2853547317301344, 
+                    0.26769516417370504, 
+                    0.26769516417370504, 
+                    0.25215547677565736, 
+                    0.25215547677565736, 
+                    0.23804409710969077, 
+                    0.23804409710969077, 
+                    0.22560051543996418, 
+                    0.22560051543996418, 
+                    0.2141771763270212, 
+                    0.2141771763270212, 
+                    0.2033200900233156, 
+                    0.2033200900233156, 
+                    0.19943977102829247, 
+                    0.19943977102829247, 
+                    0.19943977102829247, 
+                    0.19943977102829247, 
+                    0.19943977102829247, 
+                    0.19943977102829247, 
+                    0.18806059779662107, 
+                    0.18806059779662107, 
+                    0.17095955707581909, 
+                    0.17095955707581909, 
+                    0.1532881158095279, 
+                    0.1532881158095279, 
+                    0.13512541664681063, 
+                    0.13512541664681063, 
+                    0.11645663496311907, 
+                    0.11645663496311907, 
+                    0.10023260098647936, 
+                    0.10023260098647936
+                ], 
+                0.02900361269712448
+            ], 
+            [
+                1.0278109312057495, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999281776670036, 
+                    0.9999281776670036, 
+                    0.9940987106056971, 
+                    0.9940987106056971, 
+                    0.9843071890723802, 
+                    0.9843071890723802, 
+                    0.9683470978449251, 
+                    0.9683470978449251, 
+                    0.944763154541496, 
+                    0.944763154541496, 
+                    0.9139232274809023, 
+                    0.9139232274809023, 
+                    0.8767877173707799, 
+                    0.8767877173707799, 
+                    0.8361304700620041, 
+                    0.8361304700620041, 
+                    0.7936190339985701, 
+                    0.7936190339985701, 
+                    0.7519282439175193, 
+                    0.7519282439175193, 
+                    0.710343783121599, 
+                    0.710343783121599, 
+                    0.6683768211100812, 
+                    0.6683768211100812, 
+                    0.628269378458953, 
+                    0.628269378458953, 
+                    0.5896405684081113, 
+                    0.5896405684081113, 
+                    0.5535241895681927, 
+                    0.5535241895681927, 
+                    0.5181992718722612, 
+                    0.5181992718722612, 
+                    0.48610916632398127, 
+                    0.48610916632398127, 
+                    0.45547797316488037, 
+                    0.45547797316488037, 
+                    0.42561687164380746, 
+                    0.42561687164380746, 
+                    0.39780693320702326, 
+                    0.39780693320702326, 
+                    0.37168128928960015, 
+                    0.37168128928960015, 
+                    0.34719535373131416, 
+                    0.34719535373131416, 
+                    0.3241048820126835, 
+                    0.3241048820126835, 
+                    0.3025461412475728, 
+                    0.3025461412475728, 
+                    0.2834796892197375, 
+                    0.2834796892197375, 
+                    0.2659219711161688, 
+                    0.2659219711161688, 
+                    0.2504738719744871, 
+                    0.2504738719744871, 
+                    0.23644441828053167, 
+                    0.23644441828053167, 
+                    0.22406671880344806, 
+                    0.22406671880344806, 
+                    0.21271819045059917, 
+                    0.21271819045059917, 
+                    0.20224400306979537, 
+                    0.20224400306979537, 
+                    0.19882588843233287, 
+                    0.19882588843233287, 
+                    0.19882588843233287, 
+                    0.19882588843233287, 
+                    0.19882588843233287, 
+                    0.19882588843233287, 
+                    0.18773435451166984, 
+                    0.18773435451166984, 
+                    0.17067733405938157, 
+                    0.17067733405938157, 
+                    0.15306014833595719, 
+                    0.15306014833595719, 
+                    0.13495829627460024, 
+                    0.13495829627460024, 
+                    0.11635249600781052, 
+                    0.11635249600781052, 
+                    0.10021520330113626, 
+                    0.10021520330113626
+                ], 
+                0.02682485803961754
+            ], 
+            [
+                1.034883737564087, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999663599226731, 
+                    0.9999663599226731, 
+                    0.9998421582071764, 
+                    0.9998421582071764, 
+                    0.9938852061470774, 
+                    0.9938852061470774, 
+                    0.9839370200680563, 
+                    0.9839370200680563, 
+                    0.9675708933728514, 
+                    0.9675708933728514, 
+                    0.9436154097249986, 
+                    0.9436154097249986, 
+                    0.9121867365021166, 
+                    0.9121867365021166, 
+                    0.8746007079649855, 
+                    0.8746007079649855, 
+                    0.8336088948650454, 
+                    0.8336088948650454, 
+                    0.7908788558233801, 
+                    0.7908788558233801, 
+                    0.7490340511821827, 
+                    0.7490340511821827, 
+                    0.7073494331981511, 
+                    0.7073494331981511, 
+                    0.6653324573805005, 
+                    0.6653324573805005, 
+                    0.6252347486553086, 
+                    0.6252347486553086, 
+                    0.5866113559243183, 
+                    0.5866113559243183, 
+                    0.5505818356862466, 
+                    0.5505818356862466, 
+                    0.5152982434070078, 
+                    0.5152982434070078, 
+                    0.4833471358640222, 
+                    0.4833471358640222, 
+                    0.4527763064630922, 
+                    0.4527763064630922, 
+                    0.42305671710695847, 
+                    0.42305671710695847, 
+                    0.3953429233976385, 
+                    0.3953429233976385, 
+                    0.36935598439744466, 
+                    0.36935598439744466, 
+                    0.34498087349290324, 
+                    0.34498087349290324, 
+                    0.32201657628314406, 
+                    0.32201657628314406, 
+                    0.30057360977780123, 
+                    0.30057360977780123, 
+                    0.2816167761158694, 
+                    0.2816167761158694, 
+                    0.2641619683121683, 
+                    0.2641619683121683, 
+                    0.24880724088820955, 
+                    0.24880724088820955, 
+                    0.23486495968348, 
+                    0.23486495968348, 
+                    0.22256556650947998, 
+                    0.22256556650947998, 
+                    0.2112871130655398, 
+                    0.2112871130655398, 
+                    0.20080423862217256, 
+                    0.20080423862217256, 
+                    0.19783739508041354, 
+                    0.19783739508041354, 
+                    0.19783739508041354, 
+                    0.19783739508041354, 
+                    0.19783739508041354, 
+                    0.19783739508041354, 
+                    0.1889123828175122, 
+                    0.1889123828175122, 
+                    0.17136969310334524, 
+                    0.17136969310334524, 
+                    0.15343291484872032, 
+                    0.15343291484872032, 
+                    0.13511699808644176, 
+                    0.13511699808644176, 
+                    0.11638371995472249, 
+                    0.11638371995472249, 
+                    0.10018222317443762, 
+                    0.10018222317443762
+                ], 
+                0.024770047515630722
+            ], 
+            [
+                1.042005181312561, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998029813886048, 
+                    0.9998029813886048, 
+                    0.993720131799368, 
+                    0.993720131799368, 
+                    0.9835755553555487, 
+                    0.9835755553555487, 
+                    0.966755839604326, 
+                    0.966755839604326, 
+                    0.9423297551815372, 
+                    0.9423297551815372, 
+                    0.9104645899303522, 
+                    0.9104645899303522, 
+                    0.8724156741684025, 
+                    0.8724156741684025, 
+                    0.8310508577067014, 
+                    0.8310508577067014, 
+                    0.7880961555899755, 
+                    0.7880961555899755, 
+                    0.7461020124327432, 
+                    0.7461020124327432, 
+                    0.7043367081715876, 
+                    0.7043367081715876, 
+                    0.662280269794461, 
+                    0.662280269794461, 
+                    0.6221912525493718, 
+                    0.6221912525493718, 
+                    0.5835868054884171, 
+                    0.5835868054884171, 
+                    0.5476529134669029, 
+                    0.5476529134669029, 
+                    0.5123972122309124, 
+                    0.5123972122309124, 
+                    0.4805690831589453, 
+                    0.4805690831589453, 
+                    0.4500896215723293, 
+                    0.4500896215723293, 
+                    0.42048104528872454, 
+                    0.42048104528872454, 
+                    0.39289901816319206, 
+                    0.39289901816319206, 
+                    0.36702249378631185, 
+                    0.36702249378631185, 
+                    0.34277809470789744, 
+                    0.34277809470789744, 
+                    0.3199302911554947, 
+                    0.3199302911554947, 
+                    0.29860714423135437, 
+                    0.29860714423135437, 
+                    0.2797583350673722, 
+                    0.2797583350673722, 
+                    0.26240703705611373, 
+                    0.26240703705611373, 
+                    0.2471462521838431, 
+                    0.2471462521838431, 
+                    0.233293212624675, 
+                    0.233293212624675, 
+                    0.22108108322828313, 
+                    0.22108108322828313, 
+                    0.20988181199543174, 
+                    0.20988181199543174, 
+                    0.19928287167773165, 
+                    0.19928287167773165, 
+                    0.1956020910049082, 
+                    0.1956020910049082, 
+                    0.1956020910049082, 
+                    0.1956020910049082, 
+                    0.1956020910049082, 
+                    0.1956020910049082, 
+                    0.18965213413067059, 
+                    0.18965213413067059, 
+                    0.1717641594359583, 
+                    0.1717641594359583, 
+                    0.1535963373397325, 
+                    0.1535963373397325, 
+                    0.13513591257045635, 
+                    0.13513591257045635, 
+                    0.11633230220466655, 
+                    0.11633230220466655, 
+                    0.10014970795126664, 
+                    0.10014970795126664
+                ], 
+                0.022833671420812607
+            ], 
+            [
+                1.0491756200790405, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999409498683626, 
+                    0.9999409498683626, 
+                    0.9936621039389815, 
+                    0.9936621039389815, 
+                    0.9832910246239349, 
+                    0.9832910246239349, 
+                    0.9661194933825902, 
+                    0.9661194933825902, 
+                    0.94117631811449, 
+                    0.94117631811449, 
+                    0.90862265538204, 
+                    0.90862265538204, 
+                    0.8700713115877324, 
+                    0.8700713115877324, 
+                    0.8284281646889984, 
+                    0.8284281646889984, 
+                    0.7852795654638448, 
+                    0.7852795654638448, 
+                    0.7431577864999291, 
+                    0.7431577864999291, 
+                    0.7013323032156573, 
+                    0.7013323032156573, 
+                    0.6592326805221447, 
+                    0.6592326805221447, 
+                    0.6191530508823715, 
+                    0.6191530508823715, 
+                    0.5805607848686754, 
+                    0.5805607848686754, 
+                    0.5447130781078015, 
+                    0.5447130781078015, 
+                    0.5095213946610747, 
+                    0.5095213946610747, 
+                    0.4777997253923777, 
+                    0.4777997253923777, 
+                    0.4474210551352339, 
+                    0.4474210551352339, 
+                    0.4179217823150328, 
+                    0.4179217823150328, 
+                    0.3904682409765571, 
+                    0.3904682409765571, 
+                    0.3647073368451467, 
+                    0.3647073368451467, 
+                    0.34058970414541184, 
+                    0.34058970414541184, 
+                    0.3178593132062626, 
+                    0.3178593132062626, 
+                    0.29665530265419543, 
+                    0.29665530265419543, 
+                    0.27791341224408456, 
+                    0.27791341224408456, 
+                    0.2606626308702207, 
+                    0.2606626308702207, 
+                    0.24549054550466576, 
+                    0.24549054550466576, 
+                    0.23171606820916615, 
+                    0.23171606820916615, 
+                    0.21959514684729498, 
+                    0.21959514684729498, 
+                    0.20870552012948174, 
+                    0.20870552012948174, 
+                    0.19813458772317846, 
+                    0.19813458772317846, 
+                    0.19439296182694674, 
+                    0.19439296182694674, 
+                    0.19439296182694674, 
+                    0.19439296182694674, 
+                    0.19439296182694674, 
+                    0.19439296182694674, 
+                    0.18791484113883067, 
+                    0.18791484113883067, 
+                    0.17052064399926853, 
+                    0.17052064399926853, 
+                    0.1526888767987457, 
+                    0.1526888767987457, 
+                    0.13450606236763665, 
+                    0.13450606236763665, 
+                    0.11594379282875872, 
+                    0.11594379282875872, 
+                    0.10011786479419747, 
+                    0.10011786479419747
+                ], 
+                0.021052055060863495
+            ], 
+            [
+                1.056395411491394, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999966605296072, 
+                    0.9999966605296072, 
+                    0.9999895359353903, 
+                    0.9999895359353903, 
+                    0.9937120830823014, 
+                    0.9937120830823014, 
+                    0.9832357405016391, 
+                    0.9832357405016391, 
+                    0.9657223686237094, 
+                    0.9657223686237094, 
+                    0.9400395771671258, 
+                    0.9400395771671258, 
+                    0.9067135589187393, 
+                    0.9067135589187393, 
+                    0.8677689886903315, 
+                    0.8677689886903315, 
+                    0.8258740140221239, 
+                    0.8258740140221239, 
+                    0.7824956215099108, 
+                    0.7824956215099108, 
+                    0.7402342838057653, 
+                    0.7402342838057653, 
+                    0.6983136962326679, 
+                    0.6983136962326679, 
+                    0.656166901933539, 
+                    0.656166901933539, 
+                    0.6161133581392725, 
+                    0.6161133581392725, 
+                    0.5775320040036841, 
+                    0.5775320040036841, 
+                    0.541800226694507, 
+                    0.541800226694507, 
+                    0.5066320657043341, 
+                    0.5066320657043341, 
+                    0.4750491509769489, 
+                    0.4750491509769489, 
+                    0.44475411990757147, 
+                    0.44475411990757147, 
+                    0.4153748711932118, 
+                    0.4153748711932118, 
+                    0.3880476391437371, 
+                    0.3880476391437371, 
+                    0.3624035832809248, 
+                    0.3624035832809248, 
+                    0.3384126618053325, 
+                    0.3384126618053325, 
+                    0.3158021056885057, 
+                    0.3158021056885057, 
+                    0.29471720827888165, 
+                    0.29471720827888165, 
+                    0.27608347462202354, 
+                    0.27608347462202354, 
+                    0.25893631380094767, 
+                    0.25893631380094767, 
+                    0.24385858796535625, 
+                    0.24385858796535625, 
+                    0.23017369818858363, 
+                    0.23017369818858363, 
+                    0.2181057820289539, 
+                    0.2181057820289539, 
+                    0.20705160408079354, 
+                    0.20705160408079354, 
+                    0.19684416844401517, 
+                    0.19684416844401517, 
+                    0.1932188370608856, 
+                    0.1932188370608856, 
+                    0.1932188370608856, 
+                    0.1932188370608856, 
+                    0.1932188370608856, 
+                    0.1932188370608856, 
+                    0.18826669976920038, 
+                    0.18826669976920038, 
+                    0.17068374709094705, 
+                    0.17068374709094705, 
+                    0.1527734635824234, 
+                    0.1527734635824234, 
+                    0.13455648674268278, 
+                    0.13455648674268278, 
+                    0.11597975224239747, 
+                    0.11597975224239747, 
+                    0.10012215744014691, 
+                    0.10012215744014691
+                ], 
+                0.01937451772391796
+            ], 
+            [
+                1.0636647939682007, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998509894357237, 
+                    0.9998509894357237, 
+                    0.9935785756650518, 
+                    0.9935785756650518, 
+                    0.9829558740120193, 
+                    0.9829558740120193, 
+                    0.9650084272735892, 
+                    0.9650084272735892, 
+                    0.9387326430581681, 
+                    0.9387326430581681, 
+                    0.9048357692263379, 
+                    0.9048357692263379, 
+                    0.8654456129986386, 
+                    0.8654456129986386, 
+                    0.8232624406137251, 
+                    0.8232624406137251, 
+                    0.7796717797482093, 
+                    0.7796717797482093, 
+                    0.7372907935030741, 
+                    0.7372907935030741, 
+                    0.6952859327396487, 
+                    0.6952859327396487, 
+                    0.6531595412866203, 
+                    0.6531595412866203, 
+                    0.6129158196296078, 
+                    0.6129158196296078, 
+                    0.574845436089878, 
+                    0.574845436089878, 
+                    0.5383663616518558, 
+                    0.5383663616518558, 
+                    0.504362094448728, 
+                    0.504362094448728, 
+                    0.4717673486515696, 
+                    0.4717673486515696, 
+                    0.44244327170142866, 
+                    0.44244327170142866, 
+                    0.4126294778629819, 
+                    0.4126294778629819, 
+                    0.3857477391344686, 
+                    0.3857477391344686, 
+                    0.3600586050709626, 
+                    0.3600586050709626, 
+                    0.336265988854537, 
+                    0.336265988854537, 
+                    0.3137480585343533, 
+                    0.3137480585343533, 
+                    0.2927905486241165, 
+                    0.2927905486241165, 
+                    0.27426276953926837, 
+                    0.27426276953926837, 
+                    0.2572186152980667, 
+                    0.2572186152980667, 
+                    0.24223446368736126, 
+                    0.24223446368736126, 
+                    0.22863763092997194, 
+                    0.22863763092997194, 
+                    0.21665531553674672, 
+                    0.21665531553674672, 
+                    0.205684731247598, 
+                    0.205684731247598, 
+                    0.19529386179537042, 
+                    0.19529386179537042, 
+                    0.19172454489293211, 
+                    0.19172454489293211, 
+                    0.19172454489293211, 
+                    0.19172454489293211, 
+                    0.19172454489293211, 
+                    0.19172454489293211, 
+                    0.18812502859528188, 
+                    0.18812502859528188, 
+                    0.17051243200358007, 
+                    0.17051243200358007, 
+                    0.15258495200252542, 
+                    0.15258495200252542, 
+                    0.1343763392429166, 
+                    0.1343763392429166, 
+                    0.11583480634727447, 
+                    0.11583480634727447, 
+                    0.10010230242197349, 
+                    0.10010230242197349
+                ], 
+                0.01781034655869007
+            ], 
+            [
+                1.0709843635559082, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999966592658825, 
+                    0.9999966592658825, 
+                    0.9999943827600413, 
+                    0.9999943827600413, 
+                    0.9934803270229732, 
+                    0.9934803270229732, 
+                    0.982780982997008, 
+                    0.982780982997008, 
+                    0.9645639727006423, 
+                    0.9645639727006423, 
+                    0.9376874074069392, 
+                    0.9376874074069392, 
+                    0.9030853931046838, 
+                    0.9030853931046838, 
+                    0.863161390710171, 
+                    0.863161390710171, 
+                    0.8206224155603046, 
+                    0.8206224155603046, 
+                    0.7768365876468191, 
+                    0.7768365876468191, 
+                    0.7343341443606997, 
+                    0.7343341443606997, 
+                    0.6922509325120608, 
+                    0.6922509325120608, 
+                    0.6501049192513028, 
+                    0.6501049192513028, 
+                    0.6098647952121946, 
+                    0.6098647952121946, 
+                    0.5718457953815204, 
+                    0.5718457953815204, 
+                    0.5354221879966202, 
+                    0.5354221879966202, 
+                    0.5015143249230672, 
+                    0.5015143249230672, 
+                    0.46900550620308734, 
+                    0.46900550620308734, 
+                    0.4398055406896677, 
+                    0.4398055406896677, 
+                    0.41009211925756384, 
+                    0.41009211925756384, 
+                    0.38334979150854026, 
+                    0.38334979150854026, 
+                    0.3577719903945907, 
+                    0.3577719903945907, 
+                    0.3341101920608636, 
+                    0.3341101920608636, 
+                    0.3117091907979833, 
+                    0.3117091907979833, 
+                    0.2908711476078461, 
+                    0.2908711476078461, 
+                    0.2724500681999842, 
+                    0.2724500681999842, 
+                    0.25550725129826024, 
+                    0.25550725129826024, 
+                    0.24061333905368806, 
+                    0.24061333905368806, 
+                    0.22709839703913626, 
+                    0.22709839703913626, 
+                    0.21518216402864557, 
+                    0.21518216402864557, 
+                    0.20426957527445147, 
+                    0.20426957527445147, 
+                    0.1942506241045761, 
+                    0.1942506241045761, 
+                    0.1900071085535529, 
+                    0.1900071085535529, 
+                    0.1900071085535529, 
+                    0.1900071085535529, 
+                    0.1900071085535529, 
+                    0.1900071085535529, 
+                    0.18836072337360052, 
+                    0.18836072337360052, 
+                    0.17059410573907596, 
+                    0.17059410573907596, 
+                    0.1525761326323487, 
+                    0.1525761326323487, 
+                    0.13432200833711555, 
+                    0.13432200833711555, 
+                    0.11577180952627796, 
+                    0.11577180952627796, 
+                    0.10009128789456555, 
+                    0.10009128789456555
+                ], 
+                0.01636335253715515
+            ]
+        ]
+    }, 
+    {
+        "block_size": 87, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9344444274902344, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999523788334019, 
+                    0.9999523788334019, 
+                    0.9997957518714845, 
+                    0.9997957518714845, 
+                    0.9945730944984059, 
+                    0.9945730944984059, 
+                    0.9863439619319709, 
+                    0.9863439619319709, 
+                    0.9721165412659077, 
+                    0.9721165412659077, 
+                    0.9524472623159776, 
+                    0.9524472623159776, 
+                    0.9264637518931219, 
+                    0.9264637518931219, 
+                    0.8939321360952772, 
+                    0.8939321360952772, 
+                    0.8557786630110655, 
+                    0.8557786630110655, 
+                    0.8155409237231332, 
+                    0.8155409237231332, 
+                    0.775315545774196, 
+                    0.775315545774196, 
+                    0.7348186874955512, 
+                    0.7348186874955512, 
+                    0.6943726792056242, 
+                    0.6943726792056242, 
+                    0.6543561638874485, 
+                    0.6543561638874485, 
+                    0.6156548259161009, 
+                    0.6156548259161009, 
+                    0.577925353142845, 
+                    0.577925353142845, 
+                    0.5407367872844644, 
+                    0.5407367872844644, 
+                    0.5063420807926171, 
+                    0.5063420807926171, 
+                    0.4739500194373088, 
+                    0.4739500194373088, 
+                    0.4439935598032082, 
+                    0.4439935598032082, 
+                    0.41539248851101307, 
+                    0.41539248851101307, 
+                    0.3890708516105873, 
+                    0.3890708516105873, 
+                    0.3633866222000878, 
+                    0.3633866222000878, 
+                    0.33992310278743143, 
+                    0.33992310278743143, 
+                    0.3179073905931915, 
+                    0.3179073905931915, 
+                    0.29855224063941155, 
+                    0.29855224063941155, 
+                    0.2799733695930357, 
+                    0.2799733695930357, 
+                    0.2638533647321483, 
+                    0.2638533647321483, 
+                    0.24937216176987506, 
+                    0.24937216176987506, 
+                    0.23592164959630532, 
+                    0.23592164959630532, 
+                    0.22374811540226622, 
+                    0.22374811540226622, 
+                    0.21271824757319563, 
+                    0.21271824757319563, 
+                    0.20561893528691946, 
+                    0.20561893528691946, 
+                    0.20561893528691946, 
+                    0.20561893528691946, 
+                    0.20561893528691946, 
+                    0.20561893528691946, 
+                    0.19156153418666158, 
+                    0.19156153418666158, 
+                    0.17454965986673873, 
+                    0.17454965986673873, 
+                    0.15661143124191637, 
+                    0.15661143124191637, 
+                    0.13791852773578162, 
+                    0.13791852773578162, 
+                    0.11849430636757997, 
+                    0.11849430636757997, 
+                    0.10045786384277118, 
+                    0.10045786384277118
+                ], 
+                0.047456931322813034
+            ], 
+            [
+                0.9408017992973328, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999998448758789, 
+                    0.999998448758789, 
+                    0.9995568778222186, 
+                    0.9995568778222186, 
+                    0.994533206201789, 
+                    0.994533206201789, 
+                    0.9863997535981046, 
+                    0.9863997535981046, 
+                    0.9724419465166063, 
+                    0.9724419465166063, 
+                    0.9527043251645988, 
+                    0.9527043251645988, 
+                    0.925928593191919, 
+                    0.925928593191919, 
+                    0.8922111480987139, 
+                    0.8922111480987139, 
+                    0.853515321911317, 
+                    0.853515321911317, 
+                    0.8129724052341374, 
+                    0.8129724052341374, 
+                    0.7725587224417547, 
+                    0.7725587224417547, 
+                    0.7319618121804843, 
+                    0.7319618121804843, 
+                    0.6914421725751357, 
+                    0.6914421725751357, 
+                    0.65137313036386, 
+                    0.65137313036386, 
+                    0.6127304402208738, 
+                    0.6127304402208738, 
+                    0.5748979583678211, 
+                    0.5748979583678211, 
+                    0.5379659577428677, 
+                    0.5379659577428677, 
+                    0.5034559526012168, 
+                    0.5034559526012168, 
+                    0.47122460615805906, 
+                    0.47122460615805906, 
+                    0.4413837448135821, 
+                    0.4413837448135821, 
+                    0.413004586965911, 
+                    0.413004586965911, 
+                    0.3864186363214323, 
+                    0.3864186363214323, 
+                    0.3614651484384156, 
+                    0.3614651484384156, 
+                    0.337445513064745, 
+                    0.337445513064745, 
+                    0.31605127132628735, 
+                    0.31605127132628735, 
+                    0.29654428382269965, 
+                    0.29654428382269965, 
+                    0.2781513044839245, 
+                    0.2781513044839245, 
+                    0.26210794345552624, 
+                    0.26210794345552624, 
+                    0.2477148212229805, 
+                    0.2477148212229805, 
+                    0.2343453259205398, 
+                    0.2343453259205398, 
+                    0.2222729028177606, 
+                    0.2222729028177606, 
+                    0.21138744111307742, 
+                    0.21138744111307742, 
+                    0.202492582871749, 
+                    0.202492582871749, 
+                    0.202492582871749, 
+                    0.202492582871749, 
+                    0.202492582871749, 
+                    0.202492582871749, 
+                    0.19038055490168285, 
+                    0.19038055490168285, 
+                    0.17378364459953388, 
+                    0.17378364459953388, 
+                    0.15616928657500914, 
+                    0.15616928657500914, 
+                    0.13772429279637916, 
+                    0.13772429279637916, 
+                    0.11846724317976161, 
+                    0.11846724317976161, 
+                    0.10051628443603686, 
+                    0.10051628443603686
+                ], 
+                0.04413589462637901
+            ], 
+            [
+                0.9472023844718933, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9946183291244408, 
+                    0.9946183291244408, 
+                    0.9859574501468391, 
+                    0.9859574501468391, 
+                    0.9716272586527313, 
+                    0.9716272586527313, 
+                    0.9515163440305262, 
+                    0.9515163440305262, 
+                    0.9245692351748241, 
+                    0.9245692351748241, 
+                    0.890293807722271, 
+                    0.890293807722271, 
+                    0.8511284952405774, 
+                    0.8511284952405774, 
+                    0.8103143810172195, 
+                    0.8103143810172195, 
+                    0.7697840081881167, 
+                    0.7697840081881167, 
+                    0.7290640271806541, 
+                    0.7290640271806541, 
+                    0.6884666124870793, 
+                    0.6884666124870793, 
+                    0.6483906405248026, 
+                    0.6483906405248026, 
+                    0.6097213053570484, 
+                    0.6097213053570484, 
+                    0.5720792629724893, 
+                    0.5720792629724893, 
+                    0.5349315137532623, 
+                    0.5349315137532623, 
+                    0.5008523547611122, 
+                    0.5008523547611122, 
+                    0.4684348348900619, 
+                    0.4684348348900619, 
+                    0.4388795223726236, 
+                    0.4388795223726236, 
+                    0.41035560790321735, 
+                    0.41035560790321735, 
+                    0.384326993082176, 
+                    0.384326993082176, 
+                    0.35884497227548406, 
+                    0.35884497227548406, 
+                    0.33562347851412194, 
+                    0.33562347851412194, 
+                    0.31383206179470025, 
+                    0.31383206179470025, 
+                    0.2946881266662129, 
+                    0.2946881266662129, 
+                    0.27631726804725987, 
+                    0.27631726804725987, 
+                    0.2603845401236289, 
+                    0.2603845401236289, 
+                    0.24607579360832008, 
+                    0.24607579360832008, 
+                    0.2327892098092673, 
+                    0.2327892098092673, 
+                    0.22077688721417285, 
+                    0.22077688721417285, 
+                    0.21008867821711633, 
+                    0.21008867821711633, 
+                    0.20245180158108517, 
+                    0.20245180158108517, 
+                    0.20245180158108517, 
+                    0.20245180158108517, 
+                    0.20245180158108517, 
+                    0.20245180158108517, 
+                    0.1905109975325721, 
+                    0.1905109975325721, 
+                    0.17363628213533921, 
+                    0.17363628213533921, 
+                    0.15585197213347574, 
+                    0.15585197213347574, 
+                    0.137333681403085, 
+                    0.137333681403085, 
+                    0.11810010373052517, 
+                    0.11810010373052517, 
+                    0.10038571377629368, 
+                    0.10038571377629368
+                ], 
+                0.04110439494252205
+            ], 
+            [
+                0.9536465406417847, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999981253856066, 
+                    0.9999981253856066, 
+                    0.9997306441932717, 
+                    0.9997306441932717, 
+                    0.9941091819875477, 
+                    0.9941091819875477, 
+                    0.9846962594461566, 
+                    0.9846962594461566, 
+                    0.9698622968284447, 
+                    0.9698622968284447, 
+                    0.9492261003277586, 
+                    0.9492261003277586, 
+                    0.9220599754225003, 
+                    0.9220599754225003, 
+                    0.88789753805536, 
+                    0.88789753805536, 
+                    0.8486814488724452, 
+                    0.8486814488724452, 
+                    0.8077416640800192, 
+                    0.8077416640800192, 
+                    0.7670122336875201, 
+                    0.7670122336875201, 
+                    0.7261670020954409, 
+                    0.7261670020954409, 
+                    0.685544176044593, 
+                    0.685544176044593, 
+                    0.6454317818069769, 
+                    0.6454317818069769, 
+                    0.6067533696762357, 
+                    0.6067533696762357, 
+                    0.569147877878805, 
+                    0.569147877878805, 
+                    0.5320912858792385, 
+                    0.5320912858792385, 
+                    0.49801911769340956, 
+                    0.49801911769340956, 
+                    0.4658261870409716, 
+                    0.4658261870409716, 
+                    0.4362218564024658, 
+                    0.4362218564024658, 
+                    0.4079379201697374, 
+                    0.4079379201697374, 
+                    0.3819303943243386, 
+                    0.3819303943243386, 
+                    0.3566155998789992, 
+                    0.3566155998789992, 
+                    0.3334860244549345, 
+                    0.3334860244549345, 
+                    0.3118199497706087, 
+                    0.3118199497706087, 
+                    0.2927776329834805, 
+                    0.2927776329834805, 
+                    0.27451176380380027, 
+                    0.27451176380380027, 
+                    0.2586728006701644, 
+                    0.2586728006701644, 
+                    0.2444495294178568, 
+                    0.2444495294178568, 
+                    0.23124199963972186, 
+                    0.23124199963972186, 
+                    0.21929631060116497, 
+                    0.21929631060116497, 
+                    0.2085219084184993, 
+                    0.2085219084184993, 
+                    0.2018289057906378, 
+                    0.2018289057906378, 
+                    0.2018289057906378, 
+                    0.2018289057906378, 
+                    0.2018289057906378, 
+                    0.2018289057906378, 
+                    0.18819527159391083, 
+                    0.18819527159391083, 
+                    0.17156095551693026, 
+                    0.17156095551693026, 
+                    0.15404171984045106, 
+                    0.15404171984045106, 
+                    0.13584435519687818, 
+                    0.13584435519687818, 
+                    0.1170108318476839, 
+                    0.1170108318476839, 
+                    0.10032557061717438, 
+                    0.10032557061717438
+                ], 
+                0.038206975907087326
+            ], 
+            [
+                0.9601345658302307, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998357461073224, 
+                    0.9998357461073224, 
+                    0.9940058530689535, 
+                    0.9940058530689535, 
+                    0.9843628481219217, 
+                    0.9843628481219217, 
+                    0.9693344923566145, 
+                    0.9693344923566145, 
+                    0.9482628362595759, 
+                    0.9482628362595759, 
+                    0.9206371182499605, 
+                    0.9206371182499605, 
+                    0.8859486080097843, 
+                    0.8859486080097843, 
+                    0.8463314591312052, 
+                    0.8463314591312052, 
+                    0.8051116396237488, 
+                    0.8051116396237488, 
+                    0.7642451987882671, 
+                    0.7642451987882671, 
+                    0.7232803898571143, 
+                    0.7232803898571143, 
+                    0.6825811497428258, 
+                    0.6825811497428258, 
+                    0.6424370737047751, 
+                    0.6424370737047751, 
+                    0.603794564089538, 
+                    0.603794564089538, 
+                    0.5662235880422843, 
+                    0.5662235880422843, 
+                    0.5292301130139501, 
+                    0.5292301130139501, 
+                    0.4952679298815019, 
+                    0.4952679298815019, 
+                    0.46313618761536557, 
+                    0.46313618761536557, 
+                    0.4336702965034384, 
+                    0.4336702965034384, 
+                    0.40545952690054987, 
+                    0.40545952690054987, 
+                    0.3795908924586121, 
+                    0.3795908924586121, 
+                    0.3543766563772311, 
+                    0.3543766563772311, 
+                    0.3313735664195218, 
+                    0.3313735664195218, 
+                    0.30981700947748136, 
+                    0.30981700947748136, 
+                    0.2908812692709492, 
+                    0.2908812692709492, 
+                    0.2727190546230459, 
+                    0.2727190546230459, 
+                    0.2569734008114825, 
+                    0.2569734008114825, 
+                    0.24283780160747356, 
+                    0.24283780160747356, 
+                    0.2297147713380841, 
+                    0.2297147713380841, 
+                    0.21782855090351866, 
+                    0.21782855090351866, 
+                    0.20703930244489738, 
+                    0.20703930244489738, 
+                    0.2013174756810133, 
+                    0.2013174756810133, 
+                    0.2013174756810133, 
+                    0.2013174756810133, 
+                    0.2013174756810133, 
+                    0.2013174756810133, 
+                    0.18803289731938508, 
+                    0.18803289731938508, 
+                    0.1713297049237209, 
+                    0.1713297049237209, 
+                    0.15376979226748938, 
+                    0.15376979226748938, 
+                    0.13557611167116174, 
+                    0.13557611167116174, 
+                    0.11679062993550883, 
+                    0.11679062993550883, 
+                    0.10026160131862855, 
+                    0.10026160131862855
+                ], 
+                0.03549519181251526
+            ], 
+            [
+                0.9666666388511658, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999651387810176, 
+                    0.9999651387810176, 
+                    0.9998596906887295, 
+                    0.9998596906887295, 
+                    0.9939458533700478, 
+                    0.9939458533700478, 
+                    0.9843494524111116, 
+                    0.9843494524111116, 
+                    0.9692179317869419, 
+                    0.9692179317869419, 
+                    0.9477225919200283, 
+                    0.9477225919200283, 
+                    0.9194798422622722, 
+                    0.9194798422622722, 
+                    0.8840341449427327, 
+                    0.8840341449427327, 
+                    0.8439541004038003, 
+                    0.8439541004038003, 
+                    0.8024283777806352, 
+                    0.8024283777806352, 
+                    0.761430377547428, 
+                    0.761430377547428, 
+                    0.7203678200647051, 
+                    0.7203678200647051, 
+                    0.679599364045094, 
+                    0.679599364045094, 
+                    0.6394408338812747, 
+                    0.6394408338812747, 
+                    0.6008693965117502, 
+                    0.6008693965117502, 
+                    0.563191610842056, 
+                    0.563191610842056, 
+                    0.5266387581547868, 
+                    0.5266387581547868, 
+                    0.49205956430863884, 
+                    0.49205956430863884, 
+                    0.46094066152155017, 
+                    0.46094066152155017, 
+                    0.430721135076818, 
+                    0.430721135076818, 
+                    0.4032325930599487, 
+                    0.4032325930599487, 
+                    0.37713922923351484, 
+                    0.37713922923351484, 
+                    0.35219568191259853, 
+                    0.35219568191259853, 
+                    0.3292480972142108, 
+                    0.3292480972142108, 
+                    0.30782608193696426, 
+                    0.30782608193696426, 
+                    0.2889903764973349, 
+                    0.2889903764973349, 
+                    0.2709327379897318, 
+                    0.2709327379897318, 
+                    0.2552803191118371, 
+                    0.2552803191118371, 
+                    0.24123004191804542, 
+                    0.24123004191804542, 
+                    0.2281876815051656, 
+                    0.2281876815051656, 
+                    0.21637775518639923, 
+                    0.21637775518639923, 
+                    0.2055747619728982, 
+                    0.2055747619728982, 
+                    0.1998813619948243, 
+                    0.1998813619948243, 
+                    0.1998813619948243, 
+                    0.1998813619948243, 
+                    0.1998813619948243, 
+                    0.1998813619948243, 
+                    0.187699712414972, 
+                    0.187699712414972, 
+                    0.1709611392236431, 
+                    0.1709611392236431, 
+                    0.1534260338554677, 
+                    0.1534260338554677, 
+                    0.13529137083891227, 
+                    0.13529137083891227, 
+                    0.11658871593303051, 
+                    0.11658871593303051, 
+                    0.10023884591310742, 
+                    0.10023884591310742
+                ], 
+                0.03292224556207657
+            ], 
+            [
+                0.973243236541748, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999436766320057, 
+                    0.9999436766320057, 
+                    0.9939760385055648, 
+                    0.9939760385055648, 
+                    0.9842598101869395, 
+                    0.9842598101869395, 
+                    0.9687813650239829, 
+                    0.9687813650239829, 
+                    0.9469866772668264, 
+                    0.9469866772668264, 
+                    0.9180047496034894, 
+                    0.9180047496034894, 
+                    0.8819061588659186, 
+                    0.8819061588659186, 
+                    0.8414848476676986, 
+                    0.8414848476676986, 
+                    0.7997932894203867, 
+                    0.7997932894203867, 
+                    0.7586174515786999, 
+                    0.7586174515786999, 
+                    0.7174389101934207, 
+                    0.7174389101934207, 
+                    0.676617051229267, 
+                    0.676617051229267, 
+                    0.6364534437542759, 
+                    0.6364534437542759, 
+                    0.5979011138871524, 
+                    0.5979011138871524, 
+                    0.5602331174679923, 
+                    0.5602331174679923, 
+                    0.5238512976045037, 
+                    0.5238512976045037, 
+                    0.4891875546369737, 
+                    0.4891875546369737, 
+                    0.4583771696476113, 
+                    0.4583771696476113, 
+                    0.4280851602155676, 
+                    0.4280851602155676, 
+                    0.4008178050335492, 
+                    0.4008178050335492, 
+                    0.3747846489937737, 
+                    0.3747846489937737, 
+                    0.34998059115945035, 
+                    0.34998059115945035, 
+                    0.32714261084763335, 
+                    0.32714261084763335, 
+                    0.3058377278234968, 
+                    0.3058377278234968, 
+                    0.28710635629642034, 
+                    0.28710635629642034, 
+                    0.269152193466988, 
+                    0.269152193466988, 
+                    0.25359237876554197, 
+                    0.25359237876554197, 
+                    0.23962694103994, 
+                    0.23962694103994, 
+                    0.2266646533807646, 
+                    0.2266646533807646, 
+                    0.21494307759202197, 
+                    0.21494307759202197, 
+                    0.20432724881043063, 
+                    0.20432724881043063, 
+                    0.19734895599203328, 
+                    0.19734895599203328, 
+                    0.19734895599203328, 
+                    0.19734895599203328, 
+                    0.19734895599203328, 
+                    0.19734895599203328, 
+                    0.18858370729234916, 
+                    0.18858370729234916, 
+                    0.17142589936046368, 
+                    0.17142589936046368, 
+                    0.1536926325492384, 
+                    0.1536926325492384, 
+                    0.13544621498662712, 
+                    0.13544621498662712, 
+                    0.11667577146280932, 
+                    0.11667577146280932, 
+                    0.10025248900699653, 
+                    0.10025248900699653
+                ], 
+                0.030490878969430923
+            ], 
+            [
+                0.9798645377159119, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999710695113437, 
+                    0.9999710695113437, 
+                    0.9940541585773766, 
+                    0.9940541585773766, 
+                    0.9841490666131629, 
+                    0.9841490666131629, 
+                    0.968522263554445, 
+                    0.968522263554445, 
+                    0.9461906855046667, 
+                    0.9461906855046667, 
+                    0.91648966135278, 
+                    0.91648966135278, 
+                    0.8798403779416407, 
+                    0.8798403779416407, 
+                    0.8390697920719387, 
+                    0.8390697920719387, 
+                    0.7971043286211217, 
+                    0.7971043286211217, 
+                    0.7557852851508631, 
+                    0.7557852851508631, 
+                    0.7145354270976602, 
+                    0.7145354270976602, 
+                    0.673651428128837, 
+                    0.673651428128837, 
+                    0.6334486031394624, 
+                    0.6334486031394624, 
+                    0.5949589346540556, 
+                    0.5949589346540556, 
+                    0.5572412437198977, 
+                    0.5572412437198977, 
+                    0.5211571882139259, 
+                    0.5211571882139259, 
+                    0.4861893825237392, 
+                    0.4861893825237392, 
+                    0.4559629239906559, 
+                    0.4559629239906559, 
+                    0.42535537315232275, 
+                    0.42535537315232275, 
+                    0.3984813497008431, 
+                    0.3984813497008431, 
+                    0.37242160872198604, 
+                    0.37242160872198604, 
+                    0.34779345723417926, 
+                    0.34779345723417926, 
+                    0.3250514644054293, 
+                    0.3250514644054293, 
+                    0.30386731065451006, 
+                    0.30386731065451006, 
+                    0.28523941585258533, 
+                    0.28523941585258533, 
+                    0.2673892030085203, 
+                    0.2673892030085203, 
+                    0.25192370316009116, 
+                    0.25192370316009116, 
+                    0.23804726947627633, 
+                    0.23804726947627633, 
+                    0.22517380995036704, 
+                    0.22517380995036704, 
+                    0.21351196700627323, 
+                    0.21351196700627323, 
+                    0.2026973450290573, 
+                    0.2026973450290573, 
+                    0.19584513048218338, 
+                    0.19584513048218338, 
+                    0.19584513048218338, 
+                    0.19584513048218338, 
+                    0.19584513048218338, 
+                    0.19584513048218338, 
+                    0.18879188980842654, 
+                    0.18879188980842654, 
+                    0.17147261013138113, 
+                    0.17147261013138113, 
+                    0.15366621725995908, 
+                    0.15366621725995908, 
+                    0.13539391554230681, 
+                    0.13539391554230681, 
+                    0.1166270042890416, 
+                    0.1166270042890416, 
+                    0.10023201805928277, 
+                    0.10023201805928277
+                ], 
+                0.0282184686511755
+            ], 
+            [
+                0.9865309000015259, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999797681179823, 
+                    0.9999797681179823, 
+                    0.9998292458180408, 
+                    0.9998292458180408, 
+                    0.994023494126654, 
+                    0.994023494126654, 
+                    0.9840692577461303, 
+                    0.9840692577461303, 
+                    0.9681913231772423, 
+                    0.9681913231772423, 
+                    0.9454834063358829, 
+                    0.9454834063358829, 
+                    0.9149970865446825, 
+                    0.9149970865446825, 
+                    0.8777487101230639, 
+                    0.8777487101230639, 
+                    0.8366088692674357, 
+                    0.8366088692674357, 
+                    0.79443591794803, 
+                    0.79443591794803, 
+                    0.7529492325787412, 
+                    0.7529492325787412, 
+                    0.7115775065570913, 
+                    0.7115775065570913, 
+                    0.6706597364613361, 
+                    0.6706597364613361, 
+                    0.6304793378220623, 
+                    0.6304793378220623, 
+                    0.5919116858969916, 
+                    0.5919116858969916, 
+                    0.5545748139389108, 
+                    0.5545748139389108, 
+                    0.5177726894745833, 
+                    0.5177726894745833, 
+                    0.4842893623918338, 
+                    0.4842893623918338, 
+                    0.4524445995245659, 
+                    0.4524445995245659, 
+                    0.42347658984212955, 
+                    0.42347658984212955, 
+                    0.39568406879457174, 
+                    0.39568406879457174, 
+                    0.3702714904961494, 
+                    0.3702714904961494, 
+                    0.34553837627536516, 
+                    0.34553837627536516, 
+                    0.32299693239915706, 
+                    0.32299693239915706, 
+                    0.30190102264774216, 
+                    0.30190102264774216, 
+                    0.2833846632623809, 
+                    0.2833846632623809, 
+                    0.26563608687025936, 
+                    0.26563608687025936, 
+                    0.2502619000794739, 
+                    0.2502619000794739, 
+                    0.23646714477119127, 
+                    0.23646714477119127, 
+                    0.2236678121166701, 
+                    0.2236678121166701, 
+                    0.2120918472883261, 
+                    0.2120918472883261, 
+                    0.20154033043719063, 
+                    0.20154033043719063, 
+                    0.19445805357525578, 
+                    0.19445805357525578, 
+                    0.19445805357525578, 
+                    0.19445805357525578, 
+                    0.19445805357525578, 
+                    0.19445805357525578, 
+                    0.1878393368298575, 
+                    0.1878393368298575, 
+                    0.17075787322059782, 
+                    0.17075787322059782, 
+                    0.153121081687305, 
+                    0.153121081687305, 
+                    0.13500029585663847, 
+                    0.13500029585663847, 
+                    0.11637495754007542, 
+                    0.11637495754007542, 
+                    0.1002076114699008, 
+                    0.1002076114699008
+                ], 
+                0.02610822021961212
+            ], 
+            [
+                0.993242621421814, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999634874605438, 
+                    0.9999634874605438, 
+                    0.9998036171827012, 
+                    0.9998036171827012, 
+                    0.9939524298755906, 
+                    0.9939524298755906, 
+                    0.9840298592020378, 
+                    0.9840298592020378, 
+                    0.9679449623461638, 
+                    0.9679449623461638, 
+                    0.9446390440990967, 
+                    0.9446390440990967, 
+                    0.9134334666089668, 
+                    0.9134334666089668, 
+                    0.8756064777000286, 
+                    0.8756064777000286, 
+                    0.8341056190898901, 
+                    0.8341056190898901, 
+                    0.7917114588310085, 
+                    0.7917114588310085, 
+                    0.7500906261446019, 
+                    0.7500906261446019, 
+                    0.7086482179262896, 
+                    0.7086482179262896, 
+                    0.6676627299631906, 
+                    0.6676627299631906, 
+                    0.6274944731145289, 
+                    0.6274944731145289, 
+                    0.5889364353877878, 
+                    0.5889364353877878, 
+                    0.5516802651274026, 
+                    0.5516802651274026, 
+                    0.5149159905158012, 
+                    0.5149159905158012, 
+                    0.48157633614863976, 
+                    0.48157633614863976, 
+                    0.44978979641832706, 
+                    0.44978979641832706, 
+                    0.42095669453338996, 
+                    0.42095669453338996, 
+                    0.39326947889224106, 
+                    0.39326947889224106, 
+                    0.3679707537078989, 
+                    0.3679707537078989, 
+                    0.343359748350523, 
+                    0.343359748350523, 
+                    0.32093398871018614, 
+                    0.32093398871018614, 
+                    0.29995275825475864, 
+                    0.29995275825475864, 
+                    0.2815405852677914, 
+                    0.2815405852677914, 
+                    0.2638953670383036, 
+                    0.2638953670383036, 
+                    0.24861329324340778, 
+                    0.24861329324340778, 
+                    0.2349034871177826, 
+                    0.2349034871177826, 
+                    0.22218695572291278, 
+                    0.22218695572291278, 
+                    0.21068917857516548, 
+                    0.21068917857516548, 
+                    0.20014808948226115, 
+                    0.20014808948226115, 
+                    0.19319062132759993, 
+                    0.19319062132759993, 
+                    0.19319062132759993, 
+                    0.19319062132759993, 
+                    0.19319062132759993, 
+                    0.19319062132759993, 
+                    0.1875913516841647, 
+                    0.1875913516841647, 
+                    0.17055223647110196, 
+                    0.17055223647110196, 
+                    0.1529345968517611, 
+                    0.1529345968517611, 
+                    0.13484169435929638, 
+                    0.13484169435929638, 
+                    0.1162572612980116, 
+                    0.1162572612980116, 
+                    0.10016862970580417, 
+                    0.10016862970580417
+                ], 
+                0.02412772923707962
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999897964359915, 
+                    0.9999897964359915, 
+                    0.9998698875983476, 
+                    0.9998698875983476, 
+                    0.9938433475522576, 
+                    0.9938433475522576, 
+                    0.9839663326606302, 
+                    0.9839663326606302, 
+                    0.9677109330927159, 
+                    0.9677109330927159, 
+                    0.9438174900836593, 
+                    0.9438174900836593, 
+                    0.9119167843265344, 
+                    0.9119167843265344, 
+                    0.8734764178085063, 
+                    0.8734764178085063, 
+                    0.8316069961079783, 
+                    0.8316069961079783, 
+                    0.7889878054128375, 
+                    0.7889878054128375, 
+                    0.7472305905688941, 
+                    0.7472305905688941, 
+                    0.7057008303137098, 
+                    0.7057008303137098, 
+                    0.664689957095312, 
+                    0.664689957095312, 
+                    0.6244744459212352, 
+                    0.6244744459212352, 
+                    0.586053024482429, 
+                    0.586053024482429, 
+                    0.5485660847325069, 
+                    0.5485660847325069, 
+                    0.512520045760248, 
+                    0.512520045760248, 
+                    0.47821916423669547, 
+                    0.47821916423669547, 
+                    0.4477847233449695, 
+                    0.4477847233449695, 
+                    0.4179969122216287, 
+                    0.4179969122216287, 
+                    0.39110870860608915, 
+                    0.39110870860608915, 
+                    0.3655849411436397, 
+                    0.3655849411436397, 
+                    0.34123147367489776, 
+                    0.34123147367489776, 
+                    0.31887451159610297, 
+                    0.31887451159610297, 
+                    0.29802208306349065, 
+                    0.29802208306349065, 
+                    0.27971084598095514, 
+                    0.27971084598095514, 
+                    0.26216854454564753, 
+                    0.26216854454564753, 
+                    0.24697764389765509, 
+                    0.24697764389765509, 
+                    0.2333508839389502, 
+                    0.2333508839389502, 
+                    0.22070888064867353, 
+                    0.22070888064867353, 
+                    0.20927281069589945, 
+                    0.20927281069589945, 
+                    0.1988509851570543, 
+                    0.1988509851570543, 
+                    0.192460961560599, 
+                    0.192460961560599, 
+                    0.192460961560599, 
+                    0.192460961560599, 
+                    0.192460961560599, 
+                    0.192460961560599, 
+                    0.18832546475976425, 
+                    0.18832546475976425, 
+                    0.17090905515459623, 
+                    0.17090905515459623, 
+                    0.1530955117012908, 
+                    0.1530955117012908, 
+                    0.1348896510759229, 
+                    0.1348896510759229, 
+                    0.1162503305655968, 
+                    0.1162503305655968, 
+                    0.1001605915790858, 
+                    0.1001605915790858
+                ], 
+                0.02228829823434353
+            ], 
+            [
+                1.0068033933639526, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999904762680104, 
+                    0.9999904762680104, 
+                    0.9999712283358708, 
+                    0.9999712283358708, 
+                    0.9942168946578815, 
+                    0.9942168946578815, 
+                    0.9849167708342572, 
+                    0.9849167708342572, 
+                    0.9681976513533308, 
+                    0.9681976513533308, 
+                    0.9436390034164065, 
+                    0.9436390034164065, 
+                    0.9106130215761036, 
+                    0.9106130215761036, 
+                    0.8713683281516375, 
+                    0.8713683281516375, 
+                    0.8291076840442436, 
+                    0.8291076840442436, 
+                    0.7862568664774968, 
+                    0.7862568664774968, 
+                    0.7443548494973182, 
+                    0.7443548494973182, 
+                    0.7027356888416526, 
+                    0.7027356888416526, 
+                    0.661682383767478, 
+                    0.661682383767478, 
+                    0.6215071902089263, 
+                    0.6215071902089263, 
+                    0.583018336036939, 
+                    0.583018336036939, 
+                    0.5458504379367655, 
+                    0.5458504379367655, 
+                    0.5093130181447069, 
+                    0.5093130181447069, 
+                    0.4760621346893229, 
+                    0.4760621346893229, 
+                    0.4445912976777897, 
+                    0.4445912976777897, 
+                    0.415917690308265, 
+                    0.415917690308265, 
+                    0.3884707308342163, 
+                    0.3884707308342163, 
+                    0.3634224085508708, 
+                    0.3634224085508708, 
+                    0.3390287421162639, 
+                    0.3390287421162639, 
+                    0.3168533097900032, 
+                    0.3168533097900032, 
+                    0.29609338912284977, 
+                    0.29609338912284977, 
+                    0.2778932380518289, 
+                    0.2778932380518289, 
+                    0.26045253315714545, 
+                    0.26045253315714545, 
+                    0.24535562788766507, 
+                    0.24535562788766507, 
+                    0.23182026594886332, 
+                    0.23182026594886332, 
+                    0.21926875954377292, 
+                    0.21926875954377292, 
+                    0.20782667887821515, 
+                    0.20782667887821515, 
+                    0.19718245955655397, 
+                    0.19718245955655397, 
+                    0.1913420118404719, 
+                    0.1913420118404719, 
+                    0.1913420118404719, 
+                    0.1913420118404719, 
+                    0.1913420118404719, 
+                    0.1913420118404719, 
+                    0.18723588161938587, 
+                    0.18723588161938587, 
+                    0.17009168815025058, 
+                    0.17009168815025058, 
+                    0.1524451269311226, 
+                    0.1524451269311226, 
+                    0.1343885849184558, 
+                    0.1343885849184558, 
+                    0.11590374723910359, 
+                    0.11590374723910359, 
+                    0.10011651207576978, 
+                    0.10011651207576978
+                ], 
+                0.020552149042487144
+            ], 
+            [
+                1.013653039932251, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999978291732208, 
+                    0.9999978291732208, 
+                    0.999779705481455, 
+                    0.999779705481455, 
+                    0.9938744915819514, 
+                    0.9938744915819514, 
+                    0.9839680867004159, 
+                    0.9839680867004159, 
+                    0.9669705886570282, 
+                    0.9669705886570282, 
+                    0.9420094061542964, 
+                    0.9420094061542964, 
+                    0.9086306654635644, 
+                    0.9086306654635644, 
+                    0.8690859543230184, 
+                    0.8690859543230184, 
+                    0.8265325829011935, 
+                    0.8265325829011935, 
+                    0.7834776951549776, 
+                    0.7834776951549776, 
+                    0.7414595392968246, 
+                    0.7414595392968246, 
+                    0.6997632890714875, 
+                    0.6997632890714875, 
+                    0.658690017475411, 
+                    0.658690017475411, 
+                    0.6184816561668706, 
+                    0.6184816561668706, 
+                    0.5801402883997805, 
+                    0.5801402883997805, 
+                    0.5427582395380599, 
+                    0.5427582395380599, 
+                    0.5068777440187217, 
+                    0.5068777440187217, 
+                    0.4727952921699189, 
+                    0.4727952921699189, 
+                    0.4425243953967304, 
+                    0.4425243953967304, 
+                    0.4130191385219366, 
+                    0.4130191385219366, 
+                    0.386311827359821, 
+                    0.386311827359821, 
+                    0.3610517383432948, 
+                    0.3610517383432948, 
+                    0.33692403201768056, 
+                    0.33692403201768056, 
+                    0.31480738431692457, 
+                    0.31480738431692457, 
+                    0.2941820736363935, 
+                    0.2941820736363935, 
+                    0.276079339221268, 
+                    0.276079339221268, 
+                    0.2587408814475003, 
+                    0.2587408814475003, 
+                    0.24373089791373612, 
+                    0.24373089791373612, 
+                    0.2302689052785151, 
+                    0.2302689052785151, 
+                    0.21779335126201152, 
+                    0.21779335126201152, 
+                    0.2065775282373226, 
+                    0.2065775282373226, 
+                    0.19626502117354253, 
+                    0.19626502117354253, 
+                    0.18996902804042215, 
+                    0.18996902804042215, 
+                    0.18996902804042215, 
+                    0.18996902804042215, 
+                    0.18996902804042215, 
+                    0.18996902804042215, 
+                    0.18719224356067854, 
+                    0.18719224356067854, 
+                    0.17001182472701765, 
+                    0.17001182472701765, 
+                    0.15233389163430755, 
+                    0.15233389163430755, 
+                    0.13426969176844059, 
+                    0.13426969176844059, 
+                    0.11580219749753237, 
+                    0.11580219749753237, 
+                    0.10009501620232743, 
+                    0.10009501620232743
+                ], 
+                0.018949147313833237
+            ], 
+            [
+                1.0205491781234741, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998239512633851, 
+                    0.9998239512633851, 
+                    0.9938142200792276, 
+                    0.9938142200792276, 
+                    0.9840333117310603, 
+                    0.9840333117310603, 
+                    0.9665569061341691, 
+                    0.9665569061341691, 
+                    0.9408976645021626, 
+                    0.9408976645021626, 
+                    0.9066364709072996, 
+                    0.9066364709072996, 
+                    0.866597184421452, 
+                    0.866597184421452, 
+                    0.823835830154555, 
+                    0.823835830154555, 
+                    0.7806476318463149, 
+                    0.7806476318463149, 
+                    0.7385316519184661, 
+                    0.7385316519184661, 
+                    0.696780847842648, 
+                    0.696780847842648, 
+                    0.6556597655062671, 
+                    0.6556597655062671, 
+                    0.6155257571622612, 
+                    0.6155257571622612, 
+                    0.577050416651783, 
+                    0.577050416651783, 
+                    0.5401507378773176, 
+                    0.5401507378773176, 
+                    0.5035316001420057, 
+                    0.5035316001420057, 
+                    0.47078284409182913, 
+                    0.47078284409182913, 
+                    0.43929437161861135, 
+                    0.43929437161861135, 
+                    0.41091885218757024, 
+                    0.41091885218757024, 
+                    0.38375124706744373, 
+                    0.38375124706744373, 
+                    0.3588491786431767, 
+                    0.3588491786431767, 
+                    0.33477025735167015, 
+                    0.33477025735167015, 
+                    0.31278558651122185, 
+                    0.31278558651122185, 
+                    0.29227456728988777, 
+                    0.29227456728988777, 
+                    0.27427463441030886, 
+                    0.27427463441030886, 
+                    0.2570391581303506, 
+                    0.2570391581303506, 
+                    0.24212064947239012, 
+                    0.24212064947239012, 
+                    0.22874617042181702, 
+                    0.22874617042181702, 
+                    0.21638298395035183, 
+                    0.21638298395035183, 
+                    0.2053777231993776, 
+                    0.2053777231993776, 
+                    0.194625185943041, 
+                    0.194625185943041, 
+                    0.1878349765583195, 
+                    0.1878349765583195, 
+                    0.1878349765583195, 
+                    0.1878349765583195, 
+                    0.1878349765583195, 
+                    0.1878349765583195, 
+                    0.1865802739495768, 
+                    0.1865802739495768, 
+                    0.16954281915675698, 
+                    0.16954281915675698, 
+                    0.15196446243769948, 
+                    0.15196446243769948, 
+                    0.1339963901225668, 
+                    0.1339963901225668, 
+                    0.11562442325552666, 
+                    0.11562442325552666, 
+                    0.10007677070446183, 
+                    0.10007677070446183
+                ], 
+                0.017427656799554825
+            ], 
+            [
+                1.0274924039840698, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999990894598296, 
+                    0.9999990894598296, 
+                    0.9999924936426963, 
+                    0.9999924936426963, 
+                    0.9937255437325856, 
+                    0.9937255437325856, 
+                    0.9834465933431521, 
+                    0.9834465933431521, 
+                    0.9657925067649966, 
+                    0.9657925067649966, 
+                    0.9395008925697039, 
+                    0.9395008925697039, 
+                    0.9048310615037313, 
+                    0.9048310615037313, 
+                    0.8644949654327951, 
+                    0.8644949654327951, 
+                    0.8213795098206219, 
+                    0.8213795098206219, 
+                    0.7779296282379574, 
+                    0.7779296282379574, 
+                    0.7356627112796191, 
+                    0.7356627112796191, 
+                    0.6938293946267603, 
+                    0.6938293946267603, 
+                    0.652670130936799, 
+                    0.652670130936799, 
+                    0.612528332942186, 
+                    0.612528332942186, 
+                    0.5741228866099719, 
+                    0.5741228866099719, 
+                    0.5372038029472254, 
+                    0.5372038029472254, 
+                    0.5008263701504784, 
+                    0.5008263701504784, 
+                    0.46797945228602256, 
+                    0.46797945228602256, 
+                    0.4367770432418866, 
+                    0.4367770432418866, 
+                    0.4084261860990492, 
+                    0.4084261860990492, 
+                    0.38138864356907837, 
+                    0.38138864356907837, 
+                    0.35662830322938627, 
+                    0.35662830322938627, 
+                    0.332641933393028, 
+                    0.332641933393028, 
+                    0.310793608915565, 
+                    0.310793608915565, 
+                    0.29038696539821307, 
+                    0.29038696539821307, 
+                    0.27249444723546123, 
+                    0.27249444723546123, 
+                    0.25535953126783084, 
+                    0.25535953126783084, 
+                    0.24053206165062319, 
+                    0.24053206165062319, 
+                    0.2272372035961754, 
+                    0.2272372035961754, 
+                    0.214914102678671, 
+                    0.214914102678671, 
+                    0.20380233385521102, 
+                    0.20380233385521102, 
+                    0.19357506587507697, 
+                    0.19357506587507697, 
+                    0.1877500140122, 
+                    0.1877500140122, 
+                    0.1877500140122, 
+                    0.1877500140122, 
+                    0.1877500140122, 
+                    0.1877500140122, 
+                    0.18732947014353413, 
+                    0.18732947014353413, 
+                    0.16997227879781976, 
+                    0.16997227879781976, 
+                    0.15221706371711197, 
+                    0.15221706371711197, 
+                    0.13413629199130023, 
+                    0.13413629199130023, 
+                    0.11569336339213096, 
+                    0.11569336339213096, 
+                    0.10007760459418902, 
+                    0.10007760459418902
+                ], 
+                0.016046416014432907
+            ], 
+            [
+                1.034482717514038, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997919418003687, 
+                    0.9997919418003687, 
+                    0.9935997473507503, 
+                    0.9935997473507503, 
+                    0.9829298063827078, 
+                    0.9829298063827078, 
+                    0.9649391951611143, 
+                    0.9649391951611143, 
+                    0.938162336569223, 
+                    0.938162336569223, 
+                    0.9029973991772101, 
+                    0.9029973991772101, 
+                    0.8622085421333722, 
+                    0.8622085421333722, 
+                    0.8187816614971728, 
+                    0.8187816614971728, 
+                    0.7751353262319111, 
+                    0.7751353262319111, 
+                    0.7327482864814245, 
+                    0.7327482864814245, 
+                    0.6908417324909942, 
+                    0.6908417324909942, 
+                    0.6496514236137597, 
+                    0.6496514236137597, 
+                    0.609551791070762, 
+                    0.609551791070762, 
+                    0.5710908405455941, 
+                    0.5710908405455941, 
+                    0.5344898416212629, 
+                    0.5344898416212629, 
+                    0.4977152714526437, 
+                    0.4977152714526437, 
+                    0.4656832766104757, 
+                    0.4656832766104757, 
+                    0.43383669170360506, 
+                    0.43383669170360506, 
+                    0.406184813847817, 
+                    0.406184813847817, 
+                    0.3789253493277907, 
+                    0.3789253493277907, 
+                    0.35443527741759734, 
+                    0.35443527741759734, 
+                    0.33051517708903727, 
+                    0.33051517708903727, 
+                    0.3088018615851239, 
+                    0.3088018615851239, 
+                    0.2885040074092253, 
+                    0.2885040074092253, 
+                    0.27071553336346416, 
+                    0.27071553336346416, 
+                    0.2536811594508175, 
+                    0.2536811594508175, 
+                    0.23894186723519434, 
+                    0.23894186723519434, 
+                    0.22572620203555652, 
+                    0.22572620203555652, 
+                    0.21349477989372628, 
+                    0.21349477989372628, 
+                    0.20258501118551525, 
+                    0.20258501118551525, 
+                    0.19231903731765237, 
+                    0.19231903731765237, 
+                    0.18643142898215156, 
+                    0.18643142898215156, 
+                    0.18643142898215156, 
+                    0.18643142898215156, 
+                    0.18643142898215156, 
+                    0.18643142898215156, 
+                    0.18643142898215156, 
+                    0.18643142898215156, 
+                    0.17038103803573237, 
+                    0.17038103803573237, 
+                    0.15242196234652908, 
+                    0.15242196234652908, 
+                    0.13420048694131173, 
+                    0.13420048694131173, 
+                    0.1156783046516491, 
+                    0.1156783046516491, 
+                    0.10005892662238695, 
+                    0.10005892662238695
+                ], 
+                0.014745939522981644
+            ], 
+            [
+                1.0415207147598267, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999360004085043, 
+                    0.9999360004085043, 
+                    0.9939866803795316, 
+                    0.9939866803795316, 
+                    0.9843620288400163, 
+                    0.9843620288400163, 
+                    0.9658018475377933, 
+                    0.9658018475377933, 
+                    0.9378474391637838, 
+                    0.9378474391637838, 
+                    0.9012929436531683, 
+                    0.9012929436531683, 
+                    0.8598822472128259, 
+                    0.8598822472128259, 
+                    0.8161633996868743, 
+                    0.8161633996868743, 
+                    0.7723293250764409, 
+                    0.7723293250764409, 
+                    0.7298331374120377, 
+                    0.7298331374120377, 
+                    0.6878527527399931, 
+                    0.6878527527399931, 
+                    0.6466635261837675, 
+                    0.6466635261837675, 
+                    0.6064982150619485, 
+                    0.6064982150619485, 
+                    0.5683378113521784, 
+                    0.5683378113521784, 
+                    0.5311841204066399, 
+                    0.5311841204066399, 
+                    0.4957205482021751, 
+                    0.4957205482021751, 
+                    0.4619788203011076, 
+                    0.4619788203011076, 
+                    0.4321939916995734, 
+                    0.4321939916995734, 
+                    0.40313248003490987, 
+                    0.40313248003490987, 
+                    0.3768919937090428, 
+                    0.3768919937090428, 
+                    0.3521040356435752, 
+                    0.3521040356435752, 
+                    0.32846510613420327, 
+                    0.32846510613420327, 
+                    0.3068132449136715, 
+                    0.3068132449136715, 
+                    0.2866490266112472, 
+                    0.2866490266112472, 
+                    0.26896071347029765, 
+                    0.26896071347029765, 
+                    0.25203049745432127, 
+                    0.25203049745432127, 
+                    0.2373820953293537, 
+                    0.2373820953293537, 
+                    0.22424919063681312, 
+                    0.22424919063681312, 
+                    0.2120750713992466, 
+                    0.2120750713992466, 
+                    0.20106270994825012, 
+                    0.20106270994825012, 
+                    0.19093218623732955, 
+                    0.19093218623732955, 
+                    0.1868074809367574, 
+                    0.1868074809367574, 
+                    0.1868074809367574, 
+                    0.1868074809367574, 
+                    0.1868074809367574, 
+                    0.1868074809367574, 
+                    0.1868074809367574, 
+                    0.1868074809367574, 
+                    0.16947823468616535, 
+                    0.16947823468616535, 
+                    0.15176583623284537, 
+                    0.15176583623284537, 
+                    0.13375247725215528, 
+                    0.13375247725215528, 
+                    0.11540870945411981, 
+                    0.11540870945411981, 
+                    0.10004573934771234, 
+                    0.10004573934771234
+                ], 
+                0.013548574410378933
+            ], 
+            [
+                1.048606514930725, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999995999307285, 
+                    0.9999995999307285, 
+                    0.9999511286766248, 
+                    0.9999511286766248, 
+                    0.9927832496647797, 
+                    0.9927832496647797, 
+                    0.9811566284629115, 
+                    0.9811566284629115, 
+                    0.9623289365297837, 
+                    0.9623289365297837, 
+                    0.9350848898806159, 
+                    0.9350848898806159, 
+                    0.8994158985475449, 
+                    0.8994158985475449, 
+                    0.8578076310141979, 
+                    0.8578076310141979, 
+                    0.8136591061084454, 
+                    0.8136591061084454, 
+                    0.7695780137750464, 
+                    0.7695780137750464, 
+                    0.7269251549703881, 
+                    0.7269251549703881, 
+                    0.6848814169629166, 
+                    0.6848814169629166, 
+                    0.6436580432497804, 
+                    0.6436580432497804, 
+                    0.6035446050352137, 
+                    0.6035446050352137, 
+                    0.5653104689033056, 
+                    0.5653104689033056, 
+                    0.5285244030687244, 
+                    0.5285244030687244, 
+                    0.49259122667709426, 
+                    0.49259122667709426, 
+                    0.45978499966029285, 
+                    0.45978499966029285, 
+                    0.4292381010861012, 
+                    0.4292381010861012, 
+                    0.40096509574629213, 
+                    0.40096509574629213, 
+                    0.3744502810480089, 
+                    0.3744502810480089, 
+                    0.34996426479300313, 
+                    0.34996426479300313, 
+                    0.3263741929033139, 
+                    0.3263741929033139, 
+                    0.3048679259895395, 
+                    0.3048679259895395, 
+                    0.28480656207247657, 
+                    0.28480656207247657, 
+                    0.26722271732686353, 
+                    0.26722271732686353, 
+                    0.2503910918887274, 
+                    0.2503910918887274, 
+                    0.23583323957736094, 
+                    0.23583323957736094, 
+                    0.2227883507870625, 
+                    0.2227883507870625, 
+                    0.21063859020559478, 
+                    0.21063859020559478, 
+                    0.19970756692117872, 
+                    0.19970756692117872, 
+                    0.18864475916486773, 
+                    0.18864475916486773, 
+                    0.1881969020248248, 
+                    0.1881969020248248, 
+                    0.1881969020248248, 
+                    0.1881969020248248, 
+                    0.1881969020248248, 
+                    0.1881969020248248, 
+                    0.1881969020248248, 
+                    0.1881969020248248, 
+                    0.17048855194358847, 
+                    0.17048855194358847, 
+                    0.15238696202271804, 
+                    0.15238696202271804, 
+                    0.13405606848648927, 
+                    0.13405606848648927, 
+                    0.1154952420266441, 
+                    0.1154952420266441, 
+                    0.100018643719541, 
+                    0.100018643719541
+                ], 
+                0.01241663470864296
+            ], 
+            [
+                1.0557405948638916, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999926594650179, 
+                    0.9999926594650179, 
+                    0.9998811702698883, 
+                    0.9998811702698883, 
+                    0.9931541882866096, 
+                    0.9931541882866096, 
+                    0.9817128074623306, 
+                    0.9817128074623306, 
+                    0.9623402355136941, 
+                    0.9623402355136941, 
+                    0.9337257873501423, 
+                    0.9337257873501423, 
+                    0.8968643053771181, 
+                    0.8968643053771181, 
+                    0.8550178862363782, 
+                    0.8550178862363782, 
+                    0.8108148943366374, 
+                    0.8108148943366374, 
+                    0.7666421941676377, 
+                    0.7666421941676377, 
+                    0.7239313824139003, 
+                    0.7239313824139003, 
+                    0.6818492154415069, 
+                    0.6818492154415069, 
+                    0.6406026075059901, 
+                    0.6406026075059901, 
+                    0.6005446567089483, 
+                    0.6005446567089483, 
+                    0.5622890484948639, 
+                    0.5622890484948639, 
+                    0.5257335733040307, 
+                    0.5257335733040307, 
+                    0.4896139401370001, 
+                    0.4896139401370001, 
+                    0.4573046230501649, 
+                    0.4573046230501649, 
+                    0.4264679720339702, 
+                    0.4264679720339702, 
+                    0.3986175752853585, 
+                    0.3986175752853585, 
+                    0.3720493696247128, 
+                    0.3720493696247128, 
+                    0.34775713926777096, 
+                    0.34775713926777096, 
+                    0.32426229762958036, 
+                    0.32426229762958036, 
+                    0.30288176996122246, 
+                    0.30288176996122246, 
+                    0.2829319046009517, 
+                    0.2829319046009517, 
+                    0.26545189828273813, 
+                    0.26545189828273813, 
+                    0.24872193223084035, 
+                    0.24872193223084035, 
+                    0.23425421249427006, 
+                    0.23425421249427006, 
+                    0.22128809592612145, 
+                    0.22128809592612145, 
+                    0.2092692738662872, 
+                    0.2092692738662872, 
+                    0.1984046391013514, 
+                    0.1984046391013514, 
+                    0.18838638366875765, 
+                    0.18838638366875765, 
+                    0.18334836815842565, 
+                    0.18334836815842565, 
+                    0.18334836815842565, 
+                    0.18334836815842565, 
+                    0.18334836815842565, 
+                    0.18334836815842565, 
+                    0.18334836815842565, 
+                    0.18334836815842565, 
+                    0.16954462684801905, 
+                    0.16954462684801905, 
+                    0.15169722818476233, 
+                    0.15169722818476233, 
+                    0.13362743994142853, 
+                    0.13362743994142853, 
+                    0.11528609311643981, 
+                    0.11528609311643981, 
+                    0.1000364759808806, 
+                    0.1000364759808806
+                ], 
+                0.011373301967978477
+            ], 
+            [
+                1.0629231929779053, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997871371734248, 
+                    0.9997871371734248, 
+                    0.993241092612606, 
+                    0.993241092612606, 
+                    0.9816697805010056, 
+                    0.9816697805010056, 
+                    0.9617069290205976, 
+                    0.9617069290205976, 
+                    0.9321362035917881, 
+                    0.9321362035917881, 
+                    0.8946170205719052, 
+                    0.8946170205719052, 
+                    0.8524965123120457, 
+                    0.8524965123120457, 
+                    0.8080973854374128, 
+                    0.8080973854374128, 
+                    0.7637757783700978, 
+                    0.7637757783700978, 
+                    0.7209717574760565, 
+                    0.7209717574760565, 
+                    0.6788318402330822, 
+                    0.6788318402330822, 
+                    0.6376004830046502, 
+                    0.6376004830046502, 
+                    0.597480084083902, 
+                    0.597480084083902, 
+                    0.5594978087269493, 
+                    0.5594978087269493, 
+                    0.5225502905142999, 
+                    0.5225502905142999, 
+                    0.48736171520526245, 
+                    0.48736171520526245, 
+                    0.454001021121289, 
+                    0.454001021121289, 
+                    0.4244600361246117, 
+                    0.4244600361246117, 
+                    0.39585456452359924, 
+                    0.39585456452359924, 
+                    0.3698940639757284, 
+                    0.3698940639757284, 
+                    0.34551091788514865, 
+                    0.34551091788514865, 
+                    0.3222108091566789, 
+                    0.3222108091566789, 
+                    0.30092548483312226, 
+                    0.30092548483312226, 
+                    0.2810947608790239, 
+                    0.2810947608790239, 
+                    0.26371646773116114, 
+                    0.26371646773116114, 
+                    0.24708669250682325, 
+                    0.24708669250682325, 
+                    0.23270784596483945, 
+                    0.23270784596483945, 
+                    0.21982240879149245, 
+                    0.21982240879149245, 
+                    0.2078774695815029, 
+                    0.2078774695815029, 
+                    0.19707693650428088, 
+                    0.19707693650428088, 
+                    0.18715517756231997, 
+                    0.18715517756231997, 
+                    0.1820347382487314, 
+                    0.1820347382487314, 
+                    0.1820347382487314, 
+                    0.1820347382487314, 
+                    0.1820347382487314, 
+                    0.1820347382487314, 
+                    0.1820347382487314, 
+                    0.1820347382487314, 
+                    0.1698680359614801, 
+                    0.1698680359614801, 
+                    0.15187923077502088, 
+                    0.15187923077502088, 
+                    0.13373270200298953, 
+                    0.13373270200298953, 
+                    0.11534699825960837, 
+                    0.11534699825960837, 
+                    0.10003916001666013, 
+                    0.10003916001666013
+                ], 
+                0.010408381000161171
+            ], 
+            [
+                1.0701545476913452, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998784201855077, 
+                    0.9998784201855077, 
+                    0.9923991966530002, 
+                    0.9923991966530002, 
+                    0.9802103535799147, 
+                    0.9802103535799147, 
+                    0.960220555360248, 
+                    0.960220555360248, 
+                    0.9313389545324795, 
+                    0.9313389545324795, 
+                    0.8938899726010443, 
+                    0.8938899726010443, 
+                    0.8509010015436682, 
+                    0.8509010015436682, 
+                    0.8058152479382891, 
+                    0.8058152479382891, 
+                    0.7611359361700949, 
+                    0.7611359361700949, 
+                    0.7181478213377402, 
+                    0.7181478213377402, 
+                    0.6759229282270813, 
+                    0.6759229282270813, 
+                    0.6346456549053339, 
+                    0.6346456549053339, 
+                    0.5946037096959363, 
+                    0.5946037096959363, 
+                    0.5565241672620215, 
+                    0.5565241672620215, 
+                    0.5199671216214677, 
+                    0.5199671216214677, 
+                    0.4843231271310013, 
+                    0.4843231271310013, 
+                    0.4518196179918565, 
+                    0.4518196179918565, 
+                    0.42164450498167283, 
+                    0.42164450498167283, 
+                    0.3937102656691219, 
+                    0.3937102656691219, 
+                    0.36756766161591786, 
+                    0.36756766161591786, 
+                    0.34343239916508367, 
+                    0.34343239916508367, 
+                    0.32020939457785785, 
+                    0.32020939457785785, 
+                    0.2990536887619312, 
+                    0.2990536887619312, 
+                    0.2793320549888117, 
+                    0.2793320549888117, 
+                    0.2620574854311875, 
+                    0.2620574854311875, 
+                    0.24552839164717183, 
+                    0.24552839164717183, 
+                    0.2312404815274587, 
+                    0.2312404815274587, 
+                    0.21842102977898004, 
+                    0.21842102977898004, 
+                    0.20641877854706475, 
+                    0.20641877854706475, 
+                    0.19544298746691513, 
+                    0.19544298746691513, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.18760121250021236, 
+                    0.16995004465568028, 
+                    0.16995004465568028, 
+                    0.15190628831188366, 
+                    0.15190628831188366, 
+                    0.13365444766516374, 
+                    0.13365444766516374, 
+                    0.11520084403142992, 
+                    0.11520084403142992, 
+                    0.10000407264661984, 
+                    0.10000407264661984
+                ], 
+                0.009580804035067558
+            ]
+        ]
+    }, 
+    {
+        "block_size": 88, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9351527690887451, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999472710548898, 
+                    0.9999472710548898, 
+                    0.9997943092983919, 
+                    0.9997943092983919, 
+                    0.994743332914763, 
+                    0.994743332914763, 
+                    0.9863181227603869, 
+                    0.9863181227603869, 
+                    0.973061426745674, 
+                    0.973061426745674, 
+                    0.9558488421701826, 
+                    0.9558488421701826, 
+                    0.9336496179239419, 
+                    0.9336496179239419, 
+                    0.9059461372587321, 
+                    0.9059461372587321, 
+                    0.8726128687276566, 
+                    0.8726128687276566, 
+                    0.8353228802081394, 
+                    0.8353228802081394, 
+                    0.7961236048869512, 
+                    0.7961236048869512, 
+                    0.7550807830175937, 
+                    0.7550807830175937, 
+                    0.7149331651751164, 
+                    0.7149331651751164, 
+                    0.6755378312423044, 
+                    0.6755378312423044, 
+                    0.636288791839335, 
+                    0.636288791839335, 
+                    0.5982501861956512, 
+                    0.5982501861956512, 
+                    0.560990677671295, 
+                    0.560990677671295, 
+                    0.5269284065735377, 
+                    0.5269284065735377, 
+                    0.4944706008304952, 
+                    0.4944706008304952, 
+                    0.4643166514975286, 
+                    0.4643166514975286, 
+                    0.43625197723006987, 
+                    0.43625197723006987, 
+                    0.41014267747235994, 
+                    0.41014267747235994, 
+                    0.3855957494554437, 
+                    0.3855957494554437, 
+                    0.36218835367721974, 
+                    0.36218835367721974, 
+                    0.3400248716370353, 
+                    0.3400248716370353, 
+                    0.31792959568483004, 
+                    0.31792959568483004, 
+                    0.2985559516482339, 
+                    0.2985559516482339, 
+                    0.28066217989946396, 
+                    0.28066217989946396, 
+                    0.2645971147139708, 
+                    0.2645971147139708, 
+                    0.2499717326100722, 
+                    0.2499717326100722, 
+                    0.23642778828310418, 
+                    0.23642778828310418, 
+                    0.22428322380641266, 
+                    0.22428322380641266, 
+                    0.21326377395989293, 
+                    0.21326377395989293, 
+                    0.20696251494233325, 
+                    0.20696251494233325, 
+                    0.20696251494233325, 
+                    0.20696251494233325, 
+                    0.2067950570220606, 
+                    0.2067950570220606, 
+                    0.1910202148022141, 
+                    0.1910202148022141, 
+                    0.17418116665476543, 
+                    0.17418116665476543, 
+                    0.15643702901838613, 
+                    0.15643702901838613, 
+                    0.13791738273196077, 
+                    0.13791738273196077, 
+                    0.11865339564743978, 
+                    0.11865339564743978, 
+                    0.10048172297515431, 
+                    0.10048172297515431
+                ], 
+                0.05727074667811394
+            ], 
+            [
+                0.9414435625076294, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999693025000996, 
+                    0.999693025000996, 
+                    0.9942675517108285, 
+                    0.9942675517108285, 
+                    0.9858907341931694, 
+                    0.9858907341931694, 
+                    0.9723023906743429, 
+                    0.9723023906743429, 
+                    0.9552288028940767, 
+                    0.9552288028940767, 
+                    0.9326128212074307, 
+                    0.9326128212074307, 
+                    0.9040120279562244, 
+                    0.9040120279562244, 
+                    0.8705073155715082, 
+                    0.8705073155715082, 
+                    0.8331739598013786, 
+                    0.8331739598013786, 
+                    0.7936186130444713, 
+                    0.7936186130444713, 
+                    0.7523955713367714, 
+                    0.7523955713367714, 
+                    0.7120676070703333, 
+                    0.7120676070703333, 
+                    0.6726357970954316, 
+                    0.6726357970954316, 
+                    0.6333441122672678, 
+                    0.6333441122672678, 
+                    0.5953417079426495, 
+                    0.5953417079426495, 
+                    0.5581080213305765, 
+                    0.5581080213305765, 
+                    0.5241453244294881, 
+                    0.5241453244294881, 
+                    0.49171419144597917, 
+                    0.49171419144597917, 
+                    0.4616775771839911, 
+                    0.4616775771839911, 
+                    0.4336925743472207, 
+                    0.4336925743472207, 
+                    0.4076900181907263, 
+                    0.4076900181907263, 
+                    0.3832473876807706, 
+                    0.3832473876807706, 
+                    0.3599463010274752, 
+                    0.3599463010274752, 
+                    0.3378924004618118, 
+                    0.3378924004618118, 
+                    0.31591201660103724, 
+                    0.31591201660103724, 
+                    0.2966449805968421, 
+                    0.2966449805968421, 
+                    0.27885209385832926, 
+                    0.27885209385832926, 
+                    0.26288037521089286, 
+                    0.26288037521089286, 
+                    0.24834221995720493, 
+                    0.24834221995720493, 
+                    0.2348860227702117, 
+                    0.2348860227702117, 
+                    0.22283949704350953, 
+                    0.22283949704350953, 
+                    0.21147341765625974, 
+                    0.21147341765625974, 
+                    0.20739035235753117, 
+                    0.20739035235753117, 
+                    0.20739035235753117, 
+                    0.20739035235753117, 
+                    0.20739035235753117, 
+                    0.20739035235753117, 
+                    0.19118346687319182, 
+                    0.19118346687319182, 
+                    0.17406462147517063, 
+                    0.17406462147517063, 
+                    0.15614941361672313, 
+                    0.15614941361672313, 
+                    0.13755740490988494, 
+                    0.13755740490988494, 
+                    0.11831722513771208, 
+                    0.11831722513771208, 
+                    0.10036886686644562, 
+                    0.10036886686644562
+                ], 
+                0.05347727611660957
+            ], 
+            [
+                0.947776734828949, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999692351134306, 
+                    0.9999692351134306, 
+                    0.9994557770350257, 
+                    0.9994557770350257, 
+                    0.9940952412586578, 
+                    0.9940952412586578, 
+                    0.9855845460300446, 
+                    0.9855845460300446, 
+                    0.9724851324254812, 
+                    0.9724851324254812, 
+                    0.9541213042947471, 
+                    0.9541213042947471, 
+                    0.9312287070866503, 
+                    0.9312287070866503, 
+                    0.9024220150773907, 
+                    0.9024220150773907, 
+                    0.8686472217954653, 
+                    0.8686472217954653, 
+                    0.830749562450289, 
+                    0.830749562450289, 
+                    0.7909489834558598, 
+                    0.7909489834558598, 
+                    0.7495941871446078, 
+                    0.7495941871446078, 
+                    0.7092375092816049, 
+                    0.7092375092816049, 
+                    0.6697205013494598, 
+                    0.6697205013494598, 
+                    0.6304305552853016, 
+                    0.6304305552853016, 
+                    0.5923533832936323, 
+                    0.5923533832936323, 
+                    0.555382508023757, 
+                    0.555382508023757, 
+                    0.5210377104689898, 
+                    0.5210377104689898, 
+                    0.4893437361473903, 
+                    0.4893437361473903, 
+                    0.4586897745408254, 
+                    0.4586897745408254, 
+                    0.4313664677936911, 
+                    0.4313664677936911, 
+                    0.40513828095073645, 
+                    0.40513828095073645, 
+                    0.38094174506637585, 
+                    0.38094174506637585, 
+                    0.35770270915014307, 
+                    0.35770270915014307, 
+                    0.33577028573866974, 
+                    0.33577028573866974, 
+                    0.31390272361481497, 
+                    0.31390272361481497, 
+                    0.2947414610445031, 
+                    0.2947414610445031, 
+                    0.277047532729136, 
+                    0.277047532729136, 
+                    0.2611672218745088, 
+                    0.2611672218745088, 
+                    0.2467138501249954, 
+                    0.2467138501249954, 
+                    0.23333050800471905, 
+                    0.23333050800471905, 
+                    0.2213158581454251, 
+                    0.2213158581454251, 
+                    0.21025985066396674, 
+                    0.21025985066396674, 
+                    0.20686022643149363, 
+                    0.20686022643149363, 
+                    0.20686022643149363, 
+                    0.20686022643149363, 
+                    0.20686022643149363, 
+                    0.20686022643149363, 
+                    0.19078329896971802, 
+                    0.19078329896971802, 
+                    0.1736863904599607, 
+                    0.1736863904599607, 
+                    0.15579362637974448, 
+                    0.15579362637974448, 
+                    0.13724819078578251, 
+                    0.13724819078578251, 
+                    0.11808387832416187, 
+                    0.11808387832416187, 
+                    0.10030524507920342, 
+                    0.10030524507920342
+                ], 
+                0.04988186061382294
+            ], 
+            [
+                0.954152524471283, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999446971434472, 
+                    0.9999446971434472, 
+                    0.9992396020979423, 
+                    0.9992396020979423, 
+                    0.9953782934211272, 
+                    0.9953782934211272, 
+                    0.9866033550028284, 
+                    0.9866033550028284, 
+                    0.9735691695786245, 
+                    0.9735691695786245, 
+                    0.9555577270472253, 
+                    0.9555577270472253, 
+                    0.9323547870697553, 
+                    0.9323547870697553, 
+                    0.9017756561950618, 
+                    0.9017756561950618, 
+                    0.8665154277432506, 
+                    0.8665154277432506, 
+                    0.8281052286196714, 
+                    0.8281052286196714, 
+                    0.7881263304124465, 
+                    0.7881263304124465, 
+                    0.7467942645099245, 
+                    0.7467942645099245, 
+                    0.7062640521407774, 
+                    0.7062640521407774, 
+                    0.6667076046108442, 
+                    0.6667076046108442, 
+                    0.627376005803297, 
+                    0.627376005803297, 
+                    0.5896234215689882, 
+                    0.5896234215689882, 
+                    0.552032031095225, 
+                    0.552032031095225, 
+                    0.5189254154945628, 
+                    0.5189254154945628, 
+                    0.48594276451286755, 
+                    0.48594276451286755, 
+                    0.45636596712106103, 
+                    0.45636596712106103, 
+                    0.42879814660520577, 
+                    0.42879814660520577, 
+                    0.4025666135841971, 
+                    0.4025666135841971, 
+                    0.37867455012974355, 
+                    0.37867455012974355, 
+                    0.35541484253794636, 
+                    0.35541484253794636, 
+                    0.33365046840707546, 
+                    0.33365046840707546, 
+                    0.3118768461936822, 
+                    0.3118768461936822, 
+                    0.29282820509121277, 
+                    0.29282820509121277, 
+                    0.275232299456409, 
+                    0.275232299456409, 
+                    0.25944285359547903, 
+                    0.25944285359547903, 
+                    0.2450740661698, 
+                    0.2450740661698, 
+                    0.23177146596252193, 
+                    0.23177146596252193, 
+                    0.21987448165797677, 
+                    0.21987448165797677, 
+                    0.20930997221644074, 
+                    0.20930997221644074, 
+                    0.2013370997967272, 
+                    0.2013370997967272, 
+                    0.2013370997967272, 
+                    0.2013370997967272, 
+                    0.2013370997967272, 
+                    0.2013370997967272, 
+                    0.18936081693652776, 
+                    0.18936081693652776, 
+                    0.17275972689776045, 
+                    0.17275972689776045, 
+                    0.15529625128067154, 
+                    0.15529625128067154, 
+                    0.13707456572479176, 
+                    0.13707456572479176, 
+                    0.118113800881821, 
+                    0.118113800881821, 
+                    0.10040416174956444, 
+                    0.10040416174956444
+                ], 
+                0.04637151211500168
+            ], 
+            [
+                0.9605711698532104, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999974430611243, 
+                    0.9999974430611243, 
+                    0.9995041612773499, 
+                    0.9995041612773499, 
+                    0.9943545052612514, 
+                    0.9943545052612514, 
+                    0.9860202016920216, 
+                    0.9860202016920216, 
+                    0.9727367834675233, 
+                    0.9727367834675233, 
+                    0.9543560295898248, 
+                    0.9543560295898248, 
+                    0.9302851823142805, 
+                    0.9302851823142805, 
+                    0.899817520631046, 
+                    0.899817520631046, 
+                    0.864543319077934, 
+                    0.864543319077934, 
+                    0.8258248090173224, 
+                    0.8258248090173224, 
+                    0.785596087598297, 
+                    0.785596087598297, 
+                    0.7439648337143164, 
+                    0.7439648337143164, 
+                    0.7034158674007405, 
+                    0.7034158674007405, 
+                    0.6638216931868203, 
+                    0.6638216931868203, 
+                    0.6245223133561189, 
+                    0.6245223133561189, 
+                    0.5865017476701953, 
+                    0.5865017476701953, 
+                    0.5496476866817408, 
+                    0.5496476866817408, 
+                    0.5153950594957252, 
+                    0.5153950594957252, 
+                    0.48391783198853994, 
+                    0.48391783198853994, 
+                    0.4533965873205714, 
+                    0.4533965873205714, 
+                    0.4262970246699844, 
+                    0.4262970246699844, 
+                    0.4002602139476476, 
+                    0.4002602139476476, 
+                    0.37627879209581383, 
+                    0.37627879209581383, 
+                    0.35325793594235394, 
+                    0.35325793594235394, 
+                    0.33154643781784116, 
+                    0.33154643781784116, 
+                    0.3099072491208992, 
+                    0.3099072491208992, 
+                    0.29095668003495045, 
+                    0.29095668003495045, 
+                    0.273462255762036, 
+                    0.273462255762036, 
+                    0.2577642688160518, 
+                    0.2577642688160518, 
+                    0.24348119237507773, 
+                    0.24348119237507773, 
+                    0.2302589687698494, 
+                    0.2302589687698494, 
+                    0.2184007518820134, 
+                    0.2184007518820134, 
+                    0.2077725465111476, 
+                    0.2077725465111476, 
+                    0.20317996413720424, 
+                    0.20317996413720424, 
+                    0.20317996413720424, 
+                    0.20317996413720424, 
+                    0.20317996413720424, 
+                    0.20317996413720424, 
+                    0.18980363121699798, 
+                    0.18980363121699798, 
+                    0.1729049469461242, 
+                    0.1729049469461242, 
+                    0.15520614593683799, 
+                    0.15520614593683799, 
+                    0.13684523385863942, 
+                    0.13684523385863942, 
+                    0.11784980892921011, 
+                    0.11784980892921011, 
+                    0.10028279701345345, 
+                    0.10028279701345345
+                ], 
+                0.043236613273620605
+            ], 
+            [
+                0.9670329689979553, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999836324331656, 
+                    0.9999836324331656, 
+                    0.9999620522016138, 
+                    0.9999620522016138, 
+                    0.9943758978555713, 
+                    0.9943758978555713, 
+                    0.9854538652042599, 
+                    0.9854538652042599, 
+                    0.9723432042357191, 
+                    0.9723432042357191, 
+                    0.9539312087257148, 
+                    0.9539312087257148, 
+                    0.9295293304631725, 
+                    0.9295293304631725, 
+                    0.8983479137441717, 
+                    0.8983479137441717, 
+                    0.8624095679834364, 
+                    0.8624095679834364, 
+                    0.8232719700165132, 
+                    0.8232719700165132, 
+                    0.7829217368690266, 
+                    0.7829217368690266, 
+                    0.7411859796304191, 
+                    0.7411859796304191, 
+                    0.7005332334979428, 
+                    0.7005332334979428, 
+                    0.6608873587207762, 
+                    0.6608873587207762, 
+                    0.6215767447628091, 
+                    0.6215767447628091, 
+                    0.5836688159731901, 
+                    0.5836688159731901, 
+                    0.5465548208189934, 
+                    0.5465548208189934, 
+                    0.5129795774899312, 
+                    0.5129795774899312, 
+                    0.4807345023505636, 
+                    0.4807345023505636, 
+                    0.4511872694561483, 
+                    0.4511872694561483, 
+                    0.42351190645780923, 
+                    0.42351190645780923, 
+                    0.39794877223154934, 
+                    0.39794877223154934, 
+                    0.37392253467716163, 
+                    0.37392253467716163, 
+                    0.351058602992054, 
+                    0.351058602992054, 
+                    0.3294453659749152, 
+                    0.3294453659749152, 
+                    0.3079241795912797, 
+                    0.3079241795912797, 
+                    0.28907840788524536, 
+                    0.28907840788524536, 
+                    0.27168330040409366, 
+                    0.27168330040409366, 
+                    0.2560770767784741, 
+                    0.2560770767784741, 
+                    0.24187851172574132, 
+                    0.24187851172574132, 
+                    0.2287362591729921, 
+                    0.2287362591729921, 
+                    0.21696158780579136, 
+                    0.21696158780579136, 
+                    0.2063806601183451, 
+                    0.2063806601183451, 
+                    0.20078379203065708, 
+                    0.20078379203065708, 
+                    0.20078379203065708, 
+                    0.20078379203065708, 
+                    0.20078379203065708, 
+                    0.20078379203065708, 
+                    0.18969261128120207, 
+                    0.18969261128120207, 
+                    0.1727548894394803, 
+                    0.1727548894394803, 
+                    0.1550803643937648, 
+                    0.1550803643937648, 
+                    0.13676092249226574, 
+                    0.13676092249226574, 
+                    0.11780810355647763, 
+                    0.11780810355647763, 
+                    0.10028150298814194, 
+                    0.10028150298814194
+                ], 
+                0.040175631642341614
+            ], 
+            [
+                0.9735382795333862, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9944066847045683, 
+                    0.9944066847045683, 
+                    0.9858981074878398, 
+                    0.9858981074878398, 
+                    0.9721726438056588, 
+                    0.9721726438056588, 
+                    0.9533302362804486, 
+                    0.9533302362804486, 
+                    0.9283090209027026, 
+                    0.9283090209027026, 
+                    0.8966928950017196, 
+                    0.8966928950017196, 
+                    0.8601645749135804, 
+                    0.8601645749135804, 
+                    0.8207920041856716, 
+                    0.8207920041856716, 
+                    0.7802376257774372, 
+                    0.7802376257774372, 
+                    0.738292546794489, 
+                    0.738292546794489, 
+                    0.6975868026220995, 
+                    0.6975868026220995, 
+                    0.6579507387016978, 
+                    0.6579507387016978, 
+                    0.6186246290278689, 
+                    0.6186246290278689, 
+                    0.5807441337990845, 
+                    0.5807441337990845, 
+                    0.5436858850498292, 
+                    0.5436858850498292, 
+                    0.5101823905326826, 
+                    0.5101823905326826, 
+                    0.4780261507179287, 
+                    0.4780261507179287, 
+                    0.4485620052961, 
+                    0.4485620052961, 
+                    0.42100546678551864, 
+                    0.42100546678551864, 
+                    0.3955332997116226, 
+                    0.3955332997116226, 
+                    0.3716193511748691, 
+                    0.3716193511748691, 
+                    0.3488641182816426, 
+                    0.3488641182816426, 
+                    0.327361072657125, 
+                    0.327361072657125, 
+                    0.3059550972501952, 
+                    0.3059550972501952, 
+                    0.28721461928955766, 
+                    0.28721461928955766, 
+                    0.2699191144894219, 
+                    0.2699191144894219, 
+                    0.2544042468292919, 
+                    0.2544042468292919, 
+                    0.24029175214141216, 
+                    0.24029175214141216, 
+                    0.22723250911953105, 
+                    0.22723250911953105, 
+                    0.21553642565312942, 
+                    0.21553642565312942, 
+                    0.20499365464285607, 
+                    0.20499365464285607, 
+                    0.19877462547644584, 
+                    0.19877462547644584, 
+                    0.19877462547644584, 
+                    0.19877462547644584, 
+                    0.19877462547644584, 
+                    0.19877462547644584, 
+                    0.19013473068644718, 
+                    0.19013473068644718, 
+                    0.17289287692605929, 
+                    0.17289287692605929, 
+                    0.15507630167726533, 
+                    0.15507630167726533, 
+                    0.1366939367812133, 
+                    0.1366939367812133, 
+                    0.11772991725200048, 
+                    0.11772991725200048, 
+                    0.10026494010961734, 
+                    0.10026494010961734
+                ], 
+                0.03729906678199768
+            ], 
+            [
+                0.9800873398780823, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999938072621903, 
+                    0.9999938072621903, 
+                    0.9998482975855281, 
+                    0.9998482975855281, 
+                    0.9943374898602215, 
+                    0.9943374898602215, 
+                    0.9855684438619442, 
+                    0.9855684438619442, 
+                    0.9720940499516596, 
+                    0.9720940499516596, 
+                    0.9527403275171901, 
+                    0.9527403275171901, 
+                    0.9272624358293295, 
+                    0.9272624358293295, 
+                    0.8948511129619092, 
+                    0.8948511129619092, 
+                    0.8579786717354104, 
+                    0.8579786717354104, 
+                    0.8182883343071153, 
+                    0.8182883343071153, 
+                    0.7775012943000239, 
+                    0.7775012943000239, 
+                    0.7354730718010104, 
+                    0.7354730718010104, 
+                    0.6947196064169928, 
+                    0.6947196064169928, 
+                    0.6550157245493331, 
+                    0.6550157245493331, 
+                    0.6157165180897195, 
+                    0.6157165180897195, 
+                    0.5777278628761453, 
+                    0.5777278628761453, 
+                    0.5410960087912453, 
+                    0.5410960087912453, 
+                    0.5069653389383961, 
+                    0.5069653389383961, 
+                    0.47582906828929455, 
+                    0.47582906828929455, 
+                    0.44553385350091657, 
+                    0.44553385350091657, 
+                    0.41875599812572145, 
+                    0.41875599812572145, 
+                    0.3930287931674596, 
+                    0.3930287931674596, 
+                    0.3693655098048793, 
+                    0.3693655098048793, 
+                    0.34667651117012493, 
+                    0.34667651117012493, 
+                    0.3252946179969218, 
+                    0.3252946179969218, 
+                    0.3040011174367571, 
+                    0.3040011174367571, 
+                    0.28536668306455315, 
+                    0.28536668306455315, 
+                    0.2681698334241683, 
+                    0.2681698334241683, 
+                    0.2527459510433545, 
+                    0.2527459510433545, 
+                    0.23871739851622567, 
+                    0.23871739851622567, 
+                    0.22573575419221875, 
+                    0.22573575419221875, 
+                    0.21411463710713866, 
+                    0.21411463710713866, 
+                    0.20365395570801978, 
+                    0.20365395570801978, 
+                    0.19771312040569416, 
+                    0.19771312040569416, 
+                    0.19771312040569416, 
+                    0.19771312040569416, 
+                    0.19771312040569416, 
+                    0.19771312040569416, 
+                    0.19028804706263652, 
+                    0.19028804706263652, 
+                    0.17288700876581764, 
+                    0.17288700876581764, 
+                    0.15497410385888077, 
+                    0.15497410385888077, 
+                    0.13654909470433008, 
+                    0.13654909470433008, 
+                    0.11759062755355151, 
+                    0.11759062755355151, 
+                    0.10022032200426677, 
+                    0.10022032200426677
+                ], 
+                0.03461902216076851
+            ], 
+            [
+                0.9866804480552673, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999959363303707, 
+                    0.999959363303707, 
+                    0.9996605084696872, 
+                    0.9996605084696872, 
+                    0.994541572341708, 
+                    0.994541572341708, 
+                    0.9861164305510409, 
+                    0.9861164305510409, 
+                    0.972729267554691, 
+                    0.972729267554691, 
+                    0.9531277405867461, 
+                    0.9531277405867461, 
+                    0.9268059340947995, 
+                    0.9268059340947995, 
+                    0.8934291339404209, 
+                    0.8934291339404209, 
+                    0.8557902529547499, 
+                    0.8557902529547499, 
+                    0.8157433851252626, 
+                    0.8157433851252626, 
+                    0.7747886088998673, 
+                    0.7747886088998673, 
+                    0.7326321788312172, 
+                    0.7326321788312172, 
+                    0.6917784277879419, 
+                    0.6917784277879419, 
+                    0.6520643823833511, 
+                    0.6520643823833511, 
+                    0.6127421615755962, 
+                    0.6127421615755962, 
+                    0.5749511050451319, 
+                    0.5749511050451319, 
+                    0.5379329432419299, 
+                    0.5379329432419299, 
+                    0.5046814595107406, 
+                    0.5046814595107406, 
+                    0.4725828532224533, 
+                    0.4725828532224533, 
+                    0.44340708243280763, 
+                    0.44340708243280763, 
+                    0.4159914348092513, 
+                    0.4159914348092513, 
+                    0.39075974829266086, 
+                    0.39075974829266086, 
+                    0.3670515150500699, 
+                    0.3670515150500699, 
+                    0.34451916351470874, 
+                    0.34451916351470874, 
+                    0.3232370257855022, 
+                    0.3232370257855022, 
+                    0.3020608895312822, 
+                    0.3020608895312822, 
+                    0.283531038943561, 
+                    0.283531038943561, 
+                    0.266434236679748, 
+                    0.266434236679748, 
+                    0.25110325852101933, 
+                    0.25110325852101933, 
+                    0.2371639077270788, 
+                    0.2371639077270788, 
+                    0.2242714782148436, 
+                    0.2242714782148436, 
+                    0.2126997525079272, 
+                    0.2126997525079272, 
+                    0.20195116843773364, 
+                    0.20195116843773364, 
+                    0.1967325079548449, 
+                    0.1967325079548449, 
+                    0.1967325079548449, 
+                    0.1967325079548449, 
+                    0.1967325079548449, 
+                    0.1967325079548449, 
+                    0.18939771417071258, 
+                    0.18939771417071258, 
+                    0.17218569176028206, 
+                    0.17218569176028206, 
+                    0.1544492325413026, 
+                    0.1544492325413026, 
+                    0.1361821790905355, 
+                    0.1361821790905355, 
+                    0.11736704628626206, 
+                    0.11736704628626206, 
+                    0.10021936209574801, 
+                    0.10021936209574801
+                ], 
+                0.032090041786432266
+            ], 
+            [
+                0.9933179020881653, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999749638957093, 
+                    0.9999749638957093, 
+                    0.9994732394093099, 
+                    0.9994732394093099, 
+                    0.9944951069969369, 
+                    0.9944951069969369, 
+                    0.98608241203407, 
+                    0.98608241203407, 
+                    0.9720623510691677, 
+                    0.9720623510691677, 
+                    0.9521888837234636, 
+                    0.9521888837234636, 
+                    0.9255119301175471, 
+                    0.9255119301175471, 
+                    0.8916979101256627, 
+                    0.8916979101256627, 
+                    0.8537362307291201, 
+                    0.8537362307291201, 
+                    0.813324088810638, 
+                    0.813324088810638, 
+                    0.7721028338068798, 
+                    0.7721028338068798, 
+                    0.7297909676430189, 
+                    0.7297909676430189, 
+                    0.6888711009456591, 
+                    0.6888711009456591, 
+                    0.6491227869560016, 
+                    0.6491227869560016, 
+                    0.6098423552187545, 
+                    0.6098423552187545, 
+                    0.5719178835412729, 
+                    0.5719178835412729, 
+                    0.5353977371984037, 
+                    0.5353977371984037, 
+                    0.5014338536925963, 
+                    0.5014338536925963, 
+                    0.47043918151352426, 
+                    0.47043918151352426, 
+                    0.44038828708208516, 
+                    0.44038828708208516, 
+                    0.4137683086643898, 
+                    0.4137683086643898, 
+                    0.3882826746089481, 
+                    0.3882826746089481, 
+                    0.36482220582832975, 
+                    0.36482220582832975, 
+                    0.3423589240640006, 
+                    0.3423589240640006, 
+                    0.3211977552107225, 
+                    0.3211977552107225, 
+                    0.30013404722196146, 
+                    0.30013404722196146, 
+                    0.2817090600231543, 
+                    0.2817090600231543, 
+                    0.2647102711639926, 
+                    0.2647102711639926, 
+                    0.2494681307758493, 
+                    0.2494681307758493, 
+                    0.2356096023368183, 
+                    0.2356096023368183, 
+                    0.222792559110798, 
+                    0.222792559110798, 
+                    0.2113121321077384, 
+                    0.2113121321077384, 
+                    0.2007418503064876, 
+                    0.2007418503064876, 
+                    0.1963243888422438, 
+                    0.1963243888422438, 
+                    0.1963243888422438, 
+                    0.1963243888422438, 
+                    0.1963243888422438, 
+                    0.1963243888422438, 
+                    0.1893133972552599, 
+                    0.1893133972552599, 
+                    0.172065910777229, 
+                    0.172065910777229, 
+                    0.15426124883546516, 
+                    0.15426124883546516, 
+                    0.1359597030723006, 
+                    0.1359597030723006, 
+                    0.11716080261154097, 
+                    0.11716080261154097, 
+                    0.10015334505922102, 
+                    0.10015334505922102
+                ], 
+                0.02974497154355049
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999481527347686, 
+                    0.9999481527347686, 
+                    0.9996372188181674, 
+                    0.9996372188181674, 
+                    0.9945249576969074, 
+                    0.9945249576969074, 
+                    0.9857326877642234, 
+                    0.9857326877642234, 
+                    0.9718543998225719, 
+                    0.9718543998225719, 
+                    0.951622879297289, 
+                    0.951622879297289, 
+                    0.9243725359606687, 
+                    0.9243725359606687, 
+                    0.8896489242087016, 
+                    0.8896489242087016, 
+                    0.8511518691241374, 
+                    0.8511518691241374, 
+                    0.8106109413086472, 
+                    0.8106109413086472, 
+                    0.7692868638872422, 
+                    0.7692868638872422, 
+                    0.7269124207335457, 
+                    0.7269124207335457, 
+                    0.6859122712903443, 
+                    0.6859122712903443, 
+                    0.6461718528295356, 
+                    0.6461718528295356, 
+                    0.6068338597314414, 
+                    0.6068338597314414, 
+                    0.5691737611788767, 
+                    0.5691737611788767, 
+                    0.5321560886927228, 
+                    0.5321560886927228, 
+                    0.4992624002986596, 
+                    0.4992624002986596, 
+                    0.46711405252573257, 
+                    0.46711405252573257, 
+                    0.4383221864774627, 
+                    0.4383221864774627, 
+                    0.41099654692986937, 
+                    0.41099654692986937, 
+                    0.3860265757733696, 
+                    0.3860265757733696, 
+                    0.3625205924692679, 
+                    0.3625205924692679, 
+                    0.34021421731736146, 
+                    0.34021421731736146, 
+                    0.31915205138444247, 
+                    0.31915205138444247, 
+                    0.298205197587903, 
+                    0.298205197587903, 
+                    0.27988459034958624, 
+                    0.27988459034958624, 
+                    0.2629835676103446, 
+                    0.2629835676103446, 
+                    0.24782986101511834, 
+                    0.24782986101511834, 
+                    0.2340524810437669, 
+                    0.2340524810437669, 
+                    0.22132452918826992, 
+                    0.22132452918826992, 
+                    0.2100201813366608, 
+                    0.2100201813366608, 
+                    0.19962765448575, 
+                    0.19962765448575, 
+                    0.19367908831862002, 
+                    0.19367908831862002, 
+                    0.19367908831862002, 
+                    0.19367908831862002, 
+                    0.19367908831862002, 
+                    0.19367908831862002, 
+                    0.18914165251247428, 
+                    0.18914165251247428, 
+                    0.17189922123921597, 
+                    0.17189922123921597, 
+                    0.1541339170319808, 
+                    0.1541339170319808, 
+                    0.13587954267218486, 
+                    0.13587954267218486, 
+                    0.11712455187012621, 
+                    0.11712455187012621, 
+                    0.1001511682499795, 
+                    0.1001511682499795
+                ], 
+                0.027509167790412903
+            ], 
+            [
+                1.0067270994186401, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999809640463677, 
+                    0.9999809640463677, 
+                    0.9998582279932355, 
+                    0.9998582279932355, 
+                    0.9943494934078391, 
+                    0.9943494934078391, 
+                    0.9857871233008059, 
+                    0.9857871233008059, 
+                    0.971875510890248, 
+                    0.971875510890248, 
+                    0.9508037933929423, 
+                    0.9508037933929423, 
+                    0.9228776222492105, 
+                    0.9228776222492105, 
+                    0.8875820688979227, 
+                    0.8875820688979227, 
+                    0.8487961341042599, 
+                    0.8487961341042599, 
+                    0.8080271410563018, 
+                    0.8080271410563018, 
+                    0.766552198406683, 
+                    0.766552198406683, 
+                    0.7240420962570328, 
+                    0.7240420962570328, 
+                    0.6830060965730455, 
+                    0.6830060965730455, 
+                    0.6432396233464801, 
+                    0.6432396233464801, 
+                    0.6039125513098269, 
+                    0.6039125513098269, 
+                    0.5662374731605833, 
+                    0.5662374731605833, 
+                    0.5294139646401819, 
+                    0.5294139646401819, 
+                    0.4963606480124681, 
+                    0.4963606480124681, 
+                    0.46461023176907434, 
+                    0.46461023176907434, 
+                    0.43562453255698863, 
+                    0.43562453255698863, 
+                    0.4086169907164445, 
+                    0.4086169907164445, 
+                    0.3836451906764591, 
+                    0.3836451906764591, 
+                    0.3602897829691669, 
+                    0.3602897829691669, 
+                    0.3380819446525806, 
+                    0.3380819446525806, 
+                    0.3171338334272623, 
+                    0.3171338334272623, 
+                    0.2963007762329034, 
+                    0.2963007762329034, 
+                    0.2780849653473956, 
+                    0.2780849653473956, 
+                    0.26128237180732466, 
+                    0.26128237180732466, 
+                    0.24622065891166475, 
+                    0.24622065891166475, 
+                    0.2325293422336272, 
+                    0.2325293422336272, 
+                    0.21986925680356956, 
+                    0.21986925680356956, 
+                    0.20853656568679546, 
+                    0.20853656568679546, 
+                    0.19818364027407548, 
+                    0.19818364027407548, 
+                    0.19299407135765673, 
+                    0.19299407135765673, 
+                    0.19299407135765673, 
+                    0.19299407135765673, 
+                    0.19299407135765673, 
+                    0.19299407135765673, 
+                    0.1896777907203196, 
+                    0.1896777907203196, 
+                    0.17218278775254234, 
+                    0.17218278775254234, 
+                    0.15427059377744928, 
+                    0.15427059377744928, 
+                    0.13592680911958543, 
+                    0.13592680911958543, 
+                    0.11712542226701961, 
+                    0.11712542226701961, 
+                    0.10013499312539036, 
+                    0.10013499312539036
+                ], 
+                0.025436069816350937
+            ], 
+            [
+                1.01349937915802, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999970366901986, 
+                    0.9999970366901986, 
+                    0.9999941171462287, 
+                    0.9999941171462287, 
+                    0.9943568924688266, 
+                    0.9943568924688266, 
+                    0.9857332760444301, 
+                    0.9857332760444301, 
+                    0.9712168579464927, 
+                    0.9712168579464927, 
+                    0.9501187562316615, 
+                    0.9501187562316615, 
+                    0.9216290294186403, 
+                    0.9216290294186403, 
+                    0.8855895458045394, 
+                    0.8855895458045394, 
+                    0.8461431330794568, 
+                    0.8461431330794568, 
+                    0.8050302554240772, 
+                    0.8050302554240772, 
+                    0.763449698822666, 
+                    0.763449698822666, 
+                    0.7209858569767247, 
+                    0.7209858569767247, 
+                    0.6799692009448826, 
+                    0.6799692009448826, 
+                    0.6402225954638968, 
+                    0.6402225954638968, 
+                    0.6010001616552386, 
+                    0.6010001616552386, 
+                    0.5631654860658394, 
+                    0.5631654860658394, 
+                    0.5269356960494708, 
+                    0.5269356960494708, 
+                    0.4930801765318722, 
+                    0.4930801765318722, 
+                    0.4624912998579703, 
+                    0.4624912998579703, 
+                    0.4326491704798819, 
+                    0.4326491704798819, 
+                    0.406387215807759, 
+                    0.406387215807759, 
+                    0.3812095907073559, 
+                    0.3812095907073559, 
+                    0.3580778626678953, 
+                    0.3580778626678953, 
+                    0.33594968835861627, 
+                    0.33594968835861627, 
+                    0.3151195163444824, 
+                    0.3151195163444824, 
+                    0.29439930253366553, 
+                    0.29439930253366553, 
+                    0.27628697552327636, 
+                    0.27628697552327636, 
+                    0.2595811656429745, 
+                    0.2595811656429745, 
+                    0.24460754629345344, 
+                    0.24460754629345344, 
+                    0.23100648922709466, 
+                    0.23100648922709466, 
+                    0.21850516675554135, 
+                    0.21850516675554135, 
+                    0.20760732664825274, 
+                    0.20760732664825274, 
+                    0.19654325836942665, 
+                    0.19654325836942665, 
+                    0.19103912662597505, 
+                    0.19103912662597505, 
+                    0.19103912662597505, 
+                    0.19103912662597505, 
+                    0.19103912662597505, 
+                    0.19103912662597505, 
+                    0.18864212500241195, 
+                    0.18864212500241195, 
+                    0.1714482594940856, 
+                    0.1714482594940856, 
+                    0.15369746028145906, 
+                    0.15369746028145906, 
+                    0.13548598532397543, 
+                    0.13548598532397543, 
+                    0.11681818237556466, 
+                    0.11681818237556466, 
+                    0.10008765791279653, 
+                    0.10008765791279653
+                ], 
+                0.02348157949745655
+            ], 
+            [
+                1.0203173160552979, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995725512623199, 
+                    0.9995725512623199, 
+                    0.9942658645825828, 
+                    0.9942658645825828, 
+                    0.9856483923261878, 
+                    0.9856483923261878, 
+                    0.9710622103649952, 
+                    0.9710622103649952, 
+                    0.9495302978881975, 
+                    0.9495302978881975, 
+                    0.9201962989146084, 
+                    0.9201962989146084, 
+                    0.8836699577405402, 
+                    0.8836699577405402, 
+                    0.8441560007903728, 
+                    0.8441560007903728, 
+                    0.8028477380059666, 
+                    0.8028477380059666, 
+                    0.7610186009877864, 
+                    0.7610186009877864, 
+                    0.7183006146171526, 
+                    0.7183006146171526, 
+                    0.6771359955188719, 
+                    0.6771359955188719, 
+                    0.6373257688213622, 
+                    0.6373257688213622, 
+                    0.5980166973068117, 
+                    0.5980166973068117, 
+                    0.5604580743037286, 
+                    0.5604580743037286, 
+                    0.5237126871682523, 
+                    0.5237126871682523, 
+                    0.4909055422032716, 
+                    0.4909055422032716, 
+                    0.45927034816264856, 
+                    0.45927034816264856, 
+                    0.4305360806303769, 
+                    0.4305360806303769, 
+                    0.40371657005102163, 
+                    0.40371657005102163, 
+                    0.37896824292369424, 
+                    0.37896824292369424, 
+                    0.35583143424396735, 
+                    0.35583143424396735, 
+                    0.33384688055750905, 
+                    0.33384688055750905, 
+                    0.31312025295909784, 
+                    0.31312025295909784, 
+                    0.29251660011314096, 
+                    0.29251660011314096, 
+                    0.2745087462174049, 
+                    0.2745087462174049, 
+                    0.2579022916392867, 
+                    0.2579022916392867, 
+                    0.24301950544576445, 
+                    0.24301950544576445, 
+                    0.22949429298083862, 
+                    0.22949429298083862, 
+                    0.21698970821410665, 
+                    0.21698970821410665, 
+                    0.20579600476555104, 
+                    0.20579600476555104, 
+                    0.19559314858006108, 
+                    0.19559314858006108, 
+                    0.19040008565909924, 
+                    0.19040008565909924, 
+                    0.19040008565909924, 
+                    0.19040008565909924, 
+                    0.19040008565909924, 
+                    0.19040008565909924, 
+                    0.18965676686688376, 
+                    0.18965676686688376, 
+                    0.17205752651080106, 
+                    0.17205752651080106, 
+                    0.15406921950966995, 
+                    0.15406921950966995, 
+                    0.13570021600093413, 
+                    0.13570021600093413, 
+                    0.11692812059484352, 
+                    0.11692812059484352, 
+                    0.10010084094644854, 
+                    0.10010084094644854
+                ], 
+                0.0216768067330122
+            ], 
+            [
+                1.0271810293197632, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9941439686030435, 
+                    0.9941439686030435, 
+                    0.9853043540519381, 
+                    0.9853043540519381, 
+                    0.9707229963038794, 
+                    0.9707229963038794, 
+                    0.9484949640666327, 
+                    0.9484949640666327, 
+                    0.9186748797803421, 
+                    0.9186748797803421, 
+                    0.8815527689662362, 
+                    0.8815527689662362, 
+                    0.8417087176779762, 
+                    0.8417087176779762, 
+                    0.8002234465577565, 
+                    0.8002234465577565, 
+                    0.7582245754632776, 
+                    0.7582245754632776, 
+                    0.7153939399506885, 
+                    0.7153939399506885, 
+                    0.6741828631906004, 
+                    0.6741828631906004, 
+                    0.6343432310435644, 
+                    0.6343432310435644, 
+                    0.5951501654202436, 
+                    0.5951501654202436, 
+                    0.5573506847103229, 
+                    0.5573506847103229, 
+                    0.5213346580534302, 
+                    0.5213346580534302, 
+                    0.48755206805837187, 
+                    0.48755206805837187, 
+                    0.45724059234260883, 
+                    0.45724059234260883, 
+                    0.4275458267551099, 
+                    0.4275458267551099, 
+                    0.4015221500974353, 
+                    0.4015221500974353, 
+                    0.3765563242890734, 
+                    0.3765563242890734, 
+                    0.3536448206280209, 
+                    0.3536448206280209, 
+                    0.33173947733442016, 
+                    0.33173947733442016, 
+                    0.3111309753352872, 
+                    0.3111309753352872, 
+                    0.2906405109838237, 
+                    0.2906405109838237, 
+                    0.2727369474862047, 
+                    0.2727369474862047, 
+                    0.25622751578092917, 
+                    0.25622751578092917, 
+                    0.24143357624773795, 
+                    0.24143357624773795, 
+                    0.22798968672970663, 
+                    0.22798968672970663, 
+                    0.21556483588085792, 
+                    0.21556483588085792, 
+                    0.20448063818909573, 
+                    0.20448063818909573, 
+                    0.19428690696232798, 
+                    0.19428690696232798, 
+                    0.18914209143975755, 
+                    0.18914209143975755, 
+                    0.18914209143975755, 
+                    0.18914209143975755, 
+                    0.18914209143975755, 
+                    0.18914209143975755, 
+                    0.18908031225235974, 
+                    0.18908031225235974, 
+                    0.1715467491612092, 
+                    0.1715467491612092, 
+                    0.1536458161007328, 
+                    0.1536458161007328, 
+                    0.13537666222943245, 
+                    0.13537666222943245, 
+                    0.11671136342111839, 
+                    0.11671136342111839, 
+                    0.10008851790406828, 
+                    0.10008851790406828
+                ], 
+                0.01998179219663143
+            ], 
+            [
+                1.0340908765792847, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999400818203515, 
+                    0.9999400818203515, 
+                    0.9996365370918919, 
+                    0.9996365370918919, 
+                    0.9941224260295753, 
+                    0.9941224260295753, 
+                    0.9851657415133525, 
+                    0.9851657415133525, 
+                    0.9699317466228154, 
+                    0.9699317466228154, 
+                    0.9477692890804413, 
+                    0.9477692890804413, 
+                    0.9173387679905446, 
+                    0.9173387679905446, 
+                    0.8795371626282918, 
+                    0.8795371626282918, 
+                    0.8393347088797348, 
+                    0.8393347088797348, 
+                    0.7976025503773428, 
+                    0.7976025503773428, 
+                    0.7554125672369801, 
+                    0.7554125672369801, 
+                    0.7124882741856549, 
+                    0.7124882741856549, 
+                    0.6712329053443034, 
+                    0.6712329053443034, 
+                    0.6313975142075603, 
+                    0.6313975142075603, 
+                    0.5921672725824272, 
+                    0.5921672725824272, 
+                    0.5546058172763012, 
+                    0.5546058172763012, 
+                    0.5182421139953942, 
+                    0.5182421139953942, 
+                    0.4852045625339466, 
+                    0.4852045625339466, 
+                    0.45423732416781826, 
+                    0.45423732416781826, 
+                    0.4252951666999917, 
+                    0.4252951666999917, 
+                    0.3989627162633157, 
+                    0.3989627162633157, 
+                    0.3743030708520706, 
+                    0.3743030708520706, 
+                    0.35143395831307006, 
+                    0.35143395831307006, 
+                    0.3296591344921891, 
+                    0.3296591344921891, 
+                    0.3091569814674382, 
+                    0.3091569814674382, 
+                    0.2887817452176974, 
+                    0.2887817452176974, 
+                    0.2709813132148067, 
+                    0.2709813132148067, 
+                    0.2545696007592993, 
+                    0.2545696007592993, 
+                    0.23986477407391663, 
+                    0.23986477407391663, 
+                    0.22650363660908907, 
+                    0.22650363660908907, 
+                    0.21415276046218906, 
+                    0.21415276046218906, 
+                    0.20309675926250298, 
+                    0.20309675926250298, 
+                    0.19295912168500665, 
+                    0.19295912168500665, 
+                    0.18885229140681403, 
+                    0.18885229140681403, 
+                    0.18885229140681403, 
+                    0.18885229140681403, 
+                    0.18885229140681403, 
+                    0.18885229140681403, 
+                    0.18885229140681403, 
+                    0.18885229140681403, 
+                    0.17137586299477411, 
+                    0.17137586299477411, 
+                    0.1534907680445381, 
+                    0.1534907680445381, 
+                    0.1352373813608765, 
+                    0.1352373813608765, 
+                    0.11660137491115018, 
+                    0.11660137491115018, 
+                    0.10006639779545733, 
+                    0.10006639779545733
+                ], 
+                0.018412336707115173
+            ], 
+            [
+                1.0410473346710205, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999805689568401, 
+                    0.9999805689568401, 
+                    0.999929198748737, 
+                    0.999929198748737, 
+                    0.9941062303334246, 
+                    0.9941062303334246, 
+                    0.984996345007817, 
+                    0.984996345007817, 
+                    0.9697431272444765, 
+                    0.9697431272444765, 
+                    0.9471884327752876, 
+                    0.9471884327752876, 
+                    0.9159085034945595, 
+                    0.9159085034945595, 
+                    0.8776174145484579, 
+                    0.8776174145484579, 
+                    0.8370477712392548, 
+                    0.8370477712392548, 
+                    0.795001311236365, 
+                    0.795001311236365, 
+                    0.752626258037295, 
+                    0.752626258037295, 
+                    0.7095896554559264, 
+                    0.7095896554559264, 
+                    0.668290875839194, 
+                    0.668290875839194, 
+                    0.6284573400544095, 
+                    0.6284573400544095, 
+                    0.5891910666140167, 
+                    0.5891910666140167, 
+                    0.5518362320528262, 
+                    0.5518362320528262, 
+                    0.5152099525320881, 
+                    0.5152099525320881, 
+                    0.4827788061115275, 
+                    0.4827788061115275, 
+                    0.4513437539144304, 
+                    0.4513437539144304, 
+                    0.4229727486049672, 
+                    0.4229727486049672, 
+                    0.3964612830077013, 
+                    0.3964612830077013, 
+                    0.3720416112170088, 
+                    0.3720416112170088, 
+                    0.3492379972204136, 
+                    0.3492379972204136, 
+                    0.32758799905976577, 
+                    0.32758799905976577, 
+                    0.30719408692629446, 
+                    0.30719408692629446, 
+                    0.286932891666909, 
+                    0.286932891666909, 
+                    0.26923574341116724, 
+                    0.26923574341116724, 
+                    0.2529204230143879, 
+                    0.2529204230143879, 
+                    0.2383039432427309, 
+                    0.2383039432427309, 
+                    0.22502646595577142, 
+                    0.22502646595577142, 
+                    0.21275789497917447, 
+                    0.21275789497917447, 
+                    0.201771697310813, 
+                    0.201771697310813, 
+                    0.1916109881866099, 
+                    0.1916109881866099, 
+                    0.18833749237242325, 
+                    0.18833749237242325, 
+                    0.18833749237242325, 
+                    0.18833749237242325, 
+                    0.18833749237242325, 
+                    0.18833749237242325, 
+                    0.18833749237242325, 
+                    0.18833749237242325, 
+                    0.17096005073219575, 
+                    0.17096005073219575, 
+                    0.15314912956545057, 
+                    0.15314912956545057, 
+                    0.13497056091575801, 
+                    0.13497056091575801, 
+                    0.11641647789316657, 
+                    0.11641647789316657, 
+                    0.10004899123586378, 
+                    0.10004899123586378
+                ], 
+                0.016947491094470024
+            ], 
+            [
+                1.0480505228042603, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997661795090096, 
+                    0.9997661795090096, 
+                    0.9942311175157874, 
+                    0.9942311175157874, 
+                    0.9852657950488806, 
+                    0.9852657950488806, 
+                    0.9697834991920602, 
+                    0.9697834991920602, 
+                    0.946211991538017, 
+                    0.946211991538017, 
+                    0.9139414420278019, 
+                    0.9139414420278019, 
+                    0.8751069243149011, 
+                    0.8751069243149011, 
+                    0.8343672885628666, 
+                    0.8343672885628666, 
+                    0.7922572912153614, 
+                    0.7922572912153614, 
+                    0.7497805747447693, 
+                    0.7497805747447693, 
+                    0.7066540441050918, 
+                    0.7066540441050918, 
+                    0.6653212684735686, 
+                    0.6653212684735686, 
+                    0.6254605560947691, 
+                    0.6254605560947691, 
+                    0.5863442271202671, 
+                    0.5863442271202671, 
+                    0.5486978210011179, 
+                    0.5486978210011179, 
+                    0.512880343429762, 
+                    0.512880343429762, 
+                    0.4794272198788225, 
+                    0.4794272198788225, 
+                    0.4493063950420281, 
+                    0.4493063950420281, 
+                    0.4200481792801407, 
+                    0.4200481792801407, 
+                    0.3942573773508941, 
+                    0.3942573773508941, 
+                    0.3696724215840828, 
+                    0.3696724215840828, 
+                    0.3470740402998306, 
+                    0.3470740402998306, 
+                    0.3255099887223152, 
+                    0.3255099887223152, 
+                    0.3052324157025671, 
+                    0.3052324157025671, 
+                    0.2850844460020456, 
+                    0.2850844460020456, 
+                    0.2674902654925111, 
+                    0.2674902654925111, 
+                    0.2512712056747391, 
+                    0.2512712056747391, 
+                    0.23674243686184887, 
+                    0.23674243686184887, 
+                    0.22354441464721633, 
+                    0.22354441464721633, 
+                    0.21134623311526707, 
+                    0.21134623311526707, 
+                    0.20042740208745405, 
+                    0.20042740208745405, 
+                    0.1905613165657859, 
+                    0.1905613165657859, 
+                    0.1861635822132408, 
+                    0.1861635822132408, 
+                    0.1861635822132408, 
+                    0.1861635822132408, 
+                    0.1861635822132408, 
+                    0.1861635822132408, 
+                    0.1861635822132408, 
+                    0.1861635822132408, 
+                    0.17051803312467928, 
+                    0.17051803312467928, 
+                    0.1528074919096387, 
+                    0.1528074919096387, 
+                    0.1347325869304646, 
+                    0.1347325869304646, 
+                    0.11627679428763492, 
+                    0.11627679428763492, 
+                    0.10005055823026192, 
+                    0.10005055823026192
+                ], 
+                0.01557175349444151
+            ], 
+            [
+                1.0551007986068726, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999925381660971, 
+                    0.9999925381660971, 
+                    0.9999916117378889, 
+                    0.9999916117378889, 
+                    0.9939161161709871, 
+                    0.9939161161709871, 
+                    0.9845441758949415, 
+                    0.9845441758949415, 
+                    0.9688795209799927, 
+                    0.9688795209799927, 
+                    0.945415614298615, 
+                    0.945415614298615, 
+                    0.9135061920731491, 
+                    0.9135061920731491, 
+                    0.8741500520773384, 
+                    0.8741500520773384, 
+                    0.8326203551441631, 
+                    0.8326203551441631, 
+                    0.7898842298914229, 
+                    0.7898842298914229, 
+                    0.7470785439101864, 
+                    0.7470785439101864, 
+                    0.7037934790457854, 
+                    0.7037934790457854, 
+                    0.6624000051436325, 
+                    0.6624000051436325, 
+                    0.6225458836198735, 
+                    0.6225458836198735, 
+                    0.5833694547942382, 
+                    0.5833694547942382, 
+                    0.5460102293743276, 
+                    0.5460102293743276, 
+                    0.5097831770716884, 
+                    0.5097831770716884, 
+                    0.47715787690626077, 
+                    0.47715787690626077, 
+                    0.4463496551851573, 
+                    0.4463496551851573, 
+                    0.41783343443145754, 
+                    0.41783343443145754, 
+                    0.391765481512246, 
+                    0.391765481512246, 
+                    0.36746480499718565, 
+                    0.36746480499718565, 
+                    0.34491987874628155, 
+                    0.34491987874628155, 
+                    0.32348370315423625, 
+                    0.32348370315423625, 
+                    0.30331295000725367, 
+                    0.30331295000725367, 
+                    0.2832786077681757, 
+                    0.2832786077681757, 
+                    0.2657867776493203, 
+                    0.2657867776493203, 
+                    0.24966288067797365, 
+                    0.24966288067797365, 
+                    0.23521991927825475, 
+                    0.23521991927825475, 
+                    0.22209712081330135, 
+                    0.22209712081330135, 
+                    0.20994507196656723, 
+                    0.20994507196656723, 
+                    0.19907560262442492, 
+                    0.19907560262442492, 
+                    0.18901502465813713, 
+                    0.18901502465813713, 
+                    0.18888158106261202, 
+                    0.18888158106261202, 
+                    0.18888158106261202, 
+                    0.18888158106261202, 
+                    0.18888158106261202, 
+                    0.18888158106261202, 
+                    0.18888158106261202, 
+                    0.18888158106261202, 
+                    0.1713224380971947, 
+                    0.1713224380971947, 
+                    0.15332652907961103, 
+                    0.15332652907961103, 
+                    0.13500214471627425, 
+                    0.13500214471627425, 
+                    0.11636403276304938, 
+                    0.11636403276304938, 
+                    0.10001840932573425, 
+                    0.10001840932573425
+                ], 
+                0.014322267845273018
+            ], 
+            [
+                1.062198519706726, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9993590542539019, 
+                    0.9993590542539019, 
+                    0.9942212209076013, 
+                    0.9942212209076013, 
+                    0.9845876854213335, 
+                    0.9845876854213335, 
+                    0.9687789977210446, 
+                    0.9687789977210446, 
+                    0.9441385390787658, 
+                    0.9441385390787658, 
+                    0.9102836505040001, 
+                    0.9102836505040001, 
+                    0.8705265149596623, 
+                    0.8705265149596623, 
+                    0.8292846756472566, 
+                    0.8292846756472566, 
+                    0.7868037536644565, 
+                    0.7868037536644565, 
+                    0.7440771125094271, 
+                    0.7440771125094271, 
+                    0.7007926298933637, 
+                    0.7007926298933637, 
+                    0.6593863518484594, 
+                    0.6593863518484594, 
+                    0.6195668762017811, 
+                    0.6195668762017811, 
+                    0.5803674733343371, 
+                    0.5803674733343371, 
+                    0.5432138724610017, 
+                    0.5432138724610017, 
+                    0.5067900566365428, 
+                    0.5067900566365428, 
+                    0.4746495697332042, 
+                    0.4746495697332042, 
+                    0.44353688842820216, 
+                    0.44353688842820216, 
+                    0.41544587716288606, 
+                    0.41544587716288606, 
+                    0.3893024828579815, 
+                    0.3893024828579815, 
+                    0.36519266606117357, 
+                    0.36519266606117357, 
+                    0.3427320736746826, 
+                    0.3427320736746826, 
+                    0.32141524414491396, 
+                    0.32141524414491396, 
+                    0.3013539418293371, 
+                    0.3013539418293371, 
+                    0.2814342298565041, 
+                    0.2814342298565041, 
+                    0.264045237711346, 
+                    0.264045237711346, 
+                    0.24801863655536585, 
+                    0.24801863655536585, 
+                    0.23366498518084924, 
+                    0.23366498518084924, 
+                    0.22062669520476694, 
+                    0.22062669520476694, 
+                    0.20857528289407515, 
+                    0.20857528289407515, 
+                    0.19784756043840135, 
+                    0.19784756043840135, 
+                    0.18798764593059863, 
+                    0.18798764593059863, 
+                    0.18413162157902313, 
+                    0.18413162157902313, 
+                    0.18413162157902313, 
+                    0.18413162157902313, 
+                    0.18413162157902313, 
+                    0.18413162157902313, 
+                    0.18413162157902313, 
+                    0.18413162157902313, 
+                    0.17017242604411323, 
+                    0.17017242604411323, 
+                    0.15250772653989522, 
+                    0.15250772653989522, 
+                    0.13448460098336476, 
+                    0.13448460098336476, 
+                    0.11609689987486964, 
+                    0.11609689987486964, 
+                    0.10003346034089013, 
+                    0.10003346034089013
+                ], 
+                0.013121220283210278
+            ], 
+            [
+                1.0693440437316895, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999731042607135, 
+                    0.9999731042607135, 
+                    0.993951085040145, 
+                    0.993951085040145, 
+                    0.9845384347656967, 
+                    0.9845384347656967, 
+                    0.9680669523376362, 
+                    0.9680669523376362, 
+                    0.9429626393238133, 
+                    0.9429626393238133, 
+                    0.908472535156218, 
+                    0.908472535156218, 
+                    0.8682247031343902, 
+                    0.8682247031343902, 
+                    0.8267467454885199, 
+                    0.8267467454885199, 
+                    0.7840803084322473, 
+                    0.7840803084322473, 
+                    0.7412213334686117, 
+                    0.7412213334686117, 
+                    0.6978518892507978, 
+                    0.6978518892507978, 
+                    0.6564278917105213, 
+                    0.6564278917105213, 
+                    0.6165538994343369, 
+                    0.6165538994343369, 
+                    0.577582246947288, 
+                    0.577582246947288, 
+                    0.5400158209379632, 
+                    0.5400158209379632, 
+                    0.5045846080035882, 
+                    0.5045846080035882, 
+                    0.471243156417706, 
+                    0.471243156417706, 
+                    0.44157294767417105, 
+                    0.44157294767417105, 
+                    0.4125533000555854, 
+                    0.4125533000555854, 
+                    0.38712702519729464, 
+                    0.38712702519729464, 
+                    0.3628678162230288, 
+                    0.3628678162230288, 
+                    0.3406034107697533, 
+                    0.3406034107697533, 
+                    0.3193773450217296, 
+                    0.3193773450217296, 
+                    0.2994309266505583, 
+                    0.2994309266505583, 
+                    0.2796234914393856, 
+                    0.2796234914393856, 
+                    0.26233693667063374, 
+                    0.26233693667063374, 
+                    0.24640564785572383, 
+                    0.24640564785572383, 
+                    0.23213868810258828, 
+                    0.23213868810258828, 
+                    0.2191822165766168, 
+                    0.2191822165766168, 
+                    0.2072260141863246, 
+                    0.2072260141863246, 
+                    0.19661032089076774, 
+                    0.19661032089076774, 
+                    0.18673739237260745, 
+                    0.18673739237260745, 
+                    0.18294520171736547, 
+                    0.18294520171736547, 
+                    0.18294520171736547, 
+                    0.18294520171736547, 
+                    0.18294520171736547, 
+                    0.18294520171736547, 
+                    0.18294520171736547, 
+                    0.18294520171736547, 
+                    0.17036124254279694, 
+                    0.17036124254279694, 
+                    0.1526058292591962, 
+                    0.1526058292591962, 
+                    0.13452415843646368, 
+                    0.13452415843646368, 
+                    0.11610382870893436, 
+                    0.11610382870893436, 
+                    0.10002844462285321, 
+                    0.10002844462285321
+                ], 
+                0.012027652002871037
+            ]
+        ]
+    }, 
+    {
+        "block_size": 89, 
+        "preprocessing_block_sizes": [
+            60
+        ], 
+        "pruning_parameters": [
+            [
+                0.9358459115028381, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999374786077454, 
+                    0.9999374786077454, 
+                    0.9996606257595338, 
+                    0.9996606257595338, 
+                    0.9946985332075767, 
+                    0.9946985332075767, 
+                    0.9857746013752584, 
+                    0.9857746013752584, 
+                    0.9721213338129914, 
+                    0.9721213338129914, 
+                    0.9527430503759405, 
+                    0.9527430503759405, 
+                    0.9272065149995992, 
+                    0.9272065149995992, 
+                    0.8942780536941649, 
+                    0.8942780536941649, 
+                    0.8556693247607766, 
+                    0.8556693247607766, 
+                    0.8150596750836392, 
+                    0.8150596750836392, 
+                    0.7743539849638997, 
+                    0.7743539849638997, 
+                    0.733167791809518, 
+                    0.733167791809518, 
+                    0.6924996142360069, 
+                    0.6924996142360069, 
+                    0.6530723720846351, 
+                    0.6530723720846351, 
+                    0.615163922594229, 
+                    0.615163922594229, 
+                    0.578450410481568, 
+                    0.578450410481568, 
+                    0.5435800594607848, 
+                    0.5435800594607848, 
+                    0.5095213262328745, 
+                    0.5095213262328745, 
+                    0.4785818545902158, 
+                    0.4785818545902158, 
+                    0.44820314558671376, 
+                    0.44820314558671376, 
+                    0.4202697441359244, 
+                    0.4202697441359244, 
+                    0.39141257224723547, 
+                    0.39141257224723547, 
+                    0.36635741571976466, 
+                    0.36635741571976466, 
+                    0.3414795067575957, 
+                    0.3414795067575957, 
+                    0.31998425638645894, 
+                    0.31998425638645894, 
+                    0.2984892886162787, 
+                    0.2984892886162787, 
+                    0.2801844329853673, 
+                    0.2801844329853673, 
+                    0.2637393692009545, 
+                    0.2637393692009545, 
+                    0.2491064766332013, 
+                    0.2491064766332013, 
+                    0.235804990441389, 
+                    0.235804990441389, 
+                    0.22393363733155802, 
+                    0.22393363733155802, 
+                    0.2129780449405171, 
+                    0.2129780449405171, 
+                    0.20286895843143865, 
+                    0.20286895843143865, 
+                    0.19762523244091487, 
+                    0.19762523244091487, 
+                    0.19762523244091487, 
+                    0.19762523244091487, 
+                    0.19762523244091487, 
+                    0.19762523244091487, 
+                    0.18630909265489934, 
+                    0.18630909265489934, 
+                    0.16985131525267008, 
+                    0.16985131525267008, 
+                    0.1526745143437308, 
+                    0.1526745143437308, 
+                    0.1349077713004355, 
+                    0.1349077713004355, 
+                    0.11655529522096389, 
+                    0.11655529522096389, 
+                    0.10024442042727481, 
+                    0.10024442042727481
+                ], 
+                0.03179899975657463
+            ], 
+            [
+                0.9420716166496277, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999667127636162, 
+                    0.9999667127636162, 
+                    0.9996511298718622, 
+                    0.9996511298718622, 
+                    0.9941109122897025, 
+                    0.9941109122897025, 
+                    0.9853642087008616, 
+                    0.9853642087008616, 
+                    0.971190342980726, 
+                    0.971190342980726, 
+                    0.9514329676535057, 
+                    0.9514329676535057, 
+                    0.9255811054481686, 
+                    0.9255811054481686, 
+                    0.8923698347912172, 
+                    0.8923698347912172, 
+                    0.8534823628931382, 
+                    0.8534823628931382, 
+                    0.8125106998887649, 
+                    0.8125106998887649, 
+                    0.7716633127186324, 
+                    0.7716633127186324, 
+                    0.7303433243080598, 
+                    0.7303433243080598, 
+                    0.6895673108114742, 
+                    0.6895673108114742, 
+                    0.6501557770124308, 
+                    0.6501557770124308, 
+                    0.6121549746711555, 
+                    0.6121549746711555, 
+                    0.5758077179773117, 
+                    0.5758077179773117, 
+                    0.5402837715620015, 
+                    0.5402837715620015, 
+                    0.5074969295059955, 
+                    0.5074969295059955, 
+                    0.475051562233459, 
+                    0.475051562233459, 
+                    0.44646462430136447, 
+                    0.44646462430136447, 
+                    0.4170860893245562, 
+                    0.4170860893245562, 
+                    0.3897833662677115, 
+                    0.3897833662677115, 
+                    0.3635596930471898, 
+                    0.3635596930471898, 
+                    0.33976180297429565, 
+                    0.33976180297429565, 
+                    0.31781255061843267, 
+                    0.31781255061843267, 
+                    0.2966760190163643, 
+                    0.2966760190163643, 
+                    0.2783817868497653, 
+                    0.2783817868497653, 
+                    0.2620530259511176, 
+                    0.2620530259511176, 
+                    0.24750156493998152, 
+                    0.24750156493998152, 
+                    0.23428024103217887, 
+                    0.23428024103217887, 
+                    0.2224806419651117, 
+                    0.2224806419651117, 
+                    0.21158489382125148, 
+                    0.21158489382125148, 
+                    0.20149879964392906, 
+                    0.20149879964392906, 
+                    0.19679666243276026, 
+                    0.19679666243276026, 
+                    0.19679666243276026, 
+                    0.19679666243276026, 
+                    0.19679666243276026, 
+                    0.19679666243276026, 
+                    0.18680713976106153, 
+                    0.18680713976106153, 
+                    0.1700072311935172, 
+                    0.1700072311935172, 
+                    0.15263160455708222, 
+                    0.15263160455708222, 
+                    0.1347619783472523, 
+                    0.1347619783472523, 
+                    0.11638841154577016, 
+                    0.11638841154577016, 
+                    0.10019865506950024, 
+                    0.10019865506950024
+                ], 
+                0.029505375772714615
+            ], 
+            [
+                0.9483387470245361, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999338412808763, 
+                    0.9999338412808763, 
+                    0.9943078765053328, 
+                    0.9943078765053328, 
+                    0.9852400095806912, 
+                    0.9852400095806912, 
+                    0.9710426666048144, 
+                    0.9710426666048144, 
+                    0.9510049093040925, 
+                    0.9510049093040925, 
+                    0.9245927386237607, 
+                    0.9245927386237607, 
+                    0.8905822196565903, 
+                    0.8905822196565903, 
+                    0.851169770182588, 
+                    0.851169770182588, 
+                    0.8099296372812343, 
+                    0.8099296372812343, 
+                    0.7689491465231533, 
+                    0.7689491465231533, 
+                    0.7274987033047421, 
+                    0.7274987033047421, 
+                    0.68671027118606, 
+                    0.68671027118606, 
+                    0.6472234067900953, 
+                    0.6472234067900953, 
+                    0.6093307923262576, 
+                    0.6093307923262576, 
+                    0.5727310640465841, 
+                    0.5727310640465841, 
+                    0.5378193159212463, 
+                    0.5378193159212463, 
+                    0.5042364080513073, 
+                    0.5042364080513073, 
+                    0.4729963229694007, 
+                    0.4729963229694007, 
+                    0.4433565381954593, 
+                    0.4433565381954593, 
+                    0.41512877255067687, 
+                    0.41512877255067687, 
+                    0.3869852526265814, 
+                    0.3869852526265814, 
+                    0.3617264976676764, 
+                    0.3617264976676764, 
+                    0.337410048319622, 
+                    0.337410048319622, 
+                    0.3159410868521373, 
+                    0.3159410868521373, 
+                    0.2947540916503026, 
+                    0.2947540916503026, 
+                    0.2766208805255776, 
+                    0.2766208805255776, 
+                    0.26036911525931705, 
+                    0.26036911525931705, 
+                    0.24590520271515093, 
+                    0.24590520271515093, 
+                    0.23276371421687023, 
+                    0.23276371421687023, 
+                    0.2210393038142213, 
+                    0.2210393038142213, 
+                    0.21020959950669657, 
+                    0.21020959950669657, 
+                    0.20009716676862419, 
+                    0.20009716676862419, 
+                    0.19536066216902948, 
+                    0.19536066216902948, 
+                    0.19536066216902948, 
+                    0.19536066216902948, 
+                    0.19536066216902948, 
+                    0.19536066216902948, 
+                    0.1867470245154349, 
+                    0.1867470245154349, 
+                    0.1698856277689094, 
+                    0.1698856277689094, 
+                    0.15250796464179156, 
+                    0.15250796464179156, 
+                    0.13466143394869146, 
+                    0.13466143394869146, 
+                    0.11632287053266555, 
+                    0.11632287053266555, 
+                    0.10019380272356915, 
+                    0.10019380272356915
+                ], 
+                0.027338610962033272
+            ], 
+            [
+                0.9546475410461426, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.999926255021412, 
+                    0.999926255021412, 
+                    0.9941007057524561, 
+                    0.9941007057524561, 
+                    0.9849869677830965, 
+                    0.9849869677830965, 
+                    0.9706506315096944, 
+                    0.9706506315096944, 
+                    0.9503195167544807, 
+                    0.9503195167544807, 
+                    0.9233901253056195, 
+                    0.9233901253056195, 
+                    0.8887411327504026, 
+                    0.8887411327504026, 
+                    0.8488610154951919, 
+                    0.8488610154951919, 
+                    0.8073597430831234, 
+                    0.8073597430831234, 
+                    0.7661859363571846, 
+                    0.7661859363571846, 
+                    0.7246474392055785, 
+                    0.7246474392055785, 
+                    0.6837759768098045, 
+                    0.6837759768098045, 
+                    0.6443055854820058, 
+                    0.6443055854820058, 
+                    0.6063595630888163, 
+                    0.6063595630888163, 
+                    0.5699715351936667, 
+                    0.5699715351936667, 
+                    0.5347930558756766, 
+                    0.5347930558756766, 
+                    0.5018042925558052, 
+                    0.5018042925558052, 
+                    0.47000380155764426, 
+                    0.47000380155764426, 
+                    0.44111663144680796, 
+                    0.44111663144680796, 
+                    0.4124343266753438, 
+                    0.4124343266753438, 
+                    0.384896127714992, 
+                    0.384896127714992, 
+                    0.3593380998472562, 
+                    0.3593380998472562, 
+                    0.33544193256153115, 
+                    0.33544193256153115, 
+                    0.3139101578291579, 
+                    0.3139101578291579, 
+                    0.29290900584758617, 
+                    0.29290900584758617, 
+                    0.2748498319424931, 
+                    0.2748498319424931, 
+                    0.25869754288118496, 
+                    0.25869754288118496, 
+                    0.2443175201381903, 
+                    0.2443175201381903, 
+                    0.23125592811769397, 
+                    0.23125592811769397, 
+                    0.21960499694485283, 
+                    0.21960499694485283, 
+                    0.20884038438981692, 
+                    0.20884038438981692, 
+                    0.19874771796122584, 
+                    0.19874771796122584, 
+                    0.1936297994310448, 
+                    0.1936297994310448, 
+                    0.1936297994310448, 
+                    0.1936297994310448, 
+                    0.1936297994310448, 
+                    0.1936297994310448, 
+                    0.18670838980543278, 
+                    0.18670838980543278, 
+                    0.16977443617481527, 
+                    0.16977443617481527, 
+                    0.15237339036301784, 
+                    0.15237339036301784, 
+                    0.13453455945529663, 
+                    0.13453455945529663, 
+                    0.11622588996920054, 
+                    0.11622588996920054, 
+                    0.10017216758248366, 
+                    0.10017216758248366
+                ], 
+                0.025305092334747314
+            ], 
+            [
+                0.9609982967376709, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998911282685288, 
+                    0.9998911282685288, 
+                    0.994050904557584, 
+                    0.994050904557584, 
+                    0.9843464602486893, 
+                    0.9843464602486893, 
+                    0.9696158456939925, 
+                    0.9696158456939925, 
+                    0.9487450201250132, 
+                    0.9487450201250132, 
+                    0.9215912727554262, 
+                    0.9215912727554262, 
+                    0.8867855511947912, 
+                    0.8867855511947912, 
+                    0.8465834772538077, 
+                    0.8465834772538077, 
+                    0.8047947514846451, 
+                    0.8047947514846451, 
+                    0.763428331427112, 
+                    0.763428331427112, 
+                    0.7218134190430774, 
+                    0.7218134190430774, 
+                    0.6808775450486064, 
+                    0.6808775450486064, 
+                    0.6413745153799363, 
+                    0.6413745153799363, 
+                    0.6035037050251465, 
+                    0.6035037050251465, 
+                    0.5669687679859072, 
+                    0.5669687679859072, 
+                    0.5322288968534378, 
+                    0.5322288968534378, 
+                    0.4987394002561676, 
+                    0.4987394002561676, 
+                    0.4677505419232534, 
+                    0.4677505419232534, 
+                    0.4382709242798227, 
+                    0.4382709242798227, 
+                    0.41027099041249987, 
+                    0.41027099041249987, 
+                    0.38237393790003354, 
+                    0.38237393790003354, 
+                    0.35732252398051245, 
+                    0.35732252398051245, 
+                    0.3332693434167655, 
+                    0.3332693434167655, 
+                    0.31200043539908895, 
+                    0.31200043539908895, 
+                    0.2910472052265588, 
+                    0.2910472052265588, 
+                    0.273111149256909, 
+                    0.273111149256909, 
+                    0.2570460076192201, 
+                    0.2570460076192201, 
+                    0.24275189143368314, 
+                    0.24275189143368314, 
+                    0.22976921344727852, 
+                    0.22976921344727852, 
+                    0.21819131992296786, 
+                    0.21819131992296786, 
+                    0.20748732662912564, 
+                    0.20748732662912564, 
+                    0.19723144101672163, 
+                    0.19723144101672163, 
+                    0.19394704475709215, 
+                    0.19394704475709215, 
+                    0.19394704475709215, 
+                    0.19394704475709215, 
+                    0.19394704475709215, 
+                    0.19394704475709215, 
+                    0.18742728987521842, 
+                    0.18742728987521842, 
+                    0.17017055174064263, 
+                    0.17017055174064263, 
+                    0.1525056490130202, 
+                    0.1525056490130202, 
+                    0.13448918367923215, 
+                    0.13448918367923215, 
+                    0.11609812714940058, 
+                    0.11609812714940058, 
+                    0.10011281459431137, 
+                    0.10011281459431137
+                ], 
+                0.023420488461852074
+            ], 
+            [
+                0.967391312122345, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999806870000039, 
+                    0.9999806870000039, 
+                    0.9998471492416499, 
+                    0.9998471492416499, 
+                    0.9941861593831134, 
+                    0.9941861593831134, 
+                    0.9847121197177772, 
+                    0.9847121197177772, 
+                    0.9697045071073342, 
+                    0.9697045071073342, 
+                    0.9484625513839807, 
+                    0.9484625513839807, 
+                    0.9205182125055279, 
+                    0.9205182125055279, 
+                    0.8848036962730528, 
+                    0.8848036962730528, 
+                    0.8442016235003902, 
+                    0.8442016235003902, 
+                    0.8022145450936226, 
+                    0.8022145450936226, 
+                    0.7606955725394567, 
+                    0.7606955725394567, 
+                    0.7189194739155387, 
+                    0.7189194739155387, 
+                    0.6779507031269145, 
+                    0.6779507031269145, 
+                    0.6384255369422502, 
+                    0.6384255369422502, 
+                    0.6006153394144848, 
+                    0.6006153394144848, 
+                    0.5640417968941849, 
+                    0.5640417968941849, 
+                    0.5294844878177528, 
+                    0.5294844878177528, 
+                    0.4959254515730608, 
+                    0.4959254515730608, 
+                    0.46519196726906287, 
+                    0.46519196726906287, 
+                    0.43568372338209266, 
+                    0.43568372338209266, 
+                    0.40787250367648126, 
+                    0.40787250367648126, 
+                    0.38006020211719865, 
+                    0.38006020211719865, 
+                    0.3551300764226152, 
+                    0.3551300764226152, 
+                    0.3312061131794143, 
+                    0.3312061131794143, 
+                    0.3100355926952367, 
+                    0.3100355926952367, 
+                    0.28920065973000064, 
+                    0.28920065973000064, 
+                    0.2713613287117027, 
+                    0.2713613287117027, 
+                    0.25538890017631394, 
+                    0.25538890017631394, 
+                    0.24117732486058796, 
+                    0.24117732486058796, 
+                    0.22827106622712545, 
+                    0.22827106622712545, 
+                    0.21675911610394444, 
+                    0.21675911610394444, 
+                    0.20612540342651461, 
+                    0.20612540342651461, 
+                    0.196235163891832, 
+                    0.196235163891832, 
+                    0.19160278471459047, 
+                    0.19160278471459047, 
+                    0.19160278471459047, 
+                    0.19160278471459047, 
+                    0.19160278471459047, 
+                    0.19160278471459047, 
+                    0.18691700921060223, 
+                    0.18691700921060223, 
+                    0.16973801484570356, 
+                    0.16973801484570356, 
+                    0.15218520762790413, 
+                    0.15218520762790413, 
+                    0.13428259993985828, 
+                    0.13428259993985828, 
+                    0.11599052602113802, 
+                    0.11599052602113802, 
+                    0.10011718041093351, 
+                    0.10011718041093351
+                ], 
+                0.02163848653435707
+            ], 
+            [
+                0.9738268256187439, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999945010131849, 
+                    0.9999945010131849, 
+                    0.994084030273285, 
+                    0.994084030273285, 
+                    0.9845150691698253, 
+                    0.9845150691698253, 
+                    0.9692657922730058, 
+                    0.9692657922730058, 
+                    0.9476991536320858, 
+                    0.9476991536320858, 
+                    0.9192228806505383, 
+                    0.9192228806505383, 
+                    0.8828254899446444, 
+                    0.8828254899446444, 
+                    0.8417846200766094, 
+                    0.8417846200766094, 
+                    0.7995836191044972, 
+                    0.7995836191044972, 
+                    0.7579256808960565, 
+                    0.7579256808960565, 
+                    0.7160540421511671, 
+                    0.7160540421511671, 
+                    0.6750304210248734, 
+                    0.6750304210248734, 
+                    0.6354667098600956, 
+                    0.6354667098600956, 
+                    0.5976957937127815, 
+                    0.5976957937127815, 
+                    0.5611463785726908, 
+                    0.5611463785726908, 
+                    0.5267207967509339, 
+                    0.5267207967509339, 
+                    0.4931681643842771, 
+                    0.4931681643842771, 
+                    0.46260285487251646, 
+                    0.46260285487251646, 
+                    0.4331491066989026, 
+                    0.4331491066989026, 
+                    0.4054659477186323, 
+                    0.4054659477186323, 
+                    0.37777269573173633, 
+                    0.37777269573173633, 
+                    0.35295221200961985, 
+                    0.35295221200961985, 
+                    0.32915508749255135, 
+                    0.32915508749255135, 
+                    0.30808816844202247, 
+                    0.30808816844202247, 
+                    0.2873683968901323, 
+                    0.2873683968901323, 
+                    0.2696280110586622, 
+                    0.2696280110586622, 
+                    0.25374755265001997, 
+                    0.25374755265001997, 
+                    0.2396200706097549, 
+                    0.2396200706097549, 
+                    0.22679149688808792, 
+                    0.22679149688808792, 
+                    0.2153511760647043, 
+                    0.2153511760647043, 
+                    0.2048014352518031, 
+                    0.2048014352518031, 
+                    0.1949194654496365, 
+                    0.1949194654496365, 
+                    0.19004031041209646, 
+                    0.19004031041209646, 
+                    0.19004031041209646, 
+                    0.19004031041209646, 
+                    0.19004031041209646, 
+                    0.19004031041209646, 
+                    0.1866384393912841, 
+                    0.1866384393912841, 
+                    0.16948132957940054, 
+                    0.16948132957940054, 
+                    0.1519519881422469, 
+                    0.1519519881422469, 
+                    0.13408795502477547, 
+                    0.13408795502477547, 
+                    0.11584986639208147, 
+                    0.11584986639208147, 
+                    0.1001024919963338, 
+                    0.1001024919963338
+                ], 
+                0.019974015653133392
+            ], 
+            [
+                0.9803051948547363, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996430868699457, 
+                    0.9996430868699457, 
+                    0.9938582067126429, 
+                    0.9938582067126429, 
+                    0.9842269214677003, 
+                    0.9842269214677003, 
+                    0.9690529904521953, 
+                    0.9690529904521953, 
+                    0.946934618914635, 
+                    0.946934618914635, 
+                    0.9178727675806757, 
+                    0.9178727675806757, 
+                    0.8807894435454089, 
+                    0.8807894435454089, 
+                    0.8393765211918481, 
+                    0.8393765211918481, 
+                    0.7969320501501813, 
+                    0.7969320501501813, 
+                    0.755143932545723, 
+                    0.755143932545723, 
+                    0.7131938712806514, 
+                    0.7131938712806514, 
+                    0.6721143540671367, 
+                    0.6721143540671367, 
+                    0.632542416248277, 
+                    0.632542416248277, 
+                    0.5947951559005015, 
+                    0.5947951559005015, 
+                    0.5583219347879934, 
+                    0.5583219347879934, 
+                    0.5238843332716911, 
+                    0.5238843332716911, 
+                    0.4905416827535415, 
+                    0.4905416827535415, 
+                    0.4599121767329245, 
+                    0.4599121767329245, 
+                    0.4307131076916074, 
+                    0.4307131076916074, 
+                    0.4030231014998711, 
+                    0.4030231014998711, 
+                    0.3755268965173673, 
+                    0.3755268965173673, 
+                    0.350787806794689, 
+                    0.350787806794689, 
+                    0.3271087618433358, 
+                    0.3271087618433358, 
+                    0.3061703819431264, 
+                    0.3061703819431264, 
+                    0.28554063529540297, 
+                    0.28554063529540297, 
+                    0.2679099806276504, 
+                    0.2679099806276504, 
+                    0.25211135553943037, 
+                    0.25211135553943037, 
+                    0.2380631995812531, 
+                    0.2380631995812531, 
+                    0.2253111221735422, 
+                    0.2253111221735422, 
+                    0.21400309941038168, 
+                    0.21400309941038168, 
+                    0.20412147394422736, 
+                    0.20412147394422736, 
+                    0.19355792619089338, 
+                    0.19355792619089338, 
+                    0.1896679875373084, 
+                    0.1896679875373084, 
+                    0.1896679875373084, 
+                    0.1896679875373084, 
+                    0.1896679875373084, 
+                    0.1896679875373084, 
+                    0.18691670890631323, 
+                    0.18691670890631323, 
+                    0.169627898695611, 
+                    0.169627898695611, 
+                    0.15198950724912297, 
+                    0.15198950724912297, 
+                    0.13405222426252406, 
+                    0.13405222426252406, 
+                    0.11578434588024154, 
+                    0.11578434588024154, 
+                    0.10007048253252493, 
+                    0.10007048253252493
+                ], 
+                0.018448971211910248
+            ], 
+            [
+                0.9868266582489014, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999858867580266, 
+                    0.9999858867580266, 
+                    0.9998935724617652, 
+                    0.9998935724617652, 
+                    0.9940813744792976, 
+                    0.9940813744792976, 
+                    0.9847546065287536, 
+                    0.9847546065287536, 
+                    0.9692990644756609, 
+                    0.9692990644756609, 
+                    0.9466753963869072, 
+                    0.9466753963869072, 
+                    0.9165388012765684, 
+                    0.9165388012765684, 
+                    0.878714477580889, 
+                    0.878714477580889, 
+                    0.8369972724706315, 
+                    0.8369972724706315, 
+                    0.7943145365721148, 
+                    0.7943145365721148, 
+                    0.7523488121345016, 
+                    0.7523488121345016, 
+                    0.7103038929551234, 
+                    0.7103038929551234, 
+                    0.6691759653058997, 
+                    0.6691759653058997, 
+                    0.6295963199129162, 
+                    0.6295963199129162, 
+                    0.5918778442583238, 
+                    0.5918778442583238, 
+                    0.5554260348570056, 
+                    0.5554260348570056, 
+                    0.5211102788757382, 
+                    0.5211102788757382, 
+                    0.4877948536657463, 
+                    0.4877948536657463, 
+                    0.4573246666721143, 
+                    0.4573246666721143, 
+                    0.4281906949134879, 
+                    0.4281906949134879, 
+                    0.40063778282431445, 
+                    0.40063778282431445, 
+                    0.3732613347805926, 
+                    0.3732613347805926, 
+                    0.348619100421466, 
+                    0.348619100421466, 
+                    0.32509683039367954, 
+                    0.32509683039367954, 
+                    0.30423078085836525, 
+                    0.30423078085836525, 
+                    0.283741313544995, 
+                    0.283741313544995, 
+                    0.2661988315440144, 
+                    0.2661988315440144, 
+                    0.25050188590331923, 
+                    0.25050188590331923, 
+                    0.23654119868162993, 
+                    0.23654119868162993, 
+                    0.2238688726953689, 
+                    0.2238688726953689, 
+                    0.21257936633588498, 
+                    0.21257936633588498, 
+                    0.2021913364044375, 
+                    0.2021913364044375, 
+                    0.19220219790035237, 
+                    0.19220219790035237, 
+                    0.18809706359774173, 
+                    0.18809706359774173, 
+                    0.18809706359774173, 
+                    0.18809706359774173, 
+                    0.18809706359774173, 
+                    0.18809706359774173, 
+                    0.18580407738678167, 
+                    0.18580407738678167, 
+                    0.16880190516074522, 
+                    0.16880190516074522, 
+                    0.15141436862547042, 
+                    0.15141436862547042, 
+                    0.13369244320317494, 
+                    0.13369244320317494, 
+                    0.11559695821997311, 
+                    0.11559695821997311, 
+                    0.10007853547074481, 
+                    0.10007853547074481
+                ], 
+                0.016982560977339745
+            ], 
+            [
+                0.9933915138244629, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999996438586678, 
+                    0.9999996438586678, 
+                    0.99413673840487, 
+                    0.99413673840487, 
+                    0.9849726794185294, 
+                    0.9849726794185294, 
+                    0.9694327717152134, 
+                    0.9694327717152134, 
+                    0.9462969667804599, 
+                    0.9462969667804599, 
+                    0.9154058541761447, 
+                    0.9154058541761447, 
+                    0.8767564032263147, 
+                    0.8767564032263147, 
+                    0.8345797041410423, 
+                    0.8345797041410423, 
+                    0.7916615946043343, 
+                    0.7916615946043343, 
+                    0.7495452441300571, 
+                    0.7495452441300571, 
+                    0.7074042196348408, 
+                    0.7074042196348408, 
+                    0.6662046342781889, 
+                    0.6662046342781889, 
+                    0.6267156848486217, 
+                    0.6267156848486217, 
+                    0.5888113315321042, 
+                    0.5888113315321042, 
+                    0.552872774203062, 
+                    0.552872774203062, 
+                    0.5178722358669097, 
+                    0.5178722358669097, 
+                    0.48563191501360303, 
+                    0.48563191501360303, 
+                    0.45422471937972486, 
+                    0.45422471937972486, 
+                    0.42605620689529783, 
+                    0.42605620689529783, 
+                    0.3980289303951286, 
+                    0.3980289303951286, 
+                    0.3711583261680531, 
+                    0.3711583261680531, 
+                    0.3463828813649182, 
+                    0.3463828813649182, 
+                    0.3231267054394604, 
+                    0.3231267054394604, 
+                    0.3022999867517034, 
+                    0.3022999867517034, 
+                    0.2819482466192053, 
+                    0.2819482466192053, 
+                    0.26449716984485994, 
+                    0.26449716984485994, 
+                    0.24889312130940944, 
+                    0.24889312130940944, 
+                    0.23501507738732721, 
+                    0.23501507738732721, 
+                    0.22241970210801779, 
+                    0.22241970210801779, 
+                    0.21119767628556668, 
+                    0.21119767628556668, 
+                    0.2008661731321156, 
+                    0.2008661731321156, 
+                    0.19097276292167878, 
+                    0.19097276292167878, 
+                    0.18699122928545653, 
+                    0.18699122928545653, 
+                    0.18699122928545653, 
+                    0.18699122928545653, 
+                    0.18699122928545653, 
+                    0.18699122928545653, 
+                    0.1852684030052311, 
+                    0.1852684030052311, 
+                    0.16835300752348784, 
+                    0.16835300752348784, 
+                    0.15103683865555195, 
+                    0.15103683865555195, 
+                    0.13339351258877843, 
+                    0.13339351258877843, 
+                    0.11538917917191106, 
+                    0.11538917917191106, 
+                    0.10006278748866052, 
+                    0.10006278748866052
+                ], 
+                0.015637222677469254
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999824277924482, 
+                    0.9999824277924482, 
+                    0.9998801351646806, 
+                    0.9998801351646806, 
+                    0.994080105815841, 
+                    0.994080105815841, 
+                    0.9848209972587211, 
+                    0.9848209972587211, 
+                    0.9690054101819829, 
+                    0.9690054101819829, 
+                    0.9452921236891112, 
+                    0.9452921236891112, 
+                    0.913627965491271, 
+                    0.913627965491271, 
+                    0.8741645127307566, 
+                    0.8741645127307566, 
+                    0.8317542889658678, 
+                    0.8317542889658678, 
+                    0.7887677078045591, 
+                    0.7887677078045591, 
+                    0.7466185983767049, 
+                    0.7466185983767049, 
+                    0.7044424626004708, 
+                    0.7044424626004708, 
+                    0.663273282687763, 
+                    0.663273282687763, 
+                    0.6236949071348382, 
+                    0.6236949071348382, 
+                    0.5860826335770057, 
+                    0.5860826335770057, 
+                    0.5496793674932736, 
+                    0.5496793674932736, 
+                    0.5155710442075102, 
+                    0.5155710442075102, 
+                    0.48237016133564475, 
+                    0.48237016133564475, 
+                    0.45216047762653994, 
+                    0.45216047762653994, 
+                    0.42318945387591894, 
+                    0.42318945387591894, 
+                    0.39590427959671703, 
+                    0.39590427959671703, 
+                    0.3687316678196484, 
+                    0.3687316678196484, 
+                    0.3443584850746726, 
+                    0.3443584850746726, 
+                    0.3210499987464955, 
+                    0.3210499987464955, 
+                    0.3004169025253704, 
+                    0.3004169025253704, 
+                    0.28014475246210746, 
+                    0.28014475246210746, 
+                    0.26280154474551154, 
+                    0.26280154474551154, 
+                    0.24728454214680184, 
+                    0.24728454214680184, 
+                    0.23348607163836965, 
+                    0.23348607163836965, 
+                    0.22096578973411674, 
+                    0.22096578973411674, 
+                    0.209899671122519, 
+                    0.209899671122519, 
+                    0.20082060600390786, 
+                    0.20082060600390786, 
+                    0.18906157799234036, 
+                    0.18906157799234036, 
+                    0.18436712180028475, 
+                    0.18436712180028475, 
+                    0.18436712180028475, 
+                    0.18436712180028475, 
+                    0.18436712180028475, 
+                    0.18436712180028475, 
+                    0.18436712180028475, 
+                    0.18436712180028475, 
+                    0.16822579244711594, 
+                    0.16822579244711594, 
+                    0.15089713615004666, 
+                    0.15089713615004666, 
+                    0.13325798355999646, 
+                    0.13325798355999646, 
+                    0.11527933267856698, 
+                    0.11527933267856698, 
+                    0.10003975124944758, 
+                    0.10003975124944758
+                ], 
+                0.014380858279764652
+            ], 
+            [
+                1.0066524744033813, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997717367642526, 
+                    0.9997717367642526, 
+                    0.9938308363788987, 
+                    0.9938308363788987, 
+                    0.9839005379428541, 
+                    0.9839005379428541, 
+                    0.9676790786281853, 
+                    0.9676790786281853, 
+                    0.9435590449471986, 
+                    0.9435590449471986, 
+                    0.9116127800633589, 
+                    0.9116127800633589, 
+                    0.8722442855750254, 
+                    0.8722442855750254, 
+                    0.8295754669578561, 
+                    0.8295754669578561, 
+                    0.7862743370947265, 
+                    0.7862743370947265, 
+                    0.743890909911238, 
+                    0.743890909911238, 
+                    0.7015777228495428, 
+                    0.7015777228495428, 
+                    0.6603372420602328, 
+                    0.6603372420602328, 
+                    0.6207954424104211, 
+                    0.6207954424104211, 
+                    0.5831197045845423, 
+                    0.5831197045845423, 
+                    0.5469265263949791, 
+                    0.5469265263949791, 
+                    0.5126613079816879, 
+                    0.5126613079816879, 
+                    0.4798506276581625, 
+                    0.4798506276581625, 
+                    0.4493873193477177, 
+                    0.4493873193477177, 
+                    0.42091278942280763, 
+                    0.42091278942280763, 
+                    0.3933453643960585, 
+                    0.3933453643960585, 
+                    0.3667254768450512, 
+                    0.3667254768450512, 
+                    0.34204758727765927, 
+                    0.34204758727765927, 
+                    0.3191950120915216, 
+                    0.3191950120915216, 
+                    0.29846784634415846, 
+                    0.29846784634415846, 
+                    0.2783959196518086, 
+                    0.2783959196518086, 
+                    0.2611192383461305, 
+                    0.2611192383461305, 
+                    0.24570023265027413, 
+                    0.24570023265027413, 
+                    0.231978974948974, 
+                    0.231978974948974, 
+                    0.21952628942361002, 
+                    0.21952628942361002, 
+                    0.20847848941043745, 
+                    0.20847848941043745, 
+                    0.1990357174399548, 
+                    0.1990357174399548, 
+                    0.18845118096698474, 
+                    0.18845118096698474, 
+                    0.18493161185778317, 
+                    0.18493161185778317, 
+                    0.18493161185778317, 
+                    0.18493161185778317, 
+                    0.18493161185778317, 
+                    0.18493161185778317, 
+                    0.18493161185778317, 
+                    0.18493161185778317, 
+                    0.16802377927104692, 
+                    0.16802377927104692, 
+                    0.1507168817427221, 
+                    0.1507168817427221, 
+                    0.13311486388129048, 
+                    0.13311486388129048, 
+                    0.11518307476102334, 
+                    0.11518307476102334, 
+                    0.10003612333067624, 
+                    0.10003612333067624
+                ], 
+                0.013232768513262272
+            ], 
+            [
+                1.013349175453186, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997256516061045, 
+                    0.9997256516061045, 
+                    0.9937626268758647, 
+                    0.9937626268758647, 
+                    0.983602112931212, 
+                    0.983602112931212, 
+                    0.9671110235560162, 
+                    0.9671110235560162, 
+                    0.942475898722402, 
+                    0.942475898722402, 
+                    0.9100231512029693, 
+                    0.9100231512029693, 
+                    0.870137296039453, 
+                    0.870137296039453, 
+                    0.827116736496189, 
+                    0.827116736496189, 
+                    0.7835766444474458, 
+                    0.7835766444474458, 
+                    0.7410709893780718, 
+                    0.7410709893780718, 
+                    0.6986594514369375, 
+                    0.6986594514369375, 
+                    0.6574124271726935, 
+                    0.6574124271726935, 
+                    0.6177968130378829, 
+                    0.6177968130378829, 
+                    0.5803151042918916, 
+                    0.5803151042918916, 
+                    0.5439279771663469, 
+                    0.5439279771663469, 
+                    0.5100782959075746, 
+                    0.5100782959075746, 
+                    0.47698216514876907, 
+                    0.47698216514876907, 
+                    0.4470001675889702, 
+                    0.4470001675889702, 
+                    0.4182801372571815, 
+                    0.4182801372571815, 
+                    0.3911615703149234, 
+                    0.3911615703149234, 
+                    0.36431052811458947, 
+                    0.36431052811458947, 
+                    0.3401058745976029, 
+                    0.3401058745976029, 
+                    0.3170875818927362, 
+                    0.3170875818927362, 
+                    0.2966464511614523, 
+                    0.2966464511614523, 
+                    0.2766085864414046, 
+                    0.2766085864414046, 
+                    0.25946056814335855, 
+                    0.25946056814335855, 
+                    0.2441267847260004, 
+                    0.2441267847260004, 
+                    0.2304948246871704, 
+                    0.2304948246871704, 
+                    0.2181261430530405, 
+                    0.2181261430530405, 
+                    0.20710653333681117, 
+                    0.20710653333681117, 
+                    0.19698092543628556, 
+                    0.19698092543628556, 
+                    0.1873931514030917, 
+                    0.1873931514030917, 
+                    0.1841319857264387, 
+                    0.1841319857264387, 
+                    0.1841319857264387, 
+                    0.1841319857264387, 
+                    0.1841319857264387, 
+                    0.1841319857264387, 
+                    0.1841319857264387, 
+                    0.1841319857264387, 
+                    0.16770605909137581, 
+                    0.16770605909137581, 
+                    0.1504235571561276, 
+                    0.1504235571561276, 
+                    0.13287268653309425, 
+                    0.13287268653309425, 
+                    0.11501089681398595, 
+                    0.11501089681398595, 
+                    0.10003321643377165, 
+                    0.10003321643377165
+                ], 
+                0.012141132727265358
+            ], 
+            [
+                1.0200904607772827, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999876637715767, 
+                    0.9999876637715767, 
+                    0.9936665454321145, 
+                    0.9936665454321145, 
+                    0.9833664232775817, 
+                    0.9833664232775817, 
+                    0.9664867793598285, 
+                    0.9664867793598285, 
+                    0.9413458788539807, 
+                    0.9413458788539807, 
+                    0.9084523771833759, 
+                    0.9084523771833759, 
+                    0.8680427901075818, 
+                    0.8680427901075818, 
+                    0.824638141178593, 
+                    0.824638141178593, 
+                    0.7808720250585813, 
+                    0.7808720250585813, 
+                    0.7382309188908551, 
+                    0.7382309188908551, 
+                    0.6957487101284628, 
+                    0.6957487101284628, 
+                    0.6544176816325482, 
+                    0.6544176816325482, 
+                    0.6149760386225549, 
+                    0.6149760386225549, 
+                    0.5771567147381017, 
+                    0.5771567147381017, 
+                    0.5415010764827954, 
+                    0.5415010764827954, 
+                    0.5067801830116736, 
+                    0.5067801830116736, 
+                    0.47487764946569994, 
+                    0.47487764946569994, 
+                    0.44397293221534806, 
+                    0.44397293221534806, 
+                    0.416126953634781, 
+                    0.416126953634781, 
+                    0.3886654459908438, 
+                    0.3886654459908438, 
+                    0.3621939248884235, 
+                    0.3621939248884235, 
+                    0.337968334874973, 
+                    0.337968334874973, 
+                    0.31513827182260995, 
+                    0.31513827182260995, 
+                    0.2947783798753502, 
+                    0.2947783798753502, 
+                    0.2748611696891413, 
+                    0.2748611696891413, 
+                    0.2578088181969523, 
+                    0.2578088181969523, 
+                    0.24256527291931318, 
+                    0.24256527291931318, 
+                    0.22901119976668977, 
+                    0.22901119976668977, 
+                    0.21671051172242473, 
+                    0.21671051172242473, 
+                    0.2057785147714974, 
+                    0.2057785147714974, 
+                    0.19579430128821382, 
+                    0.19579430128821382, 
+                    0.185902284866278, 
+                    0.185902284866278, 
+                    0.18448108411705544, 
+                    0.18448108411705544, 
+                    0.18448108411705544, 
+                    0.18448108411705544, 
+                    0.18448108411705544, 
+                    0.18448108411705544, 
+                    0.18448108411705544, 
+                    0.18448108411705544, 
+                    0.16759881530658874, 
+                    0.16759881530658874, 
+                    0.1503086165487988, 
+                    0.1503086165487988, 
+                    0.13275433628169647, 
+                    0.13275433628169647, 
+                    0.114908035123131, 
+                    0.114908035123131, 
+                    0.1000190633806434, 
+                    0.1000190633806434
+                ], 
+                0.011140326969325542
+            ], 
+            [
+                1.0268765687942505, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998654801877062, 
+                    0.9998654801877062, 
+                    0.9940049334118636, 
+                    0.9940049334118636, 
+                    0.9838111321550691, 
+                    0.9838111321550691, 
+                    0.9668464924173189, 
+                    0.9668464924173189, 
+                    0.9407659440398841, 
+                    0.9407659440398841, 
+                    0.9066551736218256, 
+                    0.9066551736218256, 
+                    0.8656994467242454, 
+                    0.8656994467242454, 
+                    0.8220542428810134, 
+                    0.8220542428810134, 
+                    0.7781394088024797, 
+                    0.7781394088024797, 
+                    0.7353666814128237, 
+                    0.7353666814128237, 
+                    0.692803358591118, 
+                    0.692803358591118, 
+                    0.6515176131840614, 
+                    0.6515176131840614, 
+                    0.6118520141261949, 
+                    0.6118520141261949, 
+                    0.5745775835821811, 
+                    0.5745775835821811, 
+                    0.5381751159829584, 
+                    0.5381751159829584, 
+                    0.5045382569096322, 
+                    0.5045382569096322, 
+                    0.471750010334969, 
+                    0.471750010334969, 
+                    0.4416781681010841, 
+                    0.4416781681010841, 
+                    0.41357877554523886, 
+                    0.41357877554523886, 
+                    0.386293681353842, 
+                    0.386293681353842, 
+                    0.36006751067287995, 
+                    0.36006751067287995, 
+                    0.33577451960906834, 
+                    0.33577451960906834, 
+                    0.3132279401486484, 
+                    0.3132279401486484, 
+                    0.292876016883717, 
+                    0.292876016883717, 
+                    0.2731135507470428, 
+                    0.2731135507470428, 
+                    0.256144577036796, 
+                    0.256144577036796, 
+                    0.2409960193158571, 
+                    0.2409960193158571, 
+                    0.2275273912702638, 
+                    0.2275273912702638, 
+                    0.21531202792350612, 
+                    0.21531202792350612, 
+                    0.204434283881692, 
+                    0.204434283881692, 
+                    0.1944329172181846, 
+                    0.1944329172181846, 
+                    0.18482288494361576, 
+                    0.18482288494361576, 
+                    0.1814605813342683, 
+                    0.1814605813342683, 
+                    0.1814605813342683, 
+                    0.1814605813342683, 
+                    0.1814605813342683, 
+                    0.1814605813342683, 
+                    0.1814605813342683, 
+                    0.1814605813342683, 
+                    0.1670815202447411, 
+                    0.1670815202447411, 
+                    0.14991149252818886, 
+                    0.14991149252818886, 
+                    0.13248802681860344, 
+                    0.13248802681860344, 
+                    0.11476085875657947, 
+                    0.11476085875657947, 
+                    0.10002506595079635, 
+                    0.10002506595079635
+                ], 
+                0.010201714932918549
+            ], 
+            [
+                1.033707857131958, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994623596269064, 
+                    0.9994623596269064, 
+                    0.9938988567539825, 
+                    0.9938988567539825, 
+                    0.9834568888967025, 
+                    0.9834568888967025, 
+                    0.9659748481682223, 
+                    0.9659748481682223, 
+                    0.9391860428768048, 
+                    0.9391860428768048, 
+                    0.904572613763407, 
+                    0.904572613763407, 
+                    0.8633662200571474, 
+                    0.8633662200571474, 
+                    0.8194937601819482, 
+                    0.8194937601819482, 
+                    0.775367030449393, 
+                    0.775367030449393, 
+                    0.7325065409031364, 
+                    0.7325065409031364, 
+                    0.6899033540240347, 
+                    0.6899033540240347, 
+                    0.6484493416008419, 
+                    0.6484493416008419, 
+                    0.609221054397122, 
+                    0.609221054397122, 
+                    0.5711029902597854, 
+                    0.5711029902597854, 
+                    0.5361654581141867, 
+                    0.5361654581141867, 
+                    0.5008542690616207, 
+                    0.5008542690616207, 
+                    0.46991378965818337, 
+                    0.46991378965818337, 
+                    0.43858223802179225, 
+                    0.43858223802179225, 
+                    0.4113794179868591, 
+                    0.4113794179868591, 
+                    0.3839350622644544, 
+                    0.3839350622644544, 
+                    0.35780479962481876, 
+                    0.35780479962481876, 
+                    0.3337840899576218, 
+                    0.3337840899576218, 
+                    0.311202187061101, 
+                    0.311202187061101, 
+                    0.29106035870527563, 
+                    0.29106035870527563, 
+                    0.2713645898034303, 
+                    0.2713645898034303, 
+                    0.25450948741499807, 
+                    0.25450948741499807, 
+                    0.23944528166238754, 
+                    0.23944528166238754, 
+                    0.22605790887452012, 
+                    0.22605790887452012, 
+                    0.21391589803185454, 
+                    0.21391589803185454, 
+                    0.20310517461895763, 
+                    0.20310517461895763, 
+                    0.19318892032298, 
+                    0.19318892032298, 
+                    0.18371538153826078, 
+                    0.18371538153826078, 
+                    0.18062989387631292, 
+                    0.18062989387631292, 
+                    0.18062989387631292, 
+                    0.18062989387631292, 
+                    0.18062989387631292, 
+                    0.18062989387631292, 
+                    0.18062989387631292, 
+                    0.18062989387631292, 
+                    0.16796114652901709, 
+                    0.16796114652901709, 
+                    0.15052219441100825, 
+                    0.15052219441100825, 
+                    0.13287879134291886, 
+                    0.13287879134291886, 
+                    0.11497933908133615, 
+                    0.11497933908133615, 
+                    0.1000194612220284, 
+                    0.1000194612220284
+                ], 
+                0.009341283701360226
+            ], 
+            [
+                1.0405845642089844, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9938417555106606, 
+                    0.9938417555106606, 
+                    0.9836667426585519, 
+                    0.9836667426585519, 
+                    0.9660553828942094, 
+                    0.9660553828942094, 
+                    0.9388165937777304, 
+                    0.9388165937777304, 
+                    0.9034268872467134, 
+                    0.9034268872467134, 
+                    0.8613793398129129, 
+                    0.8613793398129129, 
+                    0.8170223152144317, 
+                    0.8170223152144317, 
+                    0.7726721845241687, 
+                    0.7726721845241687, 
+                    0.7296550275379176, 
+                    0.7296550275379176, 
+                    0.6869571183358536, 
+                    0.6869571183358536, 
+                    0.6455933901526774, 
+                    0.6455933901526774, 
+                    0.6060451637855911, 
+                    0.6060451637855911, 
+                    0.5686785916576166, 
+                    0.5686785916576166, 
+                    0.5326359080369641, 
+                    0.5326359080369641, 
+                    0.49897677529304957, 
+                    0.49897677529304957, 
+                    0.46643648427008244, 
+                    0.46643648427008244, 
+                    0.43670998386045806, 
+                    0.43670998386045806, 
+                    0.4085771599448784, 
+                    0.4085771599448784, 
+                    0.3818315029020784, 
+                    0.3818315029020784, 
+                    0.35553800367672955, 
+                    0.35553800367672955, 
+                    0.331771361638647, 
+                    0.331771361638647, 
+                    0.30925459688238055, 
+                    0.30925459688238055, 
+                    0.2892406882660523, 
+                    0.2892406882660523, 
+                    0.2696506379766574, 
+                    0.2696506379766574, 
+                    0.2528946112724414, 
+                    0.2528946112724414, 
+                    0.2379197733297481, 
+                    0.2379197733297481, 
+                    0.2246124458454362, 
+                    0.2246124458454362, 
+                    0.21254139722398874, 
+                    0.21254139722398874, 
+                    0.20177216510002852, 
+                    0.20177216510002852, 
+                    0.19183580998465458, 
+                    0.19183580998465458, 
+                    0.18189716238728473, 
+                    0.18189716238728473, 
+                    0.18184459170573877, 
+                    0.18184459170573877, 
+                    0.18184459170573877, 
+                    0.18184459170573877, 
+                    0.18184459170573877, 
+                    0.18184459170573877, 
+                    0.18184459170573877, 
+                    0.18184459170573877, 
+                    0.16689761605545095, 
+                    0.16689761605545095, 
+                    0.14973300063923795, 
+                    0.14973300063923795, 
+                    0.13231698940402206, 
+                    0.13231698940402206, 
+                    0.11461900868896187, 
+                    0.11461900868896187, 
+                    0.1000085081387792, 
+                    0.1000085081387792
+                ], 
+                0.008542494848370552
+            ], 
+            [
+                1.0475070476531982, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999807384358685, 
+                    0.9999807384358685, 
+                    0.9935797506645652, 
+                    0.9935797506645652, 
+                    0.9828500097076395, 
+                    0.9828500097076395, 
+                    0.9646814191642749, 
+                    0.9646814191642749, 
+                    0.9366061357477836, 
+                    0.9366061357477836, 
+                    0.9007886175129882, 
+                    0.9007886175129882, 
+                    0.8587837114083768, 
+                    0.8587837114083768, 
+                    0.814335595300778, 
+                    0.814335595300778, 
+                    0.7698551209338877, 
+                    0.7698551209338877, 
+                    0.7267397265329295, 
+                    0.7267397265329295, 
+                    0.6840119525649289, 
+                    0.6840119525649289, 
+                    0.6425455679220813, 
+                    0.6425455679220813, 
+                    0.603263672677136, 
+                    0.603263672677136, 
+                    0.5654546481515097, 
+                    0.5654546481515097, 
+                    0.5302537367391922, 
+                    0.5302537367391922, 
+                    0.49568850445807383, 
+                    0.49568850445807383, 
+                    0.4642917593188335, 
+                    0.4642917593188335, 
+                    0.4337757905589421, 
+                    0.4337757905589421, 
+                    0.40636965883092124, 
+                    0.40636965883092124, 
+                    0.37940539954786784, 
+                    0.37940539954786784, 
+                    0.35340168061295824, 
+                    0.35340168061295824, 
+                    0.32967915519288005, 
+                    0.32967915519288005, 
+                    0.30731249561787766, 
+                    0.30731249561787766, 
+                    0.2873980178173429, 
+                    0.2873980178173429, 
+                    0.26792124715785004, 
+                    0.26792124715785004, 
+                    0.2512622659665746, 
+                    0.2512622659665746, 
+                    0.2363768821143448, 
+                    0.2363768821143448, 
+                    0.22315068220805828, 
+                    0.22315068220805828, 
+                    0.21115515770202636, 
+                    0.21115515770202636, 
+                    0.2004762910858177, 
+                    0.2004762910858177, 
+                    0.19066640757419734, 
+                    0.19066640757419734, 
+                    0.18117746977169008, 
+                    0.18117746977169008, 
+                    0.17895715180200455, 
+                    0.17895715180200455, 
+                    0.17895715180200455, 
+                    0.17895715180200455, 
+                    0.17895715180200455, 
+                    0.17895715180200455, 
+                    0.17895715180200455, 
+                    0.17895715180200455, 
+                    0.16707028588228026, 
+                    0.16707028588228026, 
+                    0.14982642456855597, 
+                    0.14982642456855597, 
+                    0.13236765974458697, 
+                    0.13236765974458697, 
+                    0.11464573034694553, 
+                    0.11464573034694553, 
+                    0.10000957359359931, 
+                    0.10000957359359931
+                ], 
+                0.0078072273172438145
+            ], 
+            [
+                1.0544755458831787, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998678616718775, 
+                    0.9998678616718775, 
+                    0.9934114757360297, 
+                    0.9934114757360297, 
+                    0.9824520128638139, 
+                    0.9824520128638139, 
+                    0.9637817048439852, 
+                    0.9637817048439852, 
+                    0.9352694168778901, 
+                    0.9352694168778901, 
+                    0.89891929579376, 
+                    0.89891929579376, 
+                    0.8564691195350012, 
+                    0.8564691195350012, 
+                    0.8117575643991938, 
+                    0.8117575643991938, 
+                    0.7670941960119139, 
+                    0.7670941960119139, 
+                    0.7238722456339151, 
+                    0.7238722456339151, 
+                    0.6810829157609237, 
+                    0.6810829157609237, 
+                    0.639568232263996, 
+                    0.639568232263996, 
+                    0.6003566214276255, 
+                    0.6003566214276255, 
+                    0.5625405513785157, 
+                    0.5625405513785157, 
+                    0.5274432187431266, 
+                    0.5274432187431266, 
+                    0.4929932912412528, 
+                    0.4929932912412528, 
+                    0.4615967395401517, 
+                    0.4615967395401517, 
+                    0.4313321794663706, 
+                    0.4313321794663706, 
+                    0.40391134748123575, 
+                    0.40391134748123575, 
+                    0.37715811400434457, 
+                    0.37715811400434457, 
+                    0.3512208166088947, 
+                    0.3512208166088947, 
+                    0.32765469464613906, 
+                    0.32765469464613906, 
+                    0.3053881191973694, 
+                    0.3053881191973694, 
+                    0.285591437846655, 
+                    0.285591437846655, 
+                    0.2662214583148241, 
+                    0.2662214583148241, 
+                    0.24966107073067667, 
+                    0.24966107073067667, 
+                    0.2348625257240421, 
+                    0.2348625257240421, 
+                    0.22171415948332596, 
+                    0.22171415948332596, 
+                    0.20979381341598613, 
+                    0.20979381341598613, 
+                    0.19918546432623543, 
+                    0.19918546432623543, 
+                    0.18943436488823226, 
+                    0.18943436488823226, 
+                    0.17941956006843404, 
+                    0.17941956006843404, 
+                    0.1793438818680729, 
+                    0.1793438818680729, 
+                    0.1793438818680729, 
+                    0.1793438818680729, 
+                    0.1793438818680729, 
+                    0.1793438818680729, 
+                    0.1793438818680729, 
+                    0.1793438818680729, 
+                    0.16820949977411764, 
+                    0.16820949977411764, 
+                    0.15060617885500568, 
+                    0.15060617885500568, 
+                    0.13285189423137758, 
+                    0.13285189423137758, 
+                    0.11490009191651604, 
+                    0.11490009191651604, 
+                    0.10000376976414521, 
+                    0.10000376976414521
+                ], 
+                0.007123651914298534
+            ], 
+            [
+                1.0614904165267944, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997009147885877, 
+                    0.9997009147885877, 
+                    0.9936350775664473, 
+                    0.9936350775664473, 
+                    0.9828914710693063, 
+                    0.9828914710693063, 
+                    0.9637059297312907, 
+                    0.9637059297312907, 
+                    0.9339453629167923, 
+                    0.9339453629167923, 
+                    0.8967993967017018, 
+                    0.8967993967017018, 
+                    0.8540603640031611, 
+                    0.8540603640031611, 
+                    0.8090948712839368, 
+                    0.8090948712839368, 
+                    0.7642657435777234, 
+                    0.7642657435777234, 
+                    0.7209539314994187, 
+                    0.7209539314994187, 
+                    0.6780654204091882, 
+                    0.6780654204091882, 
+                    0.636714805261336, 
+                    0.636714805261336, 
+                    0.5971129719108937, 
+                    0.5971129719108937, 
+                    0.5601013362499452, 
+                    0.5601013362499452, 
+                    0.5240169198185842, 
+                    0.5240169198185842, 
+                    0.4908544544128163, 
+                    0.4908544544128163, 
+                    0.4584502614255423, 
+                    0.4584502614255423, 
+                    0.429134440457619, 
+                    0.429134440457619, 
+                    0.40132765056531855, 
+                    0.40132765056531855, 
+                    0.3749232209420142, 
+                    0.3749232209420142, 
+                    0.3490288554867264, 
+                    0.3490288554867264, 
+                    0.32560232227556857, 
+                    0.32560232227556857, 
+                    0.3034574748374563, 
+                    0.3034574748374563, 
+                    0.2837649175805226, 
+                    0.2837649175805226, 
+                    0.2645097387858537, 
+                    0.2645097387858537, 
+                    0.24804442966348988, 
+                    0.24804442966348988, 
+                    0.2333377292622935, 
+                    0.2333377292622935, 
+                    0.2202722189898407, 
+                    0.2202722189898407, 
+                    0.20842417862185136, 
+                    0.20842417862185136, 
+                    0.19790066729495526, 
+                    0.19790066729495526, 
+                    0.1882349440854614, 
+                    0.1882349440854614, 
+                    0.1785824116116319, 
+                    0.1785824116116319, 
+                    0.17581660496633328, 
+                    0.17581660496633328, 
+                    0.17581660496633328, 
+                    0.17581660496633328, 
+                    0.17581660496633328, 
+                    0.17581660496633328, 
+                    0.17581660496633328, 
+                    0.17581660496633328, 
+                    0.16802758827328437, 
+                    0.16802758827328437, 
+                    0.15043146901968502, 
+                    0.15043146901968502, 
+                    0.13272242457995312, 
+                    0.13272242457995312, 
+                    0.11482435692812597, 
+                    0.11482435692812597, 
+                    0.10000665904571478, 
+                    0.10000665904571478
+                ], 
+                0.006494872272014618
+            ], 
+            [
+                1.0685518980026245, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999995977449012, 
+                    0.9999995977449012, 
+                    0.9999452701542012, 
+                    0.9999452701542012, 
+                    0.9933228239171091, 
+                    0.9933228239171091, 
+                    0.9822814029518155, 
+                    0.9822814029518155, 
+                    0.9629109154054392, 
+                    0.9629109154054392, 
+                    0.9329986906278455, 
+                    0.9329986906278455, 
+                    0.8953317261769244, 
+                    0.8953317261769244, 
+                    0.851885265272118, 
+                    0.851885265272118, 
+                    0.8065251129303755, 
+                    0.8065251129303755, 
+                    0.7614877530689868, 
+                    0.7614877530689868, 
+                    0.7180625852367601, 
+                    0.7180625852367601, 
+                    0.6751184818838305, 
+                    0.6751184818838305, 
+                    0.6337560849219356, 
+                    0.6337560849219356, 
+                    0.5941856867742392, 
+                    0.5941856867742392, 
+                    0.5572326322015232, 
+                    0.5572326322015232, 
+                    0.5211895075292838, 
+                    0.5211895075292838, 
+                    0.4881902765774988, 
+                    0.4881902765774988, 
+                    0.45578842585367085, 
+                    0.45578842585367085, 
+                    0.42668886926876365, 
+                    0.42668886926876365, 
+                    0.39891238404298884, 
+                    0.39891238404298884, 
+                    0.3726869184123285, 
+                    0.3726869184123285, 
+                    0.3468761493751199, 
+                    0.3468761493751199, 
+                    0.323601471666971, 
+                    0.323601471666971, 
+                    0.3015565192419047, 
+                    0.3015565192419047, 
+                    0.2819830054115953, 
+                    0.2819830054115953, 
+                    0.2628323944933419, 
+                    0.2628323944933419, 
+                    0.24646610399193905, 
+                    0.24646610399193905, 
+                    0.2318459181751861, 
+                    0.2318459181751861, 
+                    0.21886167570794215, 
+                    0.21886167570794215, 
+                    0.20708568361169308, 
+                    0.20708568361169308, 
+                    0.19657549161858007, 
+                    0.19657549161858007, 
+                    0.18686316034244607, 
+                    0.18686316034244607, 
+                    0.17738035065599508, 
+                    0.17738035065599508, 
+                    0.17704003839724763, 
+                    0.17704003839724763, 
+                    0.17704003839724763, 
+                    0.17704003839724763, 
+                    0.17704003839724763, 
+                    0.17704003839724763, 
+                    0.17704003839724763, 
+                    0.17704003839724763, 
+                    0.1679207345619387, 
+                    0.1679207345619387, 
+                    0.1503468124661361, 
+                    0.1503468124661361, 
+                    0.132639798355947, 
+                    0.132639798355947, 
+                    0.11474863343157432, 
+                    0.11474863343157432, 
+                    0.10000232950048354, 
+                    0.10000232950048354
+                ], 
+                0.005921211559325457
+            ]
+        ]
+    }, 
+    {
+        "block_size": 90, 
+        "preprocessing_block_sizes": [
+            70
+        ], 
+        "pruning_parameters": [
+            [
+                0.9365244507789612, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9995544822575156, 
+                    0.9995544822575156, 
+                    0.9930810582185027, 
+                    0.9930810582185027, 
+                    0.992247743485953, 
+                    0.992247743485953, 
+                    0.9769927034859659, 
+                    0.9769927034859659, 
+                    0.9595803920136797, 
+                    0.9595803920136797, 
+                    0.9415449053410772, 
+                    0.9415449053410772, 
+                    0.920816027991501, 
+                    0.920816027991501, 
+                    0.8994023438299052, 
+                    0.8994023438299052, 
+                    0.8693856510201712, 
+                    0.8693856510201712, 
+                    0.8379111078334104, 
+                    0.8379111078334104, 
+                    0.8036628353061398, 
+                    0.8036628353061398, 
+                    0.7678914264589359, 
+                    0.7678914264589359, 
+                    0.7318044406657201, 
+                    0.7318044406657201, 
+                    0.6956798006429616, 
+                    0.6956798006429616, 
+                    0.6596372170828356, 
+                    0.6596372170828356, 
+                    0.6242992319105682, 
+                    0.6242992319105682, 
+                    0.5911171096065695, 
+                    0.5911171096065695, 
+                    0.5590718639271606, 
+                    0.5590718639271606, 
+                    0.5284276758060594, 
+                    0.5284276758060594, 
+                    0.4996231398105633, 
+                    0.4996231398105633, 
+                    0.4714297315145943, 
+                    0.4714297315145943, 
+                    0.44502476374811795, 
+                    0.44502476374811795, 
+                    0.4209643987190722, 
+                    0.4209643987190722, 
+                    0.3974564378812593, 
+                    0.3974564378812593, 
+                    0.37381554550783536, 
+                    0.37381554550783536, 
+                    0.35210728239556643, 
+                    0.35210728239556643, 
+                    0.3334961352382196, 
+                    0.3334961352382196, 
+                    0.3155579146488681, 
+                    0.3155579146488681, 
+                    0.3002540845675479, 
+                    0.3002540845675479, 
+                    0.28610373854150434, 
+                    0.28610373854150434, 
+                    0.2733430596341592, 
+                    0.2733430596341592, 
+                    0.2630006910567442, 
+                    0.2630006910567442, 
+                    0.2572050864848031, 
+                    0.2572050864848031, 
+                    0.24818348189477324, 
+                    0.24818348189477324, 
+                    0.2351541456099399, 
+                    0.2351541456099399, 
+                    0.2196646115258079, 
+                    0.2196646115258079, 
+                    0.20251823782473918, 
+                    0.20251823782473918, 
+                    0.18416169595049617, 
+                    0.18416169595049617, 
+                    0.16482654227768578, 
+                    0.16482654227768578, 
+                    0.14457934367351713, 
+                    0.14457934367351713, 
+                    0.12339341037001049, 
+                    0.12339341037001049, 
+                    0.10220173969370401, 
+                    0.10220173969370401
+                ], 
+                0.18513695895671844
+            ], 
+            [
+                0.9426863193511963, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997568237118688, 
+                    0.9997568237118688, 
+                    0.9982866677571216, 
+                    0.9982866677571216, 
+                    0.9982866677571216, 
+                    0.9982866677571216, 
+                    0.9864944561964497, 
+                    0.9864944561964497, 
+                    0.9777245779748649, 
+                    0.9777245779748649, 
+                    0.9635357692801527, 
+                    0.9635357692801527, 
+                    0.943134350111254, 
+                    0.943134350111254, 
+                    0.9222534942547245, 
+                    0.9222534942547245, 
+                    0.8964574327639829, 
+                    0.8964574327639829, 
+                    0.8673294890002127, 
+                    0.8673294890002127, 
+                    0.8353496270610542, 
+                    0.8353496270610542, 
+                    0.801018983419149, 
+                    0.801018983419149, 
+                    0.7651979741749488, 
+                    0.7651979741749488, 
+                    0.7284714269673371, 
+                    0.7284714269673371, 
+                    0.6928671789432967, 
+                    0.6928671789432967, 
+                    0.6564260905264638, 
+                    0.6564260905264638, 
+                    0.6215090220898709, 
+                    0.6215090220898709, 
+                    0.5880908028293779, 
+                    0.5880908028293779, 
+                    0.556234715691365, 
+                    0.556234715691365, 
+                    0.5255373221197155, 
+                    0.5255373221197155, 
+                    0.49690777304502765, 
+                    0.49690777304502765, 
+                    0.4686623610078559, 
+                    0.4686623610078559, 
+                    0.4424711110605167, 
+                    0.4424711110605167, 
+                    0.4183997643487496, 
+                    0.4183997643487496, 
+                    0.3950335373636882, 
+                    0.3950335373636882, 
+                    0.37149130558269683, 
+                    0.37149130558269683, 
+                    0.349884343254451, 
+                    0.349884343254451, 
+                    0.3313662457125308, 
+                    0.3313662457125308, 
+                    0.3135209135631141, 
+                    0.3135209135631141, 
+                    0.29830258582385066, 
+                    0.29830258582385066, 
+                    0.2842316225473856, 
+                    0.2842316225473856, 
+                    0.2715342020676545, 
+                    0.2715342020676545, 
+                    0.2609643339445138, 
+                    0.2609643339445138, 
+                    0.25603641733821497, 
+                    0.25603641733821497, 
+                    0.24717422402607978, 
+                    0.24717422402607978, 
+                    0.23429289125709737, 
+                    0.23429289125709737, 
+                    0.21892847797869547, 
+                    0.21892847797869547, 
+                    0.20189085992131467, 
+                    0.20189085992131467, 
+                    0.1836365675721614, 
+                    0.1836365675721614, 
+                    0.1644030356678819, 
+                    0.1644030356678819, 
+                    0.14425926604204928, 
+                    0.14425926604204928, 
+                    0.12317969676237538, 
+                    0.12317969676237538, 
+                    0.1021101552140088, 
+                    0.1021101552140088
+                ], 
+                0.1756550520658493
+            ], 
+            [
+                0.9488887786865234, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9992556962853235, 
+                    0.9992556962853235, 
+                    0.9992556962853235, 
+                    0.9992556962853235, 
+                    0.9965993045014202, 
+                    0.9965993045014202, 
+                    0.9888375466537944, 
+                    0.9888375466537944, 
+                    0.9807799028121424, 
+                    0.9807799028121424, 
+                    0.9670347580738803, 
+                    0.9670347580738803, 
+                    0.9424757550609759, 
+                    0.9424757550609759, 
+                    0.9259188080646444, 
+                    0.9259188080646444, 
+                    0.9022034741149033, 
+                    0.9022034741149033, 
+                    0.867351179042173, 
+                    0.867351179042173, 
+                    0.8345039790269244, 
+                    0.8345039790269244, 
+                    0.7993012893622571, 
+                    0.7993012893622571, 
+                    0.7631994549516676, 
+                    0.7631994549516676, 
+                    0.7265615666209821, 
+                    0.7265615666209821, 
+                    0.6899692322824188, 
+                    0.6899692322824188, 
+                    0.6543601458977155, 
+                    0.6543601458977155, 
+                    0.6187433358269882, 
+                    0.6187433358269882, 
+                    0.5852813891045459, 
+                    0.5852813891045459, 
+                    0.5532564841915544, 
+                    0.5532564841915544, 
+                    0.5228744038477688, 
+                    0.5228744038477688, 
+                    0.4938207407033806, 
+                    0.4938207407033806, 
+                    0.46607015043648614, 
+                    0.46607015043648614, 
+                    0.4397868652358083, 
+                    0.4397868652358083, 
+                    0.41596651935658907, 
+                    0.41596651935658907, 
+                    0.3925687557994882, 
+                    0.3925687557994882, 
+                    0.36916094451252945, 
+                    0.36916094451252945, 
+                    0.3476888416476126, 
+                    0.3476888416476126, 
+                    0.3292567039772016, 
+                    0.3292567039772016, 
+                    0.3114939158107013, 
+                    0.3114939158107013, 
+                    0.29635957552587117, 
+                    0.29635957552587117, 
+                    0.2823909979047839, 
+                    0.2823909979047839, 
+                    0.2697828931376791, 
+                    0.2697828931376791, 
+                    0.2588098499757607, 
+                    0.2588098499757607, 
+                    0.25013838444237474, 
+                    0.25013838444237474, 
+                    0.24376496097663788, 
+                    0.24376496097663788, 
+                    0.23282622111442142, 
+                    0.23282622111442142, 
+                    0.21878108355585751, 
+                    0.21878108355585751, 
+                    0.20266268810607416, 
+                    0.20266268810607416, 
+                    0.18503077028002782, 
+                    0.18503077028002782, 
+                    0.16617306300048793, 
+                    0.16617306300048793, 
+                    0.1461541851625257, 
+                    0.1461541851625257, 
+                    0.1249005356450307, 
+                    0.1249005356450307, 
+                    0.10311440477135343, 
+                    0.10311440477135343
+                ], 
+                0.16662703454494476
+            ], 
+            [
+                0.9551319479942322, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9994134826679069, 
+                    0.9994134826679069, 
+                    0.9958752356939635, 
+                    0.9958752356939635, 
+                    0.9936268261852758, 
+                    0.9936268261852758, 
+                    0.9755586079494155, 
+                    0.9755586079494155, 
+                    0.9628112361450151, 
+                    0.9628112361450151, 
+                    0.9438517117182315, 
+                    0.9438517117182315, 
+                    0.9227489245841298, 
+                    0.9227489245841298, 
+                    0.8955504051822504, 
+                    0.8955504051822504, 
+                    0.86558054358425, 
+                    0.86558054358425, 
+                    0.8317159717759849, 
+                    0.8317159717759849, 
+                    0.795695098385129, 
+                    0.795695098385129, 
+                    0.7595162929882973, 
+                    0.7595162929882973, 
+                    0.7231046477447429, 
+                    0.7231046477447429, 
+                    0.6868538014966473, 
+                    0.6868538014966473, 
+                    0.6510606872403337, 
+                    0.6510606872403337, 
+                    0.6157783268603135, 
+                    0.6157783268603135, 
+                    0.5824106305930442, 
+                    0.5824106305930442, 
+                    0.5503605717926895, 
+                    0.5503605717926895, 
+                    0.5201630042576508, 
+                    0.5201630042576508, 
+                    0.4909379952685768, 
+                    0.4909379952685768, 
+                    0.4636381804582791, 
+                    0.4636381804582791, 
+                    0.4369803484494962, 
+                    0.4369803484494962, 
+                    0.4135516651979463, 
+                    0.4135516651979463, 
+                    0.390136440017412, 
+                    0.390136440017412, 
+                    0.36691315492089777, 
+                    0.36691315492089777, 
+                    0.3454764765616058, 
+                    0.3454764765616058, 
+                    0.3271609156774177, 
+                    0.3271609156774177, 
+                    0.3094967203571172, 
+                    0.3094967203571172, 
+                    0.29444319548603626, 
+                    0.29444319548603626, 
+                    0.28054118331578254, 
+                    0.28054118331578254, 
+                    0.26797706488342343, 
+                    0.26797706488342343, 
+                    0.25695266139084544, 
+                    0.25695266139084544, 
+                    0.2518621212705374, 
+                    0.2518621212705374, 
+                    0.2443451287277086, 
+                    0.2443451287277086, 
+                    0.23241720345324196, 
+                    0.23241720345324196, 
+                    0.21772310599149747, 
+                    0.21772310599149747, 
+                    0.20118083633158268, 
+                    0.20118083633158268, 
+                    0.18330440321267202, 
+                    0.18330440321267202, 
+                    0.16435987608077046, 
+                    0.16435987608077046, 
+                    0.14441845203291, 
+                    0.14441845203291, 
+                    0.12343984388585853, 
+                    0.12343984388585853, 
+                    0.10232373226986204, 
+                    0.10232373226986204
+                ], 
+                0.15777863562107086
+            ], 
+            [
+                0.9614163041114807, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999998723026767, 
+                    0.9999998723026767, 
+                    0.9999998723026767, 
+                    0.9999998723026767, 
+                    0.9881079497470759, 
+                    0.9881079497470759, 
+                    0.9761187975612813, 
+                    0.9761187975612813, 
+                    0.9619569312280785, 
+                    0.9619569312280785, 
+                    0.9452782240348951, 
+                    0.9452782240348951, 
+                    0.9201049491528129, 
+                    0.9201049491528129, 
+                    0.8965618758028739, 
+                    0.8965618758028739, 
+                    0.8646017599816651, 
+                    0.8646017599816651, 
+                    0.8294840501331326, 
+                    0.8294840501331326, 
+                    0.7930492479917876, 
+                    0.7930492479917876, 
+                    0.7564120768858039, 
+                    0.7564120768858039, 
+                    0.7206491081857124, 
+                    0.7206491081857124, 
+                    0.6842550909958286, 
+                    0.6842550909958286, 
+                    0.6479701289092257, 
+                    0.6479701289092257, 
+                    0.6125706723556538, 
+                    0.6125706723556538, 
+                    0.5793107700686835, 
+                    0.5793107700686835, 
+                    0.5473367736623064, 
+                    0.5473367736623064, 
+                    0.5172372975916396, 
+                    0.5172372975916396, 
+                    0.48817713655726214, 
+                    0.48817713655726214, 
+                    0.4610120096705063, 
+                    0.4610120096705063, 
+                    0.4343469863500087, 
+                    0.4343469863500087, 
+                    0.41108011681685364, 
+                    0.41108011681685364, 
+                    0.38775759014365757, 
+                    0.38775759014365757, 
+                    0.36463628362799355, 
+                    0.36463628362799355, 
+                    0.3432906294826518, 
+                    0.3432906294826518, 
+                    0.3250689194915891, 
+                    0.3250689194915891, 
+                    0.3075056982212685, 
+                    0.3075056982212685, 
+                    0.29253041521168577, 
+                    0.29253041521168577, 
+                    0.2787102871890085, 
+                    0.2787102871890085, 
+                    0.26622328328622663, 
+                    0.26622328328622663, 
+                    0.25525243084036414, 
+                    0.25525243084036414, 
+                    0.248744879772281, 
+                    0.248744879772281, 
+                    0.24294227163952156, 
+                    0.24294227163952156, 
+                    0.23143200381734508, 
+                    0.23143200381734508, 
+                    0.21717223249670564, 
+                    0.21717223249670564, 
+                    0.200959955643902, 
+                    0.200959955643902, 
+                    0.18333104034315792, 
+                    0.18333104034315792, 
+                    0.16456454664178438, 
+                    0.16456454664178438, 
+                    0.14473028710142563, 
+                    0.14473028710142563, 
+                    0.12377433454975006, 
+                    0.12377433454975006, 
+                    0.10254055911788532, 
+                    0.10254055911788532
+                ], 
+                0.14923347532749176
+            ], 
+            [
+                0.9677419066429138, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9997770335266697, 
+                    0.9997770335266697, 
+                    0.9996086249637269, 
+                    0.9996086249637269, 
+                    0.9965611140252567, 
+                    0.9965611140252567, 
+                    0.9892548978218256, 
+                    0.9892548978218256, 
+                    0.9764970481264567, 
+                    0.9764970481264567, 
+                    0.9604748282371108, 
+                    0.9604748282371108, 
+                    0.9457757508008576, 
+                    0.9457757508008576, 
+                    0.9215944911041548, 
+                    0.9215944911041548, 
+                    0.891781626971734, 
+                    0.891781626971734, 
+                    0.8621831072639305, 
+                    0.8621831072639305, 
+                    0.8269464209902867, 
+                    0.8269464209902867, 
+                    0.790764122176544, 
+                    0.790764122176544, 
+                    0.7537871536508205, 
+                    0.7537871536508205, 
+                    0.7180755593742626, 
+                    0.7180755593742626, 
+                    0.6810098028433996, 
+                    0.6810098028433996, 
+                    0.6450215644419007, 
+                    0.6450215644419007, 
+                    0.6096792135844677, 
+                    0.6096792135844677, 
+                    0.5766805899857553, 
+                    0.5766805899857553, 
+                    0.5445089452147184, 
+                    0.5445089452147184, 
+                    0.5146282177593551, 
+                    0.5146282177593551, 
+                    0.48531768349269255, 
+                    0.48531768349269255, 
+                    0.4584780099111079, 
+                    0.4584780099111079, 
+                    0.431699633059799, 
+                    0.431699633059799, 
+                    0.40864316305788195, 
+                    0.40864316305788195, 
+                    0.3853696537900511, 
+                    0.3853696537900511, 
+                    0.362371301259845, 
+                    0.362371301259845, 
+                    0.34113262952957063, 
+                    0.34113262952957063, 
+                    0.32300363636949747, 
+                    0.32300363636949747, 
+                    0.3055201437584908, 
+                    0.3055201437584908, 
+                    0.2906298310960049, 
+                    0.2906298310960049, 
+                    0.27688505556677107, 
+                    0.27688505556677107, 
+                    0.2644729642512961, 
+                    0.2644729642512961, 
+                    0.25399768100336356, 
+                    0.25399768100336356, 
+                    0.24706291443144143, 
+                    0.24706291443144143, 
+                    0.2426827174364561, 
+                    0.2426827174364561, 
+                    0.23081666506031057, 
+                    0.23081666506031057, 
+                    0.21639377477775495, 
+                    0.21639377477775495, 
+                    0.20010581855452128, 
+                    0.20010581855452128, 
+                    0.18245948894613861, 
+                    0.18245948894613861, 
+                    0.16372942387084924, 
+                    0.16372942387084924, 
+                    0.1439870861637199, 
+                    0.1439870861637199, 
+                    0.12318812045780658, 
+                    0.12318812045780658, 
+                    0.1022437431251419, 
+                    0.1022437431251419
+                ], 
+                0.14115756750106812
+            ], 
+            [
+                0.9741092324256897, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999196239745131, 
+                    0.9999196239745131, 
+                    0.9999196239745131, 
+                    0.9999196239745131, 
+                    0.9947855167046583, 
+                    0.9947855167046583, 
+                    0.9859057887982313, 
+                    0.9859057887982313, 
+                    0.9763030547315787, 
+                    0.9763030547315787, 
+                    0.960036823565427, 
+                    0.960036823565427, 
+                    0.940705829219213, 
+                    0.940705829219213, 
+                    0.9185961760627589, 
+                    0.9185961760627589, 
+                    0.8906317090876954, 
+                    0.8906317090876954, 
+                    0.8593784792125517, 
+                    0.8593784792125517, 
+                    0.8244921544185775, 
+                    0.8244921544185775, 
+                    0.7879856631029125, 
+                    0.7879856631029125, 
+                    0.7510713919207993, 
+                    0.7510713919207993, 
+                    0.7148633619042679, 
+                    0.7148633619042679, 
+                    0.6778956313312063, 
+                    0.6778956313312063, 
+                    0.6419260592798848, 
+                    0.6419260592798848, 
+                    0.6067304780331888, 
+                    0.6067304780331888, 
+                    0.573459107286991, 
+                    0.573459107286991, 
+                    0.5417980136493709, 
+                    0.5417980136493709, 
+                    0.5115893609618446, 
+                    0.5115893609618446, 
+                    0.4829108201712242, 
+                    0.4829108201712242, 
+                    0.4555483277222184, 
+                    0.4555483277222184, 
+                    0.4293828618710062, 
+                    0.4293828618710062, 
+                    0.40609311357130123, 
+                    0.40609311357130123, 
+                    0.3830564673643675, 
+                    0.3830564673643675, 
+                    0.36011397806972184, 
+                    0.36011397806972184, 
+                    0.3389923806443738, 
+                    0.3389923806443738, 
+                    0.32095465134385637, 
+                    0.32095465134385637, 
+                    0.3035647481070057, 
+                    0.3035647481070057, 
+                    0.2887588289843462, 
+                    0.2887588289843462, 
+                    0.2750898787957772, 
+                    0.2750898787957772, 
+                    0.26272585851608155, 
+                    0.26272585851608155, 
+                    0.2517392381059741, 
+                    0.2517392381059741, 
+                    0.24817857280715105, 
+                    0.24817857280715105, 
+                    0.2436793302414922, 
+                    0.2436793302414922, 
+                    0.23080772362832222, 
+                    0.23080772362832222, 
+                    0.21575271176498034, 
+                    0.21575271176498034, 
+                    0.199056848432508, 
+                    0.199056848432508, 
+                    0.18117039530535994, 
+                    0.18117039530535994, 
+                    0.16234378467765712, 
+                    0.16234378467765712, 
+                    0.14265079553719492, 
+                    0.14265079553719492, 
+                    0.12206929120651622, 
+                    0.12206929120651622, 
+                    0.10164761886152697, 
+                    0.10164761886152697
+                ], 
+                0.13325969874858856
+            ], 
+            [
+                0.9805184006690979, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998868535763622, 
+                    0.9998868535763622, 
+                    0.9997808440048224, 
+                    0.9997808440048224, 
+                    0.9960980269902266, 
+                    0.9960980269902266, 
+                    0.9869184412760832, 
+                    0.9869184412760832, 
+                    0.9766530134576544, 
+                    0.9766530134576544, 
+                    0.9622642410397367, 
+                    0.9622642410397367, 
+                    0.941349754909921, 
+                    0.941349754909921, 
+                    0.9173007684935008, 
+                    0.9173007684935008, 
+                    0.8884995267637725, 
+                    0.8884995267637725, 
+                    0.8565000275143099, 
+                    0.8565000275143099, 
+                    0.8205258689649445, 
+                    0.8205258689649445, 
+                    0.7851346034267388, 
+                    0.7851346034267388, 
+                    0.7484422683024968, 
+                    0.7484422683024968, 
+                    0.7120075127375992, 
+                    0.7120075127375992, 
+                    0.6748422040856427, 
+                    0.6748422040856427, 
+                    0.6388736909637163, 
+                    0.6388736909637163, 
+                    0.6037895058963063, 
+                    0.6037895058963063, 
+                    0.5706297888441886, 
+                    0.5706297888441886, 
+                    0.5387717701183184, 
+                    0.5387717701183184, 
+                    0.5090313782833128, 
+                    0.5090313782833128, 
+                    0.4799547010076429, 
+                    0.4799547010076429, 
+                    0.453137882775113, 
+                    0.453137882775113, 
+                    0.4266888304209537, 
+                    0.4266888304209537, 
+                    0.40371901947695166, 
+                    0.40371901947695166, 
+                    0.38068043805233526, 
+                    0.38068043805233526, 
+                    0.3578812103766625, 
+                    0.3578812103766625, 
+                    0.33685513554230173, 
+                    0.33685513554230173, 
+                    0.31891293732533826, 
+                    0.31891293732533826, 
+                    0.30161329784493157, 
+                    0.30161329784493157, 
+                    0.2868886984120494, 
+                    0.2868886984120494, 
+                    0.27329249068477773, 
+                    0.27329249068477773, 
+                    0.2610004234531796, 
+                    0.2610004234531796, 
+                    0.25016930335919735, 
+                    0.25016930335919735, 
+                    0.24701533018962712, 
+                    0.24701533018962712, 
+                    0.24285204681442363, 
+                    0.24285204681442363, 
+                    0.2300341188783531, 
+                    0.2300341188783531, 
+                    0.21507199695556706, 
+                    0.21507199695556706, 
+                    0.19846404608911647, 
+                    0.19846404608911647, 
+                    0.18066610792165377, 
+                    0.18066610792165377, 
+                    0.16193274112676906, 
+                    0.16193274112676906, 
+                    0.1423385875402288, 
+                    0.1423385875402288, 
+                    0.12186133594591082, 
+                    0.12186133594591082, 
+                    0.10158953478512453, 
+                    0.10158953478512453
+                ], 
+                0.12572650611400604
+            ], 
+            [
+                0.9869697093963623, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9984443152723951, 
+                    0.9984443152723951, 
+                    0.9941538873502591, 
+                    0.9941538873502591, 
+                    0.9857463205111304, 
+                    0.9857463205111304, 
+                    0.9772328932536138, 
+                    0.9772328932536138, 
+                    0.9609598555423967, 
+                    0.9609598555423967, 
+                    0.9409625678186612, 
+                    0.9409625678186612, 
+                    0.9177073204958982, 
+                    0.9177073204958982, 
+                    0.8870304224107771, 
+                    0.8870304224107771, 
+                    0.8546819206576597, 
+                    0.8546819206576597, 
+                    0.8193544095622072, 
+                    0.8193544095622072, 
+                    0.7826459191632271, 
+                    0.7826459191632271, 
+                    0.7456726655816803, 
+                    0.7456726655816803, 
+                    0.708722585716987, 
+                    0.708722585716987, 
+                    0.6719171133688697, 
+                    0.6719171133688697, 
+                    0.6359176134528054, 
+                    0.6359176134528054, 
+                    0.6007201623835497, 
+                    0.6007201623835497, 
+                    0.5678755172309434, 
+                    0.5678755172309434, 
+                    0.5355608737907351, 
+                    0.5355608737907351, 
+                    0.5065529538577712, 
+                    0.5065529538577712, 
+                    0.47685193754170535, 
+                    0.47685193754170535, 
+                    0.4508550372881336, 
+                    0.4508550372881336, 
+                    0.4239599951843573, 
+                    0.4239599951843573, 
+                    0.4013670483488271, 
+                    0.4013670483488271, 
+                    0.3783128760404386, 
+                    0.3783128760404386, 
+                    0.35566280808555384, 
+                    0.35566280808555384, 
+                    0.33473130419746105, 
+                    0.33473130419746105, 
+                    0.3168788118145204, 
+                    0.3168788118145204, 
+                    0.2996698173078466, 
+                    0.2996698173078466, 
+                    0.2850239980893371, 
+                    0.2850239980893371, 
+                    0.27150979387647534, 
+                    0.27150979387647534, 
+                    0.2593024956544147, 
+                    0.2593024956544147, 
+                    0.24856513906627428, 
+                    0.24856513906627428, 
+                    0.24297063515564893, 
+                    0.24297063515564893, 
+                    0.24148302846414677, 
+                    0.24148302846414677, 
+                    0.22901871539433052, 
+                    0.22901871539433052, 
+                    0.21439379200846698, 
+                    0.21439379200846698, 
+                    0.19805667800759338, 
+                    0.19805667800759338, 
+                    0.18046850255087943, 
+                    0.18046850255087943, 
+                    0.1618972203614095, 
+                    0.1618972203614095, 
+                    0.14241706681153882, 
+                    0.14241706681153882, 
+                    0.12199708126841692, 
+                    0.12199708126841692, 
+                    0.10169264816144864, 
+                    0.10169264816144864
+                ], 
+                0.1184530034661293
+            ], 
+            [
+                0.9934635162353516, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9988719069650517, 
+                    0.9988719069650517, 
+                    0.9965614301421518, 
+                    0.9965614301421518, 
+                    0.9881383031317956, 
+                    0.9881383031317956, 
+                    0.9766138424416457, 
+                    0.9766138424416457, 
+                    0.9608749765548116, 
+                    0.9608749765548116, 
+                    0.9406000023583722, 
+                    0.9406000023583722, 
+                    0.9151152226072199, 
+                    0.9151152226072199, 
+                    0.8855090273501564, 
+                    0.8855090273501564, 
+                    0.852125945583356, 
+                    0.852125945583356, 
+                    0.8165782904942759, 
+                    0.8165782904942759, 
+                    0.7801074488342826, 
+                    0.7801074488342826, 
+                    0.7427762510632103, 
+                    0.7427762510632103, 
+                    0.70596690553217, 
+                    0.70596690553217, 
+                    0.6689742151362484, 
+                    0.6689742151362484, 
+                    0.6329640444201245, 
+                    0.6329640444201245, 
+                    0.5978913111382911, 
+                    0.5978913111382911, 
+                    0.5651188137217533, 
+                    0.5651188137217533, 
+                    0.5328812374463949, 
+                    0.5328812374463949, 
+                    0.503629501421705, 
+                    0.503629501421705, 
+                    0.4743521065858124, 
+                    0.4743521065858124, 
+                    0.44802806368268716, 
+                    0.44802806368268716, 
+                    0.4215436914137753, 
+                    0.4215436914137753, 
+                    0.39890469389436467, 
+                    0.39890469389436467, 
+                    0.3760250918054865, 
+                    0.3760250918054865, 
+                    0.3534439246609867, 
+                    0.3534439246609867, 
+                    0.3326205635237112, 
+                    0.3326205635237112, 
+                    0.31485976178580893, 
+                    0.31485976178580893, 
+                    0.2977449250270615, 
+                    0.2977449250270615, 
+                    0.28318435624391947, 
+                    0.28318435624391947, 
+                    0.2697498458411486, 
+                    0.2697498458411486, 
+                    0.257606291179441, 
+                    0.257606291179441, 
+                    0.24695752969886592, 
+                    0.24695752969886592, 
+                    0.24149261631563743, 
+                    0.24149261631563743, 
+                    0.24121673968617063, 
+                    0.24121673968617063, 
+                    0.22849835873507923, 
+                    0.22849835873507923, 
+                    0.21385323351922633, 
+                    0.21385323351922633, 
+                    0.19753142991141012, 
+                    0.19753142991141012, 
+                    0.1799796764589016, 
+                    0.1799796764589016, 
+                    0.16146515592835536, 
+                    0.16146515592835536, 
+                    0.1420616125701728, 
+                    0.1420616125701728, 
+                    0.12173876761892839, 
+                    0.12173876761892839, 
+                    0.10158368548694063, 
+                    0.10158368548694063
+                ], 
+                0.11159005016088486
+            ], 
+            [
+                1.0, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9959986721251475, 
+                    0.9959986721251475, 
+                    0.9867969266198318, 
+                    0.9867969266198318, 
+                    0.9770075061222546, 
+                    0.9770075061222546, 
+                    0.961640350827105, 
+                    0.961640350827105, 
+                    0.9406181913116533, 
+                    0.9406181913116533, 
+                    0.9142647586322538, 
+                    0.9142647586322538, 
+                    0.8836331080309674, 
+                    0.8836331080309674, 
+                    0.8493250350640716, 
+                    0.8493250350640716, 
+                    0.8142794617370576, 
+                    0.8142794617370576, 
+                    0.7772315148499327, 
+                    0.7772315148499327, 
+                    0.7401631738673056, 
+                    0.7401631738673056, 
+                    0.7030115416220484, 
+                    0.7030115416220484, 
+                    0.6664478266886223, 
+                    0.6664478266886223, 
+                    0.6301399113073818, 
+                    0.6301399113073818, 
+                    0.5945448573102496, 
+                    0.5945448573102496, 
+                    0.5620352345140093, 
+                    0.5620352345140093, 
+                    0.5300114071775972, 
+                    0.5300114071775972, 
+                    0.5011136749912912, 
+                    0.5011136749912912, 
+                    0.4714722007269737, 
+                    0.4714722007269737, 
+                    0.44549451368213544, 
+                    0.44549451368213544, 
+                    0.41896193591014536, 
+                    0.41896193591014536, 
+                    0.39650677848285926, 
+                    0.39650677848285926, 
+                    0.37370743002242707, 
+                    0.37370743002242707, 
+                    0.351230958081159, 
+                    0.351230958081159, 
+                    0.33051594981686117, 
+                    0.33051594981686117, 
+                    0.31285194800277616, 
+                    0.31285194800277616, 
+                    0.29583400650183617, 
+                    0.29583400650183617, 
+                    0.28135327735920923, 
+                    0.28135327735920923, 
+                    0.26799411566534076, 
+                    0.26799411566534076, 
+                    0.25592906129940424, 
+                    0.25592906129940424, 
+                    0.24532836133890257, 
+                    0.24532836133890257, 
+                    0.23871279502242387, 
+                    0.23871279502242387, 
+                    0.23871279502242387, 
+                    0.23871279502242387, 
+                    0.22809051942003747, 
+                    0.22809051942003747, 
+                    0.21333574834164817, 
+                    0.21333574834164817, 
+                    0.19707541117954996, 
+                    0.19707541117954996, 
+                    0.17961040595133132, 
+                    0.17961040595133132, 
+                    0.16118858388525031, 
+                    0.16118858388525031, 
+                    0.14187518453258813, 
+                    0.14187518453258813, 
+                    0.12163353744864104, 
+                    0.12163353744864104, 
+                    0.1015637103966592, 
+                    0.1015637103966592
+                ], 
+                0.1049204096198082
+            ], 
+            [
+                1.0065795183181763, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9982545057361314, 
+                    0.9982545057361314, 
+                    0.9966643341220327, 
+                    0.9966643341220327, 
+                    0.9881734843582185, 
+                    0.9881734843582185, 
+                    0.9743784755910483, 
+                    0.9743784755910483, 
+                    0.9597762581748221, 
+                    0.9597762581748221, 
+                    0.9374783571253488, 
+                    0.9374783571253488, 
+                    0.9116469766219327, 
+                    0.9116469766219327, 
+                    0.8815826863915561, 
+                    0.8815826863915561, 
+                    0.8478863723461072, 
+                    0.8478863723461072, 
+                    0.8117124911604817, 
+                    0.8117124911604817, 
+                    0.7745483301320686, 
+                    0.7745483301320686, 
+                    0.7370494642339546, 
+                    0.7370494642339546, 
+                    0.7000533598349917, 
+                    0.7000533598349917, 
+                    0.6632067440638738, 
+                    0.6632067440638738, 
+                    0.627062977864372, 
+                    0.627062977864372, 
+                    0.5921119418461023, 
+                    0.5921119418461023, 
+                    0.5587571287549489, 
+                    0.5587571287549489, 
+                    0.5277626203524743, 
+                    0.5277626203524743, 
+                    0.49745739728330923, 
+                    0.49745739728330923, 
+                    0.4696142044037524, 
+                    0.4696142044037524, 
+                    0.4423301861149012, 
+                    0.4423301861149012, 
+                    0.41688917231525857, 
+                    0.41688917231525857, 
+                    0.393974752029721, 
+                    0.393974752029721, 
+                    0.3714633641016047, 
+                    0.3714633641016047, 
+                    0.3490336059913857, 
+                    0.3490336059913857, 
+                    0.32844704717383466, 
+                    0.32844704717383466, 
+                    0.31087191932021835, 
+                    0.31087191932021835, 
+                    0.29394215396629914, 
+                    0.29394215396629914, 
+                    0.2795413664077533, 
+                    0.2795413664077533, 
+                    0.2662528020482626, 
+                    0.2662528020482626, 
+                    0.25425341946149027, 
+                    0.25425341946149027, 
+                    0.2436585037805714, 
+                    0.2436585037805714, 
+                    0.23974020226824522, 
+                    0.23974020226824522, 
+                    0.23974020226824522, 
+                    0.23974020226824522, 
+                    0.22799450776778257, 
+                    0.22799450776778257, 
+                    0.21293513110163448, 
+                    0.21293513110163448, 
+                    0.1964185030527755, 
+                    0.1964185030527755, 
+                    0.17879341670275198, 
+                    0.17879341670275198, 
+                    0.16030561357090695, 
+                    0.16030561357090695, 
+                    0.1410255659795906, 
+                    0.1410255659795906, 
+                    0.12092923605814979, 
+                    0.12092923605814979, 
+                    0.10121561683255612, 
+                    0.10121561683255612
+                ], 
+                0.09868048131465912
+            ], 
+            [
+                1.0132023096084595, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9996367504265221, 
+                    0.9996367504265221, 
+                    0.9966686393288355, 
+                    0.9966686393288355, 
+                    0.9877968329481696, 
+                    0.9877968329481696, 
+                    0.9753459055898761, 
+                    0.9753459055898761, 
+                    0.9591565277773821, 
+                    0.9591565277773821, 
+                    0.9372905124782701, 
+                    0.9372905124782701, 
+                    0.9107590288338586, 
+                    0.9107590288338586, 
+                    0.8792533264559923, 
+                    0.8792533264559923, 
+                    0.8453429115377634, 
+                    0.8453429115377634, 
+                    0.8092437874568527, 
+                    0.8092437874568527, 
+                    0.7715816699244527, 
+                    0.7715816699244527, 
+                    0.7340915191608213, 
+                    0.7340915191608213, 
+                    0.6971869710438502, 
+                    0.6971869710438502, 
+                    0.660574736933219, 
+                    0.660574736933219, 
+                    0.6240187876414506, 
+                    0.6240187876414506, 
+                    0.5892926112762868, 
+                    0.5892926112762868, 
+                    0.555791279086032, 
+                    0.555791279086032, 
+                    0.5250604050780093, 
+                    0.5250604050780093, 
+                    0.4944865426058247, 
+                    0.4944865426058247, 
+                    0.4671082937478608, 
+                    0.4671082937478608, 
+                    0.43959294290988354, 
+                    0.43959294290988354, 
+                    0.4144783878688304, 
+                    0.4144783878688304, 
+                    0.39153201488031336, 
+                    0.39153201488031336, 
+                    0.3691874539728197, 
+                    0.3691874539728197, 
+                    0.34685429181463817, 
+                    0.34685429181463817, 
+                    0.32636722167473264, 
+                    0.32636722167473264, 
+                    0.30889104527591005, 
+                    0.30889104527591005, 
+                    0.29205506615328725, 
+                    0.29205506615328725, 
+                    0.27773222696415883, 
+                    0.27773222696415883, 
+                    0.26452369359376077, 
+                    0.26452369359376077, 
+                    0.2525966017138969, 
+                    0.2525966017138969, 
+                    0.24207345027614802, 
+                    0.24207345027614802, 
+                    0.2362381652584019, 
+                    0.2362381652584019, 
+                    0.2362381652584019, 
+                    0.2362381652584019, 
+                    0.22835203635130047, 
+                    0.22835203635130047, 
+                    0.21287813686029117, 
+                    0.21287813686029117, 
+                    0.19626812109178401, 
+                    0.19626812109178401, 
+                    0.17863298499952282, 
+                    0.17863298499952282, 
+                    0.16016878769363424, 
+                    0.16016878769363424, 
+                    0.14092758378259587, 
+                    0.14092758378259587, 
+                    0.12087435617855036, 
+                    0.12087435617855036, 
+                    0.10120817181584686, 
+                    0.10120817181584686
+                ], 
+                0.09261153638362885
+            ], 
+            [
+                1.0198687314987183, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998887872576311, 
+                    0.9998887872576311, 
+                    0.9989641208019286, 
+                    0.9989641208019286, 
+                    0.9973193303062463, 
+                    0.9973193303062463, 
+                    0.9877794460521698, 
+                    0.9877794460521698, 
+                    0.9774024762530003, 
+                    0.9774024762530003, 
+                    0.9594041098028764, 
+                    0.9594041098028764, 
+                    0.9360469381532442, 
+                    0.9360469381532442, 
+                    0.9087364186664948, 
+                    0.9087364186664948, 
+                    0.8776644527755685, 
+                    0.8776644527755685, 
+                    0.8433429926159982, 
+                    0.8433429926159982, 
+                    0.8061978729658388, 
+                    0.8061978729658388, 
+                    0.7688715328151654, 
+                    0.7688715328151654, 
+                    0.7311550039959169, 
+                    0.7311550039959169, 
+                    0.6946132087783907, 
+                    0.6946132087783907, 
+                    0.6573726746397685, 
+                    0.6573726746397685, 
+                    0.621275385737412, 
+                    0.621275385737412, 
+                    0.5864112895518265, 
+                    0.5864112895518265, 
+                    0.5528482693338741, 
+                    0.5528482693338741, 
+                    0.522292839442516, 
+                    0.522292839442516, 
+                    0.49180790454769785, 
+                    0.49180790454769785, 
+                    0.4644780231611567, 
+                    0.4644780231611567, 
+                    0.4370002235214807, 
+                    0.4370002235214807, 
+                    0.41204375011963335, 
+                    0.41204375011963335, 
+                    0.3891490395903852, 
+                    0.3891490395903852, 
+                    0.366911250371668, 
+                    0.366911250371668, 
+                    0.3446932645460652, 
+                    0.3446932645460652, 
+                    0.3243092022855405, 
+                    0.3243092022855405, 
+                    0.30692141460319156, 
+                    0.30692141460319156, 
+                    0.29018039834902537, 
+                    0.29018039834902537, 
+                    0.27592254388278814, 
+                    0.27592254388278814, 
+                    0.2628055134902754, 
+                    0.2628055134902754, 
+                    0.25094705514854676, 
+                    0.25094705514854676, 
+                    0.24050324062001094, 
+                    0.24050324062001094, 
+                    0.23512912762355415, 
+                    0.23512912762355415, 
+                    0.23512912762355415, 
+                    0.23512912762355415, 
+                    0.2256950797413864, 
+                    0.2256950797413864, 
+                    0.21121448426929576, 
+                    0.21121448426929576, 
+                    0.19526291207974567, 
+                    0.19526291207974567, 
+                    0.17809987860496854, 
+                    0.17809987860496854, 
+                    0.15998552710400138, 
+                    0.15998552710400138, 
+                    0.1409845858827795, 
+                    0.1409845858827795, 
+                    0.1210560234895192, 
+                    0.1210560234895192, 
+                    0.10138355580030341, 
+                    0.10138355580030341
+                ], 
+                0.08690111339092255
+            ], 
+            [
+                1.0265789031982422, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9987602192929365, 
+                    0.9987602192929365, 
+                    0.9953605140270314, 
+                    0.9953605140270314, 
+                    0.9872724977599012, 
+                    0.9872724977599012, 
+                    0.9747958785868345, 
+                    0.9747958785868345, 
+                    0.9577660189268211, 
+                    0.9577660189268211, 
+                    0.935574391232557, 
+                    0.935574391232557, 
+                    0.9070975421384782, 
+                    0.9070975421384782, 
+                    0.8755442229178779, 
+                    0.8755442229178779, 
+                    0.8405291085041918, 
+                    0.8405291085041918, 
+                    0.8037269126507173, 
+                    0.8037269126507173, 
+                    0.7660357891599915, 
+                    0.7660357891599915, 
+                    0.7285863955623789, 
+                    0.7285863955623789, 
+                    0.6913732300074047, 
+                    0.6913732300074047, 
+                    0.6543583016997061, 
+                    0.6543583016997061, 
+                    0.6182442066948889, 
+                    0.6182442066948889, 
+                    0.5831377693875176, 
+                    0.5831377693875176, 
+                    0.5505638339912478, 
+                    0.5505638339912478, 
+                    0.5186184136324197, 
+                    0.5186184136324197, 
+                    0.48990397837892596, 
+                    0.48990397837892596, 
+                    0.4609065877732147, 
+                    0.4609065877732147, 
+                    0.43514972690798737, 
+                    0.43514972690798737, 
+                    0.4091236398043571, 
+                    0.4091236398043571, 
+                    0.38698069688107095, 
+                    0.38698069688107095, 
+                    0.36459767995058495, 
+                    0.36459767995058495, 
+                    0.34255689123965416, 
+                    0.34255689123965416, 
+                    0.3222628185534521, 
+                    0.3222628185534521, 
+                    0.30497632572428224, 
+                    0.30497632572428224, 
+                    0.28832117690293296, 
+                    0.28832117690293296, 
+                    0.2741659440373953, 
+                    0.2741659440373953, 
+                    0.26111744742361986, 
+                    0.26111744742361986, 
+                    0.24931652999554033, 
+                    0.24931652999554033, 
+                    0.2387108096632356, 
+                    0.2387108096632356, 
+                    0.23418469282976265, 
+                    0.23418469282976265, 
+                    0.23418469282976265, 
+                    0.23418469282976265, 
+                    0.2267733417974723, 
+                    0.2267733417974723, 
+                    0.2115200586004219, 
+                    0.2115200586004219, 
+                    0.19505195282003465, 
+                    0.19505195282003465, 
+                    0.17755673374187017, 
+                    0.17755673374187017, 
+                    0.15925458497693576, 
+                    0.15925458497693576, 
+                    0.14020353659693435, 
+                    0.14020353659693435, 
+                    0.12036995273729746, 
+                    0.12036995273729746, 
+                    0.10103862720333753, 
+                    0.10103862720333753
+                ], 
+                0.08139289170503616
+            ], 
+            [
+                1.0333333015441895, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9989427373430226, 
+                    0.9989427373430226, 
+                    0.995913108755475, 
+                    0.995913108755475, 
+                    0.9866964974722018, 
+                    0.9866964974722018, 
+                    0.9735587824432455, 
+                    0.9735587824432455, 
+                    0.9553843245385012, 
+                    0.9553843245385012, 
+                    0.9332032511657166, 
+                    0.9332032511657166, 
+                    0.9055423948782122, 
+                    0.9055423948782122, 
+                    0.8729767944195341, 
+                    0.8729767944195341, 
+                    0.8380062541075157, 
+                    0.8380062541075157, 
+                    0.8010804934449783, 
+                    0.8010804934449783, 
+                    0.7634990734210838, 
+                    0.7634990734210838, 
+                    0.725551769736645, 
+                    0.725551769736645, 
+                    0.6885077169030649, 
+                    0.6885077169030649, 
+                    0.6515123298807024, 
+                    0.6515123298807024, 
+                    0.6152182699625236, 
+                    0.6152182699625236, 
+                    0.5803289374710922, 
+                    0.5803289374710922, 
+                    0.5472444784177937, 
+                    0.5472444784177937, 
+                    0.5165179236785135, 
+                    0.5165179236785135, 
+                    0.4864018941253048, 
+                    0.4864018941253048, 
+                    0.45896837574142385, 
+                    0.45896837574142385, 
+                    0.4320619790697816, 
+                    0.4320619790697816, 
+                    0.4069912116633753, 
+                    0.4069912116633753, 
+                    0.38451147983604916, 
+                    0.38451147983604916, 
+                    0.36239831100593367, 
+                    0.36239831100593367, 
+                    0.3404108817301896, 
+                    0.3404108817301896, 
+                    0.32023829327588976, 
+                    0.32023829327588976, 
+                    0.3030392814221061, 
+                    0.3030392814221061, 
+                    0.28647350762505897, 
+                    0.28647350762505897, 
+                    0.27239925016354116, 
+                    0.27239925016354116, 
+                    0.2594281442282003, 
+                    0.2594281442282003, 
+                    0.24770900397751897, 
+                    0.24770900397751897, 
+                    0.2372191070213275, 
+                    0.2372191070213275, 
+                    0.2330470213146989, 
+                    0.2330470213146989, 
+                    0.2330470213146989, 
+                    0.2330470213146989, 
+                    0.22698701505700541, 
+                    0.22698701505700541, 
+                    0.21137819863063223, 
+                    0.21137819863063223, 
+                    0.1946378678976044, 
+                    0.1946378678976044, 
+                    0.17697159497084858, 
+                    0.17697159497084858, 
+                    0.15858825926781, 
+                    0.15858825926781, 
+                    0.13954698490265266, 
+                    0.13954698490265266, 
+                    0.11982082761014949, 
+                    0.11982082761014949, 
+                    0.10077128609328011, 
+                    0.10077128609328011
+                ], 
+                0.07621220499277115
+            ], 
+            [
+                1.0401321649551392, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998305652628815, 
+                    0.9998305652628815, 
+                    0.9992953199631839, 
+                    0.9992953199631839, 
+                    0.9951923216420216, 
+                    0.9951923216420216, 
+                    0.9878205317399169, 
+                    0.9878205317399169, 
+                    0.9728132019306845, 
+                    0.9728132019306845, 
+                    0.9554765286837517, 
+                    0.9554765286837517, 
+                    0.9323253693546734, 
+                    0.9323253693546734, 
+                    0.9037788404485898, 
+                    0.9037788404485898, 
+                    0.8710909204152893, 
+                    0.8710909204152893, 
+                    0.8358418939465514, 
+                    0.8358418939465514, 
+                    0.7985635437690722, 
+                    0.7985635437690722, 
+                    0.7607173824082772, 
+                    0.7607173824082772, 
+                    0.722667571246303, 
+                    0.722667571246303, 
+                    0.6855517372708053, 
+                    0.6855517372708053, 
+                    0.648496607497171, 
+                    0.648496607497171, 
+                    0.6124223192576156, 
+                    0.6124223192576156, 
+                    0.5771802899273668, 
+                    0.5771802899273668, 
+                    0.5448072319677695, 
+                    0.5448072319677695, 
+                    0.5130047755777825, 
+                    0.5130047755777825, 
+                    0.484467071553915, 
+                    0.484467071553915, 
+                    0.4556368449613219, 
+                    0.4556368449613219, 
+                    0.43001788178937317, 
+                    0.43001788178937317, 
+                    0.40428792557852783, 
+                    0.40428792557852783, 
+                    0.3822827500411408, 
+                    0.3822827500411408, 
+                    0.36013084780350996, 
+                    0.36013084780350996, 
+                    0.33830000758645856, 
+                    0.33830000758645856, 
+                    0.31821887853606934, 
+                    0.31821887853606934, 
+                    0.3011170788758401, 
+                    0.3011170788758401, 
+                    0.28464227877205067, 
+                    0.28464227877205067, 
+                    0.27064448990248574, 
+                    0.27064448990248574, 
+                    0.2577378396598206, 
+                    0.2577378396598206, 
+                    0.24609202627926974, 
+                    0.24609202627926974, 
+                    0.23558254955596816, 
+                    0.23558254955596816, 
+                    0.23225906720168854, 
+                    0.23225906720168854, 
+                    0.23225906720168854, 
+                    0.23225906720168854, 
+                    0.2267372968428152, 
+                    0.2267372968428152, 
+                    0.21104731199919058, 
+                    0.21104731199919058, 
+                    0.19426670648696057, 
+                    0.19426670648696057, 
+                    0.17659425231631248, 
+                    0.17659425231631248, 
+                    0.15823462144903327, 
+                    0.15823462144903327, 
+                    0.13924596903603279, 
+                    0.13924596903603279, 
+                    0.11959992265804101, 
+                    0.11959992265804101, 
+                    0.10069469877423318, 
+                    0.10069469877423318
+                ], 
+                0.07128127664327621
+            ], 
+            [
+                1.0469757318496704, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9998574029563401, 
+                    0.9998574029563401, 
+                    0.9989858166484797, 
+                    0.9989858166484797, 
+                    0.9945619546066805, 
+                    0.9945619546066805, 
+                    0.9864722237999242, 
+                    0.9864722237999242, 
+                    0.9726977938746791, 
+                    0.9726977938746791, 
+                    0.9548045521757672, 
+                    0.9548045521757672, 
+                    0.9310570995568498, 
+                    0.9310570995568498, 
+                    0.9019606620686832, 
+                    0.9019606620686832, 
+                    0.8688254879475804, 
+                    0.8688254879475804, 
+                    0.8334039457687404, 
+                    0.8334039457687404, 
+                    0.795805320768739, 
+                    0.795805320768739, 
+                    0.7578801023477401, 
+                    0.7578801023477401, 
+                    0.7197809550319522, 
+                    0.7197809550319522, 
+                    0.6824812503321221, 
+                    0.6824812503321221, 
+                    0.6454112642225966, 
+                    0.6454112642225966, 
+                    0.6094094994068979, 
+                    0.6094094994068979, 
+                    0.5743864797165235, 
+                    0.5743864797165235, 
+                    0.5418060382918887, 
+                    0.5418060382918887, 
+                    0.5103759394166999, 
+                    0.5103759394166999, 
+                    0.4815435998612069, 
+                    0.4815435998612069, 
+                    0.45320727524855026, 
+                    0.45320727524855026, 
+                    0.4273758687928249, 
+                    0.4273758687928249, 
+                    0.4019312038316827, 
+                    0.4019312038316827, 
+                    0.37993440043562743, 
+                    0.37993440043562743, 
+                    0.3579178168719474, 
+                    0.3579178168719474, 
+                    0.33618637114593747, 
+                    0.33618637114593747, 
+                    0.3162159486502682, 
+                    0.3162159486502682, 
+                    0.29920675874744385, 
+                    0.29920675874744385, 
+                    0.28282519824434177, 
+                    0.28282519824434177, 
+                    0.2689067569066554, 
+                    0.2689067569066554, 
+                    0.2560643997945921, 
+                    0.2560643997945921, 
+                    0.24450646407515733, 
+                    0.24450646407515733, 
+                    0.23388592992630963, 
+                    0.23388592992630963, 
+                    0.23176388479540086, 
+                    0.23176388479540086, 
+                    0.23176388479540086, 
+                    0.23176388479540086, 
+                    0.22654123586679073, 
+                    0.22654123586679073, 
+                    0.21075498174571358, 
+                    0.21075498174571358, 
+                    0.19389256605887034, 
+                    0.19389256605887034, 
+                    0.1761750131338117, 
+                    0.1761750131338117, 
+                    0.15781050536495414, 
+                    0.15781050536495414, 
+                    0.13886072380851758, 
+                    0.13886072380851758, 
+                    0.11929930209387275, 
+                    0.11929930209387275, 
+                    0.10058560711971094, 
+                    0.10058560711971094
+                ], 
+                0.06659583747386932
+            ], 
+            [
+                1.0538643598556519, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999934417973833, 
+                    0.9999934417973833, 
+                    0.9945152472175098, 
+                    0.9945152472175098, 
+                    0.985975699328822, 
+                    0.985975699328822, 
+                    0.9728013423901836, 
+                    0.9728013423901836, 
+                    0.9545166943921857, 
+                    0.9545166943921857, 
+                    0.9302506521946681, 
+                    0.9302506521946681, 
+                    0.9007881798327866, 
+                    0.9007881798327866, 
+                    0.866729087061186, 
+                    0.866729087061186, 
+                    0.830818239962949, 
+                    0.830818239962949, 
+                    0.7929984586393645, 
+                    0.7929984586393645, 
+                    0.7550507511072947, 
+                    0.7550507511072947, 
+                    0.7168871195331584, 
+                    0.7168871195331584, 
+                    0.67960305464084, 
+                    0.67960305464084, 
+                    0.6424504087592621, 
+                    0.6424504087592621, 
+                    0.6063145930193264, 
+                    0.6063145930193264, 
+                    0.5717155964011672, 
+                    0.5717155964011672, 
+                    0.5384688296636996, 
+                    0.5384688296636996, 
+                    0.5082110023863488, 
+                    0.5082110023863488, 
+                    0.4782587083693442, 
+                    0.4782587083693442, 
+                    0.45107349779245515, 
+                    0.45107349779245515, 
+                    0.42452666946694817, 
+                    0.42452666946694817, 
+                    0.3996970602220103, 
+                    0.3996970602220103, 
+                    0.37754965616042035, 
+                    0.37754965616042035, 
+                    0.355723823212971, 
+                    0.355723823212971, 
+                    0.3340779449316977, 
+                    0.3340779449316977, 
+                    0.3142176477021267, 
+                    0.3142176477021267, 
+                    0.2972988007387492, 
+                    0.2972988007387492, 
+                    0.2810073948118909, 
+                    0.2810073948118909, 
+                    0.2671725693633614, 
+                    0.2671725693633614, 
+                    0.2544208509971398, 
+                    0.2544208509971398, 
+                    0.2429115803884752, 
+                    0.2429115803884752, 
+                    0.2324792280496835, 
+                    0.2324792280496835, 
+                    0.2289634489406583, 
+                    0.2289634489406583, 
+                    0.2289634489406583, 
+                    0.2289634489406583, 
+                    0.22639073938637272, 
+                    0.22639073938637272, 
+                    0.21048655980777445, 
+                    0.21048655980777445, 
+                    0.19365093067862746, 
+                    0.19365093067862746, 
+                    0.17599350188834836, 
+                    0.17599350188834836, 
+                    0.1576962779653871, 
+                    0.1576962779653871, 
+                    0.138809006447627, 
+                    0.138809006447627, 
+                    0.11929472976620943, 
+                    0.11929472976620943, 
+                    0.10060969553974963, 
+                    0.10060969553974963
+                ], 
+                0.0621570460498333
+            ], 
+            [
+                1.0607982873916626, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9945378593886807, 
+                    0.9945378593886807, 
+                    0.9869930979306801, 
+                    0.9869930979306801, 
+                    0.9722786191717795, 
+                    0.9722786191717795, 
+                    0.9532443458750582, 
+                    0.9532443458750582, 
+                    0.929063493546871, 
+                    0.929063493546871, 
+                    0.8985616257994262, 
+                    0.8985616257994262, 
+                    0.8646384609448146, 
+                    0.8646384609448146, 
+                    0.8281047684863512, 
+                    0.8281047684863512, 
+                    0.7905269210613634, 
+                    0.7905269210613634, 
+                    0.7521863266512681, 
+                    0.7521863266512681, 
+                    0.7139593709361042, 
+                    0.7139593709361042, 
+                    0.6766197528026303, 
+                    0.6766197528026303, 
+                    0.6395469651059736, 
+                    0.6395469651059736, 
+                    0.6034422108016364, 
+                    0.6034422108016364, 
+                    0.5687083079553514, 
+                    0.5687083079553514, 
+                    0.535890064245809, 
+                    0.535890064245809, 
+                    0.5051566998982767, 
+                    0.5051566998982767, 
+                    0.47584306388566056, 
+                    0.47584306388566056, 
+                    0.448236747077131, 
+                    0.448236747077131, 
+                    0.4221907866929971, 
+                    0.4221907866929971, 
+                    0.3971960336809082, 
+                    0.3971960336809082, 
+                    0.37529128227583797, 
+                    0.37529128227583797, 
+                    0.35352396112190365, 
+                    0.35352396112190365, 
+                    0.3319980562114459, 
+                    0.3319980562114459, 
+                    0.31223514576819433, 
+                    0.31223514576819433, 
+                    0.2954124674541152, 
+                    0.2954124674541152, 
+                    0.27919564038251166, 
+                    0.27919564038251166, 
+                    0.2653729624222989, 
+                    0.2653729624222989, 
+                    0.25293025662010893, 
+                    0.25293025662010893, 
+                    0.24139282305237347, 
+                    0.24139282305237347, 
+                    0.2310792277072334, 
+                    0.2310792277072334, 
+                    0.2268102929037619, 
+                    0.2268102929037619, 
+                    0.2268102929037619, 
+                    0.2268102929037619, 
+                    0.2268102929037619, 
+                    0.2268102929037619, 
+                    0.2105573465549793, 
+                    0.2105573465549793, 
+                    0.19356604586265633, 
+                    0.19356604586265633, 
+                    0.17583403278834345, 
+                    0.17583403278834345, 
+                    0.15751193515652503, 
+                    0.15751193515652503, 
+                    0.13863595634987272, 
+                    0.13863595634987272, 
+                    0.1191603949263932, 
+                    0.1191603949263932, 
+                    0.10056504320653019, 
+                    0.10056504320653019
+                ], 
+                0.05797778069972992
+            ], 
+            [
+                1.0677777528762817, 
+                [
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    1.0, 
+                    0.9999635464070645, 
+                    0.9999635464070645, 
+                    0.9998540712525904, 
+                    0.9998540712525904, 
+                    0.994507266419815, 
+                    0.994507266419815, 
+                    0.9865146535416708, 
+                    0.9865146535416708, 
+                    0.9722572994777762, 
+                    0.9722572994777762, 
+                    0.9534068340681325, 
+                    0.9534068340681325, 
+                    0.9282967329864792, 
+                    0.9282967329864792, 
+                    0.89676491409236, 
+                    0.89676491409236, 
+                    0.8622153873856244, 
+                    0.8622153873856244, 
+                    0.8258402044781412, 
+                    0.8258402044781412, 
+                    0.7877178930040207, 
+                    0.7877178930040207, 
+                    0.7493673667560578, 
+                    0.7493673667560578, 
+                    0.7110556222614284, 
+                    0.7110556222614284, 
+                    0.6736872381262882, 
+                    0.6736872381262882, 
+                    0.6364604711254276, 
+                    0.6364604711254276, 
+                    0.6005589253514287, 
+                    0.6005589253514287, 
+                    0.5653723730185761, 
+                    0.5653723730185761, 
+                    0.5335870391713661, 
+                    0.5335870391713661, 
+                    0.5016310732504781, 
+                    0.5016310732504781, 
+                    0.4737618085551976, 
+                    0.4737618085551976, 
+                    0.4451629201370576, 
+                    0.4451629201370576, 
+                    0.4199621825365839, 
+                    0.4199621825365839, 
+                    0.39467247890899737, 
+                    0.39467247890899737, 
+                    0.37303404915833593, 
+                    0.37303404915833593, 
+                    0.35132082205961246, 
+                    0.35132082205961246, 
+                    0.3299176873598355, 
+                    0.3299176873598355, 
+                    0.31026167300149693, 
+                    0.31026167300149693, 
+                    0.29353036179214775, 
+                    0.29353036179214775, 
+                    0.27741450392811823, 
+                    0.27741450392811823, 
+                    0.26372888647916337, 
+                    0.26372888647916337, 
+                    0.2511751729110445, 
+                    0.2511751729110445, 
+                    0.2402516482708159, 
+                    0.2402516482708159, 
+                    0.2294906549426025, 
+                    0.2294906549426025, 
+                    0.22563849968708818, 
+                    0.22563849968708818, 
+                    0.22563849968708818, 
+                    0.22563849968708818, 
+                    0.22423365284272892, 
+                    0.22423365284272892, 
+                    0.20875928756341053, 
+                    0.20875928756341053, 
+                    0.19221491945906388, 
+                    0.19221491945906388, 
+                    0.17480311865747133, 
+                    0.17480311865747133, 
+                    0.15674389093965735, 
+                    0.15674389093965735, 
+                    0.13809890864642346, 
+                    0.13809890864642346, 
+                    0.11883192876971799, 
+                    0.11883192876971799, 
+                    0.10054114151764085, 
+                    0.10054114151764085
+                ], 
+                0.05400107055902481
+            ]
+        ]
+    }
+]
\ No newline at end of file
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100755 (executable)
index 0000000..1f11d24
--- /dev/null
@@ -0,0 +1,64 @@
+AUTOMAKE_OPTIONS = foreign
+TOPSRCDIR = $(srcdir)/..
+TOPBUILDDIR = $(builddir)/../fplll
+DEFINES =
+
+CLEANFILES = *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
+
+include_fpllldir=$(includedir)/fplll
+
+EXTRA_DIST=test_utils.h \
+       lattices/dim55_in \
+       lattices/example2_in \
+       lattices/example3_in \
+       lattices/example_in \
+       lattices/example_svp_in \
+       lattices/example_svp_out \
+       lattices/example_dsvp_in \
+       lattices/example_dsvp_out \
+       lattices/example_cvp_in_lattice \
+       lattices/example_cvp_in_lattice2 \
+       lattices/example_cvp_in_lattice3 \
+       lattices/example_cvp_in_lattice4 \
+       lattices/example_cvp_in_lattice5 \
+       lattices/example_cvp_in_target \
+       lattices/example_cvp_in_target2 \
+       lattices/example_cvp_in_target3 \
+       lattices/example_cvp_in_target4 \
+       lattices/example_cvp_in_target5 \
+       lattices/example_cvp_out \
+       lattices/example_cvp_out2 \
+       lattices/example_cvp_out3 \
+       lattices/example_cvp_out4 \
+       lattices/example_cvp_out5 \
+       lattices/grammatrix_dimension4 \
+       lattices/grammatrix_dimension4_out \
+       lattices/grammatrix_dimension7 \
+       lattices/grammatrix_dimension7_out 
+
+# include TOPBUILDIR for fplll_config.h
+AM_CPPFLAGS = -I$(TOPSRCDIR) -I$(TOPSRCDIR)/fplll -I$(TOPBUILDDIR) -DTESTDATADIR=\"$(TOPSRCDIR)/\"
+
+STAGEDIR := $(realpath -s $(TOPBUILDDIR)/.libs)
+AM_LDFLAGS = -L$(STAGEDIR) -Wl,-rpath,$(STAGEDIR) -lfplll -no-install $(LIBQD_LIBADD)
+
+TESTS = test_nr test_lll test_enum test_cvp test_svp test_bkz test_pruner test_sieve test_gso test_lll_gram test_hlll test_svp_gram test_bkz_gram
+
+test_pruner_LDADD=$(LIBGMP) -lmpfr $(LIBQD_LIBADD)
+test_sieve_LDADD=$(LIBGMP) -lmpfr $(LIBQD_LIBADD)
+
+test_nr_SOURCES = test_nr.cpp
+test_lll_SOURCES = test_lll.cpp
+test_enum_SOURCES = test_enum.cpp
+test_svp_SOURCES = test_svp.cpp
+test_cvp_SOURCES = test_cvp.cpp
+test_bkz_SOURCES = test_bkz.cpp
+test_pruner_SOURCES = test_pruner.cpp
+test_sieve_SOURCES = test_sieve.cpp
+test_gso_SOURCES = test_gso.cpp
+test_lll_gram_SOURCES = test_lll_gram.cpp
+test_hlll_SOURCES = test_hlll.cpp
+test_svp_gram_SOURCES = test_svp_gram.cpp
+test_bkz_gram_SOURCES = test_bkz_gram.cpp
+
+check_PROGRAMS = $(TESTS)
diff --git a/tests/lattices/dim55_in b/tests/lattices/dim55_in
new file mode 100644 (file)
index 0000000..4e68411
--- /dev/null
@@ -0,0 +1,56 @@
+[[28915379691307635007036 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457673147006172469940 25167607588659113640693 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457668359282145779783 12583793356310607039053 21905590675233055791751 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457675451769310329704 -12583784899871317973930 10952786735822782281640 19066369385347812466128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457687954852814711070 12583799862027181295254 -10952794275624618733081 9533171188079307739380 16595144450934132393931 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457675263003520938800 -12583800408386688467828 10952785265907546211145 -9533183780744338365042 8297569266299154207109 14444219231324099672799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457671215853703718949 12583797030856336608174 -10952795004367822206208 9533183907304142338847 -8297568706180766295076 7222104331674440913922 12572079129495554251737 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457675190778999794357 -12583792085450941638576 10952794485819940965794 -9533172686278532110702 8297559496028077535408 -7222107632351402070517 6286034254575947001698 10942590326760681054902 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457679142852991785761 12583795087862684623658 -10952774591400302997634 9533175250424929843659 -8297558458745332257273 7222107216105526022881 -6286031107721342355190 5471294358826437080583 9524302370829964893627 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457672138072677530302 -12583797100509061084744 10952789373082456589741 -9533176615010416388330 8297561744762738411328 -7222102609732856292821 6286035115295548562523 -5471289400978290960291 4762142214879550979954 8289841156636879196593 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457678750325344891551 12583793974066858759870 -10952789290115766075110 9533183705037320608033 -8297557069274112957311 7222108178110842509658 -6286029232672603158123 5471291722124826122409 -4762149660257714280426 4144913556529418270005 7215380583962094276537 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457669357664559906309 -12583795761208544848367 10952779241547605077897 -9533170706174161901267 8297561253641634047153 -7222103895744286294689 6286031111224856767125 -5471284861534298426651 4762148293553380878438 -4144916601725094607661 3607686762962760923576 6280182694421877883438 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457664798088869151134 12583803467806934895982 -10952781959193798654729 9533178479540871968550 -8297567808089015852022 7222095904744733060500 -6286035220659794852605 5471287275220351775256 -4762147323661996777258 4144918500642505740606 -3607683860332647902770 3140087202378936065868 5466197412092495406583 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457663176198653110046 -12583797154501140083729 10952789388169062250470 -9533183295916289378744 8297565507946439132419 -7222102777868742342878 6286028838472340698701 -5471293449219691574397 4762144209453036442713 -4144919315656647269176 3607685887157531107673 -3140086224223660349378 2733093938968536983989 4757714162440816354272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457671676227925140654 12583797858232681798832 -10952791505070899955637 9533169239100915685440 -8297556808524817469302 7222102543089505056815 -6286034317541306028806 5471289711988999258453 -4762147320279365511554 4144915297512081217859 -3607684850723411653976 3140088471538949621496 -2733094092345490824077 2378856831276198968238 4141058645524617537214 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457681429506497610232 -12583800305259565029620 10952788806370167567133 -9533180939795233767553 8297557164648232863910 -7222100587880394888829 6286037247265038328306 -5471286305044086119580 4762148189915103280099 -4144915358875806258403 3607689723131966263339 -3140090825299457529834 2733097565875688911913 -2378855216889963344543 2070526675018617722226 3604328910940012219834 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457676496749685782420 12583784922028930073971 -10952781484863189562427 9533176605259785461631 -8297565802497214251600 7222100126757176624985 -6286033166455034869148 5471285271901907078306 -4762148092074611606427 4144918194437741189099 -3607684025978251939646 3140087949695966995769 -2733098701472765851175 2378853919396684664212 -2070525920404049480447 1802161115686298183698 3137165640548952531946 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457668480023983348330 -12583780873071150243285 10952784798928680834968 -9533170053518758876816 8297561778671627573394 -7222098963160546292022 6286032405959069960347 -5471289361205721794279 4762143402209238299397 -4144914318968153568195 3607684462094871509669 -3140086962474559839046 2733094527392282998050 -2378856401305066277370 2070528797098886748901 -1802161705758913663246 1568581507562503059817 2730552205257584886416 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457672434941405013081 12583803586863254595353 -10952791133371244979774 9533176295346553853588 -8297560706451820592424 7222106207891241960242 -6286036685595139615822 5471288169933720097934 -4762145225638014993164 4144915532930652659691 -3607689924347190934386 3140089273908265117615 -2733097941936500013779 2378856150617813710522 -2070528558428558256348 1802162822794349274779 -1568581067863115519500 1365275088342414176664 2376640636779509381958 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457668255675808842696 -12583799686764084427501 10952775836802441906650 -9533174525198956076752 8297556494933664431891 -7222099831336984210111 6286037292849875990352 -5471291932189555051240 4762145046727390438226 -4144917973537745386785 3607689197496307978300 -3140086266770085816551 2733096660117278832937 -2378856227456624747642 2070528420243776454499 -1802161228940000637970 1568580078802324913227 -1365275276472173497296 1188318292611200889963 2068600155498170271065 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457673112599110869577 12583787046870231462235 -10952791885408691823586 9533166842387830704827 -8297562438585140575908 7222105178059201838134 -6286030854662771196261 5471290821717446645767 -4762142691006865131549 4144916701226496241936 -3607684810029101365921 3140088280328906186492 -2733096297648988911267 2378853195318972650164 -2070527145410268934017 1802163157212347624467 -1568582624330303224432 1365275716003026547993 -1188320059740531199449 1034299864482090504503 1800485330893567628801 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457680136708851295034 -12583789777685816999688 10952790577734042935730 -9533177172732289163394 8297559934385584506199 -7222105956054159684775 6286031871869985092668 -5471293189617769160078 4762143110712686665485 -4144912734344875152161 3607686629072785659277 -3140085992364889333662 2733096898506510234315 -2378856478605534988154 2070528801930855258687 -1802163363017464324346 1568581028818054466075 -1365275020853290293246 1188318380863858772770 -1034298698269130476082 900241124641606368254 1567121329922856192146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457666105988981983196 12583796976542528689006 -10952781830078318760177 9533174902951301031836 -8297572099836220983230 7222097255984136247946 -6286032238478722537475 5471285452634068706200 -4762147333648219134947 4144917886430133371840 -3607688261242859679369 3140090691297926875732 -2733095465553530827459 2378856344038330787918 -2070528906470266307058 1802161084758967282956 -1568581032537278521826 1365274331678413452448 -1188318307210550668373 1034300032105122097992 -900241028311330240676 783559663304908501938 1364004038555732987877 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457670648075294679538 -12583787122493407003308 10952790626144816377346 -9533177050788554892420 8297564243706356053187 -7222099072024488693590 6286032123807760323120 -5471290218739420436983 4762146622839068386138 -4144916099331685493065 3607684139849589182977 -3140088532317773710135 2733094699585412605131 -2378854633010669118720 2070529088648491270501 -1802161950571041441240 1568581764001628154154 -1365275850653608566824 1188318191526814511922 -1034298341545283428738 900242492099280514305 -783559830649253538738 682001212312177329322 1187213128729436453283 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457674997211162267588 12583788205717341314528 -10952780660200880436735 9533171196167488591691 -8297560014520854415137 7222108343903144672720 -6286034493410256542299 5471293216520634937693 -4762148623382804997866 4144918134141566249752 -3607685475698126857951 3140088910976921956287 -2733095906459491588407 2378856838268931539714 -2070525718037010262739 1802164129592886715568 -1568581606678675394141 1365275378879155570015 -1188318222143661237882 1034298635993441331828 -900242455975980567759 783559578796582381285 -682000798121979684524 593606353044365381303 1033336392845252214872 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457673268760018280362 -12583802896333623972880 10952784215552401680498 -9533178723346880672789 8297563394615942761636 -7222103029964700305008 6286029993794201783484 -5471293819585405535589 4762144100102235800908 -4144915795103305301939 3607688753009516657511 -3140091167953085763145 2733098286926302575290 -2378856080731977262995 2070525793816716312871 -1802164043559003813946 1568580324620937334277 -1365274986952636337372 1188318198428100281223 -1034299015080875361514 900242242853269971231 -783559347785850184890 682002011852653229931 -593606233497947750154 516667331497108618636 899403885401088179822 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457669015705736100822 12583797132973556334572 -10952788120564450166662 9533175724628037461081 -8297562743035023537975 7222102174132836959907 -6286031344547193026873 5471285845217268790815 -4762150886447265700805 4144919330297207655472 -3607684478350059589195 3140085455085545614604 -2733094048277122111571 2378853308770203863911 -2070527297227948139208 1802162801309617900340 -1568581376534500024168 1365275930203774982388 -1188318264934474625505 1034299770268670006921 -900240979947917565203 783559707577023228952 -682001183027194491615 593605433689902993922 -516667359457628829828 449701871474261671844 782830600640342550153 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457684799573135768315 -12583792113838401093719 10952787188749355160139 -9533170101299297213459 8297557271475282313676 -7222098743059258254740 6286032411101057701436 -5471288301299032196590 4762148073189985888671 -4144915548155676644086 3607685139197234770819 -3140090070059753069585 2733096758330376887442 -2378853537214019119797 2070529280000151564321 -1802163936761755969840 1568581417349196110292 -1365273819431421558948 1188319445967689561836 -1034298648967199368592 900241571094653367550 -783560470063880650159 682001359368228013449 -593606366177152311614 516667452730750091860 -449701666749935903429 391414791397198868745 681366579849309195045 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457670079329483376352 12583801187410114011522 -10952788456955260311405 9533178638871715174554 -8297571226870103211454 7222099153605084132585 -6286034396746214094635 5471289494180400286568 -4762144378416519436164 4144915766596986279546 -3607686776731246186046 3140089324530214925023 -2733095406618622532681 2378852681308938414173 -2070528931883465796200 1802161624590494236088 -1568580411912296573744 1365275341809795835616 -1188318253300680460217 1034300016258321303822 -900241154409265798866 783559920965213064774 -682001516997922176764 593606442574293795746 -516667609342365870475 449701873380168438153 -391414971154452304417 340682729927418290035 593053485333592813092 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457673190748206825018 -12583781173364947566508 10952789486246030108835 -9533169236681680693371 8297569663074129108595 -7222107125330643518800 6286038396600874580626 -5471292267804869854862 4762149480180897443265 -4144918234569697041416 3607688737327640035005 -3140090334095999269111 2733095097253881184882 -2378855085866266405379 2070528241902225403494 -1802162198873405245640 1568581730805927691019 -1365275796105345642022 1188319422714550765002 -1034299934430531921492 900242212766855686100 -783559915913680803803 682000870092279411293 -593606038895668857081 516667982423517669190 -449701662999524742805 391414558904135169799 -340682723193754262160 296526722382818627304 516186802916143305267 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457669857976651218990 12583796587119031274083 -10952786005671080417980 9533176770161991562731 -8297560454587364012424 7222105841917917166557 -6286035220403756064907 5471285712539399609133 -4762144384478891550275 4144919308966132773839 -3607685617591963182991 3140089045239163018360 -2733096410401338140568 2378853826565891787132 -2070525744123385399309 1802164249916501229302 -1568581927352663510950 1365275367341085829336 -1188319202590181121828 1034299825022516869329 -900241803984540292133 783560353644040802727 -682001086178450274614 593606136851463516820 -516667363061950511819 449701236194593388783 -391415172920005058414 340683259621030594605 -296526598714694350100 258093330463076405669 449282943434539988756 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457686705743650170960 -12583780724008768305090 10952779246253079637451 -9533180683835750062461 8297560500229140323765 -7222096932134863493103 6286028941216037546796 -5471287086968198821693 4762148975519886548726 -4144917695142142538238 3607684718248696574333 -3140088663166023563801 2733096393747782422744 -2378855784834884653721 2070526394634225767519 -1802161494999350416524 1568581390538561166617 -1365275587138035870160 1188319845757833783114 -1034299518469341172006 900241900612479279075 -783560043686177406000 682000749511792639633 -593605803409497341263 516668017574104843696 -449701513934381903764 391414707414097324826 -340683103158725134710 296526609346955515280 -258093385815002296386 224641404708664333993 391050608269805515874 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457663617204599887801 12583783605661725823656 -10952788917738177685520 9533171924119343111028 -8297557619815692542318 7222105673760753067526 -6286038917607471491273 5471285244397219192661 -4762142677843664560762 4144913277808674587661 -3607685134513163507141 3140086788742873775089 -2733094481747600521623 2378854159943825593263 -2070527401677918658209 1802161977628304795953 -1568580144818953435123 1365275174414739980413 -1188319826427949010140 1034300072863910616864 -900241056623573381129 783559529629112528631 -682000992503899509418 593606104788537316429 -516667584731234869894 449701825963412093937 -391415057601352781826 340682664500298628148 -296526518496640581345 258093269057601486000 -224641256777535187590 195525047609427282137 340365866238287854238 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457674934094320616439 -12583798773078297898059 10952784099590649122984 -9533169215412007534022 8297560294725313419217 -7222101475779145480715 6286038545246901253410 -5471289019071284136933 4762149841893277499402 -4144915507032866394127 3607684023009295891871 -3140089351492525742822 2733094215572289498019 -2378856670885548865756 2070528283227722676089 -1802164412964957264110 1568579948224868910190 -1365276020237356672002 1188318236790313132745 -1034298213648313180798 900241496413021709909 -783559604280649788579 682000794986418633165 -593606371818817072885 516667702142188836076 -449701264868463015140 391414808991510702522 -340682882793125044225 296526372890974983420 -258093097042641888650 224641097412101168824 -195525248184241557144 170182791881026765044 296250460810458710194 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457686933036022188315 12583789124538506012173 -10952777034092392594837 9533173897842399082502 -8297559598370160480042 7222097833337372904204 -6286031255624288256985 5471286186826211538835 -4762143890873225599339 4144918749853901318789 -3607685633736898930783 3140088655447893679055 -2733097772336163183426 2378854817876047890873 -2070525395787132883659 1802163790149275838382 -1568580629684450417375 1365275682057119320319 -1188320001509770970769 1034299991448004006395 -900241668113088891749 783559444123240123547 -682001944908686685852 593605570934172204830 -516667838818294738002 449701876500176319378 -391414711380964813147 340683211636489220120 -296526193275618791011 258093320834341426208 -224641110860812995623 195525260886304544693 -170182678928015912783 148125165986667124477 257852928968399877430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457673374987515449583 -12583803428401274443337 10952795244439771521875 -9533183087466242893131 8297563183715714469474 -7222100869244521428696 6286030752969794507184 -5471290511514366297183 4762142712822756686523 -4144916236538527067176 3607684711057696795774 -3140086254996118901312 2733096646426315467387 -2378855410175007976764 2070529130886684623445 -1802163697549185092277 1568580989329707470708 -1365273653066564712573 1188319597273770272948 -1034299494994512798019 900241518193126122679 -783559423031981375903 682000995924933819227 -593605516024230892238 516668038668479407988 -449701299225109175364 391414797479098796513 -340682700681747199869 296526211508689977113 -258093165381877791568 224641194912921364029 -195525121838605710528 170182806742090824518 -148124975623877172751 128926335481457397213 224432167280650527455 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457668709571274968555 12583797060198216272042 -10952792790489354614547 9533178943796847668487 -8297559834109861538480 7222101771648686038246 -6286035668279220167942 5471288918016062517388 -4762148654682059005705 4144914277044304807692 -3607686115688977579442 3140087108135374913254 -2733093564214857439623 2378854393644788065313 -2070527152078422938311 1802163404820359802815 -1568581608627295470100 1365274727823807133418 -1188318076609208723354 1034299404769698650363 -900242571964351748142 783559709071696036777 -682001355971529845372 593605459826375157095 -516667799482940893519 449701847139932310483 -391414713306343394392 340682681016048698734 -296526505929254799485 258093387422402136964 -224641450959608845867 195525253770319829074 -170182878485713671866 148125089891129451999 -128926230170037550858 112216069595461231796 195343128006363534306 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457676028235009172471 -12583802945539118665694 10952780211315314955447 -9533177115506608930792 8297564833615988738133 -7222105636397601910019 6286030972665275630330 -5471288758245619139354 4762143039211201649633 -4144919169241660400732 3607686059301565130709 -3140086133498138854322 2733094062842173342616 -2378856798495422317426 2070526637518901936936 -1802163219375199077755 1568582041835387669560 -1365274160578806858579 1188318732791434361999 -1034298701458067092264 900241664760216015792 -783560593102960335933 682001503890323025549 -593605792006553895520 516667736450433259205 -449701373249668420517 391414624442423950291 -340683233853353006019 296526602735763304965 -258092928832984504273 224641306555285435756 -195525135721492162334 170182743181666149417 -148125068958089606335 128926263627156372357 -112215981166602663511 97671523050808347050 170024369152007967336 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457689379469780269763 12583784064064519677090 -10952782827913550181845 9533175727831786860412 -8297568166046013372147 7222105456508029359238 -6286034207144678374487 5471284953935915055625 -4762149250619990687903 4144920347827763016005 -3607687772692978386320 3140089592649794743809 -2733096307001234053647 2378854746093285083281 -2070528164205291651039 1802162257069575551535 -1568582196623345605515 1365275389352329606697 -1188319624887812312319 1034299958115942512527 -900241002298108133652 783560500822506725785 -682000828996342276609 593605900678084008757 -516667753671014166807 449701546383398592801 -391414759944062475760 340683190151986192777 -296526682326055776358 258093163087162280669 -224641286276854189380 195525297704295496327 -170182797058588255453 148125198322510981170 -128926275803392321321 112216043240651330377 -97671385784983754681 85012144242522980986 147987218186639034171 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457679188225249375020 -12583779982826911889950 10952781738995200321742 -9533183877282931965740 8297560536916205846214 -7222098493114471684877 6286038368048159213277 -5471291001585053393111 4762149406962157979367 -4144913715195587163393 3607684239256073080676 -3140088304567919624872 2733094882317615248122 -2378856134986197831488 2070529148299970065907 -1802164149806218067848 1568582512179964777858 -1365274936803600172817 1188319025753220890826 -1034298738270870027411 900241117001356090506 -783560519214264269688 682001850558553129581 -593605643051483619055 516667462842211508322 -449701492601237218850 391414678060832919154 -340682845817366538039 296526188974641859253 -258092976822154451126 224641201504309093900 -195525108753806295707 170182929020331818968 -148125049984288495678 128926435180597862533 -112215959459702244736 97671464024324488445 -85012078099142181428 73993550870310552169 128806340266672696460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457685276040791002177 12583784500272747467496 -10952791575150575242496 9533177950728374343860 -8297569737807170215953 7222108631057418939453 -6286032032439814265818 5471288878504329050140 -4762144316561804142485 4144919301165215547101 -3607683622515816239794 3140085560956803793703 -2733097589821794725135 2378854970985794455061 -2070529071933922686876 1802163037551701370802 -1568582813563760400951 1365273540955921588172 -1188318970858313968635 1034299673211637665134 -900241036137939169190 783559211898955250549 -682001546322088893627 593606305958538076016 -516667722581770063732 449701160281174559610 -391414739053399994229 340683087860310728664 -296526266731099407947 258093045522517344294 -224641300451871628758 195525289452223307315 -170182697855708949585 148125017898211056061 -128926333492054261604 112215952648259979423 -97671529561160119133 85012172678084716440 -73993574728751252973 64403132590203236426 112111528929271990303 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457681322012230729124 -12583787401430174884751 10952794306437736251154 -9533175543357136677987 8297563059116465046344 -7222108946923803468628 6286028969405957205434 -5471290360545236450563 4762144035609954746690 -4144917138844940982971 3607687898941318905637 -3140088831703635272382 2733096409106886034520 -2378856492424600757577 2070526640264320091709 -1802164310120493336379 1568580678770773593245 -1365275186218484955033 1188319075529356859446 -1034299238247822243904 900241397145433133829 -783560442523304418341 682001445361398912349 -593606488217409184575 516667367140136908665 -449701745913513114064 391414800031456773225 -340682993174525966764 296526435913266365703 -258093330310677926099 224641147799121283459 -195524990245351968726 170182735304444075692 -148125100448438512202 128926259358570245684 -112216027487649303678 97671443375783721905 -85012116870022626093 73993607004930385671 -64403153632488182595 56055674526697263727 97580560808085371510 0 0 0 0 0 0 0 0 0 0 0 0 0]
+[-14457684363261501550101 12583802029651814255663 -10952786418970246939512 9533168706149807628981 -8297557115242194865467 7222096650737642715439 -6286036472239426576101 5471288447530707506360 -4762147375169334737235 4144917771354377069868 -3607683473614617127543 3140090282750712962638 -2733094528662404581510 2378855478330090858459 -2070525927414454375708 1802164381199199157060 -1568581794144975632481 1365274935296036433190 -1188319764385286479592 1034298501976148114718 -900242159785878942278 783559578207927939262 -682001251478645834420 593605563168092392519 -516667902234468107983 449701152655195907579 -391414554427434238620 340682800609063486038 -296526306791505452881 258093290662195572061 -224641147459167218970 195525262393773688282 -170182740927224254045 148125019748951924713 -128926252136149081745 112215949321404417852 -97671477852142318929 85012095672497092473 -73993485961599366616 64403137663501405649 -56055746972310461978 48790226459505959947 84932976461569685623 0 0 0 0 0 0 0 0 0 0 0 0]
+[14457679873034912361660 -12583799196396871067563 10952790423779881197791 -9533184457205710980981 8297562035222178334237 -7222103531687791317430 6286030138414513597734 -5471294971378556834357 4762147287768773726710 -4144912680546452783492 3607689495130701642633 -3140089103609959484860 2733095803207645338676 -2378853102385042425592 2070525729661945950754 -1802162777811418362413 1568581291392812912774 -1365275948582887513088 1188319431114628588810 -1034299990492110421328 900241214813628670224 -783559312730386495113 682001261058553071536 -593606560177130323311 516667599194172174460 -449701298944444521568 391414691542494299241 -340682660031535785273 296526444191195564660 -258093026246567011829 224641123474017358928 -195525237813477420266 170182750545899687955 -148125041743593367886 128926235419989727927 -112215922082204101297 97671554640435815349 -85012151056815745408 73993528802339765860 -64403113432988743945 56055717487800765862 -48790241992860501976 42466437341568203566 73924667278852550692 0 0 0 0 0 0 0 0 0 0 0]
+[-14457679390519922245664 12583796250249676373296 -10952778294950206043208 9533172589057555839338 -8297569878866222917228 7222099737268441344908 -6286029093492367592564 5471291493148558826961 -4762146128193865707707 4144915151054908514319 -3607683629055338215722 3140087140841743080483 -2733096159143249940355 2378856185359827521221 -2070528056434857974559 1802164003715404336604 -1568580467824923973552 1365276056758361695547 -1188320158532949382345 1034298762643859654855 -900241085291273810574 783559270150238247908 -682001771212127249248 593605486716543043624 -516667242357019281349 449701500426890099913 -391415299609995671304 340683050411164267069 -296526373260765221611 258093136523872403393 -224641361548269624746 195525159042974199786 -170182698778058565265 148125026179421852472 -128926269032557116807 112215991937947087106 -97671487470509905324 85012071423286578088 -73993486942648515078 64403083274845259956 -56055731717043721728 48790260411214780067 -42466428927129172536 36962294662623512034 64343163986037637593 0 0 0 0 0 0 0 0 0 0]
+[14457684305631839018950 -12583787760575879726298 10952795177285639267931 -9533167068730806246592 8297567472379422982902 -7222095880696546444068 6286030968551259951766 -5471291844814463589306 4762146704598289281309 -4144919739003683291214 3607688995307250378592 -3140090499440712382071 2733097166023028125579 -2378856146331970770953 2070527686480427928255 -1802164121066446001578 1568580031816043575252 -1365274119047430742208 1188319596192113537726 -1034298922114001668126 900242459311738601567 -783559424045068418571 682001763412327595072 -593605571043072202854 516667511136975873938 -449701699587207998336 391415115680588153013 -340682693761403067202 296526255065201742904 -258093240475830881909 224641054122371006530 -195525003596268857126 170182652821403369994 -148124998804951370545 128926434976384323346 -112216064611629270276 97671411193894411268 -85012037568224938248 73993547782897362699 -64403088599400570072 56055675669290930083 -48790205301000959081 42466437495840371443 -36962278630073760823 32171570455499802152 56003535817312535765 0 0 0 0 0 0 0 0 0]
+[-14457676538843262761149 12583803270482563657797 -10952777938524025271265 9533182004884611608588 -8297571333600396437701 7222103615605350201582 -6286028442131072233024 5471293290154151675018 -4762146222349842016244 4144919681533777133717 -3607687419360339143010 3140090197793279114346 -2733097311144257978580 2378854536083689194434 -2070528711362438624634 1802162313422604787107 -1568581635900560332380 1365274366025029164962 -1188319585517136824140 1034299791979009965706 -900242304590236788384 783560134720675280922 -682001055906103840381 593606458968050200423 -516667728307402854932 449701430127779321431 -391414716880660470441 340682985680609723697 -296526659728849096615 258093383908770530813 -224641220206335400523 195525273345158610871 -170182780679765059855 148124991533827552966 -128926436562806074382 112216028630639576194 -97671523198908931420 85012106964597818923 -73993587188845490642 64403079403337032051 -56055682912915010215 48790224018839781106 -42466410296932293097 36962277940302812402 -32171558114242075893 28001747915550600980 48744821201543662547 0 0 0 0 0 0 0 0]
+[14457676890427108995516 -12583791831020578630345 10952774919993755458493 -9533169958053519812816 8297557710573498501759 -7222108500347057939916 6286029457991859176682 -5471289223377172856779 4762146517742620946375 -4144919052511346579855 3607685897656987549974 -3140089713508284042627 2733095022368345809606 -2378854858172085492631 2070526435763814740409 -1802163695393534517992 1568582130304374722468 -1365274300366039324628 1188318519585569974308 -1034299696468837927002 900241507296725209999 -783559866859072501557 682000851505373765896 -593606382255093374088 516667505239267596867 -449701310894683346120 391414608589430026726 -340682657235081281874 296526349171747043161 -258093191542925058903 224641293557319388513 -195525092525894531120 170182647787493989525 -148125023326422320447 128926314065428612597 -112215983373867159660 97671555857339950812 -85012161529317368861 73993576479252637841 -64403064388373794093 56055727857723361080 -48790252449785088527 42466469901443540308 -36962295286015920610 32171581992791552467 -28001763689341757846 24372366085726639879 42426921073721616006 0 0 0 0 0 0 0]
+[-14457685288881089160433 12583780377088194437907 -10952776603956649391223 9533182348577861665951 -8297562673340877570174 7222101488829844620977 -6286031128606436629725 5471290857276372319850 -4762149478889063863612 4144919099929488281672 -3607689332827749177121 3140089808146062558233 -2733093703818628914953 2378856500914100982753 -2070526107651250948803 1802162969892661417013 -1568580421976204214462 1365274080350604301042 -1188320073646015290557 1034298281287079120977 -900241196203221862135 783560474966679234518 -682001393394725933446 593606108366644010366 -516667325787756503559 449701445768885443612 -391415172076956280250 340683205691873279791 -296526354118378043086 258093243680075388505 -224641045713033989598 195525251700831360311 -170182890733071762748 148125113749398489249 -128926382330839537610 112215922099238312023 -97671388459006235345 85012121291454236269 -73993476958597819085 64403154028498403956 -56055729451993881651 48790279920866111249 -42466484602311244744 36962327288434431637 -32171575748110451297 28001738884484026943 -24372377844036370299 21213426226398419682 36927894849654288069 0 0 0 0 0 0]
+[14457685469405504257825 -12583780996491640213150 10952780552352367682583 -9533171821344889514848 8297562636041018033316 -7222097270992514727482 6286028787641455717549 -5471288003091664125433 4762149272667211301532 -4144916773550062585984 3607689320234570535309 -3140089073831965518785 2733096380636570960304 -2378854813067686307304 2070526843132909546674 -1802163534021409027954 1568581412151295345696 -1365275961065509323648 1188320016595839328295 -1034299194644443518885 900241598406868391253 -783559602424946167991 682001753542378649455 -593605574702645200704 516667442032533964763 -449701911525132374806 391415144216169950853 -340682706235667687006 296526296387762111924 -258093135530679702978 224641177059289803403 -195525268480167686667 170182758307066408350 -148125139320826750589 128926437001178844433 -112216003191408951663 97671563764240785308 -85012098183546172734 73993475238436023278 -64403075624192656126 56055747501919442537 -48790276680840170166 42466409377445476236 -36962314153706941308 32171525010946578402 -28001747395519710405 24372377296743428575 -21213450620097649583 18463936291196959130 32141606874031525763 0 0 0 0 0]
+[-14457673330107498698793 12583783109978590682161 -10952775347457338318686 9533174748327740531509 -8297568537431851359175 7222099559826796405081 -6286031631703091580598 5471287459067363797121 -4762148296372057888747 4144916556146564998329 -3607688773499537426842 3140085463788722086128 -2733096105283677400369 2378856007664061473803 -2070526805293629886457 1802163096603795287256 -1568580254392329718414 1365276012902953635110 -1188320036856961446397 1034299721886568764853 -900242640492019472105 783559952327441433945 -682001734503913537795 593605862232974891769 -516667964408712408918 449701809696629769781 -391415249123162331374 340683245779489705256 -296526456224689918986 258092909826752200614 -224641128860752425832 195525271402344152294 -170182684235895466967 148125181613136502574 -128926347559553911437 112216035174831243750 -97671511535540336124 85012115553105122886 -73993519378304187677 64403134811508125717 -56055745492016683138 48790187451999912143 -42466484675521863310 36962281695160733518 -32171567889348294942 28001736608737480359 -24372400920545872095 21213450108506002137 -18463924516539687796 16070797450664907402 27975677916404762371 0 0 0 0]
+[14457663072912428397869 -12583798515798207355586 10952777790714375604273 -9533178570119032610279 8297563561027813847609 -7222098866439511782621 6286035578920573188950 -5471294661401650362136 4762145541528035086419 -4144914938520878700805 3607685852892360375030 -3140090861828965695455 2733094631217738238235 -2378854737283398322290 2070528867050991951864 -1802161590964078409762 1568580365718767620633 -1365273832156496021656 1188318719121958963450 -1034299348931529853317 900241769382781456127 -783560163909146063405 682001262223342096779 -593605507918006170516 516667696194922664451 -449701370572356413282 391415264644776109140 -340682756019795254672 296526628832757196669 -258092974558451553755 224641213607182902472 -195525082309611582788 170182822877842882301 -148124950471643360378 128926404350940452052 -112215972540989769396 97671451178618637010 -85012116527545795093 73993574049920353631 -64403122219064783876 56055689400226022444 -48790249628332979056 42466479647448214290 -36962283744158606406 32171540457822248218 -28001760694749862878 24372380126188676666 -21213440090212175142 18463915470164156952 -16070784941322579550 13987830674426986058 24349702177296609280 0 0 0]
+[-14457673425614061735645 12583800049326452310854 -10952776217857860025898 9533180852746907511289 -8297559156767198251937 7222102877503582131657 -6286030804782949213417 5471293223245459910942 -4762148511943798892458 4144913712585960690647 -3607685624209309428547 3140091237761219030814 -2733095261956392534317 2378856903042946953908 -2070527129227568700306 1802164432177547100431 -1568582034633372142051 1365274215628798433299 -1188320035775471040258 1034298641714061582406 -900242416740227921368 783559429054317859695 -682001760032746488319 593605887217556351130 -516667288541251310129 449701546630088736441 -391414669810703879779 340682956230005612147 -296526611332590547256 258093225291720676534 -224641132653634221974 195525064687675342310 -170182688444012437106 148125036704491166270 -128926260589642471155 112215955902430930906 -97671562533568707760 85012029196729551132 -73993518220025374047 64403117090472249192 -56055668393172834926 48790249211076487890 -42466463580875631142 36962329001106362177 -32171578823952467581 28001754415773984423 -24372408914470546782 21213451645382130543 -18463931790498804912 16070799468744380653 -13987836076561908442 12174834557771305898 21193695391215728070 0 0]
+[14457677561131174144631 -12583801948296673473224 10952777674527448478511 -9533170686735284903845 8297563769049721441682 -7222103288715496091246 6286037270795575097265 -5471294499172181555581 4762146637103474427497 -4144916676299340213678 3607686200769753173517 -3140088678097950816554 2733098367770981934910 -2378856006637334838930 2070525772982782218908 -1802164257279341246090 1568580852202829080411 -1365274417886065616584 1188318168881033172347 -1034300060792373112496 900241943528432941169 -783560035105927804437 682001819868109885727 -593605609260834034550 516668012529476181505 -449701881408036023893 391414894022704995428 -340683026223892909122 296526212167096790718 -258093364308679177241 224641408958380556257 -195525028465716282666 170182645738081959965 -148124955114204743866 128926417595948881347 -112215996811739333380 97671466572233107191 -85012092853960995365 73993513003917973506 -64403102851747037829 56055715043140860399 -48790217387395753598 42466436469480932806 -36962311499801268060 32171537219079581069 -28001717294420568715 24372395836014500407 -21213447877842539719 18463921609587350014 -16070803170415508530 13987818169874952638 -12174850751453203343 10596833690945228419 18446744073709551616 0]
+[15264647607195437479494481095125736310 -35953618535561004449087925770976824625 19879481259306481420671600879416020178 -22040511255290087426476407088364022284 39227626419171540494646328781457231004 -32143710310817228120846889744083638894 8322077988609553533339822245056510398 -6723063736475504684779762232711417626 40479883739960124604411669548715433805 -38877590226707204046993942725544687510 13807155627417256857738574677497238347 -2105329887954236722539173848633147437 18167514695589163942734829973409298403 -18556407234437875333283467307154614303 14074999191396808590503554367434604754 -7718270831364236447530300004130215056 14690004236868185306687113838651374156 -6733087691928434355123519413408620685 41972101032033332228084215935473615313 -27650201350442675817436271489505777722 14016375587718098630634470004278716035 -34161109884698421107003807302819869941 9676453508179127560786652149212726480 -15782707275705076106919740856482316655 16235243258549903476004002355747512388 -175655766850813483778457468511524922 18783673811720032589837171104290036263 -31625433899494070113136110434115039447 41946273470803086661695463570656777668 -17265456501455000654482407415702425780 13683217351720772750484610732913745365 -9701723681081386987504484222577289176 25130420822649688100005318027598833088 -837251589791884047953220295018211106 5044107798136754451582498347965582260 -18814301548268847211632858910352553570 19553337466051778444226182464711445708 -17841450738242312813928740227238775334 23142392977898116655736237430560023109 -24997161287333370473925307806710093423 20211879114734497328220627856041164206 -12035546566987449317919062639187962329 8962450258279669977714935722884382737 -17673551065924030731445140564398810230 17819032353923437836819674687652965302 -17819594924767130775169561083049343691 35207997082054865861375463049314819007 -3864720523068206801317319125489427063 10720700862644902251059733145886930897 -39219795512122472292371521920028569630 23086441987533782800734730826470890370 -26294415425599986814038425898015636688 25506907343140196486513003370237085573 -37590545406203509128378601551775457437 831359040629051524820716022884]
+]
diff --git a/tests/lattices/example2_in b/tests/lattices/example2_in
new file mode 100755 (executable)
index 0000000..0337e62
--- /dev/null
@@ -0,0 +1,3 @@
+[[ 1 0 0 ]
+ [ 2 1 0 ]
+ [ 3 2 1 ]]
diff --git a/tests/lattices/example3_in b/tests/lattices/example3_in
new file mode 100644 (file)
index 0000000..0965f0c
--- /dev/null
@@ -0,0 +1,3 @@
+[[ 1 1 0 ]
+ [ 2 1 0 ]
+ [ 3 2 1 ]]
diff --git a/tests/lattices/example_cvp_in_lattice b/tests/lattices/example_cvp_in_lattice
new file mode 100644 (file)
index 0000000..8135a66
--- /dev/null
@@ -0,0 +1,30 @@
+[[-3 0 1 -1 9 1 1 -9 -2 0 0 -1 1 0 -43 0 20 -33 -1 1 0 -15 -1 1 0 0 0 -2 -3 2]
+[-1 -6 3 -3 -3 -2 0 -1 -1 1 -1 3 -2 -1 -3 15 1 0 3 1 1 -1 0 2 -14 -36 1 0 4 -1]
+[1 1 -7 5 2 31 -1 0 -5 -1 -2 1 0 -1 -1 0 0 -3 10 0 0 3 1 1 0 -36 1 0 -1 0]
+[2 -25 4 -3 -1 -1 1 1 -3 1 -26 6 1 -4 -4 0 -1 1 -3 9 0 -1 1 -1 1 -1 0 6 -1 0]
+[74 -2 1 0 -1 2 5 -1 1 3 -3 1 1 1 -4 0 -1 2 -1 0 -1 -2 8 -1 -1 -1 1 1 1 -2]
+[2 0 2 0 1 4 -4 -1 -1 -1 -1 4 -2 5 0 -3 1 0 -2 -15 -1 0 12 1 -2 1 0 -2 -1 1]
+[1 -1 3 1 0 0 -1 2 1 2 1 -1 1 3 -8 146 3 13 2 2 0 1 1 -1 1 0 -2 0 6 2]
+[-1 2 47 -1 0 1 5 0 1 -6 -5 -3 4 2 2 -2 -2 3 -1 1 2 -1 0 -1 1 0 0 5 18 0]
+[-6 0 0 -9 0 0 0 -1 -8 1 -2 -5 -1 -5 1 -1 0 0 0 1 2 1 2 0 0 -20 1 0 0 0]
+[-1 0 2 1 1 -6 -3 0 0 -1 3 1 2 1 -1 0 3 -6 1 0 -1 -2 1 0 3 -5 -1 19 4 1]
+[21 -1 -11 2 6 0 -2 -1 3 1 -1 1 -2 3 -1 1 2 1 0 0 0 0 2 1 8 2 -13 -169 -1 -2]
+[1 1 1 1 0 -1 -9 1 -4 2 -5 -3 0 0 -1 1 0 -1 -4 -4 -3 2 5 1 -1 -1664 -1 0 -2 -1]
+[0 -3 -1 4 -3 1 0 -2 0 -6 -1 0 3 -3 0 0 1 5 -11 -1 0 -1 -7 -13 -1 1 1 0 2 1]
+[-1 -6 1 6 -1 0 -2 -1 -20 1 0 0 1 -2 0 -102 2 -17 1 2 -2 8 11 5 8 0 -1 0 -2 6]
+[3 -1 -1 -1 -2 -1 6 1 -2 0 -2 0 1 -31 -2 3 2 0 1 2 -1 -1 -35 -7 -1 -1 -1 -1 -1 0]
+[0 5 1 0 -37 3 -13 1 -3 7 2 2 2 -16 0 -1 2 3 0 -2 0 1 -1 -3 17 1 69 -5 4 0]
+[1 2 1 -7 0 34 -10 -3 0 -10 6 1 2 -1 2 1 1 -1 -2 6 1 0 -4 1 20 -2 0 -1 -1 0]
+[9 3 -1 0 -4 1 -6 0 -1 3 0 -1 4 -34 8 -2 1 0 1 -1 1 -1 3 -50 1 1 5 -26 -14 4]
+[11 -1 -1 -5 -3 -3 0 -341 -9 1 0 -1 -1 -1 1 -1 1 -1 5 -36 1 -1 1 1 -1 25 -38 1 1 1]
+[5 1 1 1 2 64 -12 5 1 1 -2 1 0 0 -2 -1 4 -1 -14 -4 1 0 0 -5 0 1 -1 0 -8 -3]
+[6 0 13 -1 1 1 0 6 6 0 -12 0 -9 -1 1 27 1 -1 0 -1 -3 0 0 0 3 -5 -2 2 1 -1]
+[1 -1 2 0 1 0 1 -1 11 -1 0 -1 -1 1 -14 -1 1 -1 -1 0 -1 -1 34 0 1 0 0 -2 0 1]
+[-1 1 -2 1 1 -1 -1 -1 -1 0 0 -1 -1 0 1 4 -4 -1 2 0 -1 -1 19 1 1 1 0 -13 2 -8]
+[-3 -1 8 1 1 -2 0 -1 -1 -1283 2 1 5 -2 2 4 -1 1 0 -1 0 3 -1 1 1 -1 -1 1 0 -12]
+[-1 -1 -1 -3 -1 0 0 4 -3 1 -1 -2 1 0 0 0 -1 1 -1 -5 -1 -2 -1 4 -1 15 1 -281 -4 2]
+[-1 0 7 1 -2 -288 4 0 1 7 -1 -1 -1 3 -1 0 2 -2 1 1 -26 0 -21 -3 -1 -1 -1 -1 1 7]
+[1 -1 -1 -1 -2 1 -5 5 11 -1 2 -1 1 0 1 0 0 1 3 3 4 0 0 -16 -3 -1 -51 -3 1 -2]
+[1 1 -1 1 0 0 -1 3 6 -2 -1 0 -2 -2 -1 -1 0 0 -1 -2 -1 2 1 1 -1 -1 0 1 3 2]
+[2 1 -1 1 -3 -1 0 -1 -5 0 -1 0 -16 2 1 -1 -3 2 -2 0 0 7 -2 -1 -4 1 1 -2 -1 -2]
+[-4 2 -1 -3 2 5 0 1 1 1 0 0 -1 -46 -1 -1 0 -1 1 0 1 43 0 1 -3 0 4 -2 1 -1]]
diff --git a/tests/lattices/example_cvp_in_lattice2 b/tests/lattices/example_cvp_in_lattice2
new file mode 100644 (file)
index 0000000..8135a66
--- /dev/null
@@ -0,0 +1,30 @@
+[[-3 0 1 -1 9 1 1 -9 -2 0 0 -1 1 0 -43 0 20 -33 -1 1 0 -15 -1 1 0 0 0 -2 -3 2]
+[-1 -6 3 -3 -3 -2 0 -1 -1 1 -1 3 -2 -1 -3 15 1 0 3 1 1 -1 0 2 -14 -36 1 0 4 -1]
+[1 1 -7 5 2 31 -1 0 -5 -1 -2 1 0 -1 -1 0 0 -3 10 0 0 3 1 1 0 -36 1 0 -1 0]
+[2 -25 4 -3 -1 -1 1 1 -3 1 -26 6 1 -4 -4 0 -1 1 -3 9 0 -1 1 -1 1 -1 0 6 -1 0]
+[74 -2 1 0 -1 2 5 -1 1 3 -3 1 1 1 -4 0 -1 2 -1 0 -1 -2 8 -1 -1 -1 1 1 1 -2]
+[2 0 2 0 1 4 -4 -1 -1 -1 -1 4 -2 5 0 -3 1 0 -2 -15 -1 0 12 1 -2 1 0 -2 -1 1]
+[1 -1 3 1 0 0 -1 2 1 2 1 -1 1 3 -8 146 3 13 2 2 0 1 1 -1 1 0 -2 0 6 2]
+[-1 2 47 -1 0 1 5 0 1 -6 -5 -3 4 2 2 -2 -2 3 -1 1 2 -1 0 -1 1 0 0 5 18 0]
+[-6 0 0 -9 0 0 0 -1 -8 1 -2 -5 -1 -5 1 -1 0 0 0 1 2 1 2 0 0 -20 1 0 0 0]
+[-1 0 2 1 1 -6 -3 0 0 -1 3 1 2 1 -1 0 3 -6 1 0 -1 -2 1 0 3 -5 -1 19 4 1]
+[21 -1 -11 2 6 0 -2 -1 3 1 -1 1 -2 3 -1 1 2 1 0 0 0 0 2 1 8 2 -13 -169 -1 -2]
+[1 1 1 1 0 -1 -9 1 -4 2 -5 -3 0 0 -1 1 0 -1 -4 -4 -3 2 5 1 -1 -1664 -1 0 -2 -1]
+[0 -3 -1 4 -3 1 0 -2 0 -6 -1 0 3 -3 0 0 1 5 -11 -1 0 -1 -7 -13 -1 1 1 0 2 1]
+[-1 -6 1 6 -1 0 -2 -1 -20 1 0 0 1 -2 0 -102 2 -17 1 2 -2 8 11 5 8 0 -1 0 -2 6]
+[3 -1 -1 -1 -2 -1 6 1 -2 0 -2 0 1 -31 -2 3 2 0 1 2 -1 -1 -35 -7 -1 -1 -1 -1 -1 0]
+[0 5 1 0 -37 3 -13 1 -3 7 2 2 2 -16 0 -1 2 3 0 -2 0 1 -1 -3 17 1 69 -5 4 0]
+[1 2 1 -7 0 34 -10 -3 0 -10 6 1 2 -1 2 1 1 -1 -2 6 1 0 -4 1 20 -2 0 -1 -1 0]
+[9 3 -1 0 -4 1 -6 0 -1 3 0 -1 4 -34 8 -2 1 0 1 -1 1 -1 3 -50 1 1 5 -26 -14 4]
+[11 -1 -1 -5 -3 -3 0 -341 -9 1 0 -1 -1 -1 1 -1 1 -1 5 -36 1 -1 1 1 -1 25 -38 1 1 1]
+[5 1 1 1 2 64 -12 5 1 1 -2 1 0 0 -2 -1 4 -1 -14 -4 1 0 0 -5 0 1 -1 0 -8 -3]
+[6 0 13 -1 1 1 0 6 6 0 -12 0 -9 -1 1 27 1 -1 0 -1 -3 0 0 0 3 -5 -2 2 1 -1]
+[1 -1 2 0 1 0 1 -1 11 -1 0 -1 -1 1 -14 -1 1 -1 -1 0 -1 -1 34 0 1 0 0 -2 0 1]
+[-1 1 -2 1 1 -1 -1 -1 -1 0 0 -1 -1 0 1 4 -4 -1 2 0 -1 -1 19 1 1 1 0 -13 2 -8]
+[-3 -1 8 1 1 -2 0 -1 -1 -1283 2 1 5 -2 2 4 -1 1 0 -1 0 3 -1 1 1 -1 -1 1 0 -12]
+[-1 -1 -1 -3 -1 0 0 4 -3 1 -1 -2 1 0 0 0 -1 1 -1 -5 -1 -2 -1 4 -1 15 1 -281 -4 2]
+[-1 0 7 1 -2 -288 4 0 1 7 -1 -1 -1 3 -1 0 2 -2 1 1 -26 0 -21 -3 -1 -1 -1 -1 1 7]
+[1 -1 -1 -1 -2 1 -5 5 11 -1 2 -1 1 0 1 0 0 1 3 3 4 0 0 -16 -3 -1 -51 -3 1 -2]
+[1 1 -1 1 0 0 -1 3 6 -2 -1 0 -2 -2 -1 -1 0 0 -1 -2 -1 2 1 1 -1 -1 0 1 3 2]
+[2 1 -1 1 -3 -1 0 -1 -5 0 -1 0 -16 2 1 -1 -3 2 -2 0 0 7 -2 -1 -4 1 1 -2 -1 -2]
+[-4 2 -1 -3 2 5 0 1 1 1 0 0 -1 -46 -1 -1 0 -1 1 0 1 43 0 1 -3 0 4 -2 1 -1]]
diff --git a/tests/lattices/example_cvp_in_lattice3 b/tests/lattices/example_cvp_in_lattice3
new file mode 100644 (file)
index 0000000..5aa2014
--- /dev/null
@@ -0,0 +1,42 @@
+[[1 0 -43 0 20 -33 -1 1 0 -15 -1 1 0 0 0 -2 -3 2 -1 -6 3 -3 -3 -2 0 -1 -1 1 -1 3 -2 -1 -3 15 1 0 3 1 1 -1 0 2]
+[-14 -36 1 0 4 -1 1 1 -7 5 2 31 -1 0 -5 -1 -2 1 0 -1 -1 0 0 -3 10 0 0 3 1 1 0 -36 1 0 -1 0 2 -25 4 -3 -1 -1]
+[1 1 -3 1 -26 6 1 -4 -4 0 -1 1 -3 9 0 -1 1 -1 1 -1 0 6 -1 0 74 -2 1 0 -1 2 5 -1 1 3 -3 1 1 1 -4 0 -1 2]
+[-1 0 -1 -2 8 -1 -1 -1 1 1 1 -2 2 0 2 0 1 4 -4 -1 -1 -1 -1 4 -2 5 0 -3 1 0 -2 -15 -1 0 12 1 -2 1 0 -2 -1 1]
+[1 -1 3 1 0 0 -1 2 1 2 1 -1 1 3 -8 146 3 13 2 2 0 1 1 -1 1 0 -2 0 6 2 -1 2 47 -1 0 1 5 0 1 -6 -5 -3]
+[4 2 2 -2 -2 3 -1 1 2 -1 0 -1 1 0 0 5 18 0 -6 0 0 -9 0 0 0 -1 -8 1 -2 -5 -1 -5 1 -1 0 0 0 1 2 1 2 0]
+[0 -20 1 0 0 0 -1 0 2 1 1 -6 -3 0 0 -1 3 1 2 1 -1 0 3 -6 1 0 -1 -2 1 0 3 -5 -1 19 4 1 21 -1 -11 2 6 0]
+[-2 -1 3 1 -1 1 -2 3 -1 1 2 1 0 0 0 0 2 1 8 2 -13 -169 -1 -2 1 1 1 1 0 -1 -9 1 -4 2 -5 -3 0 0 -1 1 0 -1]
+[-4 -4 -3 2 5 1 -1 -1664 -1 0 -2 -1 0 -3 -1 4 -3 1 0 -2 0 -6 -1 0 3 -3 0 0 1 5 -11 -1 0 -1 -7 -13 -1 1 1 0 2 1]
+[-1 -6 1 6 -1 0 -2 -1 -20 1 0 0 1 -2 0 -102 2 -17 1 2 -2 8 11 5 8 0 -1 0 -2 6 3 -1 -1 -1 -2 -1 6 1 -2 0 -2 0]
+[1 -31 -2 3 2 0 1 2 -1 -1 -35 -7 -1 -1 -1 -1 -1 0 0 5 1 0 -37 3 -13 1 -3 7 2 2 2 -16 0 -1 2 3 0 -2 0 1 -1 -3]
+[17 1 69 -5 4 0 1 2 1 -7 0 34 -10 -3 0 -10 6 1 2 -1 2 1 1 -1 -2 6 1 0 -4 1 20 -2 0 -1 -1 0 9 3 -1 0 -4 1]
+[-6 0 -1 3 0 -1 4 -34 8 -2 1 0 1 -1 1 -1 3 -50 1 1 5 -26 -14 4 11 -1 -1 -5 -3 -3 0 -341 -9 1 0 -1 -1 -1 1 -1 1 -1]
+[5 -36 1 -1 1 1 -1 25 -38 1 1 1 5 1 1 1 2 64 -12 5 1 1 -2 1 0 0 -2 -1 4 -1 -14 -4 1 0 0 -5 0 1 -1 0 -8 -3]
+[6 0 13 -1 1 1 0 6 6 0 -12 0 -9 -1 1 27 1 -1 0 -1 -3 0 0 0 3 -5 -2 2 1 -1 1 -1 2 0 1 0 1 -1 11 -1 0 -1]
+[-1 1 -14 -1 1 -1 -1 0 -1 -1 34 0 1 0 0 -2 0 1 -1 1 -2 1 1 -1 -1 -1 -1 0 0 -1 -1 0 1 4 -4 -1 2 0 -1 -1 19 1]
+[1 1 0 -13 2 -8 -3 -1 8 1 1 -2 0 -1 -1 -1283 2 1 5 -2 2 4 -1 1 0 -1 0 3 -1 1 1 -1 -1 1 0 -12 -1 -1 -1 -3 -1 0]
+[0 4 -3 1 -1 -2 1 0 0 0 -1 1 -1 -5 -1 -2 -1 4 -1 15 1 -281 -4 2 -1 0 7 1 -2 -288 4 0 1 7 -1 -1 -1 3 -1 0 2 -2]
+[1 1 -26 0 -21 -3 -1 -1 -1 -1 1 7 1 -1 -1 -1 -2 1 -5 5 11 -1 2 -1 1 0 1 0 0 1 3 3 4 0 0 -16 -3 -1 -51 -3 1 -2]
+[1 1 -1 1 0 0 -1 3 6 -2 -1 0 -2 -2 -1 -1 0 0 -1 -2 -1 2 1 1 -1 -1 0 1 3 2 2 1 -1 1 -3 -1 0 -1 -5 0 -1 0]
+[-16 2 1 -1 -3 2 -2 0 0 7 -2 -1 -4 1 1 -2 -1 -2 -4 2 -1 -3 2 5 0 1 1 1 0 0 -1 -46 -1 -1 0 -1 1 0 1 43 0 1]
+[-3 0 4 -2 1 -1 -1 1 1 -1 1 1 -2 1 3 -1 2 -1 -1 1 2 -10 0 0 1 -5 13 7 -1 -1 -1 -1 -1 2 -1 1 -1 1 -1 -1 -1 0]
+[3 -3 1 0 -1 0 0 0 4 -3 0 2 5 1 -2 0 0 -5 0 -69 1 -28 -1 69 -1 8 0 -1 0 0 4 10 0 1 6 -1 3 2 -1 11 0 -3]
+[-6 0 1 2 1 4 2 -166 603 0 3 0 3 -1 -9 -1 0 0 -1 0 1 0 0 -2 -3 -3 -1 -2 0 0 -1 -19 -2 1 -1 0 0 0 -1 0 2 0]
+[3 -15 -1 -1 4 -14 -11 0 2 -3 5 1 0 1 -2 3 -1 3 2 0 4 0 -2 -2 -1 -1 2 -3 -2 1 0 1 0 1 -1 1 2 -1 4 -2 12 1]
+[-12 2 0 2 -1 -1 -2 -2 0 -1 -3 -2 8 -1 0 1 0 1 -1 0 -26 -1 -1 -1 -13 1 5 3 2 -1 2 -1 14 -1 -1 1 0 3 1 1 3 1]
+[-4 1 -1 -1 2 -2 -15 -19 0 0 -34 0 1 -1 0 0 -7 -1 0 -1 -1 23 0 1 -2 0 2 1 0 0 0 1 0 -5 0 0 0 1 0 -1 -1 0]
+[1 0 -1 -2 1 -19 -1 174 1 2 -2 -1 2 0 -1 1 -1 2 5 1 21 0 0 -1 8 -4 17 4 -2 -2 -1 1 1 1 0 -4 1 -1 1 0 14 1]
+[-9 0 -1 -1 1 -11 -61 0 11 -1 0 1 -1 0 0 -4 -1 1 -1 0 -1 0 1 2 -1 0 3 1 6 -2 1 2 1 4 -1 1 -12 4 1 1 1 1]
+[1 -1 -1 -1 -1 -1 -2 -1 0 -9 -1 0 1 0 1 3 0 -1 2 0 -2 -1 -7 6 1 1 0 15 4 1 -1 0 0 -9 -1 1 2 -5 1 -1 1 4]
+[1 0 3 -1 -1 5 3 -1 0 -1 3 0 -21 1 -4 -17 7 1 -8 1 0 3 -3 -3 0 1 -1 -1 -2 3 1 -24 1 2 -1 1 0 0 -2 0 0 2]
+[-2 1 1 -1 1 -1 0 -1 -2 4 1 -1 -3 0 -1 0 1 -18 -1 -10 -2 1 1 12 0 -1 -3 -1 -1 0 3 32 -1 3 1 2 0 0 -1 1 10 -2]
+[0 0 -1 1 0 -3 -1 -1 2 0 -1 1 -1 -1 0 -1 1 -31 2 0 -12 4 -24 0 1 6 -2 6 0 0 -2 -1 2 1 1 -3 0 0 1 -2 -9 -2]
+[6 0 -3 -2 14 16 -2 -2 -5 0 1 0 -1 -1 1 -1 0 3 0 -112 -1 1 -3 0 -5 -1 1 -1 1 -3 1 1 12 -1 0 -2 -8 50 0 -12 -1 39]
+[-1 0 -1 -1 -13 2 6 173 -5 1 20 1 -19 -1 0 1 -2 -1 -1 1 -4 -2 0 0 0 2 2 0 4 -1 -5 1 0 1 2 -7 -1 -1 2 2 0 23]
+[2 -10 1 5 -1 -25 3 1 -13 -2 -1 3 -1 0 -1 41 -1 -4 -3 0 0 -2 -73 3 3 0 -3 -3 -6 -1 -2 0 -1 1 0 0 -1 1 -3 -4 5 -1]
+[1 0 -1 0 0 -2 -3 1 -1 1 0 1 -61 5 6 -1 -45 2 -10 0 2 0 2 0 -1 1 0 -5 0 6 1 0 -1 -1 2 2 1 -36 -3 1 4 -1]
+[-1 -3 -6 0 1 0 1 1 -1 5 0 -1 1 0 -3 2 2 -1 -2 0 0 0 0 0 1 -1 -1 -3 1 -15 1 1 6 -1 -1 -1 6 -83 1 -1 8 -2]
+[0 9 1 -4 -2 -8 1 5 -5 0 1 1 1 -1 -78 3 1 2 1 -1 -1 -1 0 232 -1 0 -1 1 6 1 -6 1 0 0 13 0 2 -1 1 -3 -134 1]
+[-11 7 1 -4 2 -3 0 1 0 1 -17 1 2 -2 -1 3 0 -8 0 -1 1 1 0 0 -1 1 -3 1 -2 2 1 -1 -1 11 0 -3 -1 1 0 0 -1 1]
+[0 -3 -1 3 -1 -7 1 3 0 -2 2 -3 0 4 -1 -2 -3 -1 -1 -1 1 1 0 0 -1 0 50 -4 -14 1 -1 1 21 -1 1 3 1 1 -4 1 2 -1]
+[-1 1 1 -1 -12 8 1 1 1 -13 1 -1 20 1 1 1 0 1 -2 0 -1 0 26 6 -2 -1 -1 -1 1 1 1 2 1 -1 -2 -2 2 3 2 -24 0 -2]]
diff --git a/tests/lattices/example_cvp_in_lattice4 b/tests/lattices/example_cvp_in_lattice4
new file mode 100644 (file)
index 0000000..b216161
--- /dev/null
@@ -0,0 +1,10 @@
+[[ 116  75  47 195 200 225  59 125  99 137 ]
+[ 139 207  54 213 182 254 117  47  85 212 ]
+[ 206  21 231 187 144 195 158 105 162 230 ]
+[  99 222 156  52 101  95  23 208 127  37 ]
+[ 182 200 119 210 122 236  51 234 109 215 ]
+[   6  84 142 155 250 105 115  42 178 126 ]
+[ 171  42  72 121  48  67  35 110 236 147 ]
+[ 183  63  64  67 118 109 139  51  31  76 ]
+[ 124 128 176 171  29 255 200 135  33  20 ]
+[ 201 151 248 197 234   8  92  18  83 114 ]]
diff --git a/tests/lattices/example_cvp_in_lattice5 b/tests/lattices/example_cvp_in_lattice5
new file mode 100644 (file)
index 0000000..b216161
--- /dev/null
@@ -0,0 +1,10 @@
+[[ 116  75  47 195 200 225  59 125  99 137 ]
+[ 139 207  54 213 182 254 117  47  85 212 ]
+[ 206  21 231 187 144 195 158 105 162 230 ]
+[  99 222 156  52 101  95  23 208 127  37 ]
+[ 182 200 119 210 122 236  51 234 109 215 ]
+[   6  84 142 155 250 105 115  42 178 126 ]
+[ 171  42  72 121  48  67  35 110 236 147 ]
+[ 183  63  64  67 118 109 139  51  31  76 ]
+[ 124 128 176 171  29 255 200 135  33  20 ]
+[ 201 151 248 197 234   8  92  18  83 114 ]]
diff --git a/tests/lattices/example_cvp_in_target b/tests/lattices/example_cvp_in_target
new file mode 100644 (file)
index 0000000..0fdc896
--- /dev/null
@@ -0,0 +1 @@
+[-92 -33 79 -19 -17 24 41 -41 -3 -99 -59 -93 17 -1 -11 46 9 -26 -32 -97 21 -5 94 5 -46 -7 -8 -28 35 -24]
diff --git a/tests/lattices/example_cvp_in_target2 b/tests/lattices/example_cvp_in_target2
new file mode 100644 (file)
index 0000000..9d7caca
--- /dev/null
@@ -0,0 +1 @@
+[-91 11 80 -25 -21 13 50 -25 -26 -96 -64 -37 21 3 -26 35 6 -20 -58 -86 4 -4 93 2 -27 -13 0 -27 54 -14]
diff --git a/tests/lattices/example_cvp_in_target3 b/tests/lattices/example_cvp_in_target3
new file mode 100644 (file)
index 0000000..6446bb1
--- /dev/null
@@ -0,0 +1 @@
+[116 233 390 331 214 -358 -97 -328 -212 297 216 -163 195 250 72 -282 -211 278 -226 -268 -3 125 -283 -17 362 -223 -195 332 -31 -330 -148 395 -129 320 187 -266 9 -248 -377 -391 -108 105]
diff --git a/tests/lattices/example_cvp_in_target4 b/tests/lattices/example_cvp_in_target4
new file mode 100644 (file)
index 0000000..f1cc115
--- /dev/null
@@ -0,0 +1 @@
+[361 1143 -778 1892 1227 -1946 856 202 922 -1535]
diff --git a/tests/lattices/example_cvp_in_target5 b/tests/lattices/example_cvp_in_target5
new file mode 100644 (file)
index 0000000..55ac8ac
--- /dev/null
@@ -0,0 +1 @@
+[116 75 47 195 200 225 59 125 99 137]
diff --git a/tests/lattices/example_cvp_out b/tests/lattices/example_cvp_out
new file mode 100644 (file)
index 0000000..9d7caca
--- /dev/null
@@ -0,0 +1 @@
+[-91 11 80 -25 -21 13 50 -25 -26 -96 -64 -37 21 3 -26 35 6 -20 -58 -86 4 -4 93 2 -27 -13 0 -27 54 -14]
diff --git a/tests/lattices/example_cvp_out2 b/tests/lattices/example_cvp_out2
new file mode 100644 (file)
index 0000000..9d7caca
--- /dev/null
@@ -0,0 +1 @@
+[-91 11 80 -25 -21 13 50 -25 -26 -96 -64 -37 21 3 -26 35 6 -20 -58 -86 4 -4 93 2 -27 -13 0 -27 54 -14]
diff --git a/tests/lattices/example_cvp_out3 b/tests/lattices/example_cvp_out3
new file mode 100644 (file)
index 0000000..eaf09b0
--- /dev/null
@@ -0,0 +1 @@
+[119 237 404 334 235 -348 -97 -329 -188 285 210 -185 194 267 55 -287 -225 284 -203 -236 -2 108 -285 4 382 -228 -205 339 -39 -346 -175 401 -139 323 183 -269 9 -239 -377 -373 -91 108]
diff --git a/tests/lattices/example_cvp_out4 b/tests/lattices/example_cvp_out4
new file mode 100644 (file)
index 0000000..0a91e8b
--- /dev/null
@@ -0,0 +1 @@
+[379 1130 -789 1787 1097 -1920 864 180 891 -1569]
diff --git a/tests/lattices/example_cvp_out5 b/tests/lattices/example_cvp_out5
new file mode 100644 (file)
index 0000000..55ac8ac
--- /dev/null
@@ -0,0 +1 @@
+[116 75 47 195 200 225 59 125 99 137]
diff --git a/tests/lattices/example_dsvp_in b/tests/lattices/example_dsvp_in
new file mode 100644 (file)
index 0000000..bb88732
--- /dev/null
@@ -0,0 +1,40 @@
+[[-174 -638 -91 -231 -47 117 -365 -405 -138 107 144 8 -14 241 44 -130 -85 -440 -167 196 -85 -718 -359 138 64 106 508 -204 -303 168 318 -122 -74 441 -467 247 -70 1250 -21 -48 6]
+[-361 -142 101 -314 -803 -123 630 280 84 -27 -203 -72 -387 -336 661 -424 -306 126 -8 360 195 36 451 224 469 172 -124 671 499 -144 -226 -138 -29 -180 217 -73 423 -535 246 -419 74]
+[861 172 167 308 -110 -67 -553 262 -143 -11 -131 -251 40 -206 150 745 -3 -173 489 -185 151 753 -295 -551 -436 -462 -88 -72 66 649 -105 -96 241 -182 -130 -286 -109 10 217 -33 174]
+[-502 -214 426 413 312 -178 467 -433 -147 202 -222 726 676 344 -60 -466 219 108 -430 -316 251 -668 65 128 -155 -111 -58 240 -364 -16 -306 48 231 22 -191 -184 -318 56 101 74 -216]
+[-286 169 -171 -283 -891 437 172 134 -125 -23 -40 -400 154 -113 -188 -253 331 -504 33 142 -104 -259 497 -450 718 87 231 -59 -126 -288 356 -173 -471 -241 -24 577 511 224 479 21 230]
+[-454 -199 -26 -29 -467 -426 399 -140 221 -111 487 -70 576 284 -336 -429 -271 -404 -840 -10 171 -256 23 -244 -36 -43 280 -23 270 -412 365 -209 -228 -125 341 123 496 -289 489 57 -169]
+[224 44 5 -317 -469 -217 -142 575 76 -332 339 -125 801 -106 356 -239 -462 -123 270 -159 263 554 -428 319 -42 -404 323 157 132 0 -83 47 -70 -24 547 -231 -75 -8 10 -198 -95]
+[-431 178 228 578 -454 156 598 -871 39 -339 212 51 -157 513 -48 -343 -84 -658 -448 352 7 -335 -26 -228 615 350 73 220 310 -648 226 -82 -250 -152 25 91 433 207 438 -325 -186]
+[58 -311 193 252 -941 -229 -482 -627 311 582 -127 -492 451 -83 -194 652 -45 -384 -219 154 149 -312 -161 -370 229 88 151 367 104 -263 -34 -494 189 67 -63 234 352 718 370 -273 39]
+[294 614 17 -388 30 -208 114 344 -111 137 219 553 -447 138 609 512 -609 -134 683 165 -319 957 -112 19 86 186 -238 -164 173 -69 -592 249 -25 -253 113 -245 -281 -317 152 61 -15]
+[-476 80 140 -678 468 -325 720 80 -326 361 -168 438 -77 317 80 -344 -388 -211 437 224 -54 -769 76 -10 -698 -278 48 -177 -503 485 -109 153 261 161 92 117 -320 94 -123 202 -170]
+[-432 555 330 -172 950 -37 236 17 -167 -72 497 -33 297 144 -645 184 -39 266 -352 -574 -58 -145 143 -605 -160 -310 59 -413 60 403 83 -24 339 -395 17 86 -129 -886 -213 -21 -412]
+[493 -406 -535 316 -170 -135 -833 -188 150 -764 53 -457 51 -298 -97 169 -89 -66 161 143 60 21 -714 593 343 190 475 125 -9 -68 -424 10 -379 805 358 253 -47 389 -180 217 399]
+[-823 -587 -298 -862 217 637 787 -156 -179 248 433 62 -751 54 95 -391 -264 -420 -186 428 -244 7 149 302 -207 592 -118 -18 -24 -4 268 -228 68 105 -534 -31 319 170 -368 -146 -144]
+[5 -334 41 389 -672 -547 -6 -363 310 -148 185 257 368 321 289 -111 -28 -568 -399 174 -165 -446 -251 -320 448 7 -91 41 468 -300 306 -25 146 -198 -605 -192 -363 821 1057 301 36]
+[330 182 -35 644 802 944 565 150 -113 -173 -32 -213 -425 -29 -522 -199 590 136 -93 -264 -42 443 827 -232 -186 153 -317 -209 197 -685 143 -173 -464 128 -254 -273 405 -357 -211 -75 195]
+[-77 363 -110 645 246 296 243 -69 -36 -241 -227 -64 -305 111 0 458 320 489 -258 122 233 -133 203 -60 77 -568 -473 433 545 -152 -564 -173 781 -263 -109 -633 -411 -57 79 -324 -28]
+[-260 -239 1 750 -295 -507 21 -199 21 655 -316 491 -473 390 435 618 -322 -75 197 199 -173 123 353 220 -485 -32 45 685 84 -30 -796 -203 153 -178 509 -234 28 386 229 -241 77]
+[575 416 85 261 43 -164 -608 87 662 -9 -429 -214 96 -589 -147 116 114 -13 799 154 22 337 -571 74 54 100 -499 -480 -403 -61 340 114 254 318 569 -246 1 -250 74 134 334]
+[-166 -454 -493 -150 238 -314 -382 7 -451 -327 273 -956 -306 -161 -405 -86 -36 125 -535 -19 -41 152 482 -160 -167 -7 252 183 328 528 667 -112 -210 37 -417 249 -70 -156 441 217 -26]
+[-183 -179 -436 757 -461 139 350 -211 41 -121 -222 -449 517 -62 -334 8 781 -116 201 -317 -541 -559 274 -64 -259 134 138 136 -137 194 47 -51 -82 159 -595 255 -129 -204 -339 493 547]
+[-249 519 266 300 -351 261 878 -334 -302 -414 -501 196 -176 82 199 -163 -241 -392 -459 -117 493 -422 277 -433 170 -199 526 314 165 432 -350 -47 -34 32 -306 -324 697 -75 -166 -344 -219]
+[335 531 -132 777 291 -690 121 -5 491 -84 -37 -83 -307 -179 -16 122 -156 -34 -332 -102 -48 664 -504 260 -521 -146 -108 -70 183 184 214 382 -129 255 -227 -347 -476 -556 287 345 -215]
+[287 -22 -323 340 281 222 -405 -175 53 -386 126 499 269 300 629 355 326 -121 -64 -167 -356 646 -636 162 -694 -13 -330 93 214 490 132 417 -126 -143 -491 -300 294 542 -559 -93 -41]
+[104 -110 -172 -1184 50 205 69 85 -211 184 299 261 -321 -173 -24 -524 -432 333 -684 114 109 397 -48 631 -387 875 386 -72 277 -618 -13 -129 -494 126 179 -234 67 322 -244 292 -439]
+[279 244 30 597 -230 362 766 -274 -92 -390 155 -97 429 419 -599 -618 521 32 -319 61 98 455 -327 262 190 -657 -212 -250 -418 -46 -223 539 -189 -205 417 219 -52 -623 -347 210 11]
+[632 64 -262 -61 532 294 -652 -280 -404 -190 331 211 -67 441 5 92 -250 -469 609 273 -16 -236 -630 440 54 157 42 216 37 -210 -334 261 -495 646 -545 260 -643 278 -300 116 186]
+[-647 41 -18 -299 1235 -258 -154 -78 -22 230 -256 152 290 -445 -121 -282 393 670 498 -283 35 347 -216 -111 -108 -63 -708 -86 -443 223 -262 319 571 83 553 52 -623 -625 -356 402 -128]
+[351 637 -52 231 470 2 132 104 -375 -472 -173 23 138 -361 376 444 189 346 -138 -157 68 805 -270 -189 172 -255 -142 123 537 534 -931 -427 183 67 -637 -270 -1070 -344 -185 61 -71]
+[382 246 -239 -559 -825 -20 -619 -25 371 -19 -367 -315 -64 36 3 320 -203 -252 513 80 472 -264 -515 254 -864 57 171 -209 -1 -101 173 -190 381 369 94 -102 689 327 -188 -170 551]
+[929 -180 410 628 151 259 240 -213 -548 81 86 578 -876 252 292 176 294 154 -1 127 -268 -218 -418 115 -113 259 -43 -877 -103 -132 691 -153 -533 314 -626 -99 -256 541 -338 32 26]
+[602 86 -387 -129 460 -219 -193 173 -203 -175 130 172 399 687 422 -20 -61 149 753 211 -362 -143 -418 248 -757 -330 -56 -311 -69 642 -474 528 -275 -167 -420 -172 -839 461 83 482 806]
+[461 -370 86 318 -309 13 -87 -286 -46 20 -351 14 -364 -553 535 95 -87 35 23 486 0 -193 -852 271 -380 -82 473 126 66 -319 -231 -48 614 378 161 -135 -269 208 -75 -15 162]
+[340 414 686 984 191 98 -115 -227 -108 209 -72 -297 242 684 -353 93 756 247 -310 -134 433 252 240 49 227 -300 -242 -56 -299 -25 52 363 -25 -444 -435 -627 4 -660 56 -352 190]
+[315 154 27 38 214 177 -171 -310 -65 -526 -357 -693 -119 -710 -447 613 20 897 401 61 -4 424 19 -163 -251 544 -257 -368 283 733 23 -232 287 -376 -303 315 -43 -743 -599 -72 -30]
+[-280 -296 29 -468 -37 26 -201 198 200 -190 -408 -307 -196 -843 425 361 -114 591 -93 -42 -570 58 -373 229 253 548 150 244 241 497 162 -351 372 199 -281 -346 369 -461 -308 156 79]
+[-10 526 -558 583 -585 -378 464 57 -315 -367 -542 246 275 -21 300 -305 -35 111 542 50 30 304 832 -351 518 123 54 501 -5 -527 -219 30 146 -104 -54 -22 -168 -121 270 -217 239]
+[-15 54 309 -221 334 158 -132 -195 -293 384 -647 -13 434 -155 -584 -266 194 577 157 216 231 -216 292 -15 -435 62 -178 660 -851 -604 -495 -65 20 375 167 147 -30 -62 -293 432 337]
+[-142 362 80 -416 129 -342 149 -815 -70 459 540 -47 394 -39 -886 667 289 -591 -119 -250 103 -200 -101 -186 -199 -233 -16 54 -140 252 -419 -141 148 -151 -491 409 -153 -121 370 693 -627]
+[612 410 -73 102 79 -177 -863 706 571 -535 48 -852 420 -331 -200 20 -197 -5 344 -621 395 354 -708 -206 385 -23 -169 -374 -121 -65 441 4 -56 181 -150 226 152 37 253 487 124]]
diff --git a/tests/lattices/example_dsvp_out b/tests/lattices/example_dsvp_out
new file mode 100644 (file)
index 0000000..197c4e6
--- /dev/null
@@ -0,0 +1 @@
+[0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 0 0 1 1 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 1 1 -1 0]
diff --git a/tests/lattices/example_in b/tests/lattices/example_in
new file mode 100644 (file)
index 0000000..d20e57b
--- /dev/null
@@ -0,0 +1,11 @@
+[[6387644439988641870659119018177072756746633386492960394002626833366524451642295042279681542407664816710521080198710471123100624570722158676672664680873857651260159052532581203242890409470147196071544135245953475090918505352870531877898748921771816097428652062685051239397087472799197255684652211688725 1 0 0 0 0 0 0 0 0 0]
+[9271439082107276127056608557920453914109017509899898317996324751350167211937944336596144693018847907899969174661296293997764257897873156150925707424219014849858653652824766872043074758974480692201580416238988281163180559535326145210144297112273324640310690569821059072010073958878779666827184363285770 0 1 0 0 0 0 0 0 0 0]
+[5869172567007078747579025704535014162652939915522312409080282030670954623554253203525669724066017528428992090954132597155885723390860062707567632101002205261759209759919841169547588623666852726558553977809724876022600045097954623006006365806059920299555146501877125764070262544781792883261181084040435 0 0 1 0 0 0 0 0 0 0]
+[10055602271889202536354400021369083051800873625449412028765711857291340324880921527267537232574010218669050442125874194853663458539499926536642587593178430081266366646417771586451638771861115903421892381659678208696237187987608981942006151468296665283019761963768325615202250889249141985671948541519838 0 0 0 1 0 0 0 0 0 0]
+[6049932941533106503089622651213217577095883999715352729723258312870612770802612397665515802978645005807465460540168590000166366813922122443958920834067111737411531554104001549295647429791506984120910867475363436790482039327125479935143730632919926692213405539154124050690588496523965464633703684119211 0 0 0 0 1 0 0 0 0 0]
+[9234384642652499188116150370004523557490935510287354125682942812855397348587899191887553412078525235724717692010975990498109660830375643079960126168420192486465529226917466487821326221070052095036743531452607276200967047562275738612286404790566517484010673042568149828675548533635575062170114052582850 0 0 0 0 0 1 0 0 0 0]
+[9214228014937729878306171086869743865165006684570045727148900991812575218912595591956686130791000602149079218412992680239137903125768295301792489685747015426943989084443261453721088797739317177756968926401223064584149861747015409909995986817599143051465924405395844389913544222404838407251909991697868 0 0 0 0 0 0 1 0 0 0]
+[9294075047718621744172310531205871765613849983905114418615239120249276516452296442287767885787466804411486372526382610526691860535022612491285281077131188588213421295457786154174537268454913006885796545574569583092845116972723057490267715423875250238709368507926007669428392997830071178710030991666019 0 0 0 0 0 0 0 1 0 0]
+[1571768966691157202976552130747633214559060554985665194406609454107739018552020035706236502397781062654782847968480075669943881557860196424512583257853209148792159443893227913587764693873667223203295931949688236676220793900871431691050373184463687796247478802881619438711718928806928609938337352004045 0 0 0 0 0 0 0 0 1 0]
+[6103237138230491379299914049323608950809550963778306484644296459600577986877174644913104000114555081634638251425296945401517939318340204737544868486517891786576011601756607327331153268255347857004118112267225372550161428711185114021159028865272865415655420027884888867430707270535133212510144302482611 0 0 0 0 0 0 0 0 0 1]
+]
diff --git a/tests/lattices/example_out b/tests/lattices/example_out
new file mode 100644 (file)
index 0000000..6c4a84f
--- /dev/null
@@ -0,0 +1,11 @@
+[[-50490380172962619385744211077 339797566654484504780876359405 -201834822863466853845075344943 174646627436521970009261458507 -21129228312635039256975350202 -15860455275145308264526505178 -42954592012743855007419218738 -53040786129736384138317048159 -379804773044639765008258106971 653784540835122536963526734936 388631265738150057345014702958 ]
+[-646683408546095129162033931947 196252155955420678099213528694 389841114328475320105100751 585197820082692192388810093203 -243740769276439001880225847867 282107319973016668819806023145 -114029526173534831735573369895 -23600005889704498842231394405 147985058150749260198792582983 -400490649336155536324189939016 -560859352470778970777477216508 ]
+[254628370065562536849006653095 -450315928131909777735310303546 -334228998520264810986100010074 362604660562187556565444236347 -93961967923925977318019782157 444622458238996616932536410226 511931759095705379885709708693 132829040048668040439054744672 -157810890870263992009998058450 597300146413143240015417937687 -544210015609423824919843975841 ]
+[-545731242466448754742906551865 21660093952573699694475761998 880081308831126751365416812804 145641250912621867674142746859 -233877051456347712660335304856 -403072768779062009707718835121 203211970838196953100908655709 545095077332323757302210089456 -1010484297399676451912001279329 263868538991099819800081451289 -374362701841482343084644972883 ]
+[-43362759663576745700894328112 222351914823460106153749853783 600770538797133548583765962528 -157168191769166853302472976872 177678860341578287045804593697 934195707060922812556628971567 -612443590172603267773215321446 -948374851217843324417956821345 367003776155095613759437356515 278219061079057846391779247056 -485075275715565735048143651045 ]
+[748534674052068614825470989140 605701508154495889065343436999 -206241065841275288261514312695 -191428698561694107630075864314 365920937643684354870592294204 552371226644185830333278326631 516050205626109186488701310460 -1131748915447162263436334540081 -350362935699467740662624862045 -641232878782488783694056598830 339535423764560850957831377275 ]
+[-675229593354808259453425962757 -688796952931487283467144639155 -329295136423697066429104776975 362913999658857172756648825 373493360692006128600170393014 -934506422566812046866671957075 382044733718788921888177642868 -272270113200687479621760155179 482775319997833883954867729902 782209824841778254613430976274 428151153738349587300700871790 ]
+[-952008598032609887770022112246 852364316425989534095971270303 -980412485184512900768346120847 -688012090800225558396703802820 383400156916277781907349816650 -15251131655005633543193478111 488570407216563477930753290987 -187173416470803887793058413083 371465879259394395079615712987 -803419043572991766138563037885 -173086212149018788866323576704 ]
+[624600857158911122329248158314 168461721904884690337138077353 -97567137659283624699482859826 -59094915297757229974327838223 -1155947728953620438280884325492 401444941360586191508645793887 353794514067465517119003773732 -292175638659459055003892195274 208654363820100364203194616088 -177454198105737784980268066553 1169076988724952456548354475418 ]
+[303315932505069143560793956614 -471778747772473599863454539191 -159518601465882642725422673731 266050451290101507628710440750 -453267154637327105220401157583 1232612076615643935238055853399 -56373830854974476512732467551 -144976672121690582973053598017 -210061257495621216780655938884 -1039534731886994840460099704454 896956624043147824507105517346 ]
+]
diff --git a/tests/lattices/example_svp_in b/tests/lattices/example_svp_in
new file mode 100644 (file)
index 0000000..8812e65
--- /dev/null
@@ -0,0 +1,21 @@
+[[-24 -31 -340 654 407 -428 113 31 112 -166 179 -185 -575 64 -121 -189 -55 44 655 57 23 ]
+[-107 99 -435 414 -480 103 184 -35 110 -145 -104 436 -294 484 160 -754 22 -289 526 -271 5 ]
+[-203 -672 262 688 159 -432 293 -10 86 -136 -266 -148 100 -660 42 34 260 618 293 270 6 ]
+[163 -436 -206 91 80 -173 814 597 499 -633 -153 -254 -97 -184 62 -20 253 89 75 -117 -133 ]
+[-106 174 100 -356 -191 -613 -300 -48 89 437 304 567 -157 560 -186 35 -356 -305 -472 427 54 ]
+[213 -468 407 164 302 594 -298 182 -199 -245 27 106 668 -29 -233 23 -118 -154 219 -328 -152 ]
+[-135 -187 569 31 -146 -463 425 100 68 460 -344 214 203 630 240 -344 66 -512 -130 -372 148 ]
+[60 -290 916 -32 66 -570 -84 -216 233 -203 -357 88 624 162 95 926 118 -172 -243 -51 -128 ]
+[-243 74 -594 -14 534 -294 364 156 -105 437 23 414 -410 -81 -431 -70 -150 -617 -214 127 -88 ]
+[-366 -23 -185 157 720 -236 82 550 194 -595 -213 -107 243 527 193 -501 -281 -599 25 -140 -18 ]
+[157 -408 222 -145 -544 358 146 -253 -34 560 -337 290 68 313 -141 -344 -30 -103 496 509 -458 ]
+[68 -72 290 -97 -42 -121 -616 -201 196 376 -322 308 343 -212 287 463 415 88 -209 393 -840 ]
+[89 10 233 57 -378 -615 108 37 -70 526 438 231 464 386 -184 71 -637 175 183 -512 396 ]
+[-62 179 98 -240 -110 -589 272 784 112 1 -100 256 -116 -581 630 -705 124 -422 -227 -172 328 ]
+[150 64 220 -261 796 -248 191 113 -399 160 330 -57 -538 -438 298 295 548 146 536 -371 286 ]
+[276 728 78 73 280 250 -665 -262 285 -367 475 118 535 74 65 -89 -569 -1 -392 154 -628 ]
+[317 154 -6 199 63 -427 -274 -146 -430 167 -35 456 74 130 335 -674 592 -144 236 495 105 ]
+[-590 -345 -384 346 918 118 -19 -144 -636 144 405 -522 250 -54 180 132 162 -525 72 -213 403 ]
+[-152 563 187 131 118 -156 -209 -337 354 38 81 -64 682 650 -75 -519 569 181 352 -417 21 ]
+[-34 -243 235 331 663 -424 223 -339 476 -659 -719 -503 -498 -310 622 208 -182 511 -8 -317 743 ]
+]
diff --git a/tests/lattices/example_svp_out b/tests/lattices/example_svp_out
new file mode 100644 (file)
index 0000000..bb9bc17
--- /dev/null
@@ -0,0 +1 @@
+[88 -4 -88 351 -268 -4 -325 -351 275 -808 -117 310 127 16 15 516 74 51 413 50 -271]
diff --git a/tests/lattices/grammatrix_dimension4 b/tests/lattices/grammatrix_dimension4
new file mode 100644 (file)
index 0000000..9bc1683
--- /dev/null
@@ -0,0 +1,4 @@
+[[2 1 1 2]
+[1 2 1 2]
+[1 1 2 2]
+[2 2 2 4]]
diff --git a/tests/lattices/grammatrix_dimension4_out b/tests/lattices/grammatrix_dimension4_out
new file mode 100644 (file)
index 0000000..e44d3a1
--- /dev/null
@@ -0,0 +1 @@
+[0 -1 -1 1]
diff --git a/tests/lattices/grammatrix_dimension7 b/tests/lattices/grammatrix_dimension7
new file mode 100644 (file)
index 0000000..ebbd13b
--- /dev/null
@@ -0,0 +1,8 @@
+[[3 1 1 1 1 1 2]
+[1 3 1 1 1 1 2]
+[1 1 3 1 1 1 2]
+[1 1 1 3 1 1 2]
+[1 1 1 1 3 1 2]
+[1 1 1 1 1 3 0]
+[2 2 2 2 2 0 4]]
+
diff --git a/tests/lattices/grammatrix_dimension7_out b/tests/lattices/grammatrix_dimension7_out
new file mode 100644 (file)
index 0000000..8af384e
--- /dev/null
@@ -0,0 +1 @@
+[1 1 1 0 1 -1 -2]
diff --git a/tests/lattices/stalling_93_53.txt b/tests/lattices/stalling_93_53.txt
new file mode 100644 (file)
index 0000000..ed9324e
--- /dev/null
@@ -0,0 +1,93 @@
+[[   7313   4148  -6603   1339   5427  -4467  -1334  -7961  -7218  -1932 -15106    -44  -8177    106   3206    155   -908   -345    459  -1269  -3936    576   1635   3408   5580   -928  -1705  -7851   -481  -2441    991    123   -909   -695   1908   2111  -4112  -9710    436  -6866   3083   3022   -779  -3516    885   6486    -18  -3345   -558   2529  12127  -4501   -691  -4137   -223 -11275  -2134  -1867   3375 -10495  -7252   -907  -3636  -7352   3744  -2984   -563  -4786  -7864   5179  -4435     12   7724   7132   6282  -1096   -301  -5505  -3602  -6489   7042 -10155  -9402  -1828   -488   3907   8581   -436  10010   1574   6185  11929   9803 ]
+[   1921  -4466  -1816  -4522  -9033   4086  14154   5199  -3542  -4065  -1504   -628   2708  -7680   7338  -5787   1019  -2707  -2184  -2211   1952  -6368   2533  -2643   4337 -12386  10176   1250  -2569  -4501   6143  -6051  -7038  -7224  -1010  -5985   8456   1877  -1854   -423  -5685   2956    978  -1259   6931  -7893  -1707  -1413  14506  -1987    512  10113 -11760  11574   8313   5584 -11476   3351  -8587  -1429    999   -931   -772   4433  -2338    703   3243  -2820  -1224   7814  -5787   4449   -677   1664  -1630   4239  -1190   6809  -2398    449  -7251   4116  -5150     52   2967  -4333   3190  -3468   -950   3324  -5093  -5588  -4880 ]
+[   2316   8730  -1233   9152   4237   5982   3705   3299   2663    -38   2269  -4784   4727  -9359   5762    126   9381  -1800   2700  -1877  -3935   -573   8088  -3277   -578 -13574   4458   2671   1386  -8643  -5521  -7239   3937   -822   7786  -1667    732   1292   2186  -9019   1802   2093   -245   2004   6041  -7079  -4612  -1587   8285 -10896   -838  -2880 -10841   9414  -1162      2  -3117  -5016  -3796 -16326  -1121 -13945   5151   6501  -2291  -4516   3693  -1862    766   2140  -4618    945   8962   2437   4810  -1850  -6459   2212   4057  -4192    110  -1708  -2795 -13657   9857  -7645  -4120    507   6295   2953   3134  -3178  -4842 ]
+[    828   5487  15335   4952    536  -4182  -1215  12166    760   4696  -2217  -3669   3617  -3881   2955  -1244   6046  -6256   6837   -545   -677  -3797  -7642  -5675   9376  -8463   2393   2577   5986  -3049  -7109   6757  -2584   -407  -7498  -5687   5643    824  -4443  -2663  -6741    883  10379  -4000   6057   -164   2437   8939   6152  -7473   2962 -11668  -3053   3885  12326   7235  -3823  -3851  -4168    103    202   2433  -1160    650   -372  -4577   1044  -1589  -6766  12615   2508   9705  -3939   1699    222   -122  -4047    993  -6002   -312  -1732   -752   -304  -6336   6067  -5352  -2520   4476   2382  -3159   5402   9164  -3160 ]
+[   1398  16445  -9770   1275   7150   9720  -2095  -5882    695   5617   6933  11642    -73     87   4861  -4866  -4585  -2073  -1744   2432  -4447  -3702  -2236   2172  -2156   2633   8429   3737   2443  -5612   -673  -7330   6245  -1058   4895  -4709  -3441  -3557  13819    696  10151  -1518  -1299  -2433   -140  -1113  -2544   -191   3836  -3558  -2712  -5854   7017   4391 -15742  -8797    -79  -2362   4563   -487   2207    219   1228   1367   -474    531   2001   2259  -5184  -1671   4511  -4249   6176  -9495  11826  -7877   5503  -5657   8908  -3591   -493   4753  -2238    274  -3606   3633    522   1667   2978   3882   -174  -1698  11759 ]
+[    516  12459   -488   3362 -10359  -2739   -498   3355   3687   4901   7097  -6714   1261  -1071   6158  -5212  -5016  -7346   1354   4810   4049  -1688   -954  -6181  -5939 -13088   6562  17882   5921  -9935  -8338   9079  -2406  -4381   -233  -9543   2292  17982    503   5519   5802   4878   5108  -2407   6721  -1535  -3968   2535   9261    868 -10378  -3541 -10478  13655   6248   -247   1816  -8152  -2505  -1913   1678   1780  -2322  -1347   -481   -235  -3841  -5360  -2199   2302   2058   3067   -150  -3443    -27   -686   2052   5603  11855   5044 -10020  12493   5520  -3035   2107  -4386  -9004   9593  -1252  -8101  -2790  -6105  -6024 ]
+[   1629  -9150    952  -1558   2204  13448  13750  -5277    365  -1188  -4522  13699   7381  -5279   9338   1518   1345  -1523  -2492  -9820  -1020  -3632  -7589  -2871   9121  -3318   7443   9941   4425  -2973   3456  -6335  -1807  -3805   6608   1302   -946 -10319   1471   -586   3332  -6668   3243  -6290   7279  -7810  -2712  11678   -811  -3618   -722   -460   8370    730    689  11826  -7168  -2799    642   -609   6883  -7491   3750   9800   2064   2209   -919   5955  -5953   7640   7626   4230  -4338  -7788   6835    815  -8994  -5670  -8657    -38  -6342   7805  -9645  -2982  -9893  -3174   5925  -2041  -4496    608  -4288   2477    542 ]
+[  -1281  -2178  -1777    976   -694  -2790  -9663  -3725   7994   4152  11115  -8677   5868   5092 -13548  -3799  -4456   3221  -7101   3873   3338   5405   3198  -3128 -10226   5450  -8692  -4970   6506   4708   7000   2670   3576  -1866  -1291   7870   1491   1295  -4921   3295 -14303 -11724    327   1432 -13880   4805   1305  -4643  -7078   8776  -8803   -321   2970   2587  -1963    787   5338  -1747   4782   5562  -4411  10284  -1644 -11106  -6724  -7725   9547 -10039   9876  -6303   2900 -10588   2999   2981  -7309    765  -3072   5491  13723   5252   1992  -5602   5056   3451   2668 -11254  -4391  -3605  -4104  -1433    200  -5051   2039 ]
+[   4865   8066   4742  -7676   4238   6353  -8034   1045  10951   4241   4370   1005  10556   2359    799 -14866   2169   3931  -7588   -931  -6981  -2595  -5285 -17277   1246  -4909   2860  15416   3717  -2387  -6125  -1000  -2449   1361   1602  -8463   9517    234  -2265   4635   1201   3977  12015  -8558  -7620  -3378  -1632   6641  10981   -307  -6103  -3487   1459   7303  -2634   3078   3277 -11092    355   -347   9447  -2063   2562   4944  -8664   5205  -1532  -1539  -3274  -2201  10402    975  -1282   4340   1941  -7854   -592  12537   8922   2879  -5713   3746   7133  -8815   3116  -4426  -6597   3671  -3865  -3332   2807  -4981   7791 ]
+[   3267   1303  -3512 -10216 -10174   8477   2575 -10244 -12140    404 -14239   2655 -14805   2635   1027  -7342  -4343  11362 -13592  -1082  -5642  -1821    468  -4157   2902   1611   2448  16313  -6191 -10437   4099   2581  -5353   8919   3036  -2026  -2002  -2715  -7038   3114  14656   6522     26  -3481    443   4394    -62   1739  -6094   8184   5891   5975  -1028  -3734  -5782 -13213   6979  -1005   5010  -3462   8275   2944  -3349  -3739   4712  13296  -9619   -825   2707   -616   6392  -3795   4932   4872   3081   6805  13830   5730   8259  -4800  10391   1097  -5060   2032 -15349   7821   7920  -4291   4263   4951 -10347   1237   7242 ]
+[     83   7779   1195 -18146   1020   -696   6175  12811    596   5468   4468  -2354   1703  -3300   1163  -7977   1813   -799   9158    370 -10030  -6046  -6585  -1311  -1584 -10281  -3075  -1768  -6200  -1323  -2678    674  -3128   5765   1523  -3724   1969   9263  -5740    528  -4849   2615   -360  -1796   4302  -1607  -4760   2069   9570    471   5676   3519  -9435   1001   9123   5085   5580   3025  -5833  -1071    907  -1412  10843   1414  -4733   5385   1172   2546   4890   1545  -9210   1656  -4617   5848   8291  -6120   7826   7583   1014  -5200  -2450   4630   1136  -4911  13460  -8822  -6213  -5162   7251   6895  -6321   7508   1362 ]
+[  -2687   -281  -6781  -7164 -12051   5055   7161   4739  -8634  -1211  -5408  16026  -5969  -8052   2054   6952  -9874  -4443  -2065  -1882     84   -269  -9630   5651  -4456   5923   6832   1954    173 -13016   4942   2401  -8231   2582   2775  -5570  -8144   1222   2939   1667  14327     57   -273  -7744  13467   4879  -5297   7572  -8927  10151   9927   1311   4885   7073   5516  -8860  -3906   5406   1823   7159   3725   2277   6291   -735   3964  11941  -8632   6828 -12045   2994  11741    532  -8289  -1060   6247   4830  12411  -5322    641    266  10391  14262 -10079   5118  -6111   8989   8434  -3505    150  13750  -4168  10178  -3526 ]
+[   8227  -9933  -4322   2623    528 -10911  -1316 -15775   2866  -6440 -12463   2700  -4610   2593  -8560   1226  -1766    914   -877  -1783   3527   5451  -3882  -9151   8717   2120  -6954  -4605  -3091    128   7031    311   5709   -496   3010   -602   5540  -5079   3859  -6760 -10645   2035  -2112   5022  -5729   1367   4576   4371   4524   1987    679  -6540    786  -9846   2378  -9722   6747  -2554   1813  -5427  -2563   7938 -11753  -2941  -2786   2936   5542 -11491   2344  -2256    662   5049   2041   5493  -2417  10759  -5616  -6980 -11629   6191  -5134  -9503  -3026   2529   4256  -3332   7846   4719   2360  -7778   8254   5348   1805 ]
+[   3068  -1354  -4561  -7070   -454  -2514   4538  -4515   3488  -4350  -6999   3003   3037   5126   -784  12000  -2365   3228   3212  -6009  -7947   8055  -6202   -605  11769  -4169  -2492   8062  -9342    793  -4293   1804   -432   8012  10051  -2582   2207   5687  -1098  -8740   8600  -6593  -1434  -1168   9096   -883  -1537   1297   5705   4213   4293  -1585 -11697  -6828   5689   9203    532  -3025  -6672  -8692   3217  -4847   5022   9811   7788   8044   1680   2107   8282  -2321   2061    -32 -10926  -6689   4879   3602    387   3690 -13525   1613  -4012  -5938  -2959  -3605   3397  -6867   2323   2731   3139  -7016   -882   8585   3108 ]
+[  -3044 -10875   1870  -4653   2687  -9811   2073   7520  -5974    490  -9567   5359  -1975   3290  -4493   3129    274 -11319  11228   3656   6003   -684  -2395  -1112   3551   1448  -6434  -7608   -883   3943   3856   3897    210  -2982    572  -1269  -6917  -9121  -2891   5908 -13856   4234   -641   1296   3308 -10928  -2810   7341  -3081    -78   1734  -4323   7216    905  14565  -4719   2752   5396   -179   -598  -6763  13940  -6946    527   3823  -3995   8153  -3005  -9407   6925 -14542   7480  -7845  -2711   9118   9478  -4360 -10850  -6400  -3287  -7184    735   1851  13318   3633   4136    995   2187   -308  -6384  -5833     74  -5126 ]
+[  -6086  -8922   4433   -879 -11129  -4929  -3741   1898  -2162   8000   3643   3926   2207   5767   3131   9632   1991   5219   2220  -2044   7953   6222   6484    437   6640   2458   2990   7731   5296   4576  -5368  11307   4224  -4248  -1611    390   4448   8125    740   7823  -3298  -6519   3679   1453    529   2239   3058   4927  -3073  -5097  -3636   3065   4689  12298   -280   -278  -1983  -7482   -414   2910   6397   6030  -3346  -1863    -30  -6063   2835  -3108  -5180  -1345   5170  -1267  -6171  -4903   4119  15673  -2774   -933   4746   8032   1102   6295   1986  16600  -1505   1143  -2586   4516  -7229  -8761  -3725  -1797  -5054 ]
+[  -8515   5931    344   2906  -1694  10792  10761   5470   -609 -12678   8429  10015    977  -9749   2644  -4421   2389   3357 -11161  -4105  -8093  -7205    714  -3132   8445  -6936   6946   6405  -6674  -4714   5203 -12882  -4632  -3554   3757  -1072   3191   4831   1774  -1344   6631   -754   4063  10010    451  -9915   4931   -295   4277  -6301  -3041  10456  -5942  -4598 -17592   6826  -5942   4338  -3457   1772   5721 -14557   5613  16811  -4044   3299  -2005   4446  10461  -3342   2896   2109   2901 -13450  -9104  -7478  12088  11143  -8915  -7267   5933   8423  -3038  -2244  -6808  11253   5381  -8435  -1465   8466 -12175 -15105  -9089 ]
+[     -7  -1425  18570   6311   2358   1000 -12296  -4840  -2487  -2800   1693   7988 -10016  -4710  -5365  -4565   1492    777  -2280  -1935  -2950  -7688  -4951 -11896   6503   6506  -6889   5488   2600   -424   4397   3896  -1367   2290  -4497    132   3442  -3673   8566   2049  -6765  -2385   7578   9690   -381  -3467  11694  15691  -6041  -4434  -2733  -6890  12263 -20709 -10888  -2604   1069  -3542  17800   2606   7549   1177  -5515   2231  -7632  10466  -5819   3077   2584  -4315   2440   9615  -8013   4172  -4318  -3884   7333  -9378  -5418   2207   3697   1680   5913   -516   1456   3604  -2666   3208   2991   3751    897  15963   1057 ]
+[    640   4748   4094  -6181   9647  -5686   8691    979    755   6269 -12067 -10599  -6869  15017   8278  -5547   -836  -2037   4551   5257  -2746  -2596  -6653  13939  -1409   5785  -2377    997   1192  12425  -3465  12032  -2523   3206  -2271    383  -6488  -7274  -5301    936  10863  17409  -3917  -4193    248   2501  -6207  -4623  -4955   4992    513   -410   -690   3808  10272   4991   1451  -1285 -11216  -3907 -11529   7017  -4897  -5274   8300   1993  -4973   -708 -11061   3670  -4338   4203  -8623   -953   7558  -6613  -1201  -1740  -5050  -5072  -9074   -880   1548   2478  -4124  17147   2510  13495   6299  -8673  -1540  -3202   4397 ]
+[  -4198   5140   8144   1664   -726 -10398  -7350   9242   8992   4446   4628  -2198  10806   3469  -2847  -2160  -7760   2759  -7777    371  -6835   8578 -12648  -3487   4347  -1241   4054  10025   2752   5543 -10052   9904  -3768   7236  -7569  -4758    682   5509 -12334  -4431  -1027   9421  11390  -7525    945   7455  -1386   -671  -3562  12769  -1798 -10280  -5527  12040  11766   3702   2185 -12952  -4624   5015  -2136  10643  -5105  -7635    752   1997   8070  -5798  -3089  -8052  11262  -6840  -6196  -8211   4090  -8551   3601  11447   7918   -204   5304   6007    426  -4509   6203   2322  -2676   1366  -1355  -3744  -2435  -4875   -156 ]
+[  -9121  11555  -8234   6500   5269   7598  -2540  10004   7011  -1297   9154   -973  14121  -3795   3014   2485  -7557  -4755   6517  -1862  -2787  -4183    339   4903 -10372  -4902   9201  -2013  -1061  -6054  -4781  -3092   5832  -1759  -3712  -5535  -2180    598  -7057  -3986  -3715   -432  -4910  -2840   7896    247   3181  -7164  -6448   4791  -2799 -10740   -715  14852   5096  -2819  -1027   1502  -2009   6042 -10009    193   6560    636  -2489 -13730   5907   9569   -185   -392  -5174  -4901  14234  -4907  -2015 -10345  -4682   7047  10370  -1955  -2613   6804  -3167  -4590    238  -4717   -486 -11906  -6215   9078  -6628  -6601  -7899 ]
+[   6382   6602 -21596   4992   1445    609  -5122 -12997  -3813   -425  -8419   5382   3021   6256   8509  12631  -7446  -5442   3104  -1905   6847   1369   -431   3682   4455   -664   2852   2506  -2229 -11686  -5037   3572   7346  -4146   5849  -7143   1378 -13950  16313    887  -4487  -6787  -4081 -12162    444  -1517   4190   1429   8114   8235   2726  -7456  -4264   8799  -1787 -10573  -2296   -878   1525  -2776    640   6456  -1052   2122  -1850  -5770  -1912  -6830 -10140   -160   8091  -1791   4481   1017   7031  10827  -2926  -1486   6606   4156  -5709   1538  -4591   9057  -6638  -5823   8850   2938  -5063    458   6981  -6229   7362 ]
+[  -2155 -13611   9000  12266   1877   4370 -12464  -1435   2707   4646  10485  -7682   6705  -9084   3846  -6667   9415   6438  -4712  -7622   5018  -1169  11150  -9543  -3883   6714   1537  -1449   4741   1763  -5299  -2863   -750   5917  -4798   1802   -135    979    686    640 -21968    254   5020  -5618 -11119  -2629   2056  -8170   3639  -5811  -2615   1192    951  -1241  -5335  -1996  -2802   5650   3787   4118   7096  -8096    556  -2765  -6419   2660   -932  -2750   9470  -3556  11875  -4501   5594  13465     61  -4319  -1789   5260  12827   -733   5882   2745   9179 -13182   8329 -10944 -14443   2742  -3589   5472   7740  -6910  -1231 ]
+[   7148  -4471  10734  -5719   6278   6458   -759   -856  -3289  -4844  -8925   5050  -8555   8545  -2779   3527   -545  -1680  -7511   -331  -1845   5056   1071  -2892  11117   3342   4958   2625   1550   6140   3253   6845  -8122  -2676   2329   -781   6171 -19982   2062  -4377   3033 -10097    538  -9675   7923  -1478    178   8106  -2084  -6914   3190   4213   3219  -4127   2545  15841 -15538   -433   6479  11344   6254   3200  -4421   2032  11925  -2047   1032   6033  -3639   6480   5363   5567 -13862  -5180   2116   2730  -2116  -2841 -15829   6738  -3165  -8492   3011   4159  -3548    427   7339  -7140  -6287  -5326   3650   5230   5557 ]
+[   4331   3203  -1014  11849   3914   4422  11078 -10116  -2464   2638   -628   4833  -6197    575   6771   4783  -4968  -1764   2312   -151  -5540   1027  -9229  10483  10318   5783   5998   2086  -4313  -1471   1771  15987   6855   2793   1954   -966  -1331  -1528   7248 -16533  -4144  -4224  -6706  -2142  12084  -1158   9377   3953   -702  -1430   1458 -12887    -53  -4556  -2856    168   -274    851   8544   7280  -3531   1703   1818  -4877   4022  -3466    794   1362   7365   4398   1089   5016  -2058    605   9789  -1688   1871  -4709  -6088   1852  -7056   -362 -10697  -1955   1336   -589   1502  -8301   7860  14920  -3617   2946   4542 ]
+[  -7789  13322  15035  16704  10539   8490 -11056  18855  -1424  -1166  -1249   3793   9124   6744  -8622   8599  14710   2242  -1388   7276  -4147   3643   1714    912   1547   4207  -4231    232   6007  -2001  -9557   1420   3762  15390    286    808  -3028 -14678   4667  -2050  12285  -3438  12594    550   1263  -3342   5523   4518 -16328  -6234  -9340  -8223  -5436   4375  -5087   8280  -3898   -883  -4495   3344   5469    644   5286  12243   4484  -4356  -1087   8263  -7389  -5245  13141   4487  -4513  -5590  -7990  -8384   9526   2957   -165  -4326   6494  -4263   6586  -5703    -22   7854   -966   6861   1600   4204   4332    619  -6298 ]
+[  10721    589   7264    169  10737     93 -14969   -272   1809    246 -10719    262    686  10227 -14783  -6558  -7488  -1961  -1656  10951   2131  -4791  -4125  -8900  -7062   8509  -7202 -12826   6788   8933  13806   -105  -8139  -2564  -3725  -3807   3393 -10408  -2837  -2302  -2113   4743   5905   1892  -4431   5372   3028   4639  -2955   9530   6621 -12250   9290  -5218   7585  -6350   5692  -3927  18060   1221  -4988  14879  -9780 -13308  -6942   2072   5731  -3831 -13479  -3488 -10023   2722    219  14304   4498 -12031  -2983   -623   -491   4391  -6535  -7925   2782  -6131   3245   4378  -7938  -9812   1561   1723   4448   5665  10542 ]
+[  -2854  -8070   7610  -1982  -3974  -7413  -4327   8115  -5893  -5749   4904  -5165    302   7685   4011  16257  -4936  -8436  13336   1085   9240  -3069  -1446    -15   3520  -2430   -842  -4976   1306   6823  -5271  -2266  -5755  -2617  -2549  -9169   1048   3659   7599  -1749 -12792  -5400  -3242   3540    618   3718    905   -436   6160   2942   4388  -1887  -2406    -43  11230   2386  -3626   7751    497   3780    738  13845 -11533   3671   5987   5528   3374  -5950  -3205   -360  -3312   1250 -10721 -10043   1116   5220  -5317  -5956  -6668    438 -12492   1144   6172   7674   7894  -8981  -9028   9514  -5731 -21342  -6383  -2473  -6332 ]
+[   3889   3299   7379 -16189   4737  13341    -90   4160   4089    855   3640    589  -9991   -893 -12787 -12168   1969   7254 -11864   4690 -10696  -2367  -5226  -3792   3627  12649  -6550   2431  -4543   1101   8010   2125   -225   2537  -2800   -962   8287  -7540  -3106   2302  -1981  -7467  -2731   4807 -16949  -4448   9486   1314  -5157  -5996  -3490   5555  16157  -4059  -7526  -4165   7202   7054   5235  12623   3735   3108   9586   1562  -9058   -287  -6706  11028   8643   -956   1164  -6217  -5245   2015 -11838  -3775   5292   -118   1606   1035   3718  -3920   8095   4983   2949   6123  -3391   -552  -4904   7403  -9413  -1959    226 ]
+[   2056  12102   -330   6286   7269  -3552 -17097   6050   4431  -1535  -2896    -74   2528   4594  -4680   4890 -10115  -8938  -2646   2748   7146   5808  -5308  -5611  -4227   3375  -5743   1638   4268  -1543   4069  10754 -17251  -5466   2326  -6428  -4206  -7215   9183   -368    134  -5695   8279 -11974   1324  -4548  -7559   2779   2884   9608  -1612  -4274  -9286    323    169   4350  -4402  -5069   4708   3923   -839   6918   4776  10274   2551  -1965  -5757   1992 -13221    632   3793   3987  -9634  -6429   5742  -3984   -508   2463  -4363   3275   4338   3765  14351   5541   1260  10009  -9712   4187  -8538  -4110   1140  -8578   1241 ]
+[   7211  10275  -2037  -7374   7798  -4543   2470    409  -1912   1258   3366    776  -2658   4139   5715  -6294   -434  -9303  -5090   9149  -1979   2818  -4474    866   3510 -21126   -985  -3291  -2770  -1807   1052    898   2194  -7654  11031  -3099  -3174  -3824   5927  -5803 -15502  11993    374   5652  -2495  -1400  -2267   6030  13379  -3912   4480  -8187  -4014   8925  -1831  -3662   7906  -8270   1949 -16895   1640   2149  -1238  -2879 -14473   -566   5561 -18348  -8885 -14275 -17829  -2028   4444  -2424  18454  -8120  -2578 -10547   4991  -9522  -5037  10759    257   7184  15851  -5587  -4896   2574   9692  -2246   -949 -10203  -3289 ]
+[   2543   3731 -11093   -164  -6230 -17559   7150  -1240   4772  -2204  -3770   3586   6766   1063  -4433   4895  -3503  -6458   8632   1256  -2171  -4199 -12924   6454  -3327   4942    867     78   1932   3182    664   6141    203  -4940   3271  -1826  -6696   7543   1950  -4149   3665   3758   2453  -3263   4846  -3320  -3278    -51   7436  18212  -8353  -7156  -7182   1653  13834    254   4596   3594  -2123  -4729 -16912   1730  -2935  -1968   6335  -4430   2045 -16480  -5447  15086   5309   2990  -6055  -5951  -5065   4084  -4110   6049  -1798    -23 -15114  -5596  -8377   3857   -592   9780   5875   6768   9525  -5311   3776    857   1858 ]
+[ -11624  -2004   1026   5538   8363   5095 -16917  -9009   5311  -7034    989   6827  13011   2574   6279  -6222   8281    566 -12192  -9039  -5515  -3873   8468 -12364   1377  -2385   5881  12070   1484   -287  -5178  -4965   3258  -2565  11264   4648  -2793  -9850  -7416    -89  -7446    719  13910   3527  -7854 -10392  11270  -6574  -7381  -3979 -15328  -6891   8930   5804   2365    318  -2469 -11300   1727 -12491  -2990 -12364  -4233   5260  -4345    369   5464  -3859  -1464  -4208  -1603  -5546    164  -7975  -9107 -12532  -6370   1124   9971   -152 -10598   2058   3262  -5049   3953   -375   2637  18381  -2250 -10569  -5720    555  -8310 ]
+[  -2798  10504   7161  -2699   5501  -2046  -6707  -1661   9419   9339   6972   6045    785   6202   1609   4721  -3702  -9208   1863   6705  -3425  -2043  -7016   6453 -11274  13115   5374  11109  -1038   7439  -3009   4110  -7223  -5212    553  -3666  -1768    431   5364    833  18044  -3603   7880  -9638  13918  -2663  -1926   3445  -2269   -796  -5905  -5374   5624  -2559    493  10973  -4325  -4933  12444   4835  -4479 -12325   7734   4003   3111   8557 -10040   8387  -3946   5174   4517   -919 -15571  -6159   3993 -15006  -3629  -3643   2073  12521  -4983   1237   6287  -4296  -5523   3248    974  13167  -3623  -2794  14632  13435   9309 ]
+[   2327   7005 -13406  -6025   3650   1289  -2644  -9439   -558 -10367   5517   2310  -3465  -3688   9524 -18549  -9825  -5480 -14186   6534  -4473  -5284   1651    -77   9620  -2456   6854   5392    678   1525   3748   5521   5314   -981   6224  -6331  10601   -265   7105  -5322 -13309   4083   1463  -1370 -14210 -10938  12165  -8331  13503  12173  -9976   1509    429   7550  -4687  -7999  -6083  -2353  -2429  -4010  -4648   4289  -7533   2630 -12558   1284  -1370  -8408   4686  -7495  -5912   3904  -4736  -5188    -34  -9168  12584   2654   5575  -6925 -16020   8599   -642   7626  17112   4269    813   5449   2890   2403 -13304 -10306   5929 ]
+[  14688   1621   6481   1824  -1803  -1162  -1663   7968   4793   2200   2059  -7482  -5419 -23278   1802 -10548   4305  -3409  -3177  -1978  -1443  -1903   -539 -11270  -1270 -11165   -409  15812  13296  -7595  -8243  13048    590    827   -775   -570   2330  -2061   6830   7914  -2097   -896   6711  -1365  -1110 -10786   1204  16484   5447   -368 -11399   1065  -3658   7612  10937   6674  -4508  -3962  -1603  -7227  10145 -11760   5365  -4437  -3501  -4470 -11824  -6829   4165   5807  13003   7323  -1177   3543  -2756   4212  -1527    452   8180   1939  -3911  12926   5068  -7397   2629  -3283   -543  -4259  -5255  -4878   3367  -2906 -11655 ]
+[  -6242  -2829   1120   9571  -3158   4156  -2499  -9123  -5754  -6859   2086   5561  -3595   3876   6132  -1994    800 -11015  -1643   1848   8483  -3717   9177   -411   1264   1079  -7333  -4158   -680  -7573   1731   6401   3983  -5394   5391  -6009    530  10537   6343   5542  -3085   2758  -1175  13217  -3769   5432   9668   -983  -1479  -2940   3561   4506    641 -12129 -10414  -1290   3439   8144   5401   8156   1711  -2742  -2978    359 -13124   7922  -5848    442   3268 -14005  -3611   7144  -1090   9273  -9310   2898  13626  -1082  -3897   4033  -9429  11817   2774   7374   5901   -379  -2292   5111  -1567   4291   2266   6168 -12044 ]
+[   9953  -3812  -3927   4276 -10060   1768   8932   4429 -10288  -7869  -3805   5225  -3645  -1531  -2455   6196  -4023   4547    -85   6510  -4086   8807  -3084  14860  10289   3025  12418  -5254  -5558  -3131     15   1723  -3313   2830  -6581  -7328   3941 -10597  13909  -8053   2482  12456 -13998   -936   6969   -449    -26  -4624   2998   2965   -705   6376  -3671   9809   6376    -77 -10384  11464  -8088   9522   1436   5526  -6446  -2465  12901   3161  -1585   4076  -6323  -2192   6891  -4505  -1995   5363  -7978  10311   2079   4039  -2877   7804 -12013  -7103   -795   5652   3819  11655   6674  -4845    887   4495  -1652 -17786  -7339 ]
+[   5690  13134   7755  -4499   1841   8205    923  12661   5779   4583   8869   2534    711  -6997  -9242  -2415   1035  -6596  10204   -515  -9527  -7581  -7860   -994    243   7601   6068  -9201   9382  -4617   9443    351  -4566  -9640  -1270  -6363    650  -1914   3640  -2236  -5517  -6788  -5589   1908  13289    789  -2696   6768  -2073  -8569   -441  -3053   1341   2487    722   9762   2578   9838  -4034  13716  -3318   4526   4444   2359  -1628  -1628   6392   1765  -2689  11895   6390   5803  -3152     94   4791  -2907  -2674   8993  -8472   8425  -5749  -3009   1978  -7422  12590  -2802   2570  -3650   2088   -220   2126  12096  -2738 ]
+[   5429   9383   8062  15016   1484   -843  -6830  10048  10347  -2911  -3019   5153  -3509  -7243  -7512  -3625  -7150  -7137 -10708   1432  -2660   2337  -1288 -14183  -2378  -5217   3892   3239  -1010  -8309   6729   5186  -3926  -3896  -3747  -7987    218   -248   4287 -17972  -8371  -1737   5280    174  13422  -6936   7220  10843   1904  -6210   -358 -21278  -2740   4614    -25  -9962 -11941  -3419  10953  -6214  -4996   -834  -1202   1422   -353  -4368   3287  -5693  -2683   6216   9802   5756  -4850  -8279  -1133  -1773   -170  -3180  -5218   -608   7790   -960   3712   -190   -756  11045    910    864   7862   7341  14103   -161  -7992 ]
+[   -745   4443   2690   6822   2687   -534 -12003   3590  -6453  -3445   5060   6303   4909  -8196 -10209   6241 -11243   -891  -2529   2088   -859   -976  -4635   2260   -182    793    850  -4487   3198 -12081   2113 -16235   1154   6676  -6196  -2765  -2793  -9046  10963   1046  -4654   3220   1835  -1966  -2355   1154   3453  11217  -5532   8599   4846 -17469  14706  -3852  -8850 -13106   7015    418   9455  -3822   3840   7711  -6591   1021  -8400  -2432   -368  -6950  -5284  -4030   7519  -1095   7623   2193  -4453   1536    661   4870  14577 -10400  22417  -3096  -2753  -5682  -6117   1170   1731 -14469   9838  10053    596 -14369   1030 ]
+[  -3529  -2019   5801  13460   8323 -18536  -5716  -4042   3553   8247 -10093 -10532  -3364   2865    184   9986  -1006   2183   5990    686   5891  12974   9665   4774  -2257   3129  -9943  -8682  10144   7016  -7580  -2290   2607   2137    605   4624   1029   7845  -1517   3016   7956  -1684  10389   8379   1255  15367  -1315  -8705  -6092  -3718  -1333  -4069  -3482   7277   6566   1044   1055  -7044  -6248   -116  -7020   1381  -6024 -22236   6867 -15803   6747  -5722   6443  -2326   1184  -9287  13607  -4782   3171  -2702  -7786  -4714   2342   9412   4768    475  -3041 -10216   2379  -6066  -4397   8369    640 -20941  10091   7037  -1680 ]
+[   1272   1630  12925   2609   9999  -5745  -7648   5983  -9722    675 -10785    394  -9183   2919  -3376   9692   9850  -5782   7822   9619  -1679   5860   3480   8537   7535    371  -5228 -14794   2449   4280   -409   2294   8547  -1957   5397  -4211  -1361   -399   6774 -12753  -8015   3997  -4141   8953   -215   2995   8351  16521  -8007 -14723   5546 -13421   8383  -9666  -6515   -462   8804  -1252   1437 -10906  -3524  -5768  -4867   8550  -1127 -15191   -538  -5133 -11141   1597 -10591  12634    760   1946   1400  15459 -11228  -5530 -18061  -1006    662  -4193   5056  16956   9596  10106  -1644  -6309   7927  -6596   7343 -10234 -13541 ]
+[    492   3929 -13453  -2885 -11478  -8906  10531 -13383  -1206    843  -9174 -20555  -8335   6655  -6008  13036 -16456   6790   1765    219    904   -886 -10584  14329    399   7610  -4540   8723 -14245  -7010   3246   5906   -366   1256  -9971  11888   -252  -1472 -12957   3849  -1514   -819 -17763   -366   3519   3986  -1249 -11232   1369  16270   1681  -1284 -16015  -4079   5635    343   7147   2484  -5056   1883  -5071  12017   3550 -16294   6474  -4705  -6483   5623  16741   2694 -11547 -12245  12039   2707   -635   6347    888   9801   4502   3995   1938  -8778  -9662  -1369 -16274  -3898   1198  -6668   -837   5017  -9160  -4915   6252 ]
+[  10414   2130   1307   2614  13367  -6635  -2468  -7812   7272   5498  -7428  -9865   -598   3521   1363   2535  -6483   1525  -6469  -2417   1034   7891    403   2627    769   6593 -19143  -6013  -1093     90  -6811   7193  10668   8425  -4134    265   6750  -6765   4886  -7722    148  -4727   -735  -3235 -12844   6091   3068   2865   3042    680  10042  -4249   5689    384  -7275  -4502  11651  -7943   2997   2927  -2677      9   6221 -14205 -10001  -3190  -4897   -126  -1044  -7255   3088  -2871   1539  14972   1250   6384  -5627   -430   3698  -4422   3460 -10845  -8204   -336   3900    427  -6037  -5925   3047   2621  18696   -486   5860 ]
+[  -3170  -7914   3497  11735 -14377  -1018  10455    -52 -11289  -6928    554  -3503  -5125  -3519  -1011  12456  11686  11347   3978   5340   3517  12091   -193  -4949  -2955  -4942    464   6803 -11694  -4262  -8883   -655  -5028   1156   3332  -3143   2805   4156   3147  -3611   -234   5741  -3882   5466   1723  -9193  -3393    512    788 -10510 -13040   8116 -10822   8886   -979  -5997    872  -1911   -381   6486  10283   4214  -3431  10756   9519   2812  -3955   -904   4182  -3006  -3195  -1608   8690   2083  -8777  12449   5506  -2396   5658   8474   4633   4684   1726   6226  -2997  -2453  -7703   8042  -5337   5569  -6906 -22607  -6011 ]
+[   5038   8291  -1803  10741  -2698  -2243 -15634   9000  10495   4468  12050   6617   4370  -1709  -6147  14376   7220   1221   5198  -4159  11637   7715  -4566  -6004  -1734   3920  16669  -7019   6226  -1446 -12400   2230   2891  -1550   4709 -10795   5915  14213   8591   -279  -4391  -6374   -620  -5589   3085   5280  -2305  -2440  18720 -12434   2999  -8977  -2805   5757  -1365  -3158   2092   5951   3436  10834  10432   2392  -3806   3675   1039  -5905   3978  -9387  -4543  -4090  23191   2315  -3184  -6047  -1253  -3208   9262  -2958  -2505  13128   3488   7922  15050  -5618   6973  -2726 -15012  10918   1189  -5408  17724  -4472   1227 ]
+[   2336    983    423  10185   1772  -8669  -1520 -18234    979   7159    229    -97  -6004   5272   6745   9726   7452  -6513  17621  -6759   -465   -833   1137  -5019   7248   8731   -326   8581   5795    229  -9908  13651   6641  -4000   1717  -2063  -3771  12346  10943  -1816   7953  -3936  -4162   3014   1032   5798   6213   6909    758  -6110  -3843  -8534    986 -15481 -10284 -11205  13888     66   9613   2650  -2370 -11354 -10668    288   2477  -7903 -12821  -8755   3465   4339   4583  12501  14282  12662  -3288   6908  -1369  -4881  -5155   4847  -2751  -1690    780   4849  -6127   3508  -6003   9816   5263 -13467   6592   4332  -1103 ]
+[  -5791   5463   9896 -22375    475    483  10914  11692  -4446  -6520    908   2210 -11986   8079  -8529  -4596   9604   2936   6929  -5949 -15049  -4134  -2328 -14040  14767 -15082  -5012  -6572  -5040    -28   1861   9177    294  -1301   2486   -800  11038   -370 -14452  -5489 -11536   6171  -8743   6479   3022   3240   4398  10476    576 -11695  -2487   1956    344  -2420  13802   4808   4353   3787  -4065    887    436  11260 -10238    950  -3298   7903  11200  -6769   1142   2070  -3564   4928  -7457   2251   1416   1256   8219   4580 -15388  -3591    101  -3197    306    250   9456  -1244   7178   1747  12418  -2376  -8870  10114  -4777 ]
+[ -10450   6969  -2236  -8438   -727   1663  -3045   6792  -2958  15047   7574  -5628    654   6608  13180  -6637  -8723  -4141   7037   5803  -5626  -8088   3320  12677   3386   2879   4352  11321  -2238   3761  -8760  10327  -2779  -2177  -3827  -6200  11622   4117  -4438  12037  -3830   7225   1709  -9468  10016 -13316   -718  -8348   3992  13210  -8513  -2334  -4447   8643   5740   6751 -11181  -7020  -1329  -6551  -5747   9231  -3543   4649  -8969   3625   1520   6389   4466  -6627  -6648  -6792 -13583  -5243  15456  -6639   7138  14161  16455  -3971  -4925  13250   2511   -221   3003  -5048  -4363  11521   7773   1306  -3863    412  20093 ]
+[ -11993  -4278  -2551  -5692   -611  21193   1757   9754  -5469  14645   7361   8793   1363  -4983   1074   5616   5421   1228   5538 -14537   1287 -12718   9567   5179  -1451  -4176  14632  -4294   6506  -6155   8525  -5572  -5418   -405  -3804   -507  -3367   4556  -1901   5705  -7525 -11903  -1289  -2996  19388  -4623  -3675   2631 -11534  -9534  -3335   2704   5981   7009  11956  10627  -1213   7954   2650   6215   1251  -8896   8832   4538   2604  -1625  11380  11315  -4961   4634  -2049  -1383  -2282   2029   6913  -7681  -3104   1552   2554   1336   2154  14450  -3695 -10263   1021 -16559  -4022 -11898  -5474   6600  -4451   3523 -11687 ]
+[   3473  -8288   8445  -7429  -7572  13409  -7307  11388  -1283   -987  -1888   6146   8249  -1712  -3552   3005  -4342   9353   5840    628   6586  -3218   -824 -12199  -7349   8679   3473 -10343   7248   4889   6337  -6008   -836 -10323   -718  -3910   5589  -3815  -1334   1624  -7175 -10577   3091   -166   2973  12197   7886   9774 -11651   -127  -5118  -1471   7574   7869  -1669  -1308  -9064   7681   4594  13046   6114   4904  -2529   2274  -1789  -2448   4045   1342  -5627   3948  10568   3044   3676   -206  -1080    952 -11898    448  -9573  13773   -167   6847   1089  11148 -12923  -5020   7081  -8469 -12344  -7459   3560  14641   3367 ]
+[   2304  -4625  -3846   9609 -13193  -2984    -55  -1047   2528   1122   1609 -10959   7793  -9840  12383  -3760   3061   1172   1422  -7676   3378  -2935  15143 -16483 -12300  -7992  -1289    435  -2089  -4288  -3202   5685   4003  -3037  -5263   4372    380  14236 -12670   4140  -8751   7348  -5731   9026    -75 -10250  -1662  -6925   -779   5697 -10170   7410 -14169   3999   -759  -2737   4921  -3533  -2465  -3681  -2980  -6293  -5020    903  -4422  -4385    186   -130  11553  -7275  -8622   -754  20538   6338  -2859   9090    -86   4677   9507  -5480  -2037   2618    -80  -1520  -1650  -2585  -5930  -7058  -3810  -1090  -6935  -4240  -2700 ]
+[   -846   8460 -14553  14698   5320  -4527  -3922  -9972  -5412  -8148  -7536   8455  -5061  -3594  11752  -3054  -2567 -15379    519   4249   4261   4557  -1341   1120  -2734  -1231  14150  -5246  -1555 -13816   -578   4269   2111  -2800   7759 -13540  -7634   3809  13317   1443   5742  25313   2165  -9261  -1220  -4742  -9193  -8321   3287  -4613  -5236  -5645 -12788  -3912  -8283 -15834   1586  -3146  -6104     56  -2573   7811 -10036   3318   1379   5603   -644  -4969  -9984  -3145   5820  13364   4981  -1837   7482   4164   4508   1116  -3908    900  -1073  15190   5404 -10652  11461   9206  10542    448     38   3853  -5441 -14558  -9099 ]
+[ -10680  -5303   4345   2745    823  14849   6352   8553  -3630  10635   9177 -10241  -3682   6835    367    510  12723  17290   9497   5490   9570  -6895  20056   8192 -12794   3171  -5356   2328   5536   3858  -5793  -1750  15355   9511  11014   6473  -3738   3873   1865  -1267   6512  -4684  -9562  18636   3457   3326   1791   3748 -20489 -12761  -5840   6335   5080  -1344 -19229  -7843  16000  -2707   2433  -7340  -1305  -1946   6156  10116    131  -6758  -4327   2617   8313  -5832  -7891   4803   7883   -906  -1852   4330    340  -1923   6383  -3378   -560  -2905   5617   1797  -2254   1872  -8308  -6274   6294  -8347 -14671   -961  -4822 ]
+[  -7001  -7418  -9651  -1702   6931  -2019  -1189    187  13398 -17038   8391  10160   2607 -14087  -3290 -11875  -9153  -9394  -5085   -396 -10419   1666   4619  -3812   7107  -7203  -7001  -9286  -5532   -782   6967  -2592    915   3964   3152  -9990   7820   5177   -461  -6458   -240   4051  -3357   6210   3097  -6529   8231  -5066   8349   7278   9332  -1719   7925    159   4871  -2589  -6070   4342  -8533  -8784  -4967  -9921  10380   2660 -12995   9398   3465  11725   8605 -14222  -4664  -5963  -8417   4877     82  -7499    968  -4093  -5102  -4369  -5059   1592   -960  -2307  15013   8765   9038 -12632  -2560   6691   -713   4680  -7924 ]
+[   2370  -1640   4441  -5317  -4218   8567  -3008  10868   2881   4324   6053  -6013   6286  -9298  -7041   2237   5765    663   2633  -4270   4393 -11547   4921  -6270  -1299  -7996  -3813 -13937    287    572   5271  -6240  -1465  -9312  -4453  -6662   5540   9115   1271   3962  -7867 -12967  -9540   7142  -4001  -1499  -1355  -2735  13499 -16744   7681   3879    361   2569  13547  19200  -5406  -3384  -7051 -10689   5261  -6852   5311   2520  -8227   3227  17875   5908  -3406   6889  -4762  -3304 -11442   1622   -887   4252  -6024  -3727  -6704   5315  -7507  -2540   4846   1853  10793 -13775  -2705   1117  -7391  -4733   9587   2610  -4819 ]
+[  -5544  12341  -3946   1024  -5889   5122  20123  -1166 -10280   1869   -763   8858  -6525    361   2204  -5812 -13202   3391  -7670   -582   2726 -13830  -7570   7719  -5915  -7890   6289  -8543    673  -3482  19861 -17429   8691  -6652   1757   7944   1095  -2466  -8090  -7662  -5087   1944  -5353   5873   5326   8371   3464   3289   5506   2037   3404  -2443   1676  -4151  -7555   -407   2713   3498   8672  -6475 -18163  -5472  -6799  -7457  -9370  -3256  10485 -11583   6596  11335   1898  -5674  16231  -6077   5192  -2591  -1904  -4766  -5175   2444  -3940  -1784 -12999    222 -20663   -837  16311 -11095   9547  12850  -6895  -2927   8224 ]
+[   4923  -4648  -9444  -6998   -319  20404   3105 -12880  -2614  15383  -6603    786  -5432  14067   9975 -12854  -6092   2480  -5598  -3349   6455 -11959   4152  -4753   1493   2425   8596   8310   1657  -2169  14080   6958    220  -7439   4766  -3481  -1233  -1656  -2047  -1529   5455  -4603   -157  -1700  -6230   8012   6582  -9055   -752   4965  -9220   2178   1081  -3426  -7819 -15487   2341    561  11982  -1536  -6431   7530 -11508  -8266  -1451     -3  -5447  -8275  -6742   3314  -9141  -6233   8090   2507  -3415  -7147  -4367   3241   7864  -4068  -6541   9662  -2346   8747  -9451   6269 -13093   5983   4898  -6848 -15807   6317   1328 ]
+[   -364  -1769    321   4398   3551 -11996  -1902  11885  10978  -2268  -7471  -9984  -9531   8001    753   -803  -1258    943 -11159  -3423  -9159  11517   2847  -1254  -3801  -6711  -2295  -1264   -585  -2160 -15315  11387   -748  10385   5290    942 -12508   2777 -10345   -418    601   6880   3529   7897   4090   7796  -1483   7719 -11912   5176   2891 -11172  -2970   5769   8884  -7877  -2593  -2241  -8391  -9535  -3942  -7424   4483 -10332  11246 -12250  -4223   -698  -2898  -6494  10906  -5333  -3689  -4168  -2624  -2385   4652  -2768    935  -7270   4260   5452    568  -4739   7505   6081  -5253   3050   1861  -5867  10923  -5401 -15625 ]
+[  -6863  -3825  -3147  10067     84    647  -1380   3691  23127  -2970   4717   1707  17808   -195  -1525   7460  -2718  -8146   9445    817   3041  -3858  -2857  -6680 -17117   7997 -16667  -7034   6438  -1694  -1555   8740   7591  -7268  12908  12571 -14775   7587  -1954   8526  -4109  -4791   5535  10856   5711  -9632   1890   3245 -16565   5430 -15882  -7888   5588   7513  -3502   2537  -4983  -9226  -3523  -3351  -6348    339  15219  -5533  -8215  -3422  10467   2315   2674  -1896  -3850  -2266 -13532  -5291   1376 -12013  -1388    194   5002   6833  -9929  17232   3581  -4776   7501   3830  -4253   1920   -859   3567  -7755  14051 -14027 ]
+[   1252  -4442  -5363   5097  -3304   4628  -1709  -9107   4212   6610 -11996   9491    350  -6350  -2314  -4768  -7450   7167 -11367  -6004  11440   4133  16319  -2951   -684    -75  -2637   7557  10097 -13348   5827   5388  -3060   3987   8543   3002 -15507  -2542    664   7950   8145  -5992  -3335    455  -4754  -3783 -12224  -2565 -13372   5391   3042   5354   5385   -581  -9552 -15889   4599 -12870   7689 -14155  -7849   -373   8962  -5581  -7135  -8480  -4944   1977  -1712   -769    417  -1232  10347   8822   6367   5674   9305 -10661  16997 -11050  15798   5219   -887    936   2919   4510  -4094  -3328   2968  -2914 -12523   8155  -1978 ]
+[   8626   4927  14437   3626  -5255   5574   4214   5169     50  14085  -9133 -17224  -8912   8409  14321   -472  -5196  -4567  -5518    115    366  -4392   3019   8446  -1508   4991  11997   -283  -1127  -4932   8599   -103 -12776  -1940 -18776  -8454   2227  16489    -91  -7922   3114   4125   3745   1707  12905  13315   1199 -14726   -867   3359  11717  -1208 -14041   4029   -516    624 -15599  12239  -4049  -1814  -6442  12252  -5427  -6736   7953  -1505   5515  -1505   2954   4864  -9055  -4111  -2261    184  -1321  -4668   1420   8462    184  -3297   9338  -1219   2373  -1780   4830  -7967  -3469   6638  10688   2176   1766  13642    357 ]
+[   6953 -11973  14579  10816 -10517  -6135  -7533  -1199 -13060   1131  -4075  -1725  -9481   2973  -4111   5433   2428   5687   5122  -2842   4344   1840  -1929  -5469   -264   9175  -1689   2431  13396   6751   2717  20850  -6192   -348  -1145   3954  -8466   4579    367   2336   1311  -4315  15690   1530   7825  12955     86   7615 -16816   6590  -1331 -13438   2637   1676  -1556 -19757    658  -7624  18153   9327    729  16973  -9147 -17694   3540  -4787   1514 -18737  -7756   -535  12570   5358   3523  10733    482   5581  -3456  -8883   1569   4060  11215  -2207  -9378   6801  -4988   2420  -5617   2368  11446  -2764  -6671  12256   3977 ]
+[   4105   6634   2541   -174  -6070  -6456   1350  -9953  -1739  -1700   8432    427 -17616   6564   1295  -1737 -17346  -2469  -4163   3820  -2984   7224  -3016   6397  10090  -4636    459   4122  -3817  -2020   4412   9567   1447   1330   6088   2941  -2248   8805  12879  -6043  -2793  -1571  -5532   2611  -2970   7323   4232   4125   1115  -6799   3663  -3032    242  -2240  -1280  -5760    691 -11832   8971  -7733  -3292   1822  -3197  -9475   3049   5395   9153  -5007    917  -7347  -3943  -1763 -19866  -4087   1493   4066   3496  -8486  -3904   8289   3119   1819  -1156  13616   3782  -1256  -2658   5133   3541   3929 -15419  -3589  -5147 ]
+[   1505   3958   2889   9871   4673  -7198  -2477   6663  -3137   5548  14332   6023 -10521 -11507  -2037  -5759  -4919 -14794   -597   6114   3155  -9937  -8858   1395  -7262   2047   4414 -14592  15102   2404    640  -1558   -450   3534  -5024  -4927  -4029    726  10548   3302   2604   2777    482  12871  -6962  12873  -7373  11584  -4321  16399   5725  -7690   8901  -2271   4320  -7375  -5786   4036   7496   1029 -11892  13209 -11991  -9075  -9498    769   6770  -6741 -11036 -11641   4244    229  -6950  -1796  -2510   -379  10958 -19237    677  -2802   7096  10531  -2590  -2619  10743   2831    968  -3512   4386  -1749   2849   7399   1691 ]
+[   5038   1938   6745  -3998   8344  11529   -233  -6633    949   7095  -8812  -7291   8656   2680  10319   1601  18342  13246   1051  -8055 -14982 -10369   1717  -1992  -5536   6554  -9590  -8507   3654   8258 -11647 -13387   2533  -6861   8799  12717  -9319 -11840    281    321  12044   6769  -6434  15288  -9874   1727   -638   3350  -7945  -3425   8019   5595   2854    335 -11554   3612   2447  -6837  -1168 -12498   4257 -15264   -720  -2753   -671   -188  -3158  -1628  -5684    786   3717  -1858    939     65   1769   4143  -7036   7382   5530 -11376   6808 -12114 -14138  -7042  -2194   9001  -2728  -2811  13188  -4910   4235   -236   9634 ]
+[  -6260  -2891  20440  10463  -4500   4452    204   -451   -109   5742  -1076  -5284   4930  -3275   4179 -16548   8121  -5068 -11977   1437   1058  -6648  -3460  -6118   2873   3150    246   3945  17534  -4517   4284   3744  -7558  -3320 -20716  10722  12233  -4202 -10940  -6695 -10536   4997   8763  -2834 -11954   1545    716  -2792  -8082   4475  -8845  -1130   5288   5704   -705   1900 -10446  -6631   4115   5772   2516  12159 -13173   1797    599   7791  -5624   3012  -2520   5511   -341  11504   1482   9762 -15133    397   6290   3316   9168   -431   6243  -6077  -2166   2772  -3834   2236   5227   6724   -345   2936 -11912   7612   7392 ]
+[    -31   1001  -6103   3862 -12092  10223   5418   3749   1290   7894  -4339  -3172   4645  -9131   -310  12340  -3060   2240  -7674  -9162   9277 -12349  -4630   2548   -463  13490  13136  -3906  -4542  -1681  14813  -8337  -6411  -5820  -9890 -11087  12251  -4494  -4310   9372  -1585  -9469   -197 -10154   4823  -9678   4563  -1769   5798   7021   2550  -3601   -670   3345   6772   6187  -3234   6245   7035  14267  -1337  11272  -2593   8810    534   3508   6767   1459  -7361  15203  13976   2146  -2051  -4035  -4544   9675   1446   7853  -3603     23   4333  -5124 -12754  -1426 -17717  -3317  -3212  -5164  -5574  13297   3372 -13065  13944 ]
+[  -7233  -1577  10092  17775   2984   3879  -6649   -841   1377   1162     10  -2747    412   4923  -7913  -8223  -2360   7145  -4571   4734   9649  -3993  -4713   1433 -13905  -1995  -3981   7042  10814  -1815  11993 -10360  -1485  -1155  -5981    854   3794 -10549  11293   7062   4826   4194    473  11038    -56   8268  -3149   3607  -6980    962 -12406  -4295  11702  10010   -998  -1965  -1129 -13000   8077   2684  -1245  18643  -6719  -4419   2719   7784    212   6421  -5062  -4787  -2780   7684   4372   -773  -7653  -5899  -1245 -13722   7367  17541  -9543    287   7708  -1292    364   5307  -1930  11530  -1705  -6242 -13089    328  -1044 ]
+[   8501   4852  -8038  15583    402 -16032  -1813  -5844   1218   9509  -3200   4005  -1559   -442  -4431  11874   3134  -7042   1691   8124   -675  13899   3568     55   6487    239  -5375  -4603   3767    647 -11138   3634  18198  -3345  -2112   4286  -3901    981   9586  -1693    206   -570   -890   3730  -2360   -953   2402   3168   7475  -3567  -8338  -8644  -9847   6968  -2333    356   1335 -11635  10151  -2309  -6257   -517  -4650  -8239  -1324 -16081  15517 -16041   8649   2944  -2120   4542   9215  -9738  17838   1350   1779  -4414   1613    -91   1117  -4634 -10556    -32   7495  -4351   4979  -9243   3382  -8082  11099  -4369   9098 ]
+[  -3869   8295   3281  12910   5714 -12377  -3487  -3346  10134  -2455  -1252  -7233  -6151   2894   5266  13389   2164  -5705    774  -2991 -11591   5827  -7552  -1330  11632   2017  -7113   4680   3030   6829  -8206  16717  -4462   2903  -1063   7063  -2626    119  -5388   -863   5340  -2716  10375   -712  -5012 -13444  -8011  -5867   2698   1160  -1296  -6547   5221   3185  -6104   1532   2588 -10047  -2997   2553  -3838   1007  -1443   3664  11607  -2759  -1356   4003   1969   -972    993 -12723  -7014  -5527   5089  -3042  -8149    533   -129  -2249   3502 -12086   9792 -11095  -6019  16577  -9753  11738  -4353  -7042 -11508 -13485   -215 ]
+[   3532    224  -9703  15692   2609   4406   5518  -5543  -1557  -3056   2612 -11201  -2313  -2876  12483 -10760  -4171  -8919  -7619   1534  16621   2215  18168    107  -4648 -13357  -4372  -3353   3531  -9822   2609  -4378    588  -9297  13059  -6745  -2254   -579   4072  10587  -6215   3987   4634  -4052  -4217  -1006  -7508  -7849   7638   1062  -7609   3896  -4429   7023 -13962  -3956  -5189   1272  -2494  -7427   -530    561  -2209  -8989   8054  -7315  -2236 -15094   7830  -1238   2701   7037  15243   -243  -3131   1787   -677   1360  14694  -8732   3055   3044  -8508   -238  -4638  -7229  -2661   -958   2918  -7844   8328 -11774   2603 ]
+[    692    402 -14898   2070   9935  -1342  24912   2328  11225  -2649    -81  17572  10030   5191   4173   7240   3059   3497   -978 -12164  -5386   7228   3264   1953   3924  -4146    229  -5298  -1512  -6409    511  -1385  11696  -4289  24045  -4509  -4462  -1524  11997  -6930  -5063 -14676   1905  -1791   5121  -5623  -5055   2150  11430   6915   4066   7668 -10447   7691  -4280  -1871   3641   1948   7326  -7424  -3619  -7674  10197   6425 -11247 -12628  12013  -6718   7768  -4538  15800  -8167   4158  -9718  12504    812  -1704   -728  -4374   -830  -7821  12256  -7874  -1584   5790  -4849   7024   2683   2320   3700   -318  -5721  -2046 ]
+[   1527  -7594  16424      1   4264  -1121    154   4423  -7566  14235  -8389  -8807  -4066  -3164   4793 -10276  14552    681 -12713   6808    561  -5604   -130  -4604  11655   3763    673  -1724  -1640   2704  -4129   -429  -3083    641  -4934  -4805   2039 -16745  -5638   2989 -15073  12082  18214   5093 -14940  -1644   5541    132   2222 -11143   4521  -2618  -9141   8859   6515   2911   4985  -1114  -2444    837   2265  10247  -8545  -5648 -12461  -1781   5371 -12355   6358  -1093  -3948   7040    697   2967   -971   4962   1272  -1096   5424  -7929  13490    671   4400   4754   6680 -11885   8729  -1135  -5257  -1416  -8335 -10651  -1490 ]
+[  -2506   9645  -7150  -9841 -10068 -10360   1507  11093   7461  12733  13734   3092   1821  -9878  -3998 -10094  -7807   -891  17226   1630   7586   -701  -8570  -6703   5255  -8689   4065   2864  -5910  -9947   1227   2268   1171  -4437  -6807  -9555  23388  13065  -1146   1447  -5779  -8149   2020   5114   1873  10090  -4722   1584   8855   2614   8181     89  -9273   7186  14808  -5162   2692  -1211 -14392   8932  -1518   4691   4944   7084 -11142  -6204   -461   6519   1552   8335   1305   2307   5720   1804 -12915  12316   5114  11721  -5504  13963   4606   4581  -4482   5648  16843  -7882   -451   5958 -10962  -2341    369  12015  -7965 ]
+[ -10929   7490  -2298 -19210   1269   1406  10512   1286  -1103   7864   8578   1377  -1862  -3992   2096  -8296 -10904  -5716   4864  -2304  -3866 -14355  -8766  11833  -9138   1541   2407  -4479   3097   8629  13814  -6662  -9861  -9340  -6351   7331   5321    571  -4989    122  -1042 -16301  -5522   2410   2400  -4490   3039    145 -12875   1915 -11709   1748   4954  -4486   6627  14240   3865   4822  -9428  15669 -13531    402   4424   6793  -7496  -2523  -9192   8641    237  13057   -990  -5093  -5157 -13944    433  -6780 -13495  -1624 -12089   4425 -13917   1274   1727  -4887  -9663   5041   1426   3601  -9670   -743 -13630   -112   2982 ]
+[  -4470  -2148   2774  -4874  -5868  -9136  -1388   3364  -5443   7642   1457  -3077  -5572    951   6501  -5764     19  -3908   1260  -2495  -4540   6943  -9464  -4861  -4887  -3728  -6905  -3707  10630   3448   2877   8770 -19169 -14070   2409  14708  -7117   6896  -4173   7250  -7404 -12869   5327  -8868   2403  -1731   7721  10210  -7954   -565  11063   7537   8244    487   7874  -5293  11177   1756   8259   5524     18  -9716  11910  -7811   -968  -1412  -2378  -6373  -4805  10966   3600   -759 -11460  17989   6847   2758  -2385   2024   1279   9193   8503   9921   3715  10856  -4969   1745  -1064  -1736   -702   -595  -7505  -1373  -2253 ]
+[  -9559  12108   9022   2226   2631  -4506 -10249  -6501   3791   3125   6093  -5698 -10233  -1775  -3814  -6973  10585   1144  -6358   -253 -14251  -4630  -1160  -4834     98    441   1312   8032   1334  -9664 -18733   3931   6673  12609   2779   -495    945 -10827  -2822  -9607  10126   5241  -1745   6775  -1638  10376   -834   7350  -1575 -10825   8951  -1366   1320  -2876 -12077  -9655   9173  -9980   1393    190   1094  -3346  -5069  -5230   -330   9186  -5073   3666  -5970  -5588   7668   -191  -2714  -1548   1989   2249   6379    121   7257  -9048   9203  -8636   -733 -11453  20317   5924  -1335   6474   8356   -566   4190  14112  -4790 ]
+[  -1786    618   5177  10378   -560   1147   2491   4500   7283   -121  17714  -6164   8503 -15896   3805   8878   2058  -5117  -4846  -5751   9598   5055   3991  12300     39    229   6915  -4578  -1088   4605   1539 -14299   3511  -5495 -10319  -9781  20646  -9155  13070   1239   4371   5146  -2913  -6288   2069  -7708    359 -10449  17266     87  -2989   8170  -9344  16711  -4858   8798 -15903  -6474 -13838   2617  13333  10929  -2829  11836 -12304  -1038   8776   5602   1520  -5425    566   1947  -3101  -7594  -2208   1408  -5457  -2037  13345   5373  12776    491   6834  -3853   4564  -4384   3163   2873  -1377  12958   8481  -7024  12566 ]
+[  -4624  -2731   5947   5869  -8638   3972  -4226   1111  -1336   4156   1945  11281   6174   4942   1508  -4771   6570   4940  -1491   9008   9914  -2678   2319  -6123    478   4229   8324   8501   4124   6372 -11611  15490  -7537  -8283  -5032  -8319  -2109   -379    -38   3439   9630   7702  13392  -6891  -3206  10269  -3484  -7279   3887  -4220  -8668   2712   7240  15294   9480   3518  -6848  -4303   4107  16594   1787   8552   5789   1915   1024  -6214  -4604   3405 -10487  10832   6561  -2215  -4803 -11964  -8803  -5478   -765  -2672   1881   6235  -8737   3980   2004  13618  -7307   9480  -2847   9447 -12659  -4623   5627   4040   7399 ]
+[  -1029   1980   7474  -3207  10654   7312    136  10621   6547   9338  11794   4941   2868  -4857  -7091   2072  10482  -6011   6617   4676    635  -8814  12253  -4280  -5462   6285    957  -6330   8404   4290   5449  -6344   8029  -7924   4862  -1805   6233   -146   7995    971   1253 -18506  -4553   9104  -8643  -3211  -6346   4393  12765 -19207  -1599     58  10727   9232    839   3108   4155   -833  12330    634   4689 -15063   9470   3953  -9545  -9163   4296   5546  -4104   3355  -4148   -871   2750  -5420   2610   -375    145  -8626   7467   5394   1009   9517    617   2438  13989   4095 -10733  -9961  -6386   -288   3810  -7410  -1300 ]
+[  -4966   2138 -13922  -5050 -11569   5180  -3331  -4807  -5197  -3823  -2893  10074   3098  11642   6163  14542 -10841  -4159  -1735   3188   9157  -3382 -12690   6997  -4875  -2458  16392   6284  -7855 -11811   1610  -3535   3483  -1265  -4672   -778  -2178   -468   4533   7573  16916   4045  -6999  -7894   6545   2027   3552  -8540  -3019   2212  -9716  -9636   -748   -163   3853   4940    143   6028  -7068   8859   2250  -2553   -290    803  -1537   4373  -4959   8918  -8288  -4619   3097  -7932    773  -6200    842 -12750  -6184   -688  -6788   5961 -19080  13126  -8526  -1156 -13932   -707   9673   2871  -9659  -5370  -4642  -6417  -2748 ]
+[ -11944   8397  -2956   9838   -365   -879   3235  -7983   9049  -3746  14322   2624   1119    389   7002  -6883 -14493   4391   1850  -6072  -1003  -4951    227  -6265    548  -6133  11599    484  -1188  -5567   3802  -4433  -5656 -10657   2791  -6947   4907  10662   8510  -8606  -4858  -1825 -15136   7665   3296  10316   1297  -4113   5612   -582  -4041  -2598 -10671   8660  -8109   3677 -16381   -449  -9577   2835  -5339   2620  -5035   3415   3054   6070   6157   1513   -341  -7311   3866  -1428  -1444  -4167   3839   2455  -2395   4581  -9605  12707 -10667   9900  -3363   2045   7254  -2501   9931  -1807  -9076  -4235   -968 -10754  -6714 ]
+[ -10209   4387  22584    659   5067   2578   4500   7889  -6032  -9716   9722  -3696 -14944   6151 -12913 -17891  10755   9721   4723   5458  -7080  -4543   4718  -1975   9113  -2038  -5911  -1133  -1903   5239  11567   1702  -4937  13386 -12236  -3895  13404   7439  -2608  -2784     43  16310  -5107   3785  -5271  18942    514   3914  -9581 -10723   -349   8889     70 -15833  -5740   5499   8526    480   1588  11698  -1333   9540  -4020   6002  -5426   8556   -969   6739   3123  -2571    477  15591   1105   6127  -8057  -6132   9129   5030 -13204   -780   4801  -1857   7664  -3985   7353   2676   8518   1994    625   -428  -8016   8091   -108 ]
+[   3448  -3756  13660  15287   5573   -601  -7871  -1871  12088   8924   1026 -17154  -3835   3911   3623   1078    267 -11536   6940  14495   7238   1778  13326   2606   -447   3878   6045  -8735  14623  13280    376  12935   2335  -5199  -8582   6053   -895   9455  -4526  -5840   2446   9970   3906   3611   8205   9213  -3549  -4408  -9221   2002 -10522  -5007  -6751  -1031   -372   -190   -234  -2013   7595  -5823 -13446  -4771 -10405  -6328   3326 -19090  -1000  -2610   -399  -5678 -10031   4560   8059    391  -9917 -10550 -16831    339   3635   1644    954   -750   5903  -6087   2357  -3228  -9595  -1175   4608 -15635   3121   3163  -4678 ]
+[  -2941  -5394   7457  -3964 -15416   1308   -371  12245 -14306   5194  15414  -6277  -4051  -1118   4185  -5563 -17315  -1799    684   4707   2644  -6402  -1229   3173  -2068 -11319  15750   4250   9534  -3246  -4800    847  -4849  -1278 -18931   2899  -1322  10469   4315  14970  -8881  -7562   1067  -2136   4448   3872  -2424   -339  -5796   -293 -12366   3411    893   8805  -3317  -1918  -7335   7024  -1156  20017   1049  18320 -15357 -21531    185  -3582    155  -1577   5269  -3202 -10195   3128   2383   6227  -7528  -3602  17204  -5066  13738    203  -8579   8106   7676   1722   3032 -18053  -9896  -6418   3608  -2340 -10969    617  -5360 ]
+[  -5357   9075  10361  16493   9553  23798  12015  -3000   6704  -6610   7367   -635  14364    612   9863  -9992   3789    769   -115   2051   9577 -10488    746 -18466  -3132  -3087   2320   7923   1745    363   -344  -8046  -4800  -9365   1800  -8190    903   4931   -235 -14795   8843  -4549   3692  -6077  -5953   2803   6006  -5226    164 -16418  -7512    118   8498    683  -8138   7043   2494   3115   3156   1585  -1701 -10361   6926  15831  -6005   2941   2100  12202   1734  17579  10806  12316   5762  -5759  -3796 -14175 -11433   3894  -7522     49 -10363   8203  -6793 -11273  -8685   2691  -3071   6537  -9249  -4065  -4731  -2514  -5076 ]
+[  -3593   5605    199   1835  -1081   3456  -5678 -13144   7708   4878   4550 -10518    -55   4172  12301  -4804  -8875   -216 -10965    872   5456  -4103   5228  -2894  -8098  -1004  -6712   9833   3513   4432     61   5508   2105  -6793  -2585   2939   9648  -4956   3233   1044   5766  -4854   4175   -705  -5509   1513  10132  11365  -7531    745  -1715   1065   2439   -438 -15249   5658  -4521 -21363   4764   -703   3697    164 -10334  -2525 -15624  -2606 -11983   1520   1264  -3147   7484    701   2605  -2017  -6455  -2808  -2680   2147   9830   1603   5314   2042   2499  -2357 -12826  -7623   -431   2719   -126  -8250   6022   2324   7561 ]
+[  -5150   8578   3652  -4785  -8358 -10992    -57   3438   3243   6461   7099   7602   -829  13277   7576   4238   3391   2721  13521   7498 -12098  -2733 -14414   3225   3204 -14895  -2200  16547  -6744   7648 -18430   7500   6109   3786  -3938  -6122    698   7024   3807   4311   5398   8533   -722   6975   2664  10695    830   2234   -283   3016  -4882  -4137  -1768   4845   4953   6719   3962  -5723    824   7045   6871   2571  -1057  10053  15776  -8825   6404  -1304  -2314  -4175   1848  -5366  -1654 -14022  -2100  -4403   3436  -2361   3631   1686  -5994   2887   2531  13162  -5113   -616   -447   5205  -4553 -14822  -9048  -4766   2624 ]
+[   1818  11834   5992 -10658   2005  -3431   1169   -906   3655   5306  -5113  -8343  -8659  -5163 -10770 -19553   3991   -382  -2940   6960 -11924 -14688   3483  -6091  -2092  -2130  -4451   2879   6843  -9123   8961   2985  -2514   7337  -5443  -3884  19474   1293  -5115  -5779  -7893    938  -2626   1063  -2189   2526   8510   -722   4826   1561  -3127  -6611   1077   6743  21838   1045   3973   1692   2932   3381  -9615  -7352   5825 -10582 -18479  -4544  -6248  -8071   7445  11320   3273   8176  10621  19807  -9333  -2578  -2908  10029  11959    973 -10996 -11243  -2674 -15912  13679  -7769  -4773   2292   6109   8502   6842   7030   1384 ]
+[  -1459  -5402  17707 -13459  -5776   9754   5575   5356  -4607   2420  -7654  -4940  -6750   5644  -3628  15015   -294   3689  -4008  -4760    654 -10437   7283   9309  -2699   4997  -3920   2874  -8599    520  10439   5695  -1320  -4316  -1471   3577  -2770 -15291 -15181   2518  -6967 -15328  -7635   1863  10917  -3128  -5396  -3252 -13007   6285   5209   2579   7659    903   8177  23607 -11320  10753   8984   2296  -2316   4571    380   1154   4680   5738   3145   3295   4634  14279    735  -4700 -15484  -5458   -126   3998 -14441  -1143  -3238  -6835   -841 -12941  -5367   7584  -6326 -14128   1738     69  -4063  -4409  -5265  18616  -2464 ]
+[  -3637   5897   7559 -10550  -6195   4376   5850   8555  -2911   2960    926 -12050  -7916  -2097  -4741   3563  -5285   -276    854    392  -5185  -6222  -2239  -4264  -8594   5258  -2122   5294   4072  -5025   8600   2003  -1203   3772  -7920   2206   1730   2353  -3287 -12870   3253  -8185   1955    405  16529  17535   8825   9434  -3685   3942   1908 -10830  -3730    143   8896   -429  -8999   6430  -3125  -4467  -5190  -1638   7690   -991   2742  -4236 -10373   2923   6364  12513    221  -4653  -2863  -7882  -5342  -5392  -2851   2844   3305   2083  11402  -5704   -589  -2505  -1667  -2581  -2024   4932   8101   5292   7982  18850  -3324 ]]
diff --git a/tests/test_bkz.cpp b/tests/test_bkz.cpp
new file mode 100644 (file)
index 0000000..a2d6b2f
--- /dev/null
@@ -0,0 +1,391 @@
+/* Copyright (C) 2016 Martin Albrecht
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "io/json.hpp"
+#include <cstring>
+#include <fplll.h>
+#include <test_utils.h>
+
+using json = nlohmann::json;
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+using namespace std;
+using namespace fplll;
+
+/**
+   @brief Test BKZ reduction.
+
+   @param A                test matrix
+   @param block_size       block size
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision if mpfr is used
+
+   @return zero on success.
+*/
+
+template <class ZT>
+int test_bkz(ZZ_mat<ZT> &A, const int block_size, FloatType float_type, int flags = BKZ_DEFAULT,
+             int prec = 0)
+{
+
+  int status = 0;
+
+  // zero on success
+  status = bkz_reduction(A, block_size, flags, float_type, prec);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "BKZ reduction failed with error '" << get_red_status_str(status);
+    cerr << " for float type " << FLOAT_TYPE_STR[float_type] << endl;
+  }
+  return status;
+}
+
+/**
+   @brief Test BKZ strategy interface.
+
+   @param A                test matrix
+   @param block_size       block size
+
+   @return zero on success.
+*/
+
+template <class ZT>
+int test_bkz_param(ZZ_mat<ZT> &A, const int block_size, int flags = BKZ_DEFAULT,
+                   string dump_gso_filename = string())
+{
+
+  int status = 0;
+
+  vector<Strategy> strategies;
+  for (long b = 0; b <= block_size; b++)
+  {
+    Strategy strategy = Strategy::EmptyStrategy(b);
+    if (b == 10)
+    {
+      strategy.preprocessing_block_sizes.emplace_back(5);
+    }
+    else if (b == 20)
+    {
+      strategy.preprocessing_block_sizes.emplace_back(10);
+    }
+    else if (b == 30)
+    {
+      strategy.preprocessing_block_sizes.emplace_back(15);
+    }
+    strategies.emplace_back(std::move(strategy));
+  }
+
+  BKZParam params(block_size, strategies);
+  params.flags             = flags;
+  params.dump_gso_filename = dump_gso_filename;
+  // zero on success
+  status = bkz_reduction(&A, NULL, params, FT_DEFAULT, 53);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "BKZ parameter test failed with error '" << get_red_status_str(status) << "'" << endl;
+  }
+  return status;
+}
+
+/**
+   @brief Test BKZ with pruning.
+
+   @param A                test matrix
+   @param block_size       block size
+
+   @return zero on success.
+*/
+
+template <class ZT>
+int test_bkz_param_linear_pruning(ZZ_mat<ZT> &A, const int block_size, int flags = BKZ_DEFAULT)
+{
+
+  int status = 0;
+  vector<Strategy> strategies;
+  for (long b = 0; b < block_size; b++)
+  {
+    Strategy strategy = Strategy::EmptyStrategy(b);
+    if (b == 10)
+    {
+      strategy.preprocessing_block_sizes.emplace_back(5);
+    }
+    else if (b == 20)
+    {
+      strategy.preprocessing_block_sizes.emplace_back(10);
+    }
+    else if (b == 30)
+    {
+      strategy.preprocessing_block_sizes.emplace_back(15);
+    }
+    strategies.emplace_back(std::move(strategy));
+  }
+
+  Strategy strategy;
+  strategy.pruning_parameters.emplace_back(
+      PruningParams::LinearPruningParams(block_size, block_size / 2));
+  strategies.emplace_back(std::move(strategy));
+
+  BKZParam params(block_size, strategies);
+  params.flags = flags;
+  // zero on success
+  status = bkz_reduction(&A, NULL, params, FT_DEFAULT, 53);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "BKZ parameter test failed with error '" << get_red_status_str(status) << "'" << endl;
+  }
+  return status;
+}
+
+template <class ZT>
+int test_bkz_param_pruning(ZZ_mat<ZT> &A, const int block_size, int flags = BKZ_DEFAULT)
+{
+
+  int status = 0;
+
+  vector<Strategy> strategies = load_strategies_json(TESTDATADIR "/strategies/default.json");
+  BKZParam params(block_size, strategies);
+  params.flags = flags;
+  // zero on success
+  status = bkz_reduction(&A, NULL, params, FT_DEFAULT, 53);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "BKZ parameter test failed with error '" << get_red_status_str(status) << "'" << endl;
+  }
+  return status;
+}
+
+/**
+   @brief Test BKZ_DUMP_GSO for a matrix d Ã— (d+1) integer relations matrix with bit size b (copied
+   from test_int_rel)
+
+   @param d                dimension
+   @param b                bit size
+   @param block_size       block size
+   @param float_type       floating point type to test
+   @param flags            flags to use
+
+   @return zero on success.
+ */
+template <class ZT>
+int test_int_rel_bkz_dump_gso(int d, int b, const int block_size,
+                              int flags = BKZ_DEFAULT | BKZ_DUMP_GSO)
+{
+  ZZ_mat<ZT> A, B;
+  A.resize(d, d + 1);
+  A.gen_intrel(b);
+  B          = A;
+  int status = 0;
+  // TODO: maybe not safe.
+  string file_bkz_dump_gso = tmpnam(nullptr);
+  status |= test_bkz_param<ZT>(B, block_size, flags, file_bkz_dump_gso);
+
+  if (status != 0)
+  {
+    cerr << "Error in test_bkz_param." << endl;
+    return status;
+  }
+
+  json js;
+  std::ifstream fs(file_bkz_dump_gso);
+  if (fs.fail())
+  {
+    cerr << "File " << file_bkz_dump_gso << " cannot be loaded." << endl;
+    return 1;
+  }
+  fs >> js;
+  int loop    = -1;
+  double time = 0.0;
+  for (auto i : js)
+  {
+    // Verify if there are as much norms as there are rows in A
+    if (A.get_rows() != (int)i["norms"].size())
+    {
+      cerr << "The array \"norms\" does not contain enough values (" << A.get_rows()
+           << " expected but " << i["norms"].size() << " found)." << endl;
+      return 1;
+    }
+
+    // Extract data from json file
+    const string step_js = i["step"];
+    const int loop_js    = i["loop"];
+    const double time_js = i["time"];
+    // Verify if loop of Input and Output have loop = -1
+    if (step_js.compare("Input") == 0 || step_js.compare("Output") == 0)
+    {
+      if (loop_js != -1)
+      {
+        cerr << "Steps Input or Output are not with \"loop\" = -1." << endl;
+        return 1;
+      }
+    }
+    else
+    {
+      // Verify that loop increases
+      loop++;
+      if (loop_js != loop)
+      {
+        cerr << "Loop does not increase." << endl;
+        return 1;
+      }
+      // Verify that time increases
+      if (time > time_js)
+      {
+        cerr << "Time does not increase." << endl;
+        return 1;
+      }
+      time = time_js;
+    }
+  }
+
+  return 0;
+}
+
+/**
+   @brief Test BKZ for matrix stored in file pointed to by `input_filename`.
+
+   @param input_filename   a path
+   @param block_size       block size
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision if mpfr is used
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_filename(const char *input_filename, const int block_size,
+                  FloatType float_type = FT_DEFAULT, int flags = BKZ_DEFAULT, int prec = 0)
+{
+  ZZ_mat<ZT> A, B;
+  int status = 0;
+  status |= read_file(A, input_filename);
+  B = A;
+  status |= test_bkz<ZT>(A, block_size, float_type, flags, prec);
+  status |= test_bkz_param<ZT>(B, block_size);
+  return status;
+}
+
+/**
+   @brief Construct d Ã— (d+1) integer relations matrix with bit size b and test BKZ.
+
+   @param d                dimension
+   @param b                bit size
+   @param block_size       block size
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision if mpfr is used
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_int_rel(int d, int b, const int block_size, FloatType float_type = FT_DEFAULT,
+                 int flags = BKZ_DEFAULT, int prec = 0)
+{
+  ZZ_mat<ZT> A, B;
+  A.resize(d, d + 1);
+  A.gen_intrel(b);
+  B          = A;
+  int status = 0;
+  status |= test_bkz<ZT>(A, block_size, float_type, flags | BKZ_VERBOSE, prec);
+  status |= test_bkz_param<ZT>(B, block_size);
+  status |= test_bkz_param_linear_pruning<ZT>(B, block_size);
+  status |= test_bkz_param_pruning<ZT>(B, block_size);
+  return status;
+}
+
+int test_linear_dep()
+{
+  ZZ_mat<mpz_t> A;
+  std::stringstream("[[1 2 3]\n [4 5 6]\n [7 8 9]]\n") >> A;
+  return test_bkz_param<mpz_t>(A, 3);
+}
+
+int main(int /*argc*/, char ** /*argv*/)
+{
+
+  int status = 0;
+
+  status |= test_linear_dep();
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 10, FT_DEFAULT,
+                                 BKZ_DEFAULT | BKZ_AUTO_ABORT);
+#ifdef FPLLL_WITH_QD
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 10, FT_DD,
+                                 BKZ_SD_VARIANT | BKZ_AUTO_ABORT);
+#endif
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 10, FT_DEFAULT, BKZ_SLD_RED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 20, FT_MPFR,
+                                 BKZ_DEFAULT | BKZ_AUTO_ABORT, 128);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 20, FT_MPFR,
+                                 BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 128);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 20, FT_MPFR, BKZ_SLD_RED, 128);
+
+  status |= test_int_rel<mpz_t>(50, 1000, 10, FT_DOUBLE, BKZ_DEFAULT | BKZ_AUTO_ABORT);
+  status |= test_int_rel<mpz_t>(50, 1000, 10, FT_DOUBLE, BKZ_SD_VARIANT | BKZ_AUTO_ABORT);
+  status |= test_int_rel<mpz_t>(50, 1000, 10, FT_DOUBLE, BKZ_SLD_RED);
+  status |= test_int_rel<mpz_t>(50, 1000, 15, FT_MPFR, BKZ_DEFAULT | BKZ_AUTO_ABORT, 100);
+  status |= test_int_rel<mpz_t>(50, 1000, 15, FT_MPFR, BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 100);
+  status |= test_int_rel<mpz_t>(50, 1000, 15, FT_MPFR, BKZ_SLD_RED, 100);
+
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_DPE, BKZ_DEFAULT | BKZ_AUTO_ABORT);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_DPE, BKZ_SD_VARIANT | BKZ_AUTO_ABORT);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_DPE, BKZ_SLD_RED);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_MPFR, BKZ_DEFAULT | BKZ_AUTO_ABORT, 53);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_MPFR, BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 53);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_MPFR, BKZ_SLD_RED, 53);
+
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DEFAULT,
+                                 BKZ_SD_VARIANT);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DEFAULT, BKZ_SLD_RED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SD_VARIANT);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SLD_RED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_MPFR,
+                                 BKZ_AUTO_ABORT, 212);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_MPFR,
+                                 BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 212);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_MPFR,
+                                 BKZ_SLD_RED | BKZ_AUTO_ABORT, 212);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SD_VARIANT);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SLD_RED);
+
+  // Test BKZ_DUMP_GSO
+  status |= test_int_rel_bkz_dump_gso<mpz_t>(50, 1000, 15, BKZ_DEFAULT | BKZ_DUMP_GSO);
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_bkz_gram.cpp b/tests/test_bkz_gram.cpp
new file mode 100644 (file)
index 0000000..881c733
--- /dev/null
@@ -0,0 +1,291 @@
+/* Copyright (C) 2016 Martin Albrecht
+   Copyright (C) 2019 Koen de Boer & Wessel van Woerden
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "io/json.hpp"
+#include <cstring>
+#include <fplll.h>
+#include <gso_gram.h>
+#include <gso_interface.h>
+#include <test_utils.h>
+
+using json = nlohmann::json;
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+using namespace std;
+using namespace fplll;
+
+template <class ZT> bool gram_is_equal(ZZ_mat<ZT> b, ZZ_mat<ZT> G)
+{
+  int r = b.r;
+  int c = b.c;
+  ZZ_mat<ZT> G_reduced;
+  G_reduced.resize(r, r);
+  for (int i = 0; i < r; i++)
+  {
+    for (int j = 0; j < r; j++)
+    {
+      (b)[i].dot_product(G_reduced(i, j), (b)[j], c);
+    }
+  }
+  // ------------------------------------------------
+  // ************************************************
+
+  // _______________________________________________
+  // -----------------------------------------------
+  // Test whether G_reduced = G
+  for (int i = 0; i < r; i++)
+  {
+    for (int j = 0; j < i; j++)
+    {
+      if (G(i, j) != G_reduced(i, j))
+      {
+        cerr << "The gram-representation and the basis-representation of the same lattice have an "
+                "unequal gram matrix.\n";
+        return 1;
+      }
+    }
+  }
+  return 0;
+}
+
+/**
+   @brief Test BKZ reduction.
+
+   @param A                test matrix
+   @param block_size       block size
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision if mpfr is used
+
+   @return zero on success.
+*/
+
+template <class ZT>
+int test_bkz(ZZ_mat<ZT> &A, const int block_size, FloatType float_type, int flags = BKZ_DEFAULT,
+             int prec = 0)
+{
+  FloatType sel_ft = (float_type != FT_DEFAULT) ? float_type : FT_DOUBLE;
+
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  /* lllwrapper (no FloatType needed, -m ignored) */
+  if (flags & BKZ_NO_LLL)
+    zeros_last(A, U, UT);
+  else
+  {
+    Wrapper wrapper(A, U, UT, LLL_DEF_DELTA, LLL_DEF_ETA, LLL_DEFAULT);
+    if (!wrapper.lll())
+      return wrapper.status;
+  }
+
+  // _______________________________________________
+  // -----------------------------------------------
+  // Create the Gram matrix G of the basis A
+
+  ZZ_mat<ZT> G;
+  int r = A.r;
+  int c = A.c;
+  G.resize(r, r);
+  for (int i = 0; i < r; i++)
+  {
+    for (int j = 0; j < r; j++)
+    {
+      A[i].dot_product(G(i, j), A[j], c);
+    }
+  }
+  // ------------------------------------------------
+  // ************************************************
+
+  // _______________________________________________
+  // -----------------------------------------------
+  // Create a MatGSO-object M (basis gso) for A
+  // and a MatGSOGram-object Mgram (gram gso) for G.
+
+  vector<Strategy> strategies;
+  BKZParam param(block_size, strategies);
+  param.flags = flags;
+
+  if (sel_ft == FT_DOUBLE)
+  {
+    MatGSO<Z_NR<ZT>, FP_NR<double>> M(A, U, UT, 0);
+    M.update_gso();
+    MatGSOGram<Z_NR<ZT>, FP_NR<double>> Mgram(G, U, UT, 1);
+    Mgram.update_gso();
+
+    LLLReduction<Z_NR<ZT>, FP_NR<double>> LLLObj(M, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+    BKZReduction<Z_NR<ZT>, FP_NR<double>> BKZObj(M, LLLObj, param);
+    BKZObj.bkz();
+
+    LLLReduction<Z_NR<ZT>, FP_NR<double>> LLLObjgram(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+    BKZReduction<Z_NR<ZT>, FP_NR<double>> BKZObjgram(Mgram, LLLObjgram, param);
+    BKZObjgram.bkz();
+
+    return gram_is_equal(A, G);
+  }
+  else if (sel_ft == FT_MPFR)
+  {
+    int old_prec = FP_NR<mpfr_t>::set_prec(prec);
+
+    MatGSO<Z_NR<ZT>, FP_NR<mpfr_t>> M(A, U, UT, 1);
+    M.update_gso();
+    MatGSOGram<Z_NR<ZT>, FP_NR<mpfr_t>> Mgram(G, U, UT, 1);
+    Mgram.update_gso();
+
+    LLLReduction<Z_NR<ZT>, FP_NR<mpfr_t>> LLLObj(M, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+    BKZReduction<Z_NR<ZT>, FP_NR<mpfr_t>> BKZObj(M, LLLObj, param);
+    BKZObj.bkz();
+
+    LLLReduction<Z_NR<ZT>, FP_NR<mpfr_t>> LLLObjgram(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+    BKZReduction<Z_NR<ZT>, FP_NR<mpfr_t>> BKZObjgram(Mgram, LLLObjgram, param);
+    BKZObjgram.bkz();
+
+    FP_NR<mpfr_t>::set_prec(old_prec);
+
+    return gram_is_equal(A, G);
+  }
+  else
+  {
+    cerr << "Type not supported for test" << endl;
+    return 0;
+  }
+
+  return 0;
+}
+
+/**
+   @brief Test BKZ for matrix stored in file pointed to by `input_filename`.
+
+   @param input_filename   a path
+   @param block_size       block size
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision if mpfr is used
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_filename(const char *input_filename, const int block_size,
+                  FloatType float_type = FT_DEFAULT, int flags = BKZ_DEFAULT, int prec = 0)
+{
+  printf("%s %d\n", input_filename, block_size);
+  ZZ_mat<ZT> A, B;
+  int status = 0;
+  status |= read_file(A, input_filename);
+  B = A;
+  status |= test_bkz<ZT>(A, block_size, float_type, flags, prec);
+  return status;
+}
+
+/**
+   @brief Construct d Ã— (d+1) integer relations matrix with bit size b and test BKZ.
+
+   @param d                dimension
+   @param b                bit size
+   @param block_size       block size
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision if mpfr is used
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_int_rel(int d, int b, const int block_size, FloatType float_type = FT_DEFAULT,
+                 int flags = BKZ_DEFAULT, int prec = 0)
+{
+  cerr << "test_int_rel " << d << "  " << b << " " << block_size << endl;
+  ZZ_mat<ZT> A, B;
+  A.resize(d, d + 1);
+  A.gen_intrel(b);
+  B          = A;
+  int status = 0;
+  status |= test_bkz<ZT>(A, block_size, float_type, flags | BKZ_VERBOSE, prec);
+  return status;
+}
+
+int main(int /*argc*/, char ** /*argv*/)
+{
+
+  int status = 0;
+
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 10, FT_DEFAULT,
+                                 BKZ_DEFAULT | BKZ_AUTO_ABORT);
+#ifdef FPLLL_WITH_QD
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 10, FT_DD,
+                                 BKZ_SD_VARIANT | BKZ_AUTO_ABORT);
+#endif
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 10, FT_DEFAULT, BKZ_SLD_RED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 20, FT_MPFR,
+                                 BKZ_DEFAULT | BKZ_AUTO_ABORT, 128);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 20, FT_MPFR,
+                                 BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 128);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", 20, FT_MPFR, BKZ_SLD_RED, 128);
+
+  status |= test_int_rel<mpz_t>(50, 1000, 10, FT_DOUBLE, BKZ_DEFAULT | BKZ_AUTO_ABORT);
+  status |= test_int_rel<mpz_t>(50, 1000, 10, FT_DOUBLE, BKZ_SD_VARIANT | BKZ_AUTO_ABORT);
+  status |= test_int_rel<mpz_t>(50, 1000, 10, FT_DOUBLE, BKZ_SLD_RED);
+  status |= test_int_rel<mpz_t>(50, 1000, 15, FT_MPFR, BKZ_DEFAULT | BKZ_AUTO_ABORT, 100);
+  status |= test_int_rel<mpz_t>(50, 1000, 15, FT_MPFR, BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 100);
+  status |= test_int_rel<mpz_t>(50, 1000, 15, FT_MPFR, BKZ_SLD_RED, 100);
+
+  // status |= test_int_rel<mpz_t>(30, 2000, 10, FT_DPE, BKZ_DEFAULT | BKZ_AUTO_ABORT);
+  // status |= test_int_rel<mpz_t>(30, 2000, 10, FT_DPE, BKZ_SD_VARIANT | BKZ_AUTO_ABORT);
+  // status |= test_int_rel<mpz_t>(30, 2000, 10, FT_DPE, BKZ_SLD_RED);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_MPFR, BKZ_DEFAULT | BKZ_AUTO_ABORT, 53);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_MPFR, BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 53);
+  status |= test_int_rel<mpz_t>(30, 2000, 10, FT_MPFR, BKZ_SLD_RED, 53);
+
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DEFAULT,
+                                 BKZ_SD_VARIANT);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DEFAULT, BKZ_SLD_RED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SD_VARIANT);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SLD_RED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_MPFR,
+                                 BKZ_AUTO_ABORT, 212);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_MPFR,
+                                 BKZ_SD_VARIANT | BKZ_AUTO_ABORT, 212);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_MPFR,
+                                 BKZ_SLD_RED | BKZ_AUTO_ABORT, 212);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SD_VARIANT);
+  status |=
+      test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", 10, FT_DOUBLE, BKZ_SLD_RED);
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_cvp.cpp b/tests/test_cvp.cpp
new file mode 100644 (file)
index 0000000..73332fb
--- /dev/null
@@ -0,0 +1,143 @@
+/* Copyright (C) 2016 Guillaume Bonnoron
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+#include <test_utils.h>
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+using namespace std;
+using namespace fplll;
+
+/**
+   @brief Test if CVP function returns correct vector.
+
+   @param A              input lattice
+   @param b              expected vector
+   @return
+*/
+
+template <class ZT>
+int test_cvp(ZZ_mat<ZT> &A, vector<Z_NR<mpz_t>> &target, vector<Z_NR<mpz_t>> &b, const int method)
+{
+  vector<Z_NR<mpz_t>> sol_coord;  // In the LLL-reduced basis
+  vector<Z_NR<mpz_t>> solution;
+  ZZ_mat<mpz_t> u;
+
+  // cerr << "A " << endl << A << endl;
+  int status =
+      lll_reduction(A, u, LLL_DEF_DELTA, LLL_DEF_ETA, LM_WRAPPER, FT_DEFAULT, 0, LLL_DEFAULT);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "LLL reduction failed: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  status = closest_vector(A, target, sol_coord, method);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  vector_matrix_product(solution, sol_coord, A);
+
+  // cerr << "A red" << endl << A << endl;
+  // cerr << "sol_coord : " << sol_coord << endl;
+  // cerr << "solution : " << solution << endl;
+  // cerr << "expected : " << b << endl;
+  // cerr << "target : " << target << endl;
+
+  bool correct = true;
+  for (int i = 0; i < A.get_cols(); i++)
+  {
+    correct = correct && (solution[i] == b[i]);
+  }
+  if (!correct)
+    return 1;
+
+  return 0;
+}
+
+/**
+   @brief Test if CVP function returns the correct vector
+
+   @param input_filename_lattice   filename of an input lattice
+   @param input_filename_target    filename of a target vector
+   @param output_filename  filename of the expected vector
+   @return
+*/
+
+template <class ZT>
+int test_filename(const char *input_filename_lattice, const char *input_filename_target,
+                  const char *output_filename, const int method = CVPM_FAST)
+{
+  ZZ_mat<ZT> A;
+  int status = 0;
+  status |= read_file(A, input_filename_lattice);
+
+  vector<Z_NR<mpz_t>> t;
+  status |= read_file(t, input_filename_target);
+
+  vector<Z_NR<mpz_t>> b;
+  status |= read_file(b, output_filename);
+
+  status |= test_cvp<ZT>(A, t, b, method);
+  return status;
+}
+
+/**
+   @brief Run CVP tests.
+
+   @param argc             ignored
+   @param argv             ignored
+   @return
+*/
+
+int main(int argc, char *argv[])
+{
+
+  int status = 0;
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice",
+                                 TESTDATADIR "/tests/lattices/example_cvp_in_target",
+                                 TESTDATADIR "/tests/lattices/example_cvp_out");
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2",
+                                 TESTDATADIR "/tests/lattices/example_cvp_in_target2",
+                                 TESTDATADIR "/tests/lattices/example_cvp_out2");
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3",
+                                 TESTDATADIR "/tests/lattices/example_cvp_in_target3",
+                                 TESTDATADIR "/tests/lattices/example_cvp_out3");
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4",
+                                 TESTDATADIR "/tests/lattices/example_cvp_in_target4",
+                                 TESTDATADIR "/tests/lattices/example_cvp_out4", CVPM_PROVED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5",
+                                 TESTDATADIR "/tests/lattices/example_cvp_in_target5",
+                                 TESTDATADIR "/tests/lattices/example_cvp_out5", CVPM_PROVED);
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_enum.cpp b/tests/test_enum.cpp
new file mode 100644 (file)
index 0000000..53c6461
--- /dev/null
@@ -0,0 +1,105 @@
+/* Copyright (C) 2019 Martin Albrecht
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll/fplll.h>
+
+using namespace fplll;
+
+template <class FT> int test_enum(size_t d)
+{
+  RandGen::init_with_seed(0x1337);
+  ZZ_mat<mpz_t> A = ZZ_mat<mpz_t>(100, 100);
+  A.gen_qary_withq(50, 7681);
+  lll_reduction(A);
+  ZZ_mat<mpz_t> U;
+  MatGSO<Z_NR<mpz_t>, FP_NR<FT>> M(A, U, U, 0);
+  M.update_gso();
+
+  FastEvaluator<FP_NR<FT>> evaluator;
+  Enumeration<Z_NR<mpz_t>, FP_NR<FT>> enum_obj(M, evaluator);
+  FP_NR<FT> max_dist;
+  M.get_r(max_dist, 0, 0);
+  max_dist *= 0.99;
+  enum_obj.enumerate(0, d, max_dist, 0);
+  if (evaluator.empty())
+  {
+    return 1;
+  }
+  else
+  {
+    return 0;
+  }
+}
+
+bool callback_firstf(size_t n, enumf *new_sol_coord, void *ctx)
+{
+  if (new_sol_coord[0] == static_cast<double *>(ctx)[0])
+  {
+    return true;
+  }
+  return false;
+}
+
+template <class FT> int test_callback_enum(size_t d)
+{
+  RandGen::init_with_seed(0x1337);
+  ZZ_mat<mpz_t> A = ZZ_mat<mpz_t>(100, 100);
+  A.gen_qary_withq(50, 7681);
+  lll_reduction(A);
+  ZZ_mat<mpz_t> U;
+  MatGSO<Z_NR<mpz_t>, FP_NR<FT>> M(A, U, U, 0);
+  M.update_gso();
+
+  enumf ctx = 2;
+  CallbackEvaluator<FP_NR<FT>> evaluator(callback_firstf, &ctx);
+  Enumeration<Z_NR<mpz_t>, FP_NR<FT>> enum_obj(M, evaluator);
+  FP_NR<FT> max_dist;
+  M.get_r(max_dist, 0, 0);
+  max_dist *= 0.99;
+  enum_obj.enumerate(0, d, max_dist, 0);
+  if (evaluator.empty())
+  {
+    return 1;
+  }
+  else
+  {
+    if (evaluator.begin()->second[0].get_si() == 2)
+    {
+      return 0;
+    }
+    else
+    {
+      return 1;
+    }
+  }
+}
+
+int main(int argc, char *argv[])
+{
+  int status = 0;
+  status |= test_enum<double>(30);
+  status |= test_callback_enum<double>(40);
+
+  if (status == 0)
+  {
+    std::cerr << "All tests passed." << std::endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+}
diff --git a/tests/test_gso.cpp b/tests/test_gso.cpp
new file mode 100644 (file)
index 0000000..fb2f50b
--- /dev/null
@@ -0,0 +1,389 @@
+/* Copyright (C) 2015 Martin Albrecht
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <gso.h>
+#include <gso_gram.h>
+#include <gso_interface.h>
+#include <householder.h>
+#include <nr/matrix.h>
+//#include <random>
+#include <test_utils.h>
+
+using namespace std;
+using namespace fplll;
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+template <class ZT, class FT> Matrix<FT> matrix_relative_difference(Matrix<FT> r1, Matrix<FT> r2)
+{
+  Matrix<FT> diff_matrix = Matrix<FT>(r1.get_rows(), r1.get_cols());
+  diff_matrix.fill(0.0);
+  FT relativation_factor = 0.0;
+  for (int i = 0; i < r1.get_rows(); i++)
+  {
+    for (int j = 0; j < i; j++)
+    {  // j < i, because r is lower-triangular, and has only 1 on the diagonal.
+      relativation_factor = abs(r1[i][j]) + abs(r2[i][j]);
+      if (relativation_factor.is_zero())
+      {
+        diff_matrix[i][j] = abs(r1[i][j] - r2[i][j]);
+      }
+      else
+      {
+        diff_matrix[i][j] = abs(r1[i][j] - r2[i][j]) / relativation_factor;
+      }
+    }
+  }
+  return diff_matrix;
+}
+
+// Returns true when the r-matrices of M1 and M2 are entry-wise equal, up to an error 'error'.
+template <class ZT, class FT> bool rs_are_equal(MatGSO<ZT, FT> M1, MatGSOGram<ZT, FT> M2, FT error)
+{
+  Matrix<FT> r1   = M1.get_r_matrix();
+  Matrix<FT> r2   = M2.get_r_matrix();
+  Matrix<FT> diff = matrix_relative_difference<ZT, FT>(r1, r2);
+
+  FT max_entry = 0.0;
+  max_entry    = diff.get_max();
+  if (max_entry > error)
+  {
+    diff.print(cerr);
+    cerr << endl << endl;
+    return false;
+  }
+  return true;
+}
+
+template <class FT> void assert_diag_R(FT rhd, int i, int &status)
+{
+  if (rhd.cmp(0.0) <= 0)
+  {
+    cerr << "R(" << i << ", " << i << ") must be positive." << endl;
+    status = 1;
+  }
+}
+
+template <class FT> void assert_mu_r_householder(FT rh, FT rhd, FT mu, FT r, int &status)
+{
+  if (abs(mu - rh / rhd) > 0.001)
+  {
+    cerr << "Error (mu): " << mu << " != " << rh / rhd << endl;
+    status = 1;
+  }
+  if (abs(r - rh * rhd) > 0.001)
+  {
+    cerr << "Error (r): " << r << " != " << rh * rhd << endl;
+    status = 1;
+  }
+}
+
+/**
+ * Test if:
+ *   mu(i, j) = R(i, j) / R(j, j)
+ *   r(i, j) = R(i, j) * R(j, j)
+ */
+template <class ZT, class FT> int test_householder(ZZ_mat<ZT> &A)
+{
+  int status = 0;
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+  MatGSO<Z_NR<ZT>, FP_NR<FT>> M(A, U, UT, GSO_INT_GRAM);
+  // Since HOUSEHOLDER_DEFAULT, the exponent returned by get_R(_naively) must be equal to zero.
+  MatHouseholder<Z_NR<ZT>, FP_NR<FT>> Mhouseholder(A, U, UT, HOUSEHOLDER_DEFAULT);
+  M.update_gso();
+  // Here, we just need to refresh R. However, refresh_R() does not modify n_known_rows, but
+  // refresh_R_bf() does.
+  Mhouseholder.refresh_R_bf();
+  Mhouseholder.update_R();
+  Mhouseholder.update_R_naively();
+
+  FP_NR<FT> r;
+  FP_NR<FT> rh;
+  FP_NR<FT> rhd;
+  FP_NR<FT> mu;
+  long expo;
+
+  for (int i = 0; i < A.get_rows(); i++)
+  {
+    Mhouseholder.get_R(rhd, i, i, expo);
+    FPLLL_CHECK(expo == 0, "expo must be equal to 0");
+    assert_diag_R(rhd, i, status);
+    Mhouseholder.get_R_naively(rhd, i, i, expo);
+    FPLLL_CHECK(expo == 0, "expo must be equal to 0");
+    assert_diag_R(rhd, i, status);
+  }
+
+  for (int i = 0; i < A.get_rows(); i++)
+  {
+    for (int j = 0; j < i; j++)
+    {
+      M.get_r(r, i, j);
+      M.get_mu(mu, i, j);
+      Mhouseholder.get_R(rh, i, j, expo);
+      FPLLL_CHECK(expo == 0, "expo must be equal to 0");
+      Mhouseholder.get_R(rhd, j, j, expo);
+      FPLLL_CHECK(expo == 0, "expo must be equal to 0");
+      assert_mu_r_householder(rh, rhd, mu, r, status);
+      Mhouseholder.get_R_naively(rh, i, j, expo);
+      FPLLL_CHECK(expo == 0, "expo must be equal to 0");
+      Mhouseholder.get_R_naively(rhd, j, j, expo);
+      FPLLL_CHECK(expo == 0, "expo must be equal to 0");
+      assert_mu_r_householder(rh, rhd, mu, r, status);
+    }
+  }
+
+  return status;
+}
+
+template <class ZT, class FT> int test_ggso(ZZ_mat<ZT> &A)
+{
+  // TEST A
+  // Method:
+  // - Apply 'normal' MatGSO to A.
+  // - Extract r-matrix of A
+  // - Compute G = A^T A.
+  // - Apply gram MatGSO to G.
+  // - Extract r-matrix of G
+  // -> The r-matrices should be equal.
+
+  // TEST B
+  // Apply some 'random' elementary operation on A and on G
+  // (of course, the operations on A and G are only 'abstractly' the same)
+  // check if their r-matrices are still equal.
+
+  // TEST A
+  // ----------------------------
+  int r = A.r;
+
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  MatGSO<Z_NR<ZT>, FP_NR<FT>> Mbuf(A, U, UT, GSO_INT_GRAM);
+  Mbuf.update_gso();
+  Matrix<Z_NR<ZT>> G = Mbuf.get_g_matrix();
+
+  MatGSO<Z_NR<ZT>, FP_NR<FT>> M(A, U, UT, GSO_DEFAULT);
+  M.update_gso();
+  MatGSOGram<Z_NR<ZT>, FP_NR<FT>> M2(G, U, UT, 1);
+  M2.update_gso();
+
+  ZZ_mat<ZT> A1(A);
+  MatGSO<Z_NR<ZT>, FP_NR<FT>> M3(A1, U, UT, GSO_INT_GRAM);
+  M3.update_gso();
+
+  FP_NR<FT> err  = .001;
+  bool retvalue1 = rs_are_equal(M, M2, err);
+
+  // TEST B
+  // ------------------------
+
+  for (int i = 0; i < rand() % 10 + 1; i++)
+  {
+    int k = rand() % r;
+    int j = rand() % r;
+    M.move_row(k, j);
+    M2.move_row(k, j);
+    M3.move_row(k, j);
+  }
+  M.update_gso();
+  M2.update_gso();
+  M3.update_gso();
+  bool retvalue2 = rs_are_equal(M, M2, err);
+
+  M.row_op_begin(0, r);
+  M2.row_op_begin(0, r);
+  M3.row_op_begin(0, r);
+  for (int i = 0; i < rand() % 10 + 1; i++)
+  {
+    int k = rand() % r;
+    int j = rand() % r;
+    M.row_add(k, j);
+    M2.row_add(k, j);
+    M3.row_add(k, j);
+  }
+  M.row_op_end(0, r);
+  M2.row_op_end(0, r);
+  M3.row_op_end(0, r);
+
+  M.update_gso();
+  M2.update_gso();
+  M3.update_gso();
+  bool retvalue3 = rs_are_equal(M, M2, err);
+  bool retvalue4 = rs_are_equal(M3, M2, err);
+
+  return (!retvalue1) * 1 + (!retvalue2) * 2 + (!retvalue3) * 4 + (!retvalue4) * 8;
+}
+
+template <class ZT, class FT> int test_filename(const char *input_filename)
+{
+  ZZ_mat<ZT> A;
+  int status = read_file(A, input_filename);
+  // if status == 1, read_file fails.
+  if (status == 1)
+  {
+    return 1;
+  }
+  int retvalue = test_ggso<ZT, FT>(A);
+  if (retvalue & 1)
+  {
+    cerr
+        << input_filename
+        << " shows different GSO-outputs for grammatrix representation and basis representation.\n";
+  }
+  if (retvalue & 2)
+  {
+    cerr << input_filename
+         << " shows different GSO-outputs for grammatrix representation and "
+            "basis representation after moving rows.\n";
+  }
+  if (retvalue & 4)
+  {
+    cerr << input_filename
+         << " shows different GSO-outputs for grammatrix representation and "
+            "basis representation after adding rows.\n";
+  }
+  retvalue |= test_householder<ZT, FT>(A);
+  if (retvalue > 0)
+  {
+    return 1;
+  }
+  else
+  {
+    return 0;
+  }
+}
+
+/**
+   @brief Construct d Ã— (d+1) integer relations matrix with bit size b and test LLL.
+
+   @param d                dimension
+   @param b                bit size
+   @param method           LLL method to test
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision used for is_lll_reduced
+
+   @return zero on success
+*/
+
+template <class ZT, class FT> int test_int_rel(int d, int b)
+{
+  ZZ_mat<ZT> A;
+  A.resize(d, d + 1);
+  A.gen_intrel(b);
+  int retvalue = test_ggso<ZT, FT>(A);
+  if (retvalue >= 1)
+  {
+    cerr
+        << "Integer relation matrix with parameters " << d << " and " << b
+        << " shows different GSO-outputs for grammatrix representation and basis representation.\n";
+    return 1;
+  }
+  retvalue |= test_householder<ZT, FT>(A);
+  if (retvalue > 0)
+    return 1;
+
+  return 0;
+}
+
+int main(int /*argc*/, char ** /*argv*/)
+{
+
+  int status = 0;
+
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example3_in");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, double>(50, 20);
+  status |= test_int_rel<mpz_t, double>(40, 10);
+
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example3_in");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, mpfr_t>(50, 20);
+  status |= test_int_rel<mpz_t, mpfr_t>(40, 10);
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status |= test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example3_in");
+  status |= test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, long double>(50, 20);
+  status |= test_int_rel<mpz_t, long double>(40, 10);
+#endif
+#ifdef FPLLL_WITH_QD
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example3_in");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, dd_real>(50, 20);
+  status |= test_int_rel<mpz_t, dd_real>(40, 10);
+
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example3_in");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, qd_real>(50, 20);
+  status |= test_int_rel<mpz_t, qd_real>(40, 10);
+#endif
+#ifdef FPLLL_WITH_DPE
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example3_in");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, dpe_t>(50, 20);
+  status |= test_int_rel<mpz_t, dpe_t>(40, 10);
+#endif
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_hlll.cpp b/tests/test_hlll.cpp
new file mode 100644 (file)
index 0000000..ccdcf5c
--- /dev/null
@@ -0,0 +1,179 @@
+/* Copyright (C) 2015 Martin Albrecht
+   Copyright (C) 2017-2018 Laurent Grémy
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+#include <test_utils.h>
+
+using namespace std;
+using namespace fplll;
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+/**
+   @brief Test the tester.
+
+   @param A
+   @return zero on success.
+
+   Should return 0, since the at this point of the program, A is not reduced.
+*/
+
+template <class ZT> int test_test(ZZ_mat<ZT> &A)
+{
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  MatHouseholder<Z_NR<ZT>, FP_NR<mpfr_t>> M(A, U, UT, 0);
+
+  int is_reduced =
+      is_hlll_reduced<Z_NR<ZT>, FP_NR<mpfr_t>>(M, LLL_DEF_DELTA, LLL_DEF_ETA, HLLL_DEF_THETA);
+
+  if (is_reduced == RED_SUCCESS)
+    cerr << "is_hlll_reduced reports success when it should not" << endl;
+
+  return (is_reduced == RED_SUCCESS);
+}
+
+/**
+   @brief Test HLLL reduction.
+
+   @param A                test matrix
+   @param method           LLL method to test
+   @param float_type       floating point type to test
+   @param flags            flags to use
+
+   @return zero on success.
+*/
+
+template <class ZT>
+int test_hlll(ZZ_mat<ZT> &A, LLLMethod method, FloatType float_type, int flags = LLL_DEFAULT)
+{
+
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  int status = 0;
+
+  // zero on success
+  if (test_test(A))
+  {
+    return 1;
+  }
+
+  // zero on success
+  status = hlll_reduction(A, LLL_DEF_DELTA, LLL_DEF_ETA, HLLL_DEF_THETA, HLLL_DEF_C, method,
+                          float_type, 0, flags, false);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "HLLL reduction failed with error '" << get_red_status_str(status);
+    cerr << "' for method " << LLL_METHOD_STR[method];
+    cerr << " and float type " << FLOAT_TYPE_STR[float_type] << endl;
+    return status;
+  }
+
+  int prec = hlll_min_prec(A.get_rows(), A.get_cols(), LLL_DEF_DELTA, LLL_DEF_ETA, HLLL_DEF_THETA,
+                           HLLL_DEF_C);
+
+  const int old_prec = FP_NR<mpfr_t>::set_prec(prec);
+
+  MatHouseholder<Z_NR<ZT>, FP_NR<mpfr_t>> M(A, U, UT, 0);
+
+  // one on success
+  status = is_hlll_reduced<Z_NR<ZT>, FP_NR<mpfr_t>>(M, LLL_DEF_DELTA, LLL_DEF_ETA, HLLL_DEF_THETA);
+
+  FP_NR<mpfr_t>::set_prec(old_prec);
+
+  if (status != RED_SUCCESS)
+    cerr << "Output of HLLL reduction is not HLLL reduced with method " << LLL_METHOD_STR[method]
+         << endl;
+
+  return (status != RED_SUCCESS);
+}
+
+/**
+   @brief Test HLLL for matrix stored in file pointed to by `input_filename`.
+
+   @param input_filename   a path
+   @param method           LLL method to test
+   @param float_type       floating point type to test
+   @param flags            flags to use
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_filename(const char *input_filename, LLLMethod method, FloatType float_type = FT_DEFAULT,
+                  int flags = LLL_DEFAULT)
+{
+  ZZ_mat<ZT> A;
+  int status = 0;
+  status |= read_file(A, input_filename);
+  status |= test_hlll<ZT>(A, method, float_type, flags);
+  return status;
+}
+
+/**
+   @brief Construct d Ã— (d+1) integer relations matrix with bit size b and test LLL.
+
+   @param d                dimension
+   @param b                bit size
+   @param method           LLL method to test
+   @param float_type       floating point type to test
+   @param flags            flags to use
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_int_rel(int d, int b, LLLMethod method, FloatType float_type = FT_DEFAULT,
+                 int flags = LLL_DEFAULT)
+{
+  ZZ_mat<ZT> A;
+  A.resize(d, d + 1);
+  A.gen_intrel(b);
+  return test_hlll<ZT>(A, method, float_type, flags);
+}
+
+int main(int /*argc*/, char ** /*argv*/)
+{
+
+  int status = 0;
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", LM_WRAPPER, FT_DEFAULT);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", LM_PROVED, FT_MPFR);
+
+  status |= test_int_rel<mpz_t>(50, 1000, LM_FAST, FT_DOUBLE);
+  status |= test_int_rel<mpz_t>(30, 1000, LM_PROVED, FT_MPFR);
+
+  status |= test_int_rel<mpz_t>(30, 2000, LM_PROVED, FT_DPE);
+  status |= test_int_rel<mpz_t>(20, 2000, LM_PROVED, FT_MPFR);
+
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", LM_FAST, FT_DOUBLE);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", LM_PROVED, FT_MPFR);
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+}
diff --git a/tests/test_lll.cpp b/tests/test_lll.cpp
new file mode 100644 (file)
index 0000000..6e8d7a5
--- /dev/null
@@ -0,0 +1,182 @@
+/* Copyright (C) 2015 Martin Albrecht
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+#include <test_utils.h>
+
+using namespace std;
+using namespace fplll;
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+/**
+   @brief Test the tester.
+
+   @param A
+   @return zero on success.
+*/
+
+template <class ZT> int test_test(ZZ_mat<ZT> &A)
+{
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  MatGSO<Z_NR<ZT>, FP_NR<mpfr_t>> M(A, U, UT, 0);
+
+  int is_reduced = is_lll_reduced<Z_NR<ZT>, FP_NR<mpfr_t>>(M, LLL_DEF_DELTA, LLL_DEF_ETA);
+
+  if (is_reduced)
+    cerr << "is_lll_reduced reports success when it should not" << endl;
+
+  return is_reduced;
+}
+
+/**
+   @brief Test LLL reduction.
+
+   @param A                test matrix
+   @param method           LLL method to test
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision used for is_lll_reduced
+
+   @return zero on success.
+*/
+
+template <class ZT>
+int test_lll(ZZ_mat<ZT> &A, LLLMethod method, FloatType float_type, int flags = LLL_DEFAULT,
+             int prec = 0)
+{
+
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  int status = 0;
+
+  // zero on success
+  if (test_test(A))
+  {
+    return 1;
+  }
+
+  // zero on success
+  status = lll_reduction(A, LLL_DEF_DELTA, LLL_DEF_ETA, method, float_type, 0, flags);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "LLL reduction failed with error '" << get_red_status_str(status);
+    cerr << "' for method " << LLL_METHOD_STR[method];
+    cerr << " and float type " << FLOAT_TYPE_STR[float_type] << endl;
+    return status;
+  }
+
+  const int old_prec = prec ? FP_NR<mpfr_t>::set_prec(prec) : 0;
+
+  MatGSO<Z_NR<ZT>, FP_NR<mpfr_t>> M(A, U, UT, 0);
+
+  // one on success
+  status = is_lll_reduced<Z_NR<ZT>, FP_NR<mpfr_t>>(M, LLL_DEF_DELTA, LLL_DEF_ETA);
+
+  if (prec)
+    FP_NR<mpfr_t>::set_prec(old_prec);
+
+  if (status == 0)
+    cerr << "Output of LLL reduction is not LLL reduced with method " << LLL_METHOD_STR[method]
+         << endl;
+
+  return (status == 0);
+}
+
+/**
+   @brief Test LLL for matrix stored in file pointed to by `input_filename`.
+
+   @param input_filename   a path
+   @param method           LLL method to test
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision used for is_lll_reduced
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_filename(const char *input_filename, LLLMethod method, FloatType float_type = FT_DEFAULT,
+                  int flags = LLL_DEFAULT, int prec = 0)
+{
+  ZZ_mat<ZT> A;
+  int status = 0;
+  status |= read_file(A, input_filename);
+  status |= test_lll<ZT>(A, method, float_type, flags, prec);
+  return status;
+}
+
+/**
+   @brief Construct d Ã— (d+1) integer relations matrix with bit size b and test LLL.
+
+   @param d                dimension
+   @param b                bit size
+   @param method           LLL method to test
+   @param float_type       floating point type to test
+   @param flags            flags to use
+   @param prec             precision used for is_lll_reduced
+
+   @return zero on success
+*/
+
+template <class ZT>
+int test_int_rel(int d, int b, LLLMethod method, FloatType float_type = FT_DEFAULT,
+                 int flags = LLL_DEFAULT, int prec = 0)
+{
+  ZZ_mat<ZT> A;
+  A.resize(d, d + 1);
+  A.gen_intrel(b);
+  return test_lll<ZT>(A, method, float_type, flags, prec);
+}
+
+int main(int /*argc*/, char ** /*argv*/)
+{
+
+  int status = 0;
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", LM_WRAPPER, FT_DEFAULT,
+                                 LLL_DEFAULT, 128);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/dim55_in", LM_PROVED, FT_MPFR);
+
+  status |= test_int_rel<mpz_t>(50, 1000, LM_FAST, FT_DOUBLE);
+  status |= test_int_rel<mpz_t>(50, 1000, LM_PROVED, FT_MPFR);
+
+  status |= test_int_rel<mpz_t>(30, 2000, LM_HEURISTIC, FT_DPE);
+  status |= test_int_rel<mpz_t>(30, 2000, LM_PROVED, FT_DPE);
+  status |= test_int_rel<mpz_t>(30, 2000, LM_PROVED, FT_MPFR);
+
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", LM_HEURISTIC);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", LM_FAST, FT_DOUBLE);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", LM_PROVED, FT_MPFR);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", LM_FAST, FT_DOUBLE,
+                                 LLL_DEFAULT | LLL_EARLY_RED);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_in", LM_HEURISTIC, FT_DEFAULT,
+                                 LLL_DEFAULT | LLL_EARLY_RED);
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+}
diff --git a/tests/test_lll_gram.cpp b/tests/test_lll_gram.cpp
new file mode 100644 (file)
index 0000000..d550b6d
--- /dev/null
@@ -0,0 +1,290 @@
+/* Copyright (C) 2015 Martin Albrecht
+   Copyright (C) 2019 Koen de Boer & Wessel van Woerden
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+#include <gso.h>
+#include <gso_gram.h>
+#include <gso_interface.h>
+#include <lll.h>
+#include <test_utils.h>
+
+using namespace std;
+using namespace fplll;
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+template <class ZT, class FT> int is_already_reduced(ZZ_mat<ZT> &A, Matrix<Z_NR<ZT>> &G)
+{
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  MatGSO<Z_NR<ZT>, FP_NR<FT>> M(A, U, UT, 1);
+  MatGSOGram<Z_NR<ZT>, FP_NR<FT>> M2(G, U, UT, 1);
+
+  int is_reduced  = is_lll_reduced<Z_NR<ZT>, FP_NR<FT>>(M, LLL_DEF_DELTA, LLL_DEF_ETA);
+  int is_greduced = is_lll_reduced<Z_NR<ZT>, FP_NR<FT>>(M2, LLL_DEF_DELTA, LLL_DEF_ETA);
+  if (is_reduced)
+    cerr << "is_lll_reduced reports success when it should not" << endl;
+  if (is_greduced)
+    cerr << "is_lll_greduced reports success when it should not" << endl;
+  return (is_reduced || is_greduced);
+}
+
+/**
+   @brief Tests whether LLL applied on A is equivalent to LLLGram applied on G = A*A^T
+
+   @param A basis matrix of a lattice
+   @return zero on success
+*/
+
+template <class ZT, class FT> int test_lll(ZZ_mat<ZT> &A)
+{
+
+  ZZ_mat<ZT> U;
+  ZZ_mat<ZT> UT;
+
+  // _______________________________________________
+  // -----------------------------------------------
+  // Create the Gram matrix G of the basis A
+
+  ZZ_mat<ZT> G;
+  int r = A.r;
+  int c = A.c;
+  G.resize(r, r);
+  for (int i = 0; i < r; i++)
+  {
+    for (int j = 0; j < r; j++)
+    {
+      A[i].dot_product(G(i, j), A[j], c);
+    }
+  }
+  // ------------------------------------------------
+  // ************************************************
+
+  // _______________________________________________
+  // -----------------------------------------------
+  // Create a MatGSO-object M (basis gso) for A
+  // and a MatGSOGram-object Mgram (gram gso) for G.
+
+  MatGSO<Z_NR<ZT>, FP_NR<FT>> M(A, U, UT, 1);
+  M.update_gso();
+  MatGSOGram<Z_NR<ZT>, FP_NR<FT>> Mgram(G, U, UT, 1);
+  Mgram.update_gso();
+  // ------------------------------------------------
+  // ************************************************
+
+  // _________________________________________________
+  // -------------------------------------------------
+  // Test whether A and G are not already LLL-reduced.
+  if (is_already_reduced<ZT, FT>(A, G))
+  {
+    cerr << "The matrices are already LLL-reduced";
+    return 1;
+  }
+  // ------------------------------------------------
+  // ************************************************
+
+  // _________________________________________________
+  // -------------------------------------------------
+  // Make two LLLObjects. One of the basis MatGSO-object M
+  // one of the gram MatGSOGram-object Mgram.
+  LLLReduction<Z_NR<ZT>, FP_NR<FT>> LLLObj(M, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+  LLLReduction<Z_NR<ZT>, FP_NR<FT>> LLLObjgram(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+
+  // and LLL reduce both objects
+  LLLObj.lll();
+  LLLObjgram.lll();
+  // ------------------------------------------------
+  // ************************************************
+
+  // _________________________________________________
+  // -------------------------------------------------
+  // Check whether M and Mgram are really reduced after LLL reduction
+  int is_reduced  = is_lll_reduced<Z_NR<ZT>, FP_NR<FT>>(M, LLL_DEF_DELTA, LLL_DEF_ETA);
+  int is_greduced = is_lll_reduced<Z_NR<ZT>, FP_NR<FT>>(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA);
+
+  if (is_reduced != 1 || is_greduced != 1)
+  {
+    if (is_reduced != 1)
+    {
+      cerr << "The basis GSO-object is not LLL-reduced after calling LLL\n";
+    }
+    if (is_greduced != 1)
+    {
+      cerr << "The gram GSO-object is not LLL-reduced after calling LLL\n";
+    }
+    return 1;
+  }
+  // ------------------------------------------------
+  // ************************************************
+
+  //
+  // After this reduction, A (the input matrix) and G (gram matrix)
+  // are LLL-reduced accordingly. Therefore we should check whether
+  // A *A^T = G
+  //
+
+  // _______________________________________________
+  // -----------------------------------------------
+  // Create the Gram matrix G_reduced of the basis A_reduced
+
+  ZZ_mat<ZT> G_reduced;
+  G_reduced.resize(r, r);
+  for (int i = 0; i < r; i++)
+  {
+    for (int j = 0; j < r; j++)
+    {
+      (M.b)[i].dot_product(G_reduced(i, j), (M.b)[j], c);
+    }
+  }
+  // ------------------------------------------------
+  // ************************************************
+
+  // _______________________________________________
+  // -----------------------------------------------
+  // Test whether G_reduced = G
+  for (int i = 0; i < r; i++)
+  {
+    for (int j = 0; j < i; j++)
+    {
+      if (G(i, j) != G_reduced(i, j))
+      {
+        cerr << "The gram-representation and the basis-representation of the same lattice have an "
+                "unequal gram matrix.\n";
+        return 1;
+      }
+    }
+  }
+
+  // Return 0 on success.
+  return 0;
+}
+
+template <class ZT, class FT> int test_filename(const char *input_filename)
+{
+  ZZ_mat<ZT> A;
+  int status = 0;
+  status |= read_file(A, input_filename);
+  status |= test_lll<ZT, FT>(A);
+  return status;
+}
+
+/**
+   @brief Construct d Ã— (d+1) integer relations matrix with bit size b and test LLL.
+
+   @param d                dimension
+   @param b                bit size
+
+   @return zero on success
+*/
+
+template <class ZT, class FT> int test_int_rel(int d, int b)
+{
+  ZZ_mat<ZT> A;
+  A.resize(d, d + 1);
+  A.gen_intrel(b);
+  return test_lll<ZT, FT>(A);
+}
+
+int main(int /*argc*/, char ** /*argv*/)
+{
+
+  int status = 0;
+
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, double>(50, 20);
+  status |= test_int_rel<mpz_t, double>(40, 10);
+
+  status |= test_int_rel<mpz_t, double>(100, 200);
+
+  status |= test_int_rel<mpz_t, double>(200, 100);
+
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, mpfr_t>(50, 20);
+  status |= test_int_rel<mpz_t, mpfr_t>(40, 10);
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status |= test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |=
+      test_filename<mpz_t, long double>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, long double>(50, 20);
+  status |= test_int_rel<mpz_t, long double>(40, 10);
+
+#endif
+#ifdef FPLLL_WITH_QD
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, dd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, dd_real>(50, 20);
+  status |= test_int_rel<mpz_t, dd_real>(40, 10);
+
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, qd_real>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, qd_real>(50, 20);
+  status |= test_int_rel<mpz_t, qd_real>(40, 10);
+
+#endif
+#ifdef FPLLL_WITH_DPE
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example2_in");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice2");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice3");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice4");
+  status |= test_filename<mpz_t, dpe_t>(TESTDATADIR "/tests/lattices/example_cvp_in_lattice5");
+  status |= test_int_rel<mpz_t, dpe_t>(50, 20);
+  status |= test_int_rel<mpz_t, dpe_t>(40, 10);
+
+#endif
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_nr.cpp b/tests/test_nr.cpp
new file mode 100644 (file)
index 0000000..4374bb1
--- /dev/null
@@ -0,0 +1,168 @@
+/* Copyright (C) 2016 Martin R. Albrecht
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+
+using namespace std;
+using namespace fplll;
+
+template <class FT> int test_str()
+{
+  int status = 0;
+  FT a       = "1.01";
+  status |= !(abs(a - 1.01) < 0.001);
+  return status;
+}
+
+template <class FT> int test_arithmetic()
+{
+  FT a = 6.0, b = 3.0, c = -2;
+  FT d       = 1.0 - (a * b + 2 * c + 2.0) / c;
+  int status = 0;
+  status |= d.cmp(9);
+  d += 1.0;
+  status |= d.cmp(10);
+  return status;
+}
+
+template <class FT> bool test_hypot()
+{
+  FT a, b, c, d;
+  a = 3.0;
+  b = 4.0;
+  // the hypot function is asymmetric,
+  // so we test both hypot(a,b) and hypot(b,a)
+  // a^2 + b^2 = c^2 = d^2 = 5^2
+  c.hypot(a, b);
+  d.hypot(b, a);
+  int status = (!(abs(c - 5.0) < 0.001) || !(abs(d - 5.0) < 0.001));
+
+  if (status == 1)
+  {
+    cerr << c;
+  }
+  return status;
+}
+
+/**
+   @brief
+
+   zero on success.
+
+   @return
+*/
+
+template <class FT> int test_std()
+{
+  FT a;
+  a          = 6.1;
+  int status = 0;
+  status |= !(abs(sqrt(a) - std::sqrt(a.get_d())) < 0.001);
+  status |= !(abs(log(a) - std::log(a.get_d())) < 0.001);
+  status |= !(abs(exp(a) - std::exp(a.get_d())) < 0.001);
+  status |= !(abs(floor(a) - std::floor(a.get_d())) < 0.001);
+  status |= !(abs(pow_si(a, 2) - std::pow(a.get_d(), 2.0)) < 0.001);
+  return status;
+}
+
+template <class FT> int test_root()
+{
+  FT a;
+  a          = 6.1;
+  int status = !(abs(root(a, 3.0) - std::pow(a.get_d(), 1 / 3.0)) < 0.001);
+  return status;
+}
+
+int main()
+{
+
+  int status = 0;
+  status |= test_arithmetic<FP_NR<double>>();
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status |= test_arithmetic<FP_NR<long double>>();
+#endif
+#ifdef FPLLL_WITH_DPE
+  status |= test_arithmetic<FP_NR<dpe_t>>();
+#endif
+#ifdef FPLLL_WITH_QD
+  status |= test_arithmetic<FP_NR<dd_real>>();
+  status |= test_arithmetic<FP_NR<qd_real>>();
+#endif
+  status |= test_arithmetic<FP_NR<mpfr_t>>();
+
+  status |= test_std<FP_NR<double>>();
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status |= test_std<FP_NR<long double>>();
+#endif
+#ifdef FPLLL_WITH_DPE
+  status |= test_std<FP_NR<dpe_t>>();
+#endif
+#ifdef FPLLL_WITH_QD
+  status |= test_std<FP_NR<dd_real>>();
+  status |= test_std<FP_NR<qd_real>>();
+#endif
+  status |= test_std<FP_NR<mpfr_t>>();
+
+  status |= test_root<FP_NR<double>>();
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status |= test_root<FP_NR<long double>>();
+#endif
+#ifdef FPLLL_WITH_QD
+  status |= test_root<FP_NR<dd_real>>();
+  status |= test_root<FP_NR<qd_real>>();
+#endif
+  status |= test_root<FP_NR<mpfr_t>>();
+
+  status |= test_str<FP_NR<double>>();
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status |= test_str<FP_NR<long double>>();
+#endif
+#ifdef FPLLL_WITH_DPE
+  status |= test_str<FP_NR<dpe_t>>();
+#endif
+#ifdef FPLLL_WITH_QD
+  status |= test_str<FP_NR<dd_real>>();
+  status |= test_str<FP_NR<qd_real>>();
+#endif
+  status |= test_str<FP_NR<mpfr_t>>();
+
+  status |= test_hypot<FP_NR<double>>();
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status |= test_hypot<FP_NR<long double>>();
+#endif
+
+#ifdef FPLLL_WITH_DPE
+  status |= test_hypot<FP_NR<dpe_t>>();
+#endif
+
+#ifdef FPLLL_WITH_QD
+  status |= test_hypot<FP_NR<dd_real>>();
+  status |= test_hypot<FP_NR<qd_real>>();
+#endif
+  status |= test_hypot<FP_NR<mpfr_t>>();
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_pruner.cpp b/tests/test_pruner.cpp
new file mode 100644 (file)
index 0000000..836aa6b
--- /dev/null
@@ -0,0 +1,588 @@
+/* Copyright (C) 2016 Leo Ducas
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+
+#ifdef FPLLL_WITH_QD
+#include <qd/dd_real.h>
+#endif
+
+using namespace std;
+using namespace fplll;
+
+/**
+   @brief Read matrix from `input_filename`.
+
+   @param A
+   @param input_filename
+   @return
+*/
+
+#define N 56
+#define D (N)
+#define Nbis 24
+#define Dbis 24
+
+int last_status = 0;
+void print_status(int status)
+{
+  if (status > last_status)
+  {
+    last_status = status;
+    cerr << endl << "FAILURES: " << status << endl;
+  }
+}
+
+template <class FT> class Pruner<FT>::TestPruner
+{
+public:
+  int n;
+  int d;
+  Pruner<FT> pru;
+  TestPruner(int n) : n(n), pru(n) { d = n; }
+
+  int test_enforce()
+  {
+    vector<double> rs;
+    int status = 0;
+    for (int i = 0; i < n; ++i)
+    {
+      rs.emplace_back(1.);
+    }
+    pru.load_basis_shape(rs);
+    Pruner<FT>::evec b(n);
+    for (int i = 0; i < d; ++i)
+    {
+      b[i] = .3 + (1. * ((i * i * i) % d)) / (2 * d);
+    }
+    int j = d / 2;
+    b[j]  = .5;
+
+    FT old_bj = b[j];
+    pru.min_pruning_coefficients.resize(d);
+    fill(pru.min_pruning_coefficients.begin(), pru.min_pruning_coefficients.end(), .1);
+    pru.enforce(b, j);
+
+    status += !((b[j] >= old_bj) && (b[j] <= old_bj));
+    print_status(status);
+    status += !((b[d - 1] >= 1.) && (b[d - 1] <= 1.));
+    print_status(status);
+    cerr << "Checking enforced bounds: Increasing, 1-terminated, keeping b[13] = .5" << endl;
+    for (int i = 0; i < d - 1; ++i)
+    {
+      status += !(b[i + 1] >= b[i]);
+      print_status(status);
+      cerr << b[i] << " , ";
+    }
+    cerr << b[d - 1] << endl;
+    return status;
+  }
+
+  int test_eval_poly()
+  {
+    Pruner<FT>::poly p(4);
+    FT x, y;
+    x      = .3;
+    int ld = 3;
+    p[0]   = 1;
+    p[1]   = 1;
+    p[2]   = 2;
+    p[3]   = 3;
+
+    y = pru.eval_poly(ld, p, x);
+    cerr << "Testing eval_poly" << endl;
+    cerr << y << endl;
+    return abs(y - 1.561) > 1e-10;
+  }
+  int test_integrate_poly()
+  {
+    Pruner<FT>::poly p(5);
+    int ld     = 3;
+    int status = 0;
+    p[0]       = 1.;
+    p[1]       = 1.;
+    p[2]       = 2.;
+    p[3]       = 3.;
+    pru.integrate_poly(ld, p);
+    cerr << "Testing integrate_poly" << endl;
+    for (int i = 0; i < 5; ++i)
+    {
+      cerr << p[i] << " ";
+    }
+    cerr << endl;
+    status += abs(p[0] - 0.0) > 1e-10;
+    print_status(status);
+    status += abs(p[1] - 1.0) > 1e-10;
+    print_status(status);
+    status += abs(p[2] - 1. / 2) > 1e-10;
+    print_status(status);
+    status += abs(p[3] - 2. / 3) > 1e-10;
+    print_status(status);
+    status += abs(p[4] - 3. / 4) > 1e-10;
+    print_status(status);
+    return status;
+  }
+
+  // To test relative volumes, we use the explicit formula
+  // for step function given in [GNR], I_alpha(n/4,n/4)
+  // computed using the following sage script
+  //
+  // alpha = XXX
+  // n = 24
+  // a = n/4
+  // b = n/4
+  // beta_dist = x**(a-1) * (1 - x)**(b-1)
+  // c = integral(beta_dist, x, 0, alpha)
+  // f = integral(beta_dist, x, 0, 1.)
+  // print c/f
+
+  // XXX = .3 ---> 0.07822479096
+  // XXX = .5 ---> 0.5
+  // XXX = .7 ---> 0.921775209040006
+
+  int test_relative_volume()
+  {
+    vector<double> pr(n);
+    cerr << "Testing relative volume" << endl;
+    int status = 0;
+
+    double proba, error;
+
+    for (int i = 0; i < n / 2; ++i)
+    {
+      pr[i]           = 1;
+      pr[i + (n / 2)] = .3;
+    }
+
+    proba = fplll::svp_probability<FP_NR<double>>(pr).get_d();
+    error = std::abs(1 - proba / 0.07822479096);
+    cerr << proba << " relative error " << error << endl;
+    status += error > .05;
+    print_status(status);
+
+    for (int i = 0; i < n / 2; ++i)
+    {
+      pr[i]           = 1;
+      pr[i + (n / 2)] = .5;
+    }
+
+    proba = fplll::svp_probability<FP_NR<double>>(pr).get_d();
+    error = std::abs(1 - proba / 0.5);
+    cerr << proba << " relative error " << error << endl;
+    status += error > .05;
+    print_status(status);
+
+    for (int i = 0; i < n / 2; ++i)
+    {
+      pr[i]           = 1;
+      pr[i + (n / 2)] = .7;
+    }
+
+    proba = fplll::svp_probability<FP_NR<double>>(pr).get_d();
+    error = std::abs(1 - proba / 0.92177520904);
+    cerr << proba << " relative error " << error << endl;
+    status += error > .05;
+    print_status(status);
+
+    return status;
+  }
+};
+
+void set_up_gso_norms(vector<double> &gso_sq_norms)
+{
+  for (int i = 0; i < N; ++i)
+  {
+    // A bit more than LLL reduced
+    gso_sq_norms.emplace_back(pow(1.06, -i));
+  }
+}
+
+template <class FT> int test_prepruned()
+{
+  int status = 0;
+  cerr << endl << "Checking Pre-pruned" << endl;
+
+  vector<double> gso_sq_norms;
+  set_up_gso_norms(gso_sq_norms);
+
+  PruningParams pruning;
+  vector<double> pr = {1,        1,        1,        1,        1,        1,        1,
+                       1,        1,        1,        1,        1,        1,        1,
+                       0.937197, 0.937197, 0.871731, 0.871731, 0.814304, 0.814304, 0.762232,
+                       0.762232, 0.713898, 0.713898, 0.668279, 0.668279, 0.624701, 0.624701,
+                       0.58271,  0.58271,  0.541994, 0.541994, 0.502342, 0.502342, 0.463617,
+                       0.463617, 0.425747, 0.425747, 0.388723, 0.388723, 0.35262,  0.35262,
+                       0.317642, 0.317642, 0.284261, 0.284261, 0.254584, 0.254584, 0.254584,
+                       0.254584, 0.254584, 0.254584, 0.2,      0.2,      0.2,      0.2};
+
+  Pruner<FT> pru(.85, 20000., gso_sq_norms);
+  double cost = pru.single_enum_cost(pr);
+  cerr << "Cost per enum " << cost << endl;
+  status += std::isnan(cost);
+  print_status(status);
+  status += (abs(1 - cost / 2.01206e+07) > .01);
+  print_status(status);
+  double proba = pru.measure_metric(pr);
+  cerr << "success proba " << proba << endl;
+  status += (abs(1 - proba / .556) > .01);
+  print_status(status);
+  status += std::isnan(proba);
+  print_status(status);
+  return status;
+}
+
+template <class FT> int test_unpruned()
+{
+
+  int status = 0;
+  cerr << "Checking Un-pruned" << endl;
+  vector<double> gso_sq_norms;
+  set_up_gso_norms(gso_sq_norms);
+
+  vector<double> pr;
+  for (int i = 0; i < N; ++i)
+  {
+    pr.emplace_back(1.);
+  }
+  Pruner<FT> pru(.85, 20000., gso_sq_norms);
+
+  double cost = pru.single_enum_cost(pr);
+  cerr << "Cost per enum " << cost << endl;
+  status += (abs(1 - cost / 3.20e+10) > .02);
+  print_status(status);
+  status += std::isnan(cost);
+  print_status(status);
+  double proba = pru.measure_metric(pr);
+  cerr << "success proba " << proba << endl;
+  status += (abs(1 - proba) > .02);
+  print_status(status);
+  status += std::isnan(proba);
+  print_status(status);
+
+  vector<vector<double>> gso_sq_norms_vec;
+  vector<double> v1, v2, v3;
+  v1 = gso_sq_norms;
+  v2 = gso_sq_norms;
+  v3 = gso_sq_norms;
+
+  gso_sq_norms_vec.emplace_back(v1);
+  gso_sq_norms_vec.emplace_back(v2);
+  for (int i = 0; i < N; ++i)
+  {
+    v3[i] *= 20;
+  }
+  // 1 basis out of 3 is so large that it essentially induces no cost: new cost should be 2/3 of
+  // the previous
+
+  gso_sq_norms_vec.emplace_back(v3);
+
+  cerr << "Repeating same checks with 3 bases" << endl;
+  Pruner<FT> pru2(.85, 0., gso_sq_norms_vec);
+
+  cost = pru2.single_enum_cost(pr);
+  cerr << "Cost per enum " << cost << endl;
+
+  status += (abs(1 - 3. / 2. * cost / 3.20e+10) >
+             .02);  // check that the new cost is indeed 2/3 of the original cost
+  print_status(status);
+  proba = pru2.measure_metric(pr);
+  cerr << "success proba " << proba << endl;
+  status += (abs(1 - proba) > .02);
+  print_status(status);
+  return status;
+  return 0;
+}
+
+template <class FT> int test_auto_prune(size_t n)
+{
+  int status = 0;
+  double cost;
+  ZZ_mat<mpz_t> A(2 * n, 2 * n);
+  A.gen_qary(n, 30);
+  ZZ_mat<mpz_t> U;
+  MatGSO<Z_NR<mpz_t>, FP_NR<double>> M(A, U, U, GSO_DEFAULT);
+  LLLReduction<Z_NR<mpz_t>, FP_NR<double>> lll_obj =
+      LLLReduction<Z_NR<mpz_t>, FP_NR<double>>(M, LLL_DEF_DELTA, LLL_DEF_ETA, LLL_DEFAULT);
+  lll_obj.lll();
+  FP_NR<double> radius;
+  M.get_r(radius, 0, 0);
+  vector<double> r;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    FP_NR<double> x;
+    M.get_r(x, i, i);
+    r.push_back(x.get_d());
+  }
+
+  PruningParams pruning;
+  cerr << "Testing auto_prune " << endl;
+  double overhead = 1.0e6 * n * n;
+  cerr << "Overhead " << overhead << endl;
+
+  double radius_d = r[0] * .3;
+
+  cerr << endl << "Greedy " << endl;
+  prune<FT>(pruning, radius_d, overhead, r, 20, PRUNER_METRIC_EXPECTED_SOLUTIONS, 0);
+  cerr << "Expected Solutions " << pruning.expectation << endl;
+  cerr << "Radius " << radius_d << endl;
+  cerr << "gh_factor " << pruning.gh_factor << endl;
+
+  status += !(pruning.expectation > 0.0);
+  print_status(status);
+  status += !(pruning.gh_factor >= .05);
+  print_status(status);
+  status += !(pruning.gh_factor < 20.);
+  print_status(status);
+
+  status += !(pruning.coefficients[0] == 1.0);
+  print_status(status);
+  cost = 0.;
+  cerr << "Predicted cost per Level" << endl;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    cerr << pruning.detailed_cost[i] << "\t";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << endl << "Predicted Total Cost " << cost << endl;
+
+  cerr << endl << "Gradient " << endl;
+  cerr << "Radius " << radius_d << endl;
+  prune<FT>(pruning, radius_d, overhead, r, 0.3, PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+            PRUNER_GRADIENT);
+  status += !(pruning.expectation <= 1.001);
+  print_status(status);
+  cerr << "Probability " << pruning.expectation << endl;
+  cost = 0.;
+  cerr << "Predicted cost per Level" << endl;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    cerr << pruning.detailed_cost[i] << "\t";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << endl << "Predicted Total Cost " << cost << endl;
+
+  status += !(pruning.expectation > 0.0);
+  print_status(status);
+  status += !(pruning.gh_factor >= .05);
+  print_status(status);
+  status += !(pruning.gh_factor < 20.);
+  print_status(status);
+  status += !(pruning.coefficients[0] == 1.0);
+  print_status(status);
+
+  cerr << endl << "Reprune Gradient " << endl;
+  cerr << "radius " << radius_d << endl;
+  prune<FT>(pruning, radius_d, overhead, r, 0.01, PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+            PRUNER_GRADIENT | PRUNER_START_FROM_INPUT);
+  status += !(pruning.expectation <= 1.001);
+  print_status(status);
+  cerr << "Probability " << pruning.expectation << endl;
+  cost = 0.;
+  cerr << "Predicted cost per Level" << endl;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    cerr << pruning.detailed_cost[i] << "\t";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << endl << "Predicted Total Cost " << cost << endl;
+  status += !(pruning.expectation > 0.0);
+  print_status(status);
+  status += !(pruning.gh_factor >= .05);
+  print_status(status);
+  status += !(pruning.gh_factor < 20.);
+  print_status(status);
+  status += !(pruning.coefficients[0] == 1.0);
+  print_status(status);
+
+  cerr << endl << "NelderMead " << endl;
+  cerr << "radius " << radius_d << endl;
+  prune<FT>(pruning, radius_d, overhead, r, 0.3, PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+            PRUNER_NELDER_MEAD);
+  status += !(pruning.expectation <= 1.001);
+  print_status(status);
+  cerr << "Probability " << pruning.expectation << endl;
+  cost = 0.;
+  cerr << "Predicted cost per Level" << endl;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    cerr << pruning.detailed_cost[i] << "\t";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << endl << "Predicted Total Cost " << cost << endl;
+  status += !(pruning.expectation > 0.0);
+  print_status(status);
+  status += !(pruning.gh_factor >= .05);
+  print_status(status);
+  status += !(pruning.gh_factor < 20.);
+  print_status(status);
+  status += !(pruning.coefficients[0] == 1.0);
+  print_status(status);
+
+  cerr << endl << "Reprune NelderMead " << endl;
+  cerr << "radius " << radius_d << endl;
+  prune<FT>(pruning, radius_d, overhead, r, 0.3, PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+            PRUNER_NELDER_MEAD | PRUNER_START_FROM_INPUT);
+  status += !(pruning.expectation <= 1.001);
+  print_status(status);
+  cerr << "Probability " << pruning.expectation << endl;
+  cost = 0.;
+  cerr << "Predicted cost per Level" << endl;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    cerr << pruning.detailed_cost[i] << "\t";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << endl << "Predicted Total Cost " << cost << endl;
+  status += !(pruning.expectation > 0.0);
+  print_status(status);
+  status += !(pruning.gh_factor >= .05);
+  print_status(status);
+  status += !(pruning.gh_factor < 20.);
+  print_status(status);
+
+  status += !(pruning.coefficients[0] == 1.0);
+  print_status(status);
+
+  cerr << endl << "Zealous (Gradient then NelderMead) " << endl;
+  cerr << "radius " << radius_d << endl;
+  prune<FT>(pruning, radius_d, overhead, r, 0.3, PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+            PRUNER_ZEALOUS);
+  status += !(pruning.expectation <= 1.001);
+  print_status(status);
+  cerr << "Probability " << pruning.expectation << endl;
+  cost = 0.;
+  cerr << "Predicted cost per Level" << endl;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    cerr << pruning.detailed_cost[i] << "\t";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << endl << "Predicted Total Cost " << cost << endl;
+  status += !(pruning.expectation > 0.0);
+  print_status(status);
+  status += !(pruning.gh_factor >= .05);
+  print_status(status);
+  status += !(pruning.gh_factor < 20.);
+  print_status(status);
+
+  status += !(pruning.coefficients[0] == 1.0);
+  print_status(status);
+
+  cerr << endl << "Reprune Zealous " << endl;
+  cerr << "radius " << radius_d << endl;
+  prune<FT>(pruning, radius_d, overhead, r, 0.3, PRUNER_METRIC_PROBABILITY_OF_SHORTEST,
+            PRUNER_ZEALOUS | PRUNER_START_FROM_INPUT);
+  status += !(pruning.expectation <= 1.001);
+  print_status(status);
+  cerr << "Probability " << pruning.expectation << endl;
+  cost = 0.;
+  cerr << "Predicted cost per Level" << endl;
+  for (size_t i = 0; i < 2 * n; ++i)
+  {
+    cerr << pruning.detailed_cost[i] << "\t";
+    cost += pruning.detailed_cost[i];
+  }
+  cerr << endl << "Predicted Total Cost " << cost << endl;
+  status += !(pruning.expectation > 0.0);
+  print_status(status);
+  status += !(pruning.gh_factor >= .05);
+  print_status(status);
+  status += !(pruning.gh_factor < 20.);
+  print_status(status);
+
+  status += !(pruning.coefficients[0] == 1.0);
+  print_status(status);
+
+  return status;
+}
+
+int main()
+{
+  int status = 0;
+#ifdef FPLLL_WITH_QD
+  cerr << endl << "DD" << endl;
+  status += test_unpruned<FP_NR<dd_real>>();
+  print_status(status);
+
+#endif
+
+  cerr << endl << "d" << endl;
+  status += test_unpruned<FP_NR<double>>();
+  print_status(status);
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  cerr << endl << "ld" << endl;
+  status += test_unpruned<FP_NR<long double>>();
+  print_status(status);
+#endif
+  cerr << endl << "MPRF" << endl;
+  status += test_unpruned<FP_NR<mpfr_t>>();
+  print_status(status);
+
+  status += test_prepruned<FP_NR<double>>();
+  print_status(status);
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  status += test_prepruned<FP_NR<long double>>();
+  print_status(status);
+#endif
+  status += test_prepruned<FP_NR<mpfr_t>>();
+  print_status(status);
+
+#ifdef FPLLL_WITH_LONG_DOUBLE
+  Pruner<FP_NR<long double>>::TestPruner tp(Nbis);
+  status += tp.test_enforce();
+  print_status(status);
+  status += tp.test_eval_poly();
+  print_status(status);
+  status += tp.test_integrate_poly();
+  print_status(status);
+  status += tp.test_relative_volume();
+  print_status(status);
+#endif
+
+#ifdef FPLLL_WITH_QD
+  Pruner<FP_NR<dd_real>>::TestPruner tp2(Nbis);
+  status += tp2.test_enforce();
+  print_status(status);
+  status += tp2.test_eval_poly();
+  print_status(status);
+  status += tp2.test_integrate_poly();
+  print_status(status);
+  status += tp2.test_relative_volume();
+  print_status(status);
+#endif
+
+#ifdef FPLLL_WITH_QD
+  status += test_auto_prune<FP_NR<dd_real>>(20);
+  print_status(status);
+#endif
+
+  status += test_auto_prune<FP_NR<double>>(20);
+  print_status(status);
+  status += test_auto_prune<FP_NR<double>>(30);
+  print_status(status);
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_sieve.cpp b/tests/test_sieve.cpp
new file mode 100644 (file)
index 0000000..979ed3c
--- /dev/null
@@ -0,0 +1,88 @@
+#include <../fplll/sieve/sieve_main.h> /* standalone bin */
+#include <cstring>
+#include <fplll.h>
+#include <test_utils.h>
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+using namespace std;
+using namespace fplll;
+
+/**
+   @brief Test sieve by checking if function returns correct vector.
+
+   @param A              input lattice
+   @param b              shortest vector
+   @return
+*/
+template <class ZT> int test_sieve_alg(ZZ_mat<ZT> &A, vector<Z_NR<mpz_t>> &b, int alg)
+{
+  GaussSieve<ZT, FP_NR<double>> gsieve(A, alg, 0, 0);
+  Z_NR<ZT> goal_norm;
+  goal_norm = 0;
+  gsieve.sieve(goal_norm);
+  NumVect<Z_NR<ZT>> v = gsieve.return_first();
+  Z_NR<ZT> tmp;
+  Z_NR<ZT> norm_s;
+  Z_NR<ZT> norm_b;
+  for (int i = 0; i < A.get_cols(); i++)
+  {
+    tmp.mul(v[i], v[i]);
+    norm_s.add(norm_s, tmp);
+    tmp.mul(b[i], b[i]);
+    norm_b.add(norm_b, tmp);
+  }
+  if (norm_s != norm_b)
+    return 1;
+  return 0;
+}
+
+template <class ZT> int test_sieve(ZZ_mat<ZT> &A, vector<Z_NR<mpz_t>> &b)
+{
+  int r = 0;
+  r |= test_sieve_alg<ZT>(A, b, 2);
+  r |= test_sieve_alg<ZT>(A, b, 3);
+  r |= test_sieve_alg<ZT>(A, b, 4);
+  return r;
+}
+
+/**
+   @brief Test sieve for matrix stored in file pointed to by `input_filename`.
+
+   @param input_filename   a path
+   @return zero on success
+*/
+template <class ZT> int test_filename(const char *input_filename, const char *output_filename)
+{
+  ZZ_mat<ZT> A;
+  int status = 0;
+  status |= read_file(A, input_filename);
+  vector<Z_NR<mpz_t>> b;
+  status |= read_file(b, output_filename);
+  status |= test_sieve<ZT>(A, b);
+  return status;
+}
+
+/*
+   Note make check uses the following relative path for the filename.
+*/
+int main(int /*argc*/, char ** /*argv*/)
+{
+
+  int status = 0;
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_svp_in",
+                                 TESTDATADIR "/tests/lattices/example_svp_out");
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_svp.cpp b/tests/test_svp.cpp
new file mode 100644 (file)
index 0000000..a366b32
--- /dev/null
@@ -0,0 +1,345 @@
+/* Copyright (C) 2015 Martin Albrecht
+ *               2016 Michael Walter
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+#include <test_utils.h>
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+using namespace std;
+using namespace fplll;
+
+enum Test
+{
+  SVP_ENUM,
+  DSVP_ENUM,
+  DSVP_REDUCE
+};
+
+/**
+   @brief Test if SVP function returns vector with right norm.
+
+   @param A              input lattice
+   @param b              shortest vector
+   @return
+*/
+
+template <class ZT> int test_svp(ZZ_mat<ZT> &A, vector<Z_NR<mpz_t>> &b)
+{
+  vector<Z_NR<mpz_t>> sol_coord;   // In the LLL-reduced basis
+  vector<Z_NR<mpz_t>> sol_coord2;  // In the initial basis
+  vector<Z_NR<mpz_t>> solution;
+  ZZ_mat<mpz_t> u;
+
+  int status =
+      lll_reduction(A, u, LLL_DEF_DELTA, LLL_DEF_ETA, LM_WRAPPER, FT_DEFAULT, 0, LLL_DEFAULT);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "LLL reduction failed: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  status = shortest_vector(A, sol_coord, SVPM_PROVED, SVP_DEFAULT);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  vector_matrix_product(sol_coord2, sol_coord, u);
+  vector_matrix_product(solution, sol_coord, A);
+
+  Z_NR<ZT> tmp;
+  Z_NR<ZT> norm_s;
+  Z_NR<ZT> norm_b;
+
+  for (int i = 0; i < A.get_cols(); i++)
+  {
+    tmp.mul(solution[i], solution[i]);
+    norm_s.add(norm_s, tmp);
+
+    tmp.mul(b[i], b[i]);
+    norm_b.add(norm_b, tmp);
+  }
+  if (norm_s != norm_b)
+    return 1;
+
+  return 0;
+}
+
+/**
+   @brief Compute the norm of a dual vector (specified by coefficients in the dual basis).
+
+   @param A              input lattice
+   @param b              coefficients of shortest dual vector
+   @return
+*/
+template <class ZT>
+int dual_length(FP_NR<mpfr_t> &norm, ZZ_mat<ZT> &A, const vector<Z_NR<mpz_t>> &coords)
+{
+  int d = coords.size();
+  if (A.get_rows() != d)
+  {
+    cerr << "DSVP length error: Coefficient vector has wrong dimension: ";
+    cerr << A.get_rows() << " vs " << d << endl;
+    return 1;
+  }
+  vector<FP_NR<mpfr_t>> coords_d(d);
+  for (int i = 0; i < d; i++)
+  {
+    coords_d[i] = coords[i].get_d();
+  }
+
+  ZZ_mat<mpz_t> empty_mat;
+  MatGSO<Z_NR<mpz_t>, FP_NR<mpfr_t>> gso(A, empty_mat, empty_mat, GSO_INT_GRAM);
+  if (!gso.update_gso())
+  {
+    cerr << "GSO Failure." << endl;
+    return 1;
+  }
+  FP_NR<mpfr_t> tmp;
+  gso.get_r(tmp, d - 1, d - 1);
+  tmp.pow_si(tmp, -1);
+
+  vector<FP_NR<mpfr_t>> alpha(d);
+  FP_NR<mpfr_t> mu, alpha2, r_inv;
+  norm = 0.0;
+  for (int i = 0; i < d; i++)
+  {
+    alpha[i] = coords_d[i];
+    for (int j = 0; j < i; j++)
+    {
+      gso.get_mu(mu, i, j);
+      alpha[i] -= mu * alpha[j];
+    }
+    gso.get_r(r_inv, i, i);
+    r_inv.pow_si(r_inv, -1);
+    alpha2.pow_si(alpha[i], 2);
+    norm += alpha2 * r_inv;
+  }
+
+  return 0;
+}
+
+/**
+   @brief Test if dual SVP function returns vector with right norm.
+
+   @param A              input lattice
+   @param b              shortest dual vector
+   @return
+*/
+
+template <class ZT> int test_dual_svp(ZZ_mat<ZT> &A, vector<Z_NR<mpz_t>> &b)
+{
+  vector<Z_NR<mpz_t>> sol_coord;  // In the LLL-reduced basis
+  vector<Z_NR<mpz_t>> solution;
+  ZZ_mat<mpz_t> u;
+
+  FP_NR<mpfr_t> normb;
+  if (dual_length(normb, A, b))
+  {
+    return 1;
+  }
+
+  int status =
+      lll_reduction(A, u, LLL_DEF_DELTA, LLL_DEF_ETA, LM_WRAPPER, FT_DEFAULT, 0, LLL_DEFAULT);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "LLL reduction failed: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  status = shortest_vector(A, sol_coord, SVPM_FAST, SVP_DUAL);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  FP_NR<mpfr_t> norm_sol;
+  if (dual_length(norm_sol, A, sol_coord))
+  {
+    return 1;
+  }
+
+  FP_NR<mpfr_t> error;
+  error = 1;
+  error.mul_2si(error, -(int)error.get_prec());
+  normb += error;
+  if (norm_sol > normb)
+  {
+    cerr << "Returned dual vector too long by more than " << error << endl;
+    return 1;
+  }
+
+  return 0;
+}
+
+/**
+   @brief Test if dual SVP reduction returns reduced basis.
+
+   @param A              input lattice
+   @param b              shortest dual vector
+   @return
+*/
+template <class ZT> int test_dsvp_reduce(ZZ_mat<ZT> &A, vector<Z_NR<mpz_t>> &b)
+{
+  ZZ_mat<mpz_t> u;
+  int d = A.get_rows();
+
+  FP_NR<mpfr_t> normb;
+  if (dual_length(normb, A, b))
+  {
+    return 1;
+  }
+
+  int status =
+      lll_reduction(A, u, LLL_DEF_DELTA, LLL_DEF_ETA, LM_WRAPPER, FT_DEFAULT, 0, LLL_DEFAULT);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "LLL reduction failed: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  ZZ_mat<mpz_t> empty_mat;
+  MatGSO<Z_NR<mpz_t>, FP_NR<mpfr_t>> gso(A, empty_mat, empty_mat, GSO_INT_GRAM);
+  LLLReduction<Z_NR<mpz_t>, FP_NR<mpfr_t>> lll_obj(gso, LLL_DEF_DELTA, LLL_DEF_ETA, LLL_DEFAULT);
+
+  vector<Strategy> strategies;
+  BKZParam dummy(d, strategies);
+  BKZReduction<Z_NR<mpz_t>, FP_NR<mpfr_t>> bkz_obj(gso, lll_obj, dummy);
+
+  bkz_obj.svp_reduction(0, d, dummy, true);
+
+  FP_NR<mpfr_t> norm_sol;
+  Z_NR<mpz_t> zero;
+  zero = 0;
+  vector<Z_NR<mpz_t>> e_n(d, zero);
+  e_n[d - 1] = 1;
+  if (dual_length(norm_sol, A, e_n))
+  {
+    return 1;
+  }
+
+  FP_NR<mpfr_t> error;
+  error = 1;
+  error.mul_2si(error, -(int)error.get_prec());
+  normb += error;
+  if (norm_sol > normb)
+  {
+    cerr << "Last dual vector too long by more than " << error << endl;
+    return 1;
+  }
+
+  return 0;
+}
+
+int test_rank_defect()
+{
+  ZZ_mat<mpz_t> A = ZZ_mat<mpz_t>(4, 4);
+  A[0][0]         = 75;
+  A[0][1]         = 44;
+  A[0][2]         = -5;
+  A[0][3]         = -16;
+  A[1][0]         = 29;
+  A[1][1]         = 7;
+  A[1][2]         = -52;
+  A[1][3]         = 134;
+  A[2][0]         = -89;
+  A[2][1]         = 108;
+  A[2][2]         = 56;
+  A[2][3]         = 29;
+  A[3][0]         = -94;
+  A[3][1]         = 55;
+  A[3][2]         = -194;
+  A[3][3]         = -20;
+  lll_reduction(A);
+  vector<Z_NR<mpz_t>> sol_coord;
+  return shortest_vector(A, sol_coord);
+}
+
+/**
+   @brief Test if SVP function returns vector with right norm.
+
+   @param input_filename   filename of an input lattice
+   @param output_filename  filename of a shortest vector
+   @return
+*/
+
+template <class ZT>
+int test_filename(const char *input_filename, const char *output_filename,
+                  const Test test = SVP_ENUM)
+{
+  ZZ_mat<ZT> A;
+  int status = 0;
+  status |= read_file(A, input_filename);
+
+  vector<Z_NR<mpz_t>> b;
+  status |= read_file(b, output_filename);
+
+  switch (test)
+  {
+  case SVP_ENUM:
+    status |= test_svp<ZT>(A, b);
+    return status;
+  case DSVP_ENUM:
+    status |= test_dual_svp<ZT>(A, b);
+    return status;
+  case DSVP_REDUCE:
+    status |= test_dsvp_reduce<ZT>(A, b);
+    return status;
+  }
+
+  cerr << "Unknown test." << endl;
+  return 1;
+}
+
+/**
+   @brief Run SVP tests.
+
+   @return
+*/
+
+int main()
+{
+
+  int status = 0;
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_svp_in",
+                                 TESTDATADIR "/tests/lattices/example_svp_out");
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_dsvp_in",
+                                 TESTDATADIR "/tests/lattices/example_dsvp_out", DSVP_ENUM);
+  status |= test_filename<mpz_t>(TESTDATADIR "/tests/lattices/example_dsvp_in",
+                                 TESTDATADIR "/tests/lattices/example_dsvp_out", DSVP_REDUCE);
+
+  status |= test_rank_defect();
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_svp_gram.cpp b/tests/test_svp_gram.cpp
new file mode 100644 (file)
index 0000000..8c78c24
--- /dev/null
@@ -0,0 +1,373 @@
+/* Copyright (C) 2015 Martin Albrecht
+ *               2016 Michael Walter
+   Copyright (C) 2019 Koen de Boer & Wessel van Woerden
+
+   This file is part of fplll. fplll is free software: you
+   can redistribute it and/or modify it under the terms of the GNU Lesser
+   General Public License as published by the Free Software Foundation,
+   either version 2.1 of the License, or (at your option) any later version.
+
+   fplll is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <cstring>
+#include <fplll.h>
+#include <gso_gram.h>
+#include <test_utils.h>
+
+#ifndef TESTDATADIR
+#define TESTDATADIR ".."
+#endif
+
+using namespace std;
+using namespace fplll;
+
+enum Test
+{
+  SVP_ENUM,
+  DSVP_ENUM,
+  DSVP_REDUCE
+};
+
+/**
+   @brief Test if SVP function returns vector with right norm.
+
+   @param A              input lattice
+   @param b              shortest vector
+   @return               zero if successful
+*/
+
+template <class ZT, class FT> int test_svp(ZZ_mat<ZT> &G, vector<Z_NR<mpz_t>> &b)
+{
+  vector<Z_NR<mpz_t>> sol_coord;  // In the LLL-reduced grammatrix
+
+  vector<Z_NR<mpz_t>> solution_b;
+
+  ZZ_mat<ZT> U;
+  // U.gen_identity(G.get_cols());
+  ZZ_mat<ZT> UT;
+
+  // Make GSO object of G  & apply GramSchmidt
+  MatGSOGram<Z_NR<ZT>, FP_NR<FT>> Mgram(G, U, UT, 1);
+  Mgram.update_gso();
+
+  // Compute the length of b w.r.t. G
+  Z_NR<ZT> norm_b;
+  Mgram.sqnorm_coordinates(norm_b, b);
+
+  // Make LLL object & apply LLL
+  LLLReduction<Z_NR<ZT>, FP_NR<FT>> LLLObjgram(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+  LLLObjgram.lll();
+
+  // Check if LLL reduced
+  int is_greduced = is_lll_reduced<Z_NR<ZT>, FP_NR<FT>>(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA);
+  if (!is_greduced)
+  {
+    cerr << "LLL reduction failed: " << get_red_status_str(is_greduced) << endl;
+    return 1;
+  }
+
+  // Symmetrize the Gram Matrix
+  Mgram.symmetrize_g();
+
+  // Apply SVP algorithm, check whether it yields success
+  int status = shortest_vector(Mgram, sol_coord, SVPM_PROVED, SVP_DEFAULT);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  // Compare the length of found solution with given solution b.
+  Z_NR<ZT> norm_s;
+  Mgram.sqnorm_coordinates(norm_s, sol_coord);
+
+  if (norm_s != norm_b)
+  {
+    return 1;
+  }
+
+  // Apply list svp algorithm
+  vector<vector<Z_NR<mpz_t>>> sols_coord;
+  vector<enumf> sols_dist;
+  status = shortest_vectors(Mgram, sols_coord, sols_dist, 500, SVPM_PROVED, SVP_DEFAULT);
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  // Return 0 on success
+  return 0;
+}
+
+/**
+   @brief Compute the norm of a dual vector (specified by coefficients in the dual basis).
+
+   @param A              input lattice
+   @param b              coefficients of shortest dual vector
+   @return
+*/
+template <class ZT>
+int dual_length(FP_NR<mpfr_t> &norm, ZZ_mat<ZT> &G, const vector<Z_NR<mpz_t>> &coords)
+{
+  int d = coords.size();
+  if (G.get_rows() != d)
+  {
+    cerr << "DSVP length error: Coefficient vector has wrong dimension: ";
+    cerr << G.get_rows() << " vs " << d << endl;
+    return 1;
+  }
+  vector<FP_NR<mpfr_t>> coords_d(d);
+  for (int i = 0; i < d; i++)
+  {
+    coords_d[i] = coords[i].get_d();
+  }
+
+  ZZ_mat<mpz_t> empty_mat;
+  MatGSOGram<Z_NR<ZT>, FP_NR<mpfr_t>> gso(G, empty_mat, empty_mat, 1);
+  if (!gso.update_gso())
+  {
+    cerr << "GSO Failure." << endl;
+    return 1;
+  }
+  FP_NR<mpfr_t> tmp;
+  gso.get_r(tmp, d - 1, d - 1);
+  tmp.pow_si(tmp, -1);
+
+  vector<FP_NR<mpfr_t>> alpha(d);
+  FP_NR<mpfr_t> mu, alpha2, r_inv;
+  norm = 0.0;
+  for (int i = 0; i < d; i++)
+  {
+    alpha[i] = coords_d[i];
+    for (int j = 0; j < i; j++)
+    {
+      gso.get_mu(mu, i, j);
+      alpha[i] -= mu * alpha[j];
+    }
+    gso.get_r(r_inv, i, i);
+    r_inv.pow_si(r_inv, -1);
+    alpha2.pow_si(alpha[i], 2);
+    norm += alpha2 * r_inv;
+  }
+
+  return 0;
+}
+
+/**
+   @brief Test if dual SVP function returns vector with right norm.
+
+   @param A              input lattice
+   @param b              shortest dual vector
+   @return
+*/
+
+template <class ZT> int test_dual_svp(ZZ_mat<ZT> &G, vector<Z_NR<mpz_t>> &b)
+{
+  vector<Z_NR<mpz_t>> sol_coord;  // In the LLL-reduced basis
+  vector<Z_NR<mpz_t>> solution;
+  ZZ_mat<mpz_t> u;
+
+  FP_NR<mpfr_t> normb;
+  if (dual_length(normb, G, b))
+  {
+    return 1;
+  }
+
+  // Make GSO object of G  & apply GramSchmidt
+  ZZ_mat<mpz_t> empty_mat;
+  MatGSOGram<Z_NR<ZT>, FP_NR<mpfr_t>> Mgram(G, empty_mat, empty_mat, 1);
+  Mgram.update_gso();
+
+  // Make LLL object & apply LLL
+  LLLReduction<Z_NR<ZT>, FP_NR<mpfr_t>> LLLObjgram(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+  LLLObjgram.lll();
+
+  // Check if LLL reduced
+  int is_greduced = is_lll_reduced<Z_NR<ZT>, FP_NR<mpfr_t>>(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA);
+  if (!is_greduced)
+  {
+    cerr << "LLL reduction failed: " << get_red_status_str(is_greduced) << endl;
+    return 1;
+  }
+
+  // Symmetrize the Gram Matrix
+  Mgram.symmetrize_g();
+
+  int status = shortest_vector(Mgram, sol_coord, SVPM_FAST, SVP_DUAL);
+
+  if (status != RED_SUCCESS)
+  {
+    cerr << "Failure: " << get_red_status_str(status) << endl;
+    return status;
+  }
+
+  FP_NR<mpfr_t> norm_sol;
+  if (dual_length(norm_sol, G, sol_coord))
+  {
+    return 1;
+  }
+
+  FP_NR<mpfr_t> error;
+  error = 1;
+  error.mul_2si(error, -(int)error.get_prec());
+  normb += error;
+  if (norm_sol > normb)
+  {
+    cerr << "Returned dual vector too long by more than " << error << endl;
+    return 1;
+  }
+
+  return 0;
+}
+
+/**
+   @brief Test if dual SVP reduction returns reduced basis.
+
+   @param A              input lattice
+   @param b              shortest dual vector
+   @return
+*/
+template <class ZT> int test_dsvp_reduce(ZZ_mat<ZT> &G, vector<Z_NR<mpz_t>> &b)
+{
+  ZZ_mat<mpz_t> u;
+  int d = G.get_rows();
+
+  FP_NR<mpfr_t> normb;
+  if (dual_length(normb, G, b))
+  {
+    return 1;
+  }
+
+  // Make GSO object of G  & apply GramSchmidt
+  ZZ_mat<mpz_t> empty_mat;
+  MatGSOGram<Z_NR<ZT>, FP_NR<mpfr_t>> Mgram(G, empty_mat, empty_mat, 1);
+  Mgram.update_gso();
+
+  // Make LLL object & apply LLL
+  LLLReduction<Z_NR<ZT>, FP_NR<mpfr_t>> LLLObjgram(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA, 0);
+  LLLObjgram.lll();
+
+  // Check if LLL reduced
+  int is_greduced = is_lll_reduced<Z_NR<ZT>, FP_NR<mpfr_t>>(Mgram, LLL_DEF_DELTA, LLL_DEF_ETA);
+  if (!is_greduced)
+  {
+    cerr << "LLL reduction failed: " << get_red_status_str(is_greduced) << endl;
+    return 1;
+  }
+
+  // Symmetrize the Gram Matrix
+  Mgram.symmetrize_g();
+
+  vector<Strategy> strategies;
+  BKZParam dummy(d, strategies);
+  BKZReduction<Z_NR<mpz_t>, FP_NR<mpfr_t>> bkz_obj(Mgram, LLLObjgram, dummy);
+
+  bkz_obj.svp_reduction(0, d, dummy, true);
+
+  FP_NR<mpfr_t> norm_sol;
+  Z_NR<mpz_t> zero;
+  zero = 0;
+  vector<Z_NR<mpz_t>> e_n(d, zero);
+  e_n[d - 1] = 1;
+  if (dual_length(norm_sol, G, e_n))
+  {
+    return 1;
+  }
+
+  FP_NR<mpfr_t> error;
+  error = 1;
+  error.mul_2si(error, -(int)error.get_prec());
+  normb += error;
+  if (norm_sol > normb)
+  {
+    cerr << "Last dual vector too long by more than " << error << endl;
+    return 1;
+  }
+
+  return 0;
+}
+
+/**
+   @brief Test if SVP function returns vector with right norm.
+
+   @param input_filename   filename of an input lattice
+   @param output_filename  filename of a shortest vector
+   @return
+*/
+
+template <class ZT, class FT>
+int test_filename(const char *input_filename, const char *output_filename,
+                  const Test test = SVP_ENUM)
+{
+  ZZ_mat<ZT> G;
+  Z_NR<mpz_t> len;
+  int status = 0;
+  status |= read_file(G, input_filename);
+
+  vector<Z_NR<mpz_t>> b;
+  status |= read_file(b, output_filename);
+
+  switch (test)
+  {
+  case SVP_ENUM:
+    status |= test_svp<ZT, FT>(G, b);
+    return status;
+  case DSVP_ENUM:
+    status |= test_dual_svp<ZT>(G, b);
+    return status;
+  case DSVP_REDUCE:
+    status |= test_dsvp_reduce<ZT>(G, b);
+    return status;
+  }
+
+  cerr << "Unknown test." << endl;
+  return 1;
+}
+
+/**
+   @brief Run SVP tests.
+
+   @return
+*/
+
+int main()
+{
+
+  int status = 0;
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/grammatrix_dimension7",
+                                         TESTDATADIR "/tests/lattices/grammatrix_dimension7_out");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/grammatrix_dimension4",
+                                         TESTDATADIR "/tests/lattices/grammatrix_dimension4_out");
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/grammatrix_dimension7",
+                                         TESTDATADIR "/tests/lattices/grammatrix_dimension7_out",
+                                         DSVP_ENUM);
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/grammatrix_dimension4",
+                                         TESTDATADIR "/tests/lattices/grammatrix_dimension4_out",
+                                         DSVP_ENUM);
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/grammatrix_dimension7",
+                                         TESTDATADIR "/tests/lattices/grammatrix_dimension7_out",
+                                         DSVP_REDUCE);
+  status |= test_filename<mpz_t, mpfr_t>(TESTDATADIR "/tests/lattices/grammatrix_dimension4",
+                                         TESTDATADIR "/tests/lattices/grammatrix_dimension4_out",
+                                         DSVP_REDUCE);
+
+  if (status == 0)
+  {
+    cerr << "All tests passed." << endl;
+    return 0;
+  }
+  else
+  {
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/tests/test_utils.h b/tests/test_utils.h
new file mode 100644 (file)
index 0000000..fa4ae3d
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef TEST_UTILS_H
+#define TEST_UTILS_H 
+
+#include <fplll.h>
+using namespace std;
+using namespace fplll;
+
+/**
+   @brief Read T from `input_filename`.
+
+   @param X T (T is usually a ZZ_mat<ZT> or a vector<Z_NR<ZT>>
+   @param input_filename
+   @return zero if the file is correctly read, 1 otherwise.
+*/
+template <class T> int read_file(T &X, const char *input_filename) {
+  int status = 0;
+  ifstream is;
+  is.exceptions(std::ifstream::failbit | std::ifstream::badbit);
+  try {
+    is.open(input_filename);
+    is >> X;
+    is.close();
+  }
+  catch (const ifstream::failure&) {
+    status = 1;
+    cerr << "Error by reading " << input_filename << "." << endl;
+  }
+
+  return status;
+}
+#endif /* TEST_UTILS_H */
diff --git a/tools/plot_gso_dump.py b/tools/plot_gso_dump.py
new file mode 100755 (executable)
index 0000000..f247d01
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+from optparse import OptionParser
+import json
+
+def do_plot(filename):
+    import matplotlib.pyplot as plt
+    x1,x2,y1,y2 = None,None,None,None
+    i = 0
+    filer = open(filename, "r")
+    data_json = json.load(filer)
+    filer.close()
+
+    for d in data_json:
+
+        plt.clf()
+        name = d.get("step")
+        if int(d.get("loop")) != -1:
+            name += " {0}".format(d.get("loop"))
+        if d.get("step") != "Input":
+            name += " ({0} s)".format(d.get("time"))
+        data = d.get("norms")
+        data = map(float, data)
+        
+        plt.plot(range(len(data)), data)
+        plt.xlabel(name)
+
+        if i == 0:
+            x1,x2,y1,y2 = plt.axis()
+        else:
+            axes = plt.gca()
+            axes.set_xlim([x1,x2])
+            axes.set_ylim([y1,y2])
+        from os.path import basename
+        name = basename(filename)
+        plt.savefig("%s-%04d.png"%(name,i))
+        i += 1
+
+def main():
+    parser = OptionParser(usage="""\
+""")
+    opts, args = parser.parse_args()
+
+    try:
+        filename = args[0]
+    except IndexError:
+        parser.print_help()
+        return
+
+    do_plot(filename)
+
+if __name__ == '__main__':
+    main()
diff --git a/tools/reformat.pl b/tools/reformat.pl
new file mode 100755 (executable)
index 0000000..2c9afc0
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+###########################################################################
+# Copyright (C) 2013 Damien Stehle.
+#
+# This file is part of fplll. fplll is free software: you
+# can redistribute it and/or modify it under the terms of the GNU Lesser
+# General Public License as published by the Free Software Foundation,
+# either version 2.1 of the License, or (at your option) any later version.
+#
+# fplll is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+##########################################################################
+
+
+$r=@ARGV[0];
+$c=@ARGV[1];
+
+
+
+$i=0;
+while(<stdin>)
+{
+    while (s/^[^0123456789\-\+]*([\-]?[0-9]+)([^0-9].*)$/$2/)#$1=first number in chain, $2=queue of string -> $_. 
+    {
+       @v[$i++]=$1;
+    }
+}
+
+die "bizarre : $i != $r * $c" if ($i!=$r*$c);
+print "[";
+$k=0;
+for ($i=0;$i<$r;$i++)
+{
+    print "[";
+    for ($j=0;$j<$c;$j++)
+    {
+       print @v[$k++];
+       print " ";
+    }
+    print "]\n";
+}
+print "]";
diff --git a/tools/reformat_magma.pl b/tools/reformat_magma.pl
new file mode 100755 (executable)
index 0000000..022161d
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+###########################################################################
+# Copyright (C) 2013 Damien Stehle.
+#
+# This file is part of fplll. fplll is free software: you
+# can redistribute it and/or modify it under the terms of the GNU Lesser
+# General Public License as published by the Free Software Foundation,
+# either version 2.1 of the License, or (at your option) any later version.
+#
+# fplll is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with fplll. If not, see <http://www.gnu.org/licenses/>. */
+##########################################################################
+
+$r=@ARGV[0];
+$c=@ARGV[1];
+
+
+
+$i=0;
+while(<stdin>)
+{
+    while (s/^[^0123456789\-\+]*([\-]?[0-9]+)([^0-9].*)$/$2/)#$1=first number in chain, $2=queue of string -> $_. 
+    {
+       @v[$i++]=$1;
+    }
+}
+
+die "bizarre : $i != $r * $c" if ($i!=$r*$c);
+print "B:=RMatrixSpace(Integers(), $r, $c) ! [";
+$k=0;
+for ($i=0;$i<$r;$i++)
+{
+    for ($j=0;$j<$c;$j++)
+    {
+       print @v[$k++];
+       print "," if ($i!=$r-1 || $j!=$c-1);
+    }
+}
+print "];";